diff --git a/include/main.h b/include/main.h index c8db846..b12c73c 100644 --- a/include/main.h +++ b/include/main.h @@ -26,6 +26,7 @@ uint8_t channel_gpio_by_idx(int idx); uint8_t channel_idx_by_gpio(int gpio); void channel_set(int idx, bool state); bool channel_get(int idx); +int channel_get_total(); void channel_report(int idx, char *msg, int msg_len); void channel_handler(int gpio, void *arg); diff --git a/src/channel.c b/src/channel.c index 013d4dd..a9e6042 100644 --- a/src/channel.c +++ b/src/channel.c @@ -13,6 +13,10 @@ static bool valid_gpio(const int gpio) { return true; } +int channel_get_total() { + return s_num_channels; +} + bool channel_init(const char *fn) { char *json; void *h = NULL; @@ -120,7 +124,7 @@ uint8_t channel_gpio_by_idx(int idx) { uint8_t channel_idx_by_gpio(int gpio) { uint8_t i; - for(i=0; i<3; i++) { + for(i=0; i=s_num_channels) + if (idx<0 || idx>=channel_get_total()) return; snprintf(msg, msg_len-1, "{\"idx\": %d, \"button_gpio\": %d, \"led_gpio\": %d, \"relay_gpio\": %d, \"relay_state\": %d}", @@ -141,7 +145,7 @@ void channel_report(int idx, char *msg, int msg_len) { void channel_set(int idx, bool state) { double now = mg_time(); - if (idx<0 || idx>=s_num_channels) + if (idx<0 || idx>=channel_get_total()) return; s_channels[idx].button_last_change = now; @@ -153,7 +157,7 @@ void channel_set(int idx, bool state) { } bool channel_get(int idx) { - if (idx<0 || idx>=s_num_channels) + if (idx<0 || idx>=channel_get_total()) return false; return s_channels[idx].relay_state == 1; diff --git a/src/rpc.c b/src/rpc.c index 9608534..7550d6e 100644 --- a/src/rpc.c +++ b/src/rpc.c @@ -21,8 +21,8 @@ static bool rpc_args_to_idx_and_gpio(struct mg_rpc_request_info *ri, struct mg_s return false; } - if (idx<0 || idx>2) { - mg_rpc_send_errorf(ri, 400, "idx must be 0, 1, 2"); + if (idx<0 || idx>=channel_get_total()) { + mg_rpc_send_errorf(ri, 400, "idx must be between 0 and %d", channel_get_total()-1); ri = NULL; return false; } @@ -95,8 +95,8 @@ static void rpc_channel_set_handler(struct mg_rpc_request_info *ri, void *cb_arg return; } - if (idx<0 || idx>2) { - mg_rpc_send_errorf(ri, 400, "idx must be 0, 1, 2"); + if (idx<0 || idx>=channel_get_total()) { + mg_rpc_send_errorf(ri, 400, "idx must be between 0 and %d", channel_get_total()-1); ri = NULL; return; }