diff --git a/software/apps/slave_node/src/main.c b/software/apps/slave_node/src/main.c index 660bfd7..d93a8ee 100644 --- a/software/apps/slave_node/src/main.c +++ b/software/apps/slave_node/src/main.c @@ -68,11 +68,33 @@ static int holding_reg_wr(uint16_t addr, uint16_t reg) return 0; } +static int input_reg_rd(uint16_t addr, uint16_t *reg) +{ + uint32_t uptime_s = k_uptime_get_32() / 1000; + + switch (addr) { + case 0x00F3: + *reg = (uint16_t)(uptime_s & 0xFFFF); + break; + case 0x00F4: + *reg = (uint16_t)(uptime_s >> 16); + break; + default: + *reg = 0; + break; + } + + LOG_INF("Input register read, addr %u, value %u", addr, *reg); + + return 0; +} + static struct modbus_user_callbacks mbs_cbs = { .coil_rd = coil_rd, .coil_wr = coil_wr, .holding_reg_rd = holding_reg_rd, .holding_reg_wr = holding_reg_wr, + .input_reg_rd = input_reg_rd, }; const static struct modbus_iface_param server_param = { @@ -117,4 +139,4 @@ int main(void) } return 0; -} \ No newline at end of file +}