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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user