From 37435f61cff74c8a5c1126ebc6cca7eb8a253cb3 Mon Sep 17 00:00:00 2001 From: Robert Grasboeck Date: Sun, 18 Mar 2018 21:49:25 +0100 Subject: [PATCH] added led feedback for long press joystick switch --- src/led.c | 38 +++++++++++++++++++++++++++++++------- src/led.h | 9 +++++++-- src/nunchuk64.c | 2 ++ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/led.c b/src/led.c index 07b48fe..d5b3331 100644 --- a/src/led.c +++ b/src/led.c @@ -21,6 +21,8 @@ /// @brief led //============================================================================= #include +#include +#include #include "ioconfig.h" @@ -32,12 +34,12 @@ const uint8_t FLASH_DATA[NUMBER_LED_STATES][7] PROGMEM = { {0, 0, 0, 0, 0, 0, 0}, ///< ON {2, 12, 0, 0, 0, 0, 0}, ///< F1 {2, 4, 2, 12, 0, 0, 0} ///< F2 -//{2, 4, 2, 4, 2, 12, 0} }; static LED_State led_state = LED_OFF; static uint8_t led_flash_index = 0; static uint8_t led_flash_timer = 0; +static uint8_t led_lock = 0; static void led_set(uint8_t on) { if (on) { @@ -69,10 +71,6 @@ void led_switch(LED_State state) { led_set(1); break; -// case LED_BLINK3: -// led_set(1); -// break; - case NUMBER_LED_STATES: break; } @@ -85,6 +83,7 @@ void led_setnextstate(void) { LED_State s = led_get_state(); s ++; + if (s == NUMBER_LED_STATES) s = LED_OFF; @@ -95,10 +94,35 @@ LED_State led_get_state(void) { return (led_state); } +void led_quick_blink(uint8_t number) { + led_lock = 1; + + led_set(0); + _delay_ms(200); + wdt_reset(); + + for (uint8_t i = 0; i < number; i++) { + led_set(1); + _delay_ms(50); + + wdt_reset(); + + led_set(0); + _delay_ms(50); + } + + _delay_ms(400); + wdt_reset(); + + led_lock = 0; + + led_switch(led_state); +} + void led_poll(void) { // if ON or OFF do nothing - if (led_state == LED_OFF || led_state == LED_ON) + if (led_state == LED_OFF || led_state == LED_ON || led_lock) return; // set timer @@ -112,7 +136,7 @@ void led_poll(void) { led_set(1); } - // count down timer + // count down timer } else { led_flash_timer --; diff --git a/src/led.h b/src/led.h index c25c328..0e3b064 100644 --- a/src/led.h +++ b/src/led.h @@ -28,8 +28,8 @@ typedef enum { LED_OFF, ///< LED is OFF LED_ON, ///< LED is ON - LED_BLINK1, ///< LED blinks once - LED_BLINK2, ///< LED blinks twice + LED_BLINK1, ///< LED flashes once + LED_BLINK2, ///< LED flashes twice // LED_BLINK3, ///< LED blinks tree times NUMBER_LED_STATES @@ -60,6 +60,11 @@ extern void led_setnextstate(void); */ extern LED_State led_get_state(void); +/** +* @brief quick flash +*/ +extern void led_quick_blink(uint8_t number); + /** * @brief poll led routines (for flashing) * @note This function is called by timer interrupt routine diff --git a/src/nunchuk64.c b/src/nunchuk64.c index 9e595be..3327039 100644 --- a/src/nunchuk64.c +++ b/src/nunchuk64.c @@ -157,6 +157,8 @@ int main(void) { switched_ports = (switched_ports == FALSE) ? TRUE : FALSE; handle_paddle_enabled(switched_ports); // handle paddle disabled + + led_quick_blink(switched_ports ? 2 : 1); } // ===================================