brewco/rdsession.c

Sun, 20 Dec 2015 20:37:40 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 20 Dec 2015 20:37:40 +0100
changeset 464
4a624c071ca9
parent 446
78e9d5234d15
child 469
d26def846029
permissions
-rw-r--r--

Added file copy. Move home directory detection to the main program function. During opening of the main configuration file, backups are made, 10 revisions in total.

441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /*****************************************************************************
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * Copyright (C) 2015
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 *
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * Michiel Broek <mbroek at mbse dot eu>
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 * This file is part of the mbsePi-apps
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * This is free software; you can redistribute it and/or modify it
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 * under the terms of the GNU General Public License as published by the
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * Free Software Foundation; either version 2, or (at your option) any
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * later version.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 *
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * mbsePi-apps is distributed in the hope that it will be useful, but
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * General Public License for more details.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 *
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * along with ThermFerm; see the file COPYING. If not, write to the Free
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 *****************************************************************************/
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 #include "brewco.h"
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 #include "rdsession.h"
446
78e9d5234d15 Switched to PID code from Arduino
Michiel Broek <mbroek@mbse.eu>
parents: 444
diff changeset
25 #include "util.h"
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
26 #include "xutil.h"
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
27
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28 extern int debug;
464
4a624c071ca9 Added file copy. Move home directory detection to the main program function. During opening of the main configuration file, backups are made, 10 revisions in total.
Michiel Broek <mbroek@mbse.eu>
parents: 446
diff changeset
29 extern char *etcpath;
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
32 const char BREWSTEP[14][10] = { "NA", "INIT", "WAITSTART", "PREMASH", "MASHING", "IODINE", "REMOVE", "PREBOIL", "BOIL", "BOILDONE", "COOLING", "WHIRLPOOL", "CLEANUP", "DONE" };
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
33 const char MASHSTEP[5][8] = { "NA", "PROMPT", "HEATING", "REST", "DONE" };
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
34
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35 #define MY_ENCODING "utf-8"
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
38 int do_wrsession(brew_session *brew);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
39 int do_wrsession(brew_session *brew)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40 {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 int rc = 0;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42 FILE *fp;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43 char *mypath = NULL;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44 xmlTextWriterPtr writer;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 xmlBufferPtr buf;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 * Create a new XML buffer, to which the XML document will be written
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 if ((buf = xmlBufferCreate()) == NULL) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 syslog(LOG_NOTICE, "wrsession: error creating the xml buffer");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 * Create a new XmlWriter for memory, with no compression.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58 if ((writer = xmlNewTextWriterMemory(buf, 0)) == NULL) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 syslog(LOG_NOTICE, "wrsession: error creating the xml writer");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 * Use indentation instead of one long line
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 if ((rc = xmlTextWriterSetIndent(writer, 2)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 syslog(LOG_NOTICE, "wrsession: error setting Indent");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72 * Start the document with the xml default for the version,
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 * encoding ISO 8859-1 and the default for the standalone
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74 * declaration.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 if ((rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterStartDocument");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 * Start an element named "BREWCO". Since thist is the first
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 * element, this will be the root element of the document.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85 if ((rc = xmlTextWriterStartElement(writer, BAD_CAST "BREWCO_BREW")) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterStartElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91 * Add an attribute with name "VERSION" and value "1" to BRWCO.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93 if ((rc = xmlTextWriterWriteElement(writer, BAD_CAST "VERSION", BAD_CAST "1")) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "UUID_RECIPE", "%s", brew->uuid_recipe)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteFormatElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "UUID_UNIT", "%s", brew->uuid_unit)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteFormatElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104 }
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
105 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "BREWSTEP", "%s", BREWSTEP[brew->brewstep])) < 0) {
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108 }
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
109 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "MASHSTEP", "%s", MASHSTEP[brew->mashstep])) < 0) {
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112 }
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
113 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "TIMEOUT", "%d", brew->timeout)) < 0) {
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "BOILTIMER", "%d", brew->boiltimer)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "STARTTIME", "%d", (int)brew->starttime)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 if ((rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "ENDTIME", "%d", (int)brew->endtime)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterWriteElement");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131 * All done, close any open elements
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 if ((rc = xmlTextWriterEndDocument(writer)) < 0) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 syslog(LOG_NOTICE, "wrsession: error at xmlTextWriterEndDocument");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137 xmlFreeTextWriter(writer);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
138
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
139 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
140 * Now write the XML configuration
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
141 */
464
4a624c071ca9 Added file copy. Move home directory detection to the main program function. During opening of the main configuration file, backups are made, 10 revisions in total.
Michiel Broek <mbroek@mbse.eu>
parents: 446
diff changeset
142 mypath = xstrcpy(etcpath);
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
143 mypath = xstrcat(mypath, (char *)"brewing.xml");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
144
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
145 if (debug)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
146 fprintf(stdout, "Writing %s\n", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
147
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
148 if ((fp = fopen(mypath, "w")) == NULL) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
149 syslog(LOG_NOTICE, "could not rewrite %s", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
150 free(mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
151 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
152 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
153 free(mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
154
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
155 fprintf(fp, "%s", (const char *) buf->content);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
156 fclose(fp);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
157 xmlBufferFree(buf);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
158
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
159 return 0;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
160 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
161
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
162
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
163
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
164 int wrsession(brew_session *brew)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
165 {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
166 int rc;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
167
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
168 rc = do_wrsession(brew);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
169 syslog(LOG_NOTICE, "Rewritten brewsession, rc=%d", rc);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
170 return rc;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
171 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
172
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
173
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
174
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
175 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
176 * Returns:
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
177 * 0 - All is well, session loaded.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
178 * 1 - Something went wrong
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
179 * -1 - No brew session available
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
180 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
181 int rdsession(brew_session *brew)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
182 {
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
183 int i, ival;
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
184 char *mypath;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
185 xmlDocPtr doc;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
186 xmlNodePtr cur;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
187 xmlChar *key;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
188
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
189 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
190 * Search config file
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
191 */
464
4a624c071ca9 Added file copy. Move home directory detection to the main program function. During opening of the main configuration file, backups are made, 10 revisions in total.
Michiel Broek <mbroek@mbse.eu>
parents: 446
diff changeset
192 mypath = xstrcpy(etcpath);
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
193 mypath = xstrcat(mypath, (char *)"brewing.xml");
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
194
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
195 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
196 * See if we have a brewing state file.
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
197 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
198 if (file_exist(mypath, W_OK)) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
199 syslog(LOG_NOTICE, "rdsession: %s not found, good.", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
200 free(mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
201 return -1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
202 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
203
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
204 if ((doc = xmlParseFile(mypath)) == NULL) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
205 syslog(LOG_NOTICE, "rdsession: %s not found, should not happen.", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
206 free(mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
207 return -1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
208 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
209 syslog(LOG_NOTICE, "rdsession: using %s", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
210
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
211 if ((cur = xmlDocGetRootElement(doc)) == NULL) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
212 syslog(LOG_NOTICE, "XML file %s empty.", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
213 xmlFreeDoc(doc);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
214 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
215 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
216 if (xmlStrcmp(cur->name, (const xmlChar*)"BREWCO")) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
217 syslog(LOG_NOTICE, "XML file %s is not a valid configuration file.", mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
218 xmlFreeDoc(doc);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
219 return 1;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
220 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
221
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 /*
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 * Parse session
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 */
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225 cur = cur->xmlChildrenNode;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 while (cur != NULL) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227 if ((!xmlStrcmp(cur->name, (const xmlChar *)"UUID_RECIPE"))) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 brew->uuid_recipe = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230 if ((!xmlStrcmp(cur->name, (const xmlChar *)"UUID_UNIT"))) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 brew->uuid_unit = (char *)xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232 }
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
233 if ((!xmlStrcmp(cur->name, (const xmlChar *)"BREWSTEP"))) {
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
235 for (i = 0; i < 14; i++) {
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
236 if (! xmlStrcmp(key, (const xmlChar *)BREWSTEP[i])) {
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
237 brew->brewstep = i;
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
238 break;
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
239 }
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
240 }
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 xmlFree(key);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 if ((!xmlStrcmp(cur->name, (const xmlChar *)"MASHSTEP"))) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
245 for (i = 0; i < 5; i++) {
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
246 if (! xmlStrcmp(key, (const xmlChar *)MASHSTEP[i])) {
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
247 brew->mashstep = i;
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
248 break;
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
249 }
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
250 }
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 xmlFree(key);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252 }
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
253 if ((!xmlStrcmp(cur->name, (const xmlChar *)"TIMEOUT"))) {
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 if (sscanf((const char *)key, "%d", &ival) == 1)
444
eafb140a1ddd Better brew state field names.
Michiel Broek <mbroek@mbse.eu>
parents: 441
diff changeset
256 brew->timeout = ival;
441
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 xmlFree(key);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259 if ((!xmlStrcmp(cur->name, (const xmlChar *)"BOILTIMER"))) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 if (sscanf((const char *)key, "%d", &ival) == 1)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 brew->boiltimer = ival;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 xmlFree(key);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 if ((!xmlStrcmp(cur->name, (const xmlChar *)"STARTTIME"))) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 if (sscanf((const char *)key, "%d", &ival) == 1)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 brew->starttime = (time_t)ival;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269 xmlFree(key);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 if ((!xmlStrcmp(cur->name, (const xmlChar *)"ENDTIME"))) {
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273 if (sscanf((const char *)key, "%d", &ival) == 1)
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 brew->endtime = (time_t)ival;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 xmlFree(key);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 cur = cur->next;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 xmlFreeDoc(doc);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 free(mypath);
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 mypath = NULL;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 return 0;
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285 }
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287
bde74a8f2ad7 Added automate state file.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288

mercurial