From 692cad0bc81b57da11680718ec8a8d54f9df634a Mon Sep 17 00:00:00 2001 From: Duke NUCem Date: Sun, 10 Oct 2021 12:30:39 +0200 Subject: [PATCH] Deleted redundant switch case (MODBUS write single and multiple register) --- fw/Core/Src/main.c | 94 +++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 64 deletions(-) diff --git a/fw/Core/Src/main.c b/fw/Core/Src/main.c index 353ec12..005a154 100644 --- a/fw/Core/Src/main.c +++ b/fw/Core/Src/main.c @@ -291,27 +291,29 @@ int main(void) /* TODO: Process data and light a desired color of LED */ /* TODO: Add hystheresis */ - if (CO2 <= sensor_config.led_co2_alert_limit1) - { - /* CO2 is OK -> GREEN */ + if (sensor_config.led_on) { + if (CO2 <= sensor_config.led_co2_alert_limit1) { + /* CO2 is OK -> GREEN */ + LL_GPIO_SetOutputPin(LED_R_GPIO_Port, LED_R_Pin); + LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); + LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); + + } else if ((sensor_config.led_co2_alert_limit1 < CO2) && (CO2 <= sensor_config.led_co2_alert_limit2)) { + /* CO2 is NOT OK -> YELLOW */ + LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); + LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); + LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); + + } else if (sensor_config.led_co2_alert_limit2 < CO2) { + /* CO2 is CRITICAL -> RED */ + LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); + LL_GPIO_SetOutputPin(LED_G_GPIO_Port, LED_G_Pin); + LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); + } + } else { LL_GPIO_SetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - - } else if ((sensor_config.led_co2_alert_limit1 < CO2) && (CO2 <= sensor_config.led_co2_alert_limit2)) - { - /* CO2 is NOT OK -> YELLOW */ - LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); - LL_GPIO_ResetOutputPin(LED_G_GPIO_Port, LED_G_Pin); - LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - - } else if (sensor_config.led_co2_alert_limit2 < CO2) - { - /* CO2 is CRITICAL -> RED */ - LL_GPIO_ResetOutputPin(LED_R_GPIO_Port, LED_R_Pin); LL_GPIO_SetOutputPin(LED_G_GPIO_Port, LED_G_Pin); LL_GPIO_SetOutputPin(LED_B_GPIO_Port, LED_B_Pin); - } /* Reset the TIM21 Elapsed Period Flag */ @@ -685,73 +687,37 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction) } return MODBUS_OK; case MODBUS_WRITE_SINGLE_REGISTER: - switch (register_number) - { - case REGISTER_NUM_LED_ON: - sensor_config.led_on = (uint8_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_LED_BRIGHTNESS: - sensor_config.led_brightness = (uint16_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_LED_SMOOTH: - sensor_config.led_smooth = (uint16_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_CO2_ALERT_LIMIT1: - sensor_config.led_co2_alert_limit1 = (uint16_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_CO2_ALERT_LIMIT2: - sensor_config.led_co2_alert_limit2 = (uint16_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_SCD4x_T_OFFSET: - sensor_config.scd4x_t_offset = (int16_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_MODBUS_ADDR: - sensor_config.modbus_addr = (uint16_t) transaction->holding_registers[0]; - break; - case REGISTER_NUM_BAUDRATE: - if (transaction->holding_registers[0] < config_baudrates_length) - { - sensor_config.baudrate_index = (uint16_t) (transaction->holding_registers[0]); - baudrate_changed = 1; - } - break; - default: - return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED; - } - /* TODO: Set modbus address on change */ - /* TODO: Set UART baudrate on change */ - sensor_config_pending_write = 1; - return MODBUS_OK; + transaction->register_count = 1; case MODBUS_WRITE_MULTIPLE_REGISTERS: for (int i = 0; i < transaction->register_count; i++, register_number++) { switch (register_number) { case REGISTER_NUM_LED_ON: - sensor_config.led_on = (uint8_t) transaction->holding_registers[i]; + sensor_config.led_on = (uint8_t) transaction->holding_registers[0]; break; case REGISTER_NUM_LED_BRIGHTNESS: - sensor_config.led_brightness = (uint16_t) transaction->holding_registers[i]; + sensor_config.led_brightness = (uint16_t) transaction->holding_registers[0]; break; case REGISTER_NUM_LED_SMOOTH: - sensor_config.led_smooth = (uint16_t) transaction->holding_registers[i]; + sensor_config.led_smooth = (uint16_t) transaction->holding_registers[0]; break; case REGISTER_NUM_CO2_ALERT_LIMIT1: - sensor_config.led_co2_alert_limit1 = (uint16_t) transaction->holding_registers[i]; + sensor_config.led_co2_alert_limit1 = (uint16_t) transaction->holding_registers[0]; break; case REGISTER_NUM_CO2_ALERT_LIMIT2: - sensor_config.led_co2_alert_limit2 = (uint16_t) transaction->holding_registers[i]; + sensor_config.led_co2_alert_limit2 = (uint16_t) transaction->holding_registers[0]; break; case REGISTER_NUM_SCD4x_T_OFFSET: - sensor_config.scd4x_t_offset = (int16_t) transaction->holding_registers[i]; + sensor_config.scd4x_t_offset = (int16_t) transaction->holding_registers[0]; break; case REGISTER_NUM_MODBUS_ADDR: - sensor_config.modbus_addr = (uint16_t) transaction->holding_registers[i]; + sensor_config.modbus_addr = (uint16_t) transaction->holding_registers[0]; break; case REGISTER_NUM_BAUDRATE: if (transaction->holding_registers[0] < config_baudrates_length) { - sensor_config.baudrate_index = (uint16_t) (transaction->holding_registers[i]); + sensor_config.baudrate_index = (uint16_t) (transaction->holding_registers[0]); baudrate_changed = 1; } break; @@ -761,7 +727,7 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction) } /* TODO: Set modbus address on change */ /* TODO: Set UART baudrate on change */ - config_write(&sensor_config); + sensor_config_pending_write = 1; return MODBUS_OK; default: return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED;