diff --git a/Core/Inc/TMP144.h b/Core/Inc/TMP144.h index 9aef998..f7ac363 100644 --- a/Core/Inc/TMP144.h +++ b/Core/Inc/TMP144.h @@ -13,7 +13,10 @@ #include "stm32f4xx_hal.h" #include "stm32f4xx_hal_uart.h" -extern volatile uint16_t temperatures[N_CELLS]; +#define N_SENSORS 32 + +extern volatile uint16_t temperatures[N_SENSORS]; +extern volatile uint16_t max_temp; typedef enum { TMP144_IDLE, @@ -29,7 +32,6 @@ typedef struct { uint8_t rxbuf[34]; size_t n_sensors; - uint8_t sensor_mappings[16]; } TMP144Bus; HAL_StatusTypeDef tmp144_init(UART_HandleTypeDef* busbar_side, diff --git a/Core/Src/TMP144.c b/Core/Src/TMP144.c index 98afde3..57141b5 100644 --- a/Core/Src/TMP144.c +++ b/Core/Src/TMP144.c @@ -7,13 +7,15 @@ #include "TMP144.h" +#include #include static const uint8_t TMP144_SEQ_RESET[] = {0x55, 0xB4}; static const uint8_t TMP144_SEQ_ADDR[] = {0x55, 0x8C, 0x90}; static const uint8_t TMP144_SEQ_READ_TEMPS[] = {0x55, 0xF1}; -volatile uint16_t temperatures[N_CELLS]; +volatile uint16_t temperatures[N_SENSORS]; +volatile uint16_t max_temp; static volatile TMP144Bus bus_busbar; static volatile TMP144Bus bus_other; @@ -34,32 +36,8 @@ HAL_StatusTypeDef tmp144_init(UART_HandleTypeDef* busbar_side, bus_other.state = TMP144_IDLE; // TODO: Configure this in EEPROM - bus_busbar.n_sensors = 11; - bus_busbar.sensor_mappings[0] = 8; - bus_busbar.sensor_mappings[1] = 8; - bus_busbar.sensor_mappings[2] = 8; - bus_busbar.sensor_mappings[3] = 6; - bus_busbar.sensor_mappings[4] = 6; - bus_busbar.sensor_mappings[5] = 4; - bus_busbar.sensor_mappings[6] = 4; - bus_busbar.sensor_mappings[7] = 4; - bus_busbar.sensor_mappings[8] = 2; - bus_busbar.sensor_mappings[9] = 2; - bus_busbar.sensor_mappings[10] = 2; - bus_other.n_sensors = 13; - bus_other.sensor_mappings[0] = 1; - bus_other.sensor_mappings[1] = 1; - bus_other.sensor_mappings[2] = 1; - bus_other.sensor_mappings[3] = 3; - bus_other.sensor_mappings[4] = 3; - bus_other.sensor_mappings[5] = 5; - bus_other.sensor_mappings[6] = 5; - bus_other.sensor_mappings[7] = 5; - bus_other.sensor_mappings[8] = 5; - bus_other.sensor_mappings[9] = 7; - bus_other.sensor_mappings[10] = 7; - bus_other.sensor_mappings[11] = 9; - bus_other.sensor_mappings[12] = 9; + bus_busbar.n_sensors = 16; + bus_other.n_sensors = 16; CHECK_STATUS(tmp144_init_reset(&bus_busbar)); CHECK_STATUS(tmp144_init_reset(&bus_other)); @@ -156,25 +134,21 @@ HAL_StatusTypeDef tmp144_recv_temps(TMP144Bus* bus) { return HAL_ERROR; } - // Find max temperature for each cell - uint8_t current_cell = bus->sensor_mappings[0]; - uint16_t max_temp = 0; + size_t temperatures_offset = (bus == &bus_busbar) ? 0 : N_SENSORS / 2; for (size_t i = 0; i < bus->n_sensors; i++) { - uint8_t cell = bus->sensor_mappings[i]; - if (cell != current_cell) { - temperatures[current_cell] = max_temp; - current_cell = cell; - max_temp = 0; - } - size_t buf_offset = headerlen + 2 * i; uint16_t temp = (bus->rxbuf[buf_offset] >> 4) | (bus->rxbuf[buf_offset + 1] << 4); - if (temp > max_temp) { - max_temp = temp; + temperatures[temperatures_offset + i] = temp; + } + + uint16_t max = temperatures[0]; + for (size_t i = 1; i < N_SENSORS; i++) { + if (temperatures[i] > max) { + max = temperatures[i]; } } - temperatures[current_cell] = max_temp; + max_temp = max; return HAL_OK; }