mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-24 11:46:34 +00:00
Add inputX command to retrieve gpio state
This commit is contained in:
parent
57569e7b06
commit
bab84898e0
@ -147,7 +147,25 @@ static inline bool dispatch_parse_button_attribute(const char* topic_p, const ch
|
||||
return true;
|
||||
}
|
||||
|
||||
static void dispatch_gpio(const char* topic, const char* payload)
|
||||
static void dispatch_input(const char* topic, const char* payload)
|
||||
{
|
||||
#if HASP_USE_GPIO > 0
|
||||
|
||||
if(!Parser::is_only_digits(topic)) {
|
||||
LOG_WARNING(TAG_MSGR, F("Invalid pin %s"), topic);
|
||||
return;
|
||||
}
|
||||
|
||||
// just output the pin state
|
||||
uint8_t pin = atoi(topic);
|
||||
if(gpio_input_pin_state(pin)) return;
|
||||
|
||||
LOG_WARNING(TAG_GPIO, F(D_BULLET "Pin %d is not configured"), pin);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
static void dispatch_output(const char* topic, const char* payload)
|
||||
{
|
||||
#if HASP_USE_GPIO > 0
|
||||
|
||||
@ -232,8 +250,10 @@ void dispatch_command(const char* topic, const char* payload, bool update)
|
||||
/* =============================== Not standard payload commands ===================================== */
|
||||
|
||||
if(topic == strstr_P(topic, PSTR("output"))) {
|
||||
dispatch_output(topic + 6, payload);
|
||||
|
||||
dispatch_gpio(topic + 6, payload);
|
||||
} else if(topic == strstr_P(topic, PSTR("input"))) {
|
||||
dispatch_input(topic + 5, payload);
|
||||
|
||||
// } else if(strcasecmp_P(topic, PSTR("screenshot")) == 0) {
|
||||
// guiTakeScreenshot("/screenshot.bmp"); // Literal String
|
||||
|
@ -92,7 +92,8 @@ static void gpio_event_handler(AceButton* button, uint8_t eventType, uint8_t but
|
||||
switch(eventType) {
|
||||
case AceButton::kEventPressed:
|
||||
if(gpioConfig[btnid].type != hasp_gpio_type_t::BUTTON) {
|
||||
eventid = HASP_EVENT_ON;
|
||||
eventid = HASP_EVENT_ON;
|
||||
gpioConfig[btnid].power = 1;
|
||||
} else {
|
||||
eventid = HASP_EVENT_DOWN;
|
||||
}
|
||||
@ -115,7 +116,8 @@ static void gpio_event_handler(AceButton* button, uint8_t eventType, uint8_t but
|
||||
// break;
|
||||
case AceButton::kEventReleased:
|
||||
if(gpioConfig[btnid].type != hasp_gpio_type_t::BUTTON) {
|
||||
eventid = HASP_EVENT_OFF;
|
||||
eventid = HASP_EVENT_OFF;
|
||||
gpioConfig[btnid].power = 0;
|
||||
} else {
|
||||
eventid = HASP_EVENT_RELEASE;
|
||||
}
|
||||
@ -348,8 +350,8 @@ void gpioEvery5Seconds(void)
|
||||
{
|
||||
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
||||
if(gpio_is_input(&gpioConfig[i])) {
|
||||
gpioConfig[i].val = !gpioConfig[i].val;
|
||||
event_gpio_input(gpioConfig[i].pin, gpioConfig[i].val);
|
||||
gpioConfig[i].power = !gpioConfig[i].power;
|
||||
event_gpio_input(gpioConfig[i].pin, gpioConfig[i].power);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -368,6 +370,11 @@ bool gpio_get_pin_state(uint8_t pin, bool& power, int32_t& val)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void gpio_input_state(hasp_gpio_config_t* gpio)
|
||||
{
|
||||
event_gpio_input(gpio->pin, gpio->power);
|
||||
}
|
||||
|
||||
void gpio_output_state(hasp_gpio_config_t* gpio)
|
||||
{
|
||||
char payload[32];
|
||||
@ -378,6 +385,17 @@ void gpio_output_state(hasp_gpio_config_t* gpio)
|
||||
dispatch_state_subtopic(topic, payload);
|
||||
}
|
||||
|
||||
bool gpio_input_pin_state(uint8_t pin)
|
||||
{
|
||||
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
||||
if(gpioConfig[i].pin == pin && gpioConfigInUse(i)) {
|
||||
gpio_input_state(&gpioConfig[i]);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool gpio_output_pin_state(uint8_t pin)
|
||||
{
|
||||
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
||||
|
@ -40,6 +40,7 @@ void gpioEvery5Seconds(void);
|
||||
void gpio_set_normalized_group_values(hasp_update_value_t& value);
|
||||
void gpio_output_group_values(uint8_t group);
|
||||
|
||||
bool gpio_input_pin_state(uint8_t pin);
|
||||
bool gpio_output_pin_state(uint8_t pin);
|
||||
bool gpio_get_pin_state(uint8_t pin, bool& power, int32_t& val);
|
||||
bool gpio_set_pin_state(uint8_t pin, bool power, int32_t val);
|
||||
|
Loading…
x
Reference in New Issue
Block a user