feat(lib): Introduce adc_sensor library

Adds a new `adc_sensor` library to abstract reading analog values from ADC channels. The output of this library is currently simulated.

This library is now used by the `modbus_server` to read the motor current and the main supply voltage, replacing the previous implementation. This change improves modularity by centralizing ADC-related code into a dedicated module.

The build system has been updated to include the new library.
This commit is contained in:
2025-07-08 15:19:44 +02:00
parent edf0fb2563
commit c9b0f38576
7 changed files with 117 additions and 2 deletions

View File

@@ -8,6 +8,7 @@
#include <lib/modbus_server.h>
#include <lib/valve.h>
#include <lib/fwu.h>
#include <lib/adc_sensor.h>
#include <app_version.h>
#include <zephyr/usb/usb_device.h>
@@ -121,7 +122,7 @@ static int input_reg_rd(uint16_t addr, uint16_t *reg)
*reg = (valve_get_movement() << 8) | (valve_get_state() & 0xFF);
break;
case REG_INPUT_MOTOR_CURRENT_MA:
*reg = valve_get_motor_current();
*reg = adc_sensor_get_current_ma();
break;
case REG_INPUT_UPTIME_SECONDS_LOW:
*reg = (uint16_t)(uptime_s & 0xFFFF);
@@ -130,7 +131,7 @@ static int input_reg_rd(uint16_t addr, uint16_t *reg)
*reg = (uint16_t)(uptime_s >> 16);
break;
case REG_INPUT_SUPPLY_VOLTAGE_MV:
*reg = 12300;
*reg = adc_sensor_get_voltage_mv();
break;
case REG_INPUT_FWU_LAST_CHUNK_CRC:
*reg = fwu_get_last_chunk_crc();
@@ -160,6 +161,13 @@ int modbus_server_init(void)
{
k_timer_init(&watchdog_timer, watchdog_timer_handler, NULL);
// Initialize ADC sensor
int ret = adc_sensor_init();
if (ret < 0) {
LOG_ERR("Failed to initialize ADC sensor: %d", ret);
return ret;
}
// Load saved settings
uint32_t saved_baudrate = 19200;
uint8_t saved_unit_id = 1;