summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stm32/app/ds1820.c8
-rw-r--r--stm32/app/ot.c84
-rw-r--r--stm32/app/prototypes.h7
-rw-r--r--stm32/app/temp.c8
-rw-r--r--stm32/app/ticker.c2
5 files changed, 68 insertions, 41 deletions
diff --git a/stm32/app/ds1820.c b/stm32/app/ds1820.c
index 0da63fb..200f4b7 100644
--- a/stm32/app/ds1820.c
+++ b/stm32/app/ds1820.c
@@ -8,7 +8,7 @@
-unsigned extract_leu16 (uint8_t *d)
+static unsigned extract_leu16 (uint8_t *d)
{
uint32_t u;
@@ -18,7 +18,7 @@ unsigned extract_leu16 (uint8_t *d)
-int extract_les16 (uint8_t *d)
+static int extract_les16 (uint8_t *d)
{
uint32_t u;
u = extract_leu16 (d);
@@ -32,7 +32,7 @@ int extract_les16 (uint8_t *d)
-int
+static int
ds1820_read_sp (const Onewire_addr *a, unsigned page, uint8_t *buf, unsigned len)
{
if (onewire_reset_and_select (a))
@@ -49,7 +49,7 @@ ds1820_read_sp (const Onewire_addr *a, unsigned page, uint8_t *buf, unsigned len
-int ds1820_convert_t (const Onewire_addr *a)
+static int ds1820_convert_t (const Onewire_addr *a)
{
if (onewire_reset_and_select (a))
diff --git a/stm32/app/ot.c b/stm32/app/ot.c
index e604b50..944d174 100644
--- a/stm32/app/ot.c
+++ b/stm32/app/ot.c
@@ -58,6 +58,7 @@ static unsigned ot_status_wdt;
#define OT_IDX_CH_WATER_PRESSURE 18
#define OT_IDX_RETURN_WATER_TEMP 28
+#define OT_IDX_SUPPLY_INLET_TEMP 80
@@ -70,7 +71,7 @@ static inline int parity (uint8_t v)
return (0x6996u >> ((v ^ (v >> 4)) & 0xf)) & 1;
}
-void ot_parity (uint8_t *data)
+static void ot_parity (uint8_t *data)
{
int p;
p = parity (data[0]);
@@ -202,12 +203,51 @@ void ot_rx_thm (uint8_t *msg, int error)
}
}
+static int ot_fake_read_ack (unsigned id, uint8_t *msg)
+{
+ unsigned t;
+
+ switch (id) {
+ case OT_IDX_CH_WATER_PRESSURE:
+ t = pressure_ch();
+
+ if (!t) return -1;
+
+ break;
+
+ case OT_IDX_RETURN_WATER_TEMP:
+ t = temp_ch_return();
+
+ if (!t) return -1;
+
+ break;
+
+ case OT_IDX_SUPPLY_INLET_TEMP:
+ t = temp_supply_inlet();
+
+ if (!t) return -1;
+
+ break;
+
+ default:
+ return -1;
+ }
+
+
+
+ msg[0] = OT_READ_ACK << 4;
+ msg[1] = id;
+ msg[2] = t >> 8;
+ msg[3] = t & 0xff;
+
+ return 0;
+}
+
+
void ot_rx_blr (uint8_t *msg, int error)
{
unsigned type = (msg[0] >> 4) & 7;
unsigned id = msg[1];
- uint16_t t;
- unsigned handled = 0 ;
unsigned idx;
@@ -217,30 +257,10 @@ void ot_rx_blr (uint8_t *msg, int error)
idx = OT_INDEX (in_flight_req_type, id);
-
if ((in_flight_req_type == OT_READ_DATA) && (type != OT_READ_ACK)) {
- switch (idx) {
- case OT_IDX_CH_WATER_PRESSURE:
- t = pressure_ch();
- handled = 1;
- break;
-
- case OT_IDX_RETURN_WATER_TEMP:
- t = temp_ch_return();
- handled = 1;
- break;
-
- }
-
- if (handled) {
-
- type = OT_READ_ACK;
-
- msg[0] &= 0x8f;
- msg[0] |= type << 4;
- msg[2] = t >> 8;
- msg[3] = t & 0xff;
- ot_debug ("B", msg, "");
+ if (!ot_fake_read_ack (id, msg)) {
+ ot_debug (" A", msg, " (faked)");
+ type = (msg[0] >> 4) & 7;
}
}
@@ -338,6 +358,7 @@ static void ot_force_status (void)
static void ot_30s_ticker (void)
{
uint8_t data[2];
+ uint8_t msg[4];
printf ("Q send temp set points\r\n");
@@ -354,8 +375,15 @@ static void ot_30s_ticker (void)
ot_request_ovr (OT_WRITE_DATA, OT_IDX_DHW_SETPOINT, data);
}
- ot_request_ovr (OT_READ_DATA, OT_IDX_CH_WATER_PRESSURE, NULL);
- ot_request_ovr (OT_READ_DATA, OT_IDX_RETURN_WATER_TEMP, NULL);
+
+ if (!ot_fake_read_ack (OT_IDX_CH_WATER_PRESSURE, msg))
+ ot_debug ("B", msg, " (fake reply)");
+
+ if (!ot_fake_read_ack (OT_IDX_RETURN_WATER_TEMP, msg))
+ ot_debug ("B", msg, " (fake reply)");
+
+ if (!ot_fake_read_ack (OT_IDX_SUPPLY_INLET_TEMP, msg))
+ ot_debug ("B", msg, " (fake reply)");
}
diff --git a/stm32/app/prototypes.h b/stm32/app/prototypes.h
index d9afd3a..25a1627 100644
--- a/stm32/app/prototypes.h
+++ b/stm32/app/prototypes.h
@@ -4,7 +4,6 @@ extern int main(void);
/* ot.c */
extern unsigned ot_override_ch;
extern unsigned ot_override_dhw;
-extern void ot_parity(uint8_t *data);
extern void ot_rx_thm(uint8_t *msg, int error);
extern void ot_rx_blr(uint8_t *msg, int error);
extern void ot_request_usr(unsigned type, unsigned id, uint8_t *data);
@@ -28,7 +27,6 @@ extern void led_yellow_set(int i);
extern void led_tick(void);
extern void led_init(void);
/* ticker.c */
-extern volatile uint32_t ticks;
extern void delay_us(uint32_t d);
extern void sys_tick_handler(void);
extern void delay_ms(uint32_t d);
@@ -88,11 +86,8 @@ extern void onewire_init(void);
extern void temp_tick(void);
extern void temp_dispatch(void);
extern uint16_t temp_ch_return(void);
+extern uint16_t temp_supply_inlet(void);
/* ds1820.c */
-extern unsigned extract_leu16(uint8_t *d);
-extern int extract_les16(uint8_t *d);
-extern int ds1820_read_sp(const Onewire_addr *a, unsigned page, uint8_t *buf, unsigned len);
-extern int ds1820_convert_t(const Onewire_addr *a);
extern int ds1820_read(const Onewire_addr *a, int *temp);
/* pressure.c */
extern uint16_t pressure_ch(void);
diff --git a/stm32/app/temp.c b/stm32/app/temp.c
index 25a5de3..4548d01 100644
--- a/stm32/app/temp.c
+++ b/stm32/app/temp.c
@@ -4,7 +4,7 @@
#define N_SENSORS 2
#define SENSOR_INDEX_CH_RETURN 0
-#define SENSOR_INDEX_DHW_FEED 1
+#define SENSOR_INDEX_SUPPLY_INLET 1
static const Onewire_addr s_addr[N_SENSORS] = {
[0] = {{0x28, 0x60, 0x06, 0x53, 0x03, 0x00, 0x00, 0xf5}},
@@ -48,7 +48,7 @@ void temp_dispatch (void)
s_temp[sensor] = 0;
- printf ("Q1W: sensor %d temp %d\n", sensor, (s_temp[sensor] * 100) / 256);
+ printf ("Q1W: sensor %d temp %d\r\n", sensor, (s_temp[sensor] * 100) / 256);
sensor++;
@@ -70,3 +70,7 @@ uint16_t temp_ch_return (void)
{
return s_temp[SENSOR_INDEX_CH_RETURN];
}
+uint16_t temp_supply_inlet (void)
+{
+ return s_temp[SENSOR_INDEX_SUPPLY_INLET];
+}
diff --git a/stm32/app/ticker.c b/stm32/app/ticker.c
index 5fbf316..e47f4eb 100644
--- a/stm32/app/ticker.c
+++ b/stm32/app/ticker.c
@@ -2,7 +2,7 @@
static volatile uint32_t delay_hms_count;
-volatile uint32_t ticks;
+static volatile uint32_t ticks;
static uint32_t scale = 7;
void