mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-26 20:56:37 +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;
|
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
|
#if HASP_USE_GPIO > 0
|
||||||
|
|
||||||
@ -232,8 +250,10 @@ void dispatch_command(const char* topic, const char* payload, bool update)
|
|||||||
/* =============================== Not standard payload commands ===================================== */
|
/* =============================== Not standard payload commands ===================================== */
|
||||||
|
|
||||||
if(topic == strstr_P(topic, PSTR("output"))) {
|
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) {
|
// } else if(strcasecmp_P(topic, PSTR("screenshot")) == 0) {
|
||||||
// guiTakeScreenshot("/screenshot.bmp"); // Literal String
|
// guiTakeScreenshot("/screenshot.bmp"); // Literal String
|
||||||
|
@ -92,7 +92,8 @@ static void gpio_event_handler(AceButton* button, uint8_t eventType, uint8_t but
|
|||||||
switch(eventType) {
|
switch(eventType) {
|
||||||
case AceButton::kEventPressed:
|
case AceButton::kEventPressed:
|
||||||
if(gpioConfig[btnid].type != hasp_gpio_type_t::BUTTON) {
|
if(gpioConfig[btnid].type != hasp_gpio_type_t::BUTTON) {
|
||||||
eventid = HASP_EVENT_ON;
|
eventid = HASP_EVENT_ON;
|
||||||
|
gpioConfig[btnid].power = 1;
|
||||||
} else {
|
} else {
|
||||||
eventid = HASP_EVENT_DOWN;
|
eventid = HASP_EVENT_DOWN;
|
||||||
}
|
}
|
||||||
@ -115,7 +116,8 @@ static void gpio_event_handler(AceButton* button, uint8_t eventType, uint8_t but
|
|||||||
// break;
|
// break;
|
||||||
case AceButton::kEventReleased:
|
case AceButton::kEventReleased:
|
||||||
if(gpioConfig[btnid].type != hasp_gpio_type_t::BUTTON) {
|
if(gpioConfig[btnid].type != hasp_gpio_type_t::BUTTON) {
|
||||||
eventid = HASP_EVENT_OFF;
|
eventid = HASP_EVENT_OFF;
|
||||||
|
gpioConfig[btnid].power = 0;
|
||||||
} else {
|
} else {
|
||||||
eventid = HASP_EVENT_RELEASE;
|
eventid = HASP_EVENT_RELEASE;
|
||||||
}
|
}
|
||||||
@ -348,8 +350,8 @@ void gpioEvery5Seconds(void)
|
|||||||
{
|
{
|
||||||
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
||||||
if(gpio_is_input(&gpioConfig[i])) {
|
if(gpio_is_input(&gpioConfig[i])) {
|
||||||
gpioConfig[i].val = !gpioConfig[i].val;
|
gpioConfig[i].power = !gpioConfig[i].power;
|
||||||
event_gpio_input(gpioConfig[i].pin, gpioConfig[i].val);
|
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;
|
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)
|
void gpio_output_state(hasp_gpio_config_t* gpio)
|
||||||
{
|
{
|
||||||
char payload[32];
|
char payload[32];
|
||||||
@ -378,6 +385,17 @@ void gpio_output_state(hasp_gpio_config_t* gpio)
|
|||||||
dispatch_state_subtopic(topic, payload);
|
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)
|
bool gpio_output_pin_state(uint8_t pin)
|
||||||
{
|
{
|
||||||
for(uint8_t i = 0; i < HASP_NUM_GPIO_CONFIG; i++) {
|
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_set_normalized_group_values(hasp_update_value_t& value);
|
||||||
void gpio_output_group_values(uint8_t group);
|
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_output_pin_state(uint8_t pin);
|
||||||
bool gpio_get_pin_state(uint8_t pin, bool& power, int32_t& val);
|
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);
|
bool gpio_set_pin_state(uint8_t pin, bool power, int32_t val);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user