brewco/devices.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 458
43a8ecb53637
child 471
1564b60558b1
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.

434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
1 /*****************************************************************************
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
2 * Copyright (C) 2014..2015
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
3 *
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
4 * Michiel Broek <mbroek at mbse dot eu>
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
5 *
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
6 * This file is part of the mbsePi-apps
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
7 *
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
8 * This is free software; you can redistribute it and/or modify it
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
9 * under the terms of the GNU General Public License as published by the
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
10 * Free Software Foundation; either version 2, or (at your option) any
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
11 * later version.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
12 *
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
13 * mbsePi-apps is distributed in the hope that it will be useful, but
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
16 * General Public License for more details.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
17 *
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
19 * along with thermferm; see the file COPYING. If not, write to the Free
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
20 * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
21 *****************************************************************************/
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
22
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
23 #include "brewco.h"
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
24 #include "devices.h"
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
25 #include "xutil.h"
436
4df9ae3095f8 Fixed compiling with wiringPi
Michiel Broek <mbroek@mbse.eu>
parents: 435
diff changeset
26 #include "keyboard.h"
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
27 #include "slcd.h"
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
28
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
29
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
30 extern int debug;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
31 extern sys_config Config;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
32 extern int my_shutdown;
458
43a8ecb53637 Fixes for compiling on Raspberry.
Michiel Broek <mbroek@mbse.eu>
parents: 452
diff changeset
33 extern uint16_t leds;
43a8ecb53637 Fixes for compiling on Raspberry.
Michiel Broek <mbroek@mbse.eu>
parents: 452
diff changeset
34 extern int slcdHandle;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
35
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
36 #ifdef USE_SIMULATOR
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
37
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
38 extern int SIM_hlt_value;
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
39 extern int SIM_mlt_value;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
40
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
41 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
42
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
43
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
44
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
45 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
46 * Read one byte from a 1-wire device like a DS2413
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
47 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
48 int read_w1(char *address, char *file)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
49 {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
50 char *addr = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
51 int fn = -1, rc = -1, retries = 5;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
52 uint8_t val;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
53
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
54 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
55 addr = xstrcat(addr, address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
56 addr = xstrcat(addr, (char *)"/");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
57 addr = xstrcat(addr, file);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
58
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
59 if ((fn = open(addr, O_RDONLY)) >= 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
60
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
61 if ((lseek(fn, 0L, SEEK_SET)) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
62
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
63 while (retries--) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
64 if ((read(fn, &val, 1)) == 1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
65 rc = (int)val;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
66 goto leave;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
67 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
68 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
69 syslog(LOG_NOTICE, "read_w1() read %s fatal: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
70
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
71 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
72 syslog(LOG_NOTICE, "read_w1() lseek %s: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
73 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
74
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
75 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
76 syslog(LOG_NOTICE, "read_w1() open %s: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
77 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
78
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
79 leave:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
80 if (fn != -1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
81 if ((close(fn)) == -1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
82 syslog(LOG_NOTICE, "read_w1() close %s: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
83 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
84 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
85
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
86 free(addr);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
87 return rc;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
88 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
89
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
90
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
91
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
92 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
93 * Write a byte to a 1-wire device like a DS2413
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
94 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
95 int write_w1(char *address, char *file, uint8_t val)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
96 {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
97 char *addr = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
98 int fn = -1, rc = -1, retries = 5;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
99
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
100 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
101 addr = xstrcat(addr, address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
102 addr = xstrcat(addr, (char *)"/");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
103 addr = xstrcat(addr, file);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
104
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
105 if ((fn = open(addr, O_WRONLY)) >= 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
106
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
107 if ((lseek(fn, 0L, SEEK_SET)) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
108
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
109 while (retries--) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
110 if ((write(fn, &val, 1)) == 1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
111 rc = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
112 goto leave;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
113 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
114 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
115 syslog(LOG_NOTICE, "write_w1() write %s fatal: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
116
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
117 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
118 syslog(LOG_NOTICE, "write_w1() lseek %s: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
119 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
120
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
121 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
122 syslog(LOG_NOTICE, "write_w1() open %s: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
123 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
124
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
125 leave:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
126 if (fn != -1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
127 if ((close(fn)) == -1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
128 syslog(LOG_NOTICE, "write_w1() close %s: %s", addr, strerror(errno));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
129 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
130 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
131
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
132 free(addr);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
133 return rc;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
134 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
135
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
136
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
137
452
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
138 void hlt_heater(int value)
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
139 {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
140 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
141 piLock(LOCK_LCD);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
142 lcdPosition(lcdHandle, 0, 1);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
143 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
144 slcdPosition(slcdHandle, 0, 1);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
145 if (value) {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
146 leds |= SLED_HLTH;
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
147 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
148 lcdPutchar(lcdHandle, 5);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
149 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
150 slcdPutchar(slcdHandle, 5);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
151 } else {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
152 leds &= ~SLED_HLTH;
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
153 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
154 lcdPutchar(lcdHandle, 6);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
155 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
156 slcdPutchar(slcdHandle, 6);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
157 }
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
158 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
159 piUnlock(LOCK_LCD);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
160 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
161 slcdLEDs(slcdHandle);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
162 }
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
163
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
164
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
165
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
166 void mlt_heater(int value)
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
167 {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
168 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
169 piLock(LOCK_LCD);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
170 lcdPosition(lcdHandle, 18, 1);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
171 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
172 slcdPosition(slcdHandle, 18, 1);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
173 if (value) {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
174 leds |= SLED_MLTH;
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
175 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
176 lcdPutchar(lcdHandle, 5);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
177 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
178 slcdPutchar(slcdHandle, 5);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
179 } else {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
180 leds &= ~SLED_MLTH;
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
181 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
182 lcdPutchar(lcdHandle, 6);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
183 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
184 slcdPutchar(slcdHandle, 6);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
185 }
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
186 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
187 piUnlock(LOCK_LCD);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
188 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
189 slcdLEDs(slcdHandle);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
190 }
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
191
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
192
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
193
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
194 void mlt_pump(int value)
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
195 {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
196 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
197 piLock(LOCK_LCD);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
198 lcdPosition(lcdHandle, 19, 1);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
199 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
200 slcdPosition(slcdHandle, 19, 1);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
201 if (value) {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
202 leds |= SLED_MLTP;
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
203 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
204 lcdPutchar(lcdHandle, 3);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
205 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
206 slcdPutchar(slcdHandle, 3);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
207 } else {
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
208 leds &= ~SLED_MLTP;
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
209 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
210 lcdPutchar(lcdHandle, 4);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
211 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
212 slcdPutchar(slcdHandle, 4);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
213 }
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
214 #ifdef HAVE_WIRINGPI_H
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
215 piUnlock(LOCK_LCD);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
216 #endif
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
217 slcdLEDs(slcdHandle);
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
218 }
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
219
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
220
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
221
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
222 int device_out(char *uuid, int value)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
223 {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
224 devices_list *device;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
225 time_t now, my_timestamp;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
226 int rc, my_value, test_value;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
227
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
228 if (uuid == NULL)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
229 return 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
230
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
231 now = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
232
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
233 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
234 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
235 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
236
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
237 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
238 if (! strcmp(uuid, device->uuid)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
239 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
240 * Execute command if different then the old value. But also
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
241 * every 2 minutes because commands can have temporary
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
242 * disconnects, or have radio problems.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
243 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
244 my_timestamp = device->timestamp;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
245 my_value = device->value;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
246
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
247 if ((device->type == DEVTYPE_W1) && (device->direction == DEVDIR_OUT_BIN)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
248 test_value = (value == 0) ? 0 : 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
249 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
250 test_value = value;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
251 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
252
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
253 if ((test_value != my_value) || (((int)now - (int)my_timestamp) >= 120)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
254
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
255 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
256 rc = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
257 if ((device->type == DEVTYPE_GPIO) && (device->gpiopin != -1) && (device->present == DEVPRESENT_YES)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
258
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
259 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
260 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
261 if ((device->type == DEVTYPE_W1) && (device->direction == DEVDIR_OUT_BIN) && (device->present == DEVPRESENT_YES)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
262 if (strncmp(device->address, (char *)"3a", 2) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
263 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
264 * DS2413. First read state so that we can preserve the state of
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
265 * the "other" PIO channel. To make things a bit more complicated
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
266 * the bits in the state register differ from the output register.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
267 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
268 uint8_t state, output;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
269
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
270 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
271 state = (unsigned int)rc;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
272 output = (state & 0x01) + ((state & 0x04) >> 1);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
273
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
274 if (device->subdevice == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
275 output = (output & 0xfe);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
276 output |= (value == 0) ? 0x01 : 0x00;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
277 } else if (device->subdevice == 1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
278 output = (output & 0xfd);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
279 output |= (value == 0) ? 0x02 : 0x00;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
280 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
281 output = 0xff;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
282 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
283
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
284 if ((write_w1(device->address, (char *)"output", output)) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
285 syslog(LOG_NOTICE, "DS2413 PIO%c value=%d (%s)", (device->subdevice == 0) ? 'A' : 'B', (value == 0) ? 0 : 1, device->comment);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
286 if (debug)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
287 fprintf(stdout, "DS2413 PIO%c value=%d (%s)\n", (device->subdevice == 0) ? 'A' : 'B', (value == 0) ? 0 : 1, device->comment);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
288 device->value = (value == 0) ? 0 : 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
289 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
290 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
291 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
292 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
293 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
294
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
295 #ifdef USE_SIMULATOR
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
296 if ((device->type == DEVTYPE_SIM) && (device->direction == DEVDIR_OUT_BIN) && (device->present == DEVPRESENT_YES)) {
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
297 if ((strcmp((char *)"SimHLTheater", device->address) == 0) ||
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
298 (strcmp((char *)"SimMLTheater", device->address) == 0) ||
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
299 (strcmp((char *)"SimMLTpump", device->address) == 0)) {
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
300 if (value != device->value) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
301 syslog(LOG_NOTICE, "SIM %s value=%d", device->address, value);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
302 if (debug)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
303 fprintf(stdout, "SIM %s value=%d\n", device->address, value);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
304 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
305 device->value = value;
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
306 if (strcmp((char *)"SimHLTheater", device->address) == 0) {
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
307 SIM_hlt_value = value;
452
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
308 hlt_heater(value);
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
309 }
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
310 if (strcmp((char *)"SimMLTheater", device->address) == 0) {
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
311 SIM_mlt_value = value;
452
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
312 mlt_heater(value);
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
313 }
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
314 if (strcmp((char *)"SimMLTpump", device->address) == 0) {
452
edc86e2d2eaa Changed device outputs and status leds.
Michiel Broek <mbroek@mbse.eu>
parents: 451
diff changeset
315 mlt_pump(value);
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
316 }
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
317 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
318 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
319 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
320 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
321 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
322 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
323 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
324 return 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
325 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
326 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
327 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
328 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
329 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
330 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
331
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
332 return 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
333 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
334
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
335
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
336 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
337 * Returns DEVPRESENT_NO if failed.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
338 * Returns DEVPRESENT_YES if success, value contains new value.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
339 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
340 int device_in(char *uuid, int *value)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
341 {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
342 devices_list *device;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
343 int tmp, present;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
344
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
345 if (uuid == NULL)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
346 return 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
347
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
348 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
349 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
350 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
351
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
352 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
353 if (! strcmp(uuid, device->uuid)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
354 present = device->present;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
355 if (present == DEVPRESENT_YES) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
356 tmp = device->value + device->offset;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
357 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
358 tmp = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
359 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
360 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
361 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
362 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
363 *value = tmp;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
364 return present;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
365 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
366 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
367
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
368 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
369 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
370 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
371
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
372 return DEVPRESENT_NO;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
373 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
374
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
375
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
376
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
377
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
378 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
379 * Auto detect hotplugged or known to be present devices
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
380 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
381 int devices_detect(void)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
382 {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
383 struct dirent *de;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
384 DIR *fd;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
385 devices_list *device, *ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
386 int found, subdevices, ival, i, rc = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
387 char buf[40];
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
388 uuid_t uu;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
389 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
390 int pin;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
391 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
392
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
393 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
394 * Scan for 1-wire devices
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
395 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
396 if ((fd = opendir((char *)"/sys/bus/w1/devices"))) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
397 while ((de = readdir(fd))) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
398 if (de->d_name[0] != '.') {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
399 found = FALSE;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
400 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
401 if (strcmp(device->address,de->d_name) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
402 found = TRUE;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
403 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
404 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
405 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
406
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
407 if (found == FALSE) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
408 strncpy(buf, de->d_name, 2);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
409 buf[2] = '\0';
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
410 sscanf(buf, "%02x", &ival);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
411 syslog(LOG_NOTICE, "Scan 1-wire %02x %d", ival, ival);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
412 subdevices = 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
413 if (strcmp(buf, (char *)"29") == 0)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
414 subdevices = 8;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
415 if (strcmp(buf, (char *)"3a") == 0)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
416 subdevices = 2;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
417 for (i = 0; i < subdevices; i++) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
418 ndev = (devices_list *)malloc(sizeof(devices_list));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
419 ndev->next = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
420 ndev->version = 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
421 ndev->uuid = malloc(37);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
422 uuid_generate(uu);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
423 uuid_unparse(uu, ndev->uuid);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
424 ndev->type = DEVTYPE_W1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
425 ndev->direction = DEVDIR_UNDEF;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
426 if (strcmp(buf, (char *)"10") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
427 ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
428 ndev->description = xstrcpy((char *)"DS18S20 Digital thermometer");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
429 } else if (strcmp(buf, (char *)"22") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
430 ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
431 ndev->description = xstrcpy((char *)"DS1820 Digital thermometer");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
432 } else if (strcmp(buf, (char *)"28") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
433 ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
434 ndev->description = xstrcpy((char *)"DS18B20 Digital thermometer");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
435 } else if (strcmp(buf, (char *)"3a") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
436 ndev->description = xstrcpy((char *)"DS2413 Dual channel addressable switch");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
437 ndev->direction = DEVDIR_IN_BIN;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
438 } else if (strcmp(buf, (char *)"3b") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
439 ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
440 ndev->description = xstrcpy((char *)"DS1825 Digital thermometer");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
441 } else if (strcmp(buf, (char *)"42") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
442 ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
443 ndev->description = xstrcpy((char *)"DS28EA00 Digital thermometer");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
444 } else if (strcmp(buf, (char *)"w1") == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
445 ndev->description = xstrcpy((char *)"Master System device");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
446 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
447 ndev->description = xstrcpy((char *)"Unknown device family ");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
448 ndev->description = xstrcat(ndev->description, buf);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
449 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
450 ndev->value = ndev->offset = ndev->inuse = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
451 ndev->present = DEVPRESENT_YES;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
452 ndev->address = xstrcpy(de->d_name);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
453 ndev->subdevice = i;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
454 ndev->gpiopin = -1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
455 ndev->comment = xstrcpy((char *)"Auto detected device");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
456 ndev->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
457
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
458 if (Config.devices == NULL) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
459 Config.devices = ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
460 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
461 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
462 if (device->next == NULL) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
463 device->next = ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
464 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
465 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
466 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
467 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
468 rc++;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
469 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
470 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
471 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
472 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
473 closedir(fd);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
474 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
475
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
476 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
477 if (piBoardRev() == 2) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
478 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
479 * Support rev B and newer boards only
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
480 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
481 found = FALSE;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
482 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
483 if (device->type == DEVTYPE_GPIO) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
484 found = TRUE;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
485 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
486 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
487 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
488
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
489 if (found == FALSE) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
490 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
491 * There were no GPIO devices found.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
492 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
493 subdevices = 12;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
494 pin = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
495 for (i = 0; i < subdevices; i++) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
496 if (i == 8)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
497 pin = 17;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
498
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
499 ndev = (devices_list *)malloc(sizeof(devices_list));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
500 ndev->next = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
501 ndev->version = 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
502 ndev->uuid = malloc(37);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
503 uuid_generate(uu);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
504 uuid_unparse(uu, ndev->uuid);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
505 ndev->type = DEVTYPE_GPIO;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
506 ndev->value = digitalRead(pin);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
507 ndev->offset = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
508 ndev->present = DEVPRESENT_YES;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
509 ndev->address = xstrcpy((char *)"GPIO");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
510 snprintf(buf, 39, "Raspberry GPIO %d", i);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
511 ndev->description = xstrcpy(buf);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
512 ndev->subdevice = i;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
513 ndev->gpiopin = pin;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
514 ndev->timestamp = time(NULL);
435
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
515 switch (i) {
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
516 case 0:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
517 ndev->direction = DEVDIR_OUT_ANALOG;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
518 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
519 ndev->comment = xstrcpy((char *)"MLT heater SSR");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
520 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
521 case 1:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
522 ndev->direction = DEVDIR_OUT_ANALOG;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
523 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
524 ndev->comment = xstrcpy((char *)"MLT heater PWM");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
525 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
526 case 2:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
527 ndev->direction = DEVDIR_OUT_ANALOG;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
528 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
529 ndev->comment = xstrcpy((char *)"MLT pump relay");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
530 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
531 case PANEL_RETURN:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
532 ndev->direction = DEVDIR_IN_BIN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
533 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
534 ndev->comment = xstrcpy((char *)"Frontpanel Return");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
535 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
536 case PANEL_ENTER:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
537 ndev->direction = DEVDIR_IN_BIN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
538 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
539 ndev->comment = xstrcpy((char *)"Frontpanel Enter key");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
540 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
541 case PANEL_DOWN:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
542 ndev->direction = DEVDIR_IN_BIN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
543 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
544 ndev->comment = xstrcpy((char *)"Frontpanel Down key");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
545 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
546 case PANEL_UP:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
547 ndev->direction = DEVDIR_IN_BIN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
548 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
549 ndev->comment = xstrcpy((char *)"Frontpanel Up key");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
550 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
551 case 7:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
552 ndev->direction = DEVDIR_INTERN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
553 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
554 ndev->comment = xstrcpy((char *)"1-Wire bus");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
555 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
556 case 8:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
557 ndev->direction = DEVDIR_OUT_BIN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
558 ndev->inuse = 1;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
559 ndev->comment = xstrcpy((char *)"Buzzer");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
560 break;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
561 default:
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
562 ndev->direction = DEVDIR_IN_BIN;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
563 ndev->inuse = 0;
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
564 ndev->comment = xstrcpy((char *)"Raspberry GPIO");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
565 }
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
566 pin++;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
567
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
568 if (Config.devices == NULL) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
569 Config.devices = ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
570 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
571 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
572 if (device->next == NULL) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
573 device->next = ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
574 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
575 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
576 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
577 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
578 rc++;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
579 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
580 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
581 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
582 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
583
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
584 #ifdef USE_SIMULATOR
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
585 found = FALSE;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
586 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
587 if (device->type == DEVTYPE_SIM) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
588 found = TRUE;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
589 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
590 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
591 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
592
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
593 if (found == FALSE) {
435
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
594 subdevices = 6;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
595 for (i = 0; i < subdevices; i++) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
596 ndev = (devices_list *)malloc(sizeof(devices_list));
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
597 ndev->next = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
598 ndev->version = 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
599 ndev->uuid = malloc(37);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
600 uuid_generate(uu);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
601 uuid_unparse(uu, ndev->uuid);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
602 ndev->type = DEVTYPE_SIM;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
603 ndev->value = ndev->offset = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
604 ndev->present = DEVPRESENT_YES;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
605 ndev->subdevice = i;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
606 ndev->gpiopin = -1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
607 ndev->comment = xstrcpy((char *)"Auto detected device");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
608 ndev->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
609 ndev->inuse = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
610 switch (i) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
611 case 0: ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
612 ndev->address = xstrcpy((char *)"SimRoomtemp");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
613 ndev->description = xstrcpy((char *)"Simulated room temperature");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
614 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
615 case 1: ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
616 ndev->address = xstrcpy((char *)"SimHLTtemp");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
617 ndev->description = xstrcpy((char *)"Simulated HLT temperature");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
618 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
619 case 2: ndev->direction = DEVDIR_IN_ANALOG;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
620 ndev->address = xstrcpy((char *)"SimMLTtemp");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
621 ndev->description = xstrcpy((char *)"Simulated MLT temperature");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
622 break;
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
623 case 3: ndev->direction = DEVDIR_OUT_BIN;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
624 ndev->address = xstrcpy((char *)"SimHLTheater");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
625 ndev->description = xstrcpy((char *)"Simulated HLT heater");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
626 break;
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
627 case 4: ndev->direction = DEVDIR_OUT_BIN;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
628 ndev->address = xstrcpy((char *)"SimMLTheater");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
629 ndev->description = xstrcpy((char *)"Simulated MLT heater");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
630 break;
451
2247970de278 Manual mode added.
Michiel Broek <mbroek@mbse.eu>
parents: 438
diff changeset
631 case 5: ndev->direction = DEVDIR_OUT_BIN;
435
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
632 ndev->address = xstrcpy((char *)"SimMLTpump");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
633 ndev->description = xstrcpy((char *)"Simulated MLT pump");
4b1ed6897d80 More configuration items added.
Michiel Broek <mbroek@mbse.eu>
parents: 434
diff changeset
634 break;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
635 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
636
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
637 if (Config.devices == NULL) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
638 Config.devices = ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
639 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
640 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
641 if (device->next == NULL) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
642 device->next = ndev;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
643 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
644 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
645 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
646 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
647 rc++;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
648 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
649 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
650 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
651
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
652 return rc;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
653 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
654
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
655
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
656
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
657 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
658 PI_THREAD (my_devices_loop)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
659 #else
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
660 void *my_devices_loop(void *threadid)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
661 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
662 {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
663 devices_list *device;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
664 char *addr = NULL, line[60], *p = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
665 FILE *fp;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
666 int temp, rc;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
667
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
668 syslog(LOG_NOTICE, "Thread my_devices_loop started");
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
669 if (debug)
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
670 fprintf(stdout, "Thread my_devices_loop started\n");
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
671
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
672 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
673 if ((rc = piHiPri(10)))
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
674 syslog(LOG_NOTICE, "my_devices_loop: piHiPri(10) rc=%d", rc);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
675 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
676
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
677 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
678 * Loop forever until the external shutdown variable is set.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
679 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
680 for (;;) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
681
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
682 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
683 * Process all devices.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
684 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
685 for (device = Config.devices; device; device = device->next) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
686
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
687 if (my_shutdown)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
688 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
689
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
690 switch (device->type) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
691 case DEVTYPE_W1:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
692 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
693 * Only tested with DS18B20 but from the kernel source this
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
694 * should work with all 1-wire thermometer sensors.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
695 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
696 if ((strncmp(device->address, (char *)"10", 2) == 0) ||
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
697 (strncmp(device->address, (char *)"22", 2) == 0) ||
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
698 (strncmp(device->address, (char *)"28", 2) == 0) ||
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
699 (strncmp(device->address, (char *)"3b", 2) == 0) ||
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
700 (strncmp(device->address, (char *)"42", 2) == 0)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
701 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
702 addr = xstrcat(addr, device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
703 addr = xstrcat(addr, (char *)"/w1_slave");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
704 if ((fp = fopen(addr, "r"))) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
705 if (device->present != DEVPRESENT_YES) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
706 syslog(LOG_NOTICE, "sensor %s is back", device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
707 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
708 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
709 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
710 device->present = DEVPRESENT_YES;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
711 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
712 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
713 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
714 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
715 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
716 * The output looks like:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
717 * 72 01 4b 46 7f ff 0e 10 57 : crc=57 YES
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
718 * 72 01 4b 46 7f ff 0e 10 57 t=23125
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
719 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
720 fgets(line, 50, fp);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
721 line[strlen(line)-1] = '\0';
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
722 if ((line[36] == 'Y') && (line[37] == 'E')) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
723 /* CRC is Ok, continue */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
724 fgets(line, 50, fp);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
725 line[strlen(line)-1] = '\0';
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
726 strtok(line, (char *)"=");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
727 p = strtok(NULL, (char *)"=");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
728 rc = sscanf(p, "%d", &temp);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
729 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
730 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
731 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
732 if ((rc == 1) && (device->value != temp)) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
733 device->value = temp;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
734 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
735 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
736 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
737 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
738 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
739 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
740 syslog(LOG_NOTICE, "sensor %s CRC error", device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
741 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
742 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
743 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
744 device->present = DEVPRESENT_ERROR;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
745 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
746 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
747 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
748 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
749 fclose(fp);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
750 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
751 if (device->present != DEVPRESENT_NO) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
752 syslog(LOG_NOTICE, "sensor %s is missing", device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
753 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
754 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
755 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
756 device->present = DEVPRESENT_NO;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
757 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
758 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
759 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
760 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
761 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
762 free(addr);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
763 addr = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
764 } /* if temperature sensor */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
765 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
766 * DS2413 Dual channel addressable switch
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
767 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
768 if (strncmp(device->address, (char *)"3a", 2) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
769 addr = xstrcpy((char *)"/sys/bus/w1/devices/");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
770 addr = xstrcat(addr, device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
771 addr = xstrcat(addr, (char *)"/state");
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
772
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
773 if ((access(addr, R_OK)) == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
774 if (device->present != DEVPRESENT_YES) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
775 syslog(LOG_NOTICE, "DS2413 %s is back", device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
776 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
777 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
778 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
779 device->present = DEVPRESENT_YES;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
780 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
781 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
782 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
783 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
784 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
785 * First make sure that if this device is configured as input
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
786 * to drive the output high.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
787 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
788 if (device->direction == DEVDIR_IN_BIN) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
789 uint8_t state, output;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
790
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
791 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
792 state = (unsigned int)rc;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
793 output = ((state & 0x02) >> 1) + ((state & 0x08) >> 2); /* Both latch states */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
794 if (device->subdevice == 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
795 output = (output & 0xfe);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
796 output |= 0x01;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
797 } else if (device->subdevice == 1) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
798 output = (output & 0xfd);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
799 output |= 0x02;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
800 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
801 output = 0xff;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
802 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
803 write_w1(device->address, (char *)"output", output);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
804 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
805 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
806 if ((rc = read_w1(device->address, (char *)"state")) >= 0) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
807 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
808 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
809 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
810 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
811 * Read PIOA or PIOB pin state bits
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
812 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
813 if (device->subdevice == 0)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
814 device->value = (rc & 0x01) ? 0 : 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
815 else if (device->subdevice == 1)
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
816 device->value = (rc & 0x04) ? 0 : 1;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
817 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
818 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
819 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
820 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
821 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
822 } else {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
823 if (device->present != DEVPRESENT_NO) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
824 syslog(LOG_NOTICE, "DS2413 %s is missing", device->address);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
825 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
826 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
827 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
828 device->present = DEVPRESENT_NO;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
829 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
830 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
831 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
832 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
833 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
834 free(addr);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
835 addr = NULL;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
836 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
837
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
838 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
839
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
840 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
841 case DEVTYPE_GPIO:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
842 if (device->direction == DEVDIR_IN_BIN) {
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
843 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
844 device->value = digitalRead(device->gpiopin);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
845 device->offset = 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
846 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
847 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
848 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
849 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
850
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
851 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
852 #ifdef USE_SIMULATOR
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
853 case DEVTYPE_SIM:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
854 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
855 piLock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
856 #endif
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
857 if (Config.simulator) {
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
858 if (device->subdevice == 0) {
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
859 device->value = (int)(Config.simulator->room_temperature * 1000);
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
860 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
861 } else if (device->subdevice == 1) {
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
862 device->value = (int)(Config.simulator->hlt_temperature * 1000);
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
863 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
864 } else if (device->subdevice == 2) {
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
865 device->value = (int)(Config.simulator->mlt_temperature * 1000);
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
866 device->timestamp = time(NULL);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
867 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
868 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
869 #ifdef HAVE_WIRINGPI_H
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
870 piUnlock(LOCK_DEVICES);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
871 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
872 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
873 #endif
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
874 default:
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
875 break;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
876 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
877
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
878 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
879 * Delay a bit after procesing a device.
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
880 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
881 usleep(10000);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
882 }
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
883
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
884 if (my_shutdown)
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
885 break;
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
886 /*
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
887 * Delay a bit after all devices
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
888 */
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
889 usleep(100000);
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
890 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
891
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
892 syslog(LOG_NOTICE, "Thread my_devices_loop stopped");
438
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
893 if (debug)
7d1ec160d751 Added simulator configuration.
Michiel Broek <mbroek@mbse.eu>
parents: 436
diff changeset
894 fprintf(stdout, "Thread my_devices_loop stopped\n");
434
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
895 return 0;
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
896 }
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
897
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
898
eb724767860d Brewco first phase development configuration structure.
Michiel Broek <mbroek@mbse.eu>
parents:
diff changeset
899

mercurial