From 8a84c531e26da5f06602e505c3591b09ea9bc741 Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Tue, 26 May 2020 15:27:53 +0100 Subject: fish --- stm32/app/ds1820.c | 8 ++--- stm32/app/ot.c | 84 +++++++++++++++++++++++++++++++++----------------- stm32/app/prototypes.h | 7 +---- stm32/app/temp.c | 8 +++-- stm32/app/ticker.c | 2 +- 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 -- cgit v1.2.3