void ui_process(uint16_t framenumber) { bool b_btn_state; static bool btn0_last_state = false; static bool btn1_last_state = false; static bool btn2_last_state = false; static bool btnq_last_state = false; static uint8_t cpt_sof = 0; if ((framenumber % 1000) == 0) { LED_On(LED1_GPIO); } if ((framenumber % 1000) == 500) { LED_Off(LED1_GPIO); } // Scan process running each 40ms cpt_sof++; if (40 > cpt_sof) return; cpt_sof = 0; // Scan buttons on switch 0, 1 and 2 b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_0)) ? true : false; if (b_btn_state != btn0_last_state) { ui_hid_report[0]=b_btn_state; udi_hid_generic_send_report_in(ui_hid_report); btn0_last_state = b_btn_state; } b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_1)) ? true : false; if (b_btn_state != btn1_last_state) { ui_hid_report[0]=b_btn_state; udi_hid_generic_send_report_in(ui_hid_report); btn1_last_state = b_btn_state; } b_btn_state = (gpio_pin_is_low(GPIO_PUSH_BUTTON_2)) ? true : false; if (b_btn_state != btn2_last_state) { ui_hid_report[0]=b_btn_state; udi_hid_generic_send_report_in(ui_hid_report); btn2_last_state = b_btn_state; } // Scan QTouch button b_btn_state = (!check_touch_key_pressed()) ? true : false; if (b_btn_state != btnq_last_state) { ui_hid_report[0]=b_btn_state; udi_hid_generic_send_report_in(ui_hid_report); btnq_last_state = b_btn_state; } }
/** * \brief Check the status of the keyboard * * \param keybuffer a keyboard_event struct to store keyboard status */ void keyboard_get_key_state(struct keyboard_event *keybuffer) { // Variable to hold the key mask static uint8_t key_state; char key; if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_0)) && !(key_state & KEYBOARD_ENTER_MASK)) { // Key pressed key_state |= KEYBOARD_ENTER_MASK; keybuffer->keycode = KEYBOARD_ENTER; keybuffer->type = KEYBOARD_PRESS; } else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_0)) && (key_state & KEYBOARD_ENTER_MASK)) { // Key released key_state &= ~KEYBOARD_ENTER_MASK; keybuffer->keycode = KEYBOARD_ENTER; keybuffer->type = KEYBOARD_RELEASE; } else if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_1)) && !(key_state & KEYBOARD_UP_MASK)) { // Key pressed key_state |= KEYBOARD_UP_MASK; keybuffer->keycode = KEYBOARD_UP; keybuffer->type = KEYBOARD_PRESS; } else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_1)) && (key_state & KEYBOARD_UP_MASK)) { // Key released key_state &= ~KEYBOARD_UP_MASK; keybuffer->keycode = KEYBOARD_UP; keybuffer->type = KEYBOARD_RELEASE; } else if ((gpio_pin_is_low(GPIO_PUSH_BUTTON_2)) && !(key_state & KEYBOARD_DOWN_MASK)) { // Key pressed key_state |= KEYBOARD_DOWN_MASK; keybuffer->keycode = KEYBOARD_DOWN; keybuffer->type = KEYBOARD_PRESS; } else if ((gpio_pin_is_high(GPIO_PUSH_BUTTON_2)) && (key_state & KEYBOARD_DOWN_MASK)) { // Key released key_state &= ~KEYBOARD_DOWN_MASK; keybuffer->keycode = KEYBOARD_DOWN; keybuffer->type = KEYBOARD_RELEASE; // touch key } else if ((check_touch_key_pressed()) && !(key_state & KEYBOARD_BACK_MASK)) { // Touch key pressed key_state |= KEYBOARD_BACK_MASK; keybuffer->keycode = KEYBOARD_BACK; keybuffer->type = KEYBOARD_PRESS; } else if ((!check_touch_key_pressed()) && (key_state & KEYBOARD_BACK_MASK)) { // Touch key released key_state &= ~KEYBOARD_BACK_MASK; keybuffer->keycode = KEYBOARD_BACK; keybuffer->type = KEYBOARD_RELEASE; } else if ((key = cdc_getkey()) != KEYBOARD_NO_KEY) { keybuffer->keycode = key; keybuffer->type = KEYBOARD_RELEASE; } else { keybuffer->keycode = KEYBOARD_NO_KEY; keybuffer->type = KEYBOARD_NO_EVENT; } }