Add support for addressing all relay channels.
This commit is contained in:
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"relay_chn.h": "c"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -28,6 +28,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define RELAY_CHN_ID_ALL CONFIG_RELAY_CHN_COUNT ///< Special ID to address all channels
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enumeration for relay channel direction.
|
* @brief Enumeration for relay channel direction.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
#define RELAY_CHN_OPPOSITE_INERTIA_MS CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS
|
#define RELAY_CHN_OPPOSITE_INERTIA_MS CONFIG_RELAY_CHN_OPPOSITE_INERTIA_MS
|
||||||
#define RELAY_CHN_COUNT CONFIG_RELAY_CHN_COUNT
|
#define RELAY_CHN_COUNT CONFIG_RELAY_CHN_COUNT
|
||||||
|
|
||||||
const char* TAG = "relay_chn";
|
static const char *TAG = "relay_chn";
|
||||||
|
|
||||||
ESP_EVENT_DEFINE_BASE(RELAY_CHN_CMD_EVENT);
|
ESP_EVENT_DEFINE_BASE(RELAY_CHN_CMD_EVENT);
|
||||||
|
|
||||||
@@ -260,7 +260,7 @@ esp_err_t relay_chn_create(const gpio_num_t* gpio_map, uint8_t gpio_count)
|
|||||||
*/
|
*/
|
||||||
static bool relay_chn_is_channel_id_valid(uint8_t chn_id)
|
static bool relay_chn_is_channel_id_valid(uint8_t chn_id)
|
||||||
{
|
{
|
||||||
bool valid = chn_id >= 0 && chn_id < RELAY_CHN_COUNT;
|
bool valid = (chn_id >= 0 && chn_id < RELAY_CHN_COUNT) || chn_id == RELAY_CHN_ID_ALL;
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
ESP_LOGE(TAG, "Invalid channel ID: %d", chn_id);
|
ESP_LOGE(TAG, "Invalid channel ID: %d", chn_id);
|
||||||
}
|
}
|
||||||
@@ -424,10 +424,22 @@ char *relay_chn_get_state_str(uint8_t chn_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void relay_chn_issue_cmd_on_all_channels(relay_chn_cmd_t cmd)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < RELAY_CHN_COUNT; i++) {
|
||||||
|
relay_chn_issue_cmd(&relay_channels[i], cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void relay_chn_run_forward(uint8_t chn_id)
|
void relay_chn_run_forward(uint8_t chn_id)
|
||||||
{
|
{
|
||||||
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
||||||
|
|
||||||
|
if (chn_id == RELAY_CHN_ID_ALL) {
|
||||||
|
relay_chn_issue_cmd_on_all_channels(RELAY_CHN_CMD_FORWARD);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
||||||
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_FORWARD);
|
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_FORWARD);
|
||||||
}
|
}
|
||||||
@@ -436,6 +448,11 @@ void relay_chn_run_reverse(uint8_t chn_id)
|
|||||||
{
|
{
|
||||||
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
||||||
|
|
||||||
|
if (chn_id == RELAY_CHN_ID_ALL) {
|
||||||
|
relay_chn_issue_cmd_on_all_channels(RELAY_CHN_CMD_REVERSE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
||||||
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_REVERSE);
|
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_REVERSE);
|
||||||
}
|
}
|
||||||
@@ -444,6 +461,11 @@ void relay_chn_stop(uint8_t chn_id)
|
|||||||
{
|
{
|
||||||
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
||||||
|
|
||||||
|
if (chn_id == RELAY_CHN_ID_ALL) {
|
||||||
|
relay_chn_issue_cmd_on_all_channels(RELAY_CHN_CMD_STOP);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
||||||
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_STOP);
|
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_STOP);
|
||||||
}
|
}
|
||||||
@@ -452,6 +474,11 @@ void relay_chn_flip_direction(uint8_t chn_id)
|
|||||||
{
|
{
|
||||||
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
if (!relay_chn_is_channel_id_valid(chn_id)) return;
|
||||||
|
|
||||||
|
if (chn_id == RELAY_CHN_ID_ALL) {
|
||||||
|
relay_chn_issue_cmd_on_all_channels(RELAY_CHN_CMD_FLIP);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
relay_chn_t* relay_chn = &relay_channels[chn_id];
|
||||||
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_FLIP);
|
relay_chn_issue_cmd(relay_chn, RELAY_CHN_CMD_FLIP);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user