From 792800cd23d3eca2cfc978e0d14603ddd8f7d45e Mon Sep 17 00:00:00 2001 From: moon2 <moon2protonmail@protonmail.com> Date: Sat, 10 Jun 2023 03:03:32 +0200 Subject: [PATCH] p6: hotfixes for button mapping and badge link polarity --- components/badge23/espan.c | 1 + components/badge23/spio.c | 103 +++++++++++++++++++++++++++++++------ 2 files changed, 89 insertions(+), 15 deletions(-) diff --git a/components/badge23/espan.c b/components/badge23/espan.c index 27dbe27f16..e9884458ee 100644 --- a/components/badge23/espan.c +++ b/components/badge23/espan.c @@ -102,6 +102,7 @@ void os_app_main(void) leds_init(); init_buttons(); captouch_init(); + spio_badge_link_disable(255); captouch_force_calibration(); diff --git a/components/badge23/spio.c b/components/badge23/spio.c index 15918bd9ed..822f5be13f 100644 --- a/components/badge23/spio.c +++ b/components/badge23/spio.c @@ -10,14 +10,25 @@ #define I2C_MASTER_NUM 0 #define TIMEOUT_MS 1000 +#if defined(CONFIG_BADGE23_HW_GEN_P1) + +#define BADGE_LINK_LINE_OUT_TIP_ENABLE_PIN 5 +#define BADGE_LINK_LINE_OUT_RING_ENABLE_PIN 6 +#define BADGE_LINK_LINE_IN_TIP_ENABLE_PIN 3 +#define BADGE_LINK_LINE_IN_RING_ENABLE_PIN 4 -#if defined(CONFIG_BADGE23_HW_GEN_P4) || defined(CONFIG_BADGE23_HW_GEN_P3) +#elif defined(CONFIG_BADGE23_HW_GEN_P4) || defined(CONFIG_BADGE23_HW_GEN_P3) #define BADGE_LINK_LINE_OUT_TIP_ENABLE_PIN 6 #define BADGE_LINK_LINE_OUT_RING_ENABLE_PIN 7 #define BADGE_LINK_LINE_IN_TIP_ENABLE_PIN 5 #define BADGE_LINK_LINE_IN_RING_ENABLE_PIN 4 +//on ESP32 +#define LEFT_BUTTON_LEFT 3 +#define LEFT_BUTTON_MID 0 + +//on PORTEXPANDER #define LEFT_BUTTON_RIGHT (0+8) #define RIGHT_BUTTON_LEFT (6+8) #define RIGHT_BUTTON_MID (5+8) @@ -30,9 +41,16 @@ #define BADGE_LINK_LINE_IN_TIP_ENABLE_PIN 3 #define BADGE_LINK_LINE_IN_RING_ENABLE_PIN 4 +#define ENABLE_INVERTED + +//on ESP32 +#define RIGHT_BUTTON_MID 3 +#define LEFT_BUTTON_MID 0 + +//on PORTEXPANDER #define LEFT_BUTTON_RIGHT (0+8) #define RIGHT_BUTTON_LEFT (4+8) -#define RIGHT_BUTTON_MID (7+8) +#define LEFT_BUTTON_LEFT (7+8) #define RIGHT_BUTTON_RIGHT (5+8) #endif @@ -175,13 +193,7 @@ void update_button_state(){ } } -#elif defined(CONFIG_BADGE23_HW_GEN_P3) || defined(CONFIG_BADGE23_HW_GEN_P4) || defined(CONFIG_BADGE23_HW_GEN_P6) - -//on ESP32 -#define LEFT_BUTTON_LEFT 3 -#define LEFT_BUTTON_MID 0 - -//on PORTEXPANDER +#elif defined(CONFIG_BADGE23_HW_GEN_P3) || defined(CONFIG_BADGE23_HW_GEN_P4) max7321_t port_expanders[] = { {0b01101110, 0, 255, 255}, {0b01101101, 0, 255, 255} }; @@ -239,6 +251,63 @@ void update_button_state(){ rightbutton = new_rightbutton; leftbutton = new_leftbutton; } +#elif defined(CONFIG_BADGE23_HW_GEN_P6) +max7321_t port_expanders[] = { {0b01101110, 0, 255, 255}, + {0b01101101, 0, 255, 255} }; + +static void _init_buttons(){ + //configure all buttons as pullup + gpio_config_t cfg = { + .pin_bit_mask = 1 << RIGHT_BUTTON_MID, + .mode = GPIO_MODE_INPUT, + .pull_up_en = GPIO_PULLUP_ENABLE, + .pull_down_en = GPIO_PULLDOWN_DISABLE, + .intr_type = GPIO_INTR_DISABLE + }; + ESP_ERROR_CHECK(gpio_config(&cfg)); + cfg.pin_bit_mask = 1; + cfg.pull_up_en = GPIO_PULLUP_DISABLE; + ESP_ERROR_CHECK(gpio_config(&cfg)); + + max7321s_set_pinmode_output(RIGHT_BUTTON_RIGHT, 0); + max7321s_set_pinmode_output(LEFT_BUTTON_LEFT, 0); + max7321s_set_pinmode_output(RIGHT_BUTTON_LEFT, 0); + max7321s_set_pinmode_output(LEFT_BUTTON_RIGHT, 0); +} + +int8_t process_button_state(bool r, bool m, bool l){ + if(!l){ + return BUTTON_PRESSED_LEFT; + } else if(!m){ + return BUTTON_PRESSED_DOWN; + } else if(!r){ + return BUTTON_PRESSED_RIGHT; + } else { + return BUTTON_NOT_PRESSED; + } +} + +void update_button_state(){ + max7321s_update(); + uint8_t rr = max7321s_get_pin(RIGHT_BUTTON_RIGHT); + uint8_t ll = max7321s_get_pin(LEFT_BUTTON_LEFT); + uint8_t rl = max7321s_get_pin(RIGHT_BUTTON_LEFT); + uint8_t lr = max7321s_get_pin(LEFT_BUTTON_RIGHT); + uint8_t rm = gpio_get_level(RIGHT_BUTTON_MID); + uint8_t lm = gpio_get_level(LEFT_BUTTON_MID); + + int8_t new_rightbutton = process_button_state(rr, rm, rl); + int8_t new_leftbutton = process_button_state(lr, lm, ll); + if(new_rightbutton != rightbutton){ + //TODO: CALLBACK button_state_has_changed_to(new_rightbutton) + //note: consider menubutton/application button config option + } + if(new_leftbutton != leftbutton){ + //TODO: CALLBACK button_state_has_changed_to(new_leftbutton) + } + rightbutton = new_rightbutton; + leftbutton = new_leftbutton; +} #else #error "spio not implemented for this badge generation" @@ -311,19 +380,23 @@ static int8_t spio_badge_link_set(uint8_t pin_mask, bool state){ } } +#ifdef ENABLE_INVERTED + uint8_t hw_state = state; +#else + uint8_t hw_state = !state; +#endif if(pin_mask & BADGE_LINK_PIN_MASK_LINE_IN_RING) max7321s_set_pinmode_output(BADGE_LINK_LINE_IN_RING_ENABLE_PIN, 1); if(pin_mask & BADGE_LINK_PIN_MASK_LINE_IN_TIP) max7321s_set_pinmode_output(BADGE_LINK_LINE_IN_TIP_ENABLE_PIN, 1); if(pin_mask & BADGE_LINK_PIN_MASK_LINE_OUT_RING) max7321s_set_pinmode_output(BADGE_LINK_LINE_OUT_RING_ENABLE_PIN, 1); if(pin_mask & BADGE_LINK_PIN_MASK_LINE_OUT_TIP) max7321s_set_pinmode_output(BADGE_LINK_LINE_OUT_TIP_ENABLE_PIN, 1); - if(pin_mask & BADGE_LINK_PIN_MASK_LINE_IN_RING) max7321s_set_pin(BADGE_LINK_LINE_IN_RING_ENABLE_PIN, !state); - if(pin_mask & BADGE_LINK_PIN_MASK_LINE_IN_TIP) max7321s_set_pin(BADGE_LINK_LINE_IN_TIP_ENABLE_PIN, !state); - if(pin_mask & BADGE_LINK_PIN_MASK_LINE_OUT_RING) max7321s_set_pin(BADGE_LINK_LINE_OUT_RING_ENABLE_PIN, !state); - if(pin_mask & BADGE_LINK_PIN_MASK_LINE_OUT_TIP) max7321s_set_pin(BADGE_LINK_LINE_OUT_TIP_ENABLE_PIN, !state); + if(pin_mask & BADGE_LINK_PIN_MASK_LINE_IN_RING) max7321s_set_pin(BADGE_LINK_LINE_IN_RING_ENABLE_PIN, hw_state); + if(pin_mask & BADGE_LINK_PIN_MASK_LINE_IN_TIP) max7321s_set_pin(BADGE_LINK_LINE_IN_TIP_ENABLE_PIN, hw_state); + if(pin_mask & BADGE_LINK_PIN_MASK_LINE_OUT_RING) max7321s_set_pin(BADGE_LINK_LINE_OUT_RING_ENABLE_PIN, hw_state); + if(pin_mask & BADGE_LINK_PIN_MASK_LINE_OUT_TIP) max7321s_set_pin(BADGE_LINK_LINE_OUT_TIP_ENABLE_PIN, hw_state); max7321s_update(); - - badge_link_enabled = (badge_link_enabled & (~pin_mask)) | (pin_mask & (state ? 255: 0)); + badge_link_enabled = (badge_link_enabled & (~pin_mask)) | (pin_mask & (hw_state ? 255 : 0)); return spio_badge_link_get_active(pin_mask); } #endif -- GitLab