feat(valve): Add current measurement callbacks and shell commands
This commit introduces several enhancements to the valve library. - New weak callback functions `valve_current_open_callback` and `valve_current_close_callback` are added to allow the application to monitor the current during valve opening and closing operations. - The `movement_timeout_handler` now correctly sets the valve state to `VALVE_STATE_OPEN` and movement to `VALVE_MOVEMENT_IDLE` upon timeout. - New shell commands `valve open`, `valve close`, and `valve stop` are added for direct control of the valve. - The existing setting commands are reorganized under a `valve set` subcommand, and their names are shortened (e.g., `set_open_t` to `open_t`). - The default configuration for `LIB_MODBUS_SERVER` and `LIB_VALVE` is changed to `n`. Signed-off-by: Eduard Iten <eduard@iten.pro>
This commit is contained in:
@@ -111,26 +111,75 @@ static int cmd_valve_show(const struct shell *sh, size_t argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_valve_open(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
if (valve_get_movement() != VALVE_MOVEMENT_IDLE) {
|
||||
shell_print(sh, "Valve is already moving.");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
valve_open();
|
||||
shell_print(sh, "Valve is opening.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_valve_close(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
if (valve_get_movement() != VALVE_MOVEMENT_IDLE) {
|
||||
shell_print(sh, "Valve is already moving.");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
valve_close();
|
||||
shell_print(sh, "Valve is closing.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cmd_valve_stop(const struct shell *sh, size_t argc, char **argv)
|
||||
{
|
||||
ARG_UNUSED(argc);
|
||||
ARG_UNUSED(argv);
|
||||
if (valve_get_movement() == VALVE_MOVEMENT_IDLE) {
|
||||
shell_print(sh, "Valve is already stopped.");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
valve_stop();
|
||||
shell_print(sh, "Valve movement stopped.");
|
||||
return 0;
|
||||
}
|
||||
SHELL_STATIC_SUBCMD_SET_CREATE(sub_valve_settings,
|
||||
SHELL_CMD(set_open_t, NULL, "Set max open time (seconds)", cmd_valve_set_open_t),
|
||||
SHELL_CMD(set_close_t, NULL, "Set max close time (seconds)", cmd_valve_set_close_t),
|
||||
SHELL_CMD(set_end_curr_open,
|
||||
SHELL_CMD(open_t, NULL, "Set max open time (seconds)", cmd_valve_set_open_t),
|
||||
SHELL_CMD(close_t, NULL, "Set max close time (seconds)", cmd_valve_set_close_t),
|
||||
SHELL_CMD(end_curr_open,
|
||||
NULL,
|
||||
"Set end current threshold for opening (mA)",
|
||||
cmd_valve_set_end_curr_open),
|
||||
SHELL_CMD(set_end_curr_close,
|
||||
SHELL_CMD(end_curr_close,
|
||||
NULL,
|
||||
"Set end current threshold for closing (mA)",
|
||||
cmd_valve_set_end_curr_close),
|
||||
SHELL_CMD(set_obstacle_open,
|
||||
SHELL_CMD(obstacle_curr_open,
|
||||
NULL,
|
||||
"Set obstacle threshold for opening (mA)",
|
||||
cmd_valve_set_obstacle_open),
|
||||
SHELL_CMD(set_obstacle_close,
|
||||
SHELL_CMD(obstacle_curr_close,
|
||||
NULL,
|
||||
"Set obstacle threshold for closing (mA)",
|
||||
cmd_valve_set_obstacle_close),
|
||||
SHELL_CMD(show, NULL, "Show valve configuration", cmd_valve_show),
|
||||
|
||||
SHELL_SUBCMD_SET_END);
|
||||
|
||||
SHELL_CMD_REGISTER(valve, &sub_valve_settings, "Valve commands", NULL);
|
||||
SHELL_STATIC_SUBCMD_SET_CREATE(valve_cmds,
|
||||
SHELL_CMD(show, NULL, "Show valve configuration", cmd_valve_show),
|
||||
SHELL_CMD(set, &sub_valve_settings, "Valve settings commands", NULL),
|
||||
SHELL_CMD(open, NULL, "Open the valve", cmd_valve_open),
|
||||
SHELL_CMD(close, NULL, "Close the valve", cmd_valve_close),
|
||||
SHELL_CMD(stop, NULL, "Stop the valve movement", cmd_valve_stop),
|
||||
SHELL_SUBCMD_SET_END);
|
||||
|
||||
SHELL_CMD_REGISTER(valve, &valve_cmds, "Valve commands", NULL);
|
||||
|
||||
Reference in New Issue
Block a user