/** * Monitor keyboard buttons & Update key status in HID driver */ static void HIDDKeyboardProcessKeys(void) { uint32_t i; uint8_t pressedKeys[NUM_KEYS]; uint8_t pressedKeysSize = 0; uint8_t releasedKeys[NUM_KEYS]; uint8_t releasedKeysSize = 0; /* Monitor buttons */ for (i=0; i < PIO_LISTSIZE(pinsPushButtons); i++) { /* Check if button state has changed */ uint8_t isButtonPressed = PIO_Get(&(pinsPushButtons[i])); if (isButtonPressed != keyStatus[i]) { /* Update button state */ if (!isButtonPressed) { /* Key has been pressed */ TRACE_INFO("-I- Key %u has been pressed\n\r", (unsigned int)i); keyStatus[i] = 0; pressedKeys[pressedKeysSize] = keyCodes[i]; pressedKeysSize++; HIDDKeyboard_RemoteWakeUp(); } else { /* Key has been released */ TRACE_INFO("-I- Key %u has been released\n\r", (unsigned int)i); keyStatus[i] = 1; releasedKeys[releasedKeysSize] = keyCodes[i]; releasedKeysSize++; } } } /* Update key status in the HID driver if necessary */ if ((pressedKeysSize != 0) || (releasedKeysSize != 0)) { uint8_t status; do { status = HIDDKeyboard_ChangeKeys(pressedKeys, pressedKeysSize, releasedKeys, releasedKeysSize); } while (status != USBD_STATUS_SUCCESS); } }
/** * Monitor keyboard buttons & Update key status in HID driver */ static void HIDDKeyboardProcessKeys(void) { uint32_t i; uint8_t pressedKeys[NUM_KEYS]; uint8_t pressedKeysSize = 0; uint8_t releasedKeys[NUM_KEYS]; uint8_t releasedKeysSize = 0; /* Monitor buttons */ #ifdef NO_PUSHBUTTON if (DBG_IsRxReady()) { uint8_t key = DBG_GetChar(); switch (key) { case '1': case '2': i = key - '1'; if (keyStatus[i]) { /* Key press simulation */ TRACE_INFO("Key %u pressed\n\r", (unsigned int)i); keyStatus[i] = 0; pressedKeys[pressedKeysSize] = keyCodes[i]; pressedKeysSize ++; HIDDKeyboard_RemoteWakeUp(); } else { /* Key release simulation */ TRACE_INFO("Key %u released\n\r", (unsigned int)i); keyStatus[i] = 1; releasedKeys[releasedKeysSize] = keyCodes[i]; releasedKeysSize++; } break; default: DBG_PutChar(key); } } #else for (i = 0; i < PIO_LISTSIZE(pinsPushButtons); i++) { /* Check if button state has changed */ uint8_t isButtonPressed = PIO_Get(&(pinsPushButtons[i])); if (isButtonPressed != keyStatus[i]) { /* Update button state */ if (!isButtonPressed) { /* Key has been pressed */ TRACE_INFO("Key %u has been pressed\n\r", i); keyStatus[i] = 0; pressedKeys[pressedKeysSize] = keyCodes[i]; pressedKeysSize++; HIDDKeyboard_RemoteWakeUp(); } else { /* Key has been released */ TRACE_INFO("Key %u has been released\n\r", i); keyStatus[i] = 1; releasedKeys[releasedKeysSize] = keyCodes[i]; releasedKeysSize++; } } } #endif /* Update key status in the HID driver if necessary */ if ((pressedKeysSize != 0) || (releasedKeysSize != 0)) { uint8_t status; do { status = HIDDKeyboard_ChangeKeys(pressedKeys, pressedKeysSize, releasedKeys, releasedKeysSize); } while (status != USBD_STATUS_SUCCESS); } }