int getKeyByName(const char *name) { const char **KeyNames = getKeyNames(); for (int i=0; i<KEY_COUNT; i++) { Str key_name = KeyNames[i]; if (key_name == name) { return i; } } return -1; }
const char *getKeyName(int scan_code) { const char **KeyNames = getKeyNames(); if (scan_code < 0 || scan_code >= KEY_COUNT) return NULL; return KeyNames[scan_code]; }
bool KeypadChannel::getAndDispatchKey(unsigned long ulNow, AnalogNavigationKeypad *p, uint8_t uKeyOtherChannel) { // get out if we are bouncing! if(ulNow < m_ulBounceSubsided) return false; bool bRes = false; uint8_t vk = getKey(); if(vk == m_bOldKey) { if(vk == VK_NONE) { if(!p->isUserLongInactive(ulNow)) return false; bRes = p->onUserInActivity(ulNow); p->onUserActivity(ulNow); return bRes; } // fire auto repeat logic here if((m_ulToFireAutoRepeat == 0) || (ulNow < m_ulToFireAutoRepeat)) { ; } else { m_ulToFireAutoRepeat = ulNow + s_iAutoRepeatDelay; //DEBUG_PRINT("onKeyAutoRepeat vk="); DEBUG_PRINT(getKeyName(vk)); DEBUG_PRINTLN(""); bRes = p->onKeyAutoRepeat(vk|uKeyOtherChannel); } // fire long key logic here if((m_ulToFireLongKey == 0) || (ulNow < m_ulToFireLongKey)) return bRes; m_ulToFireLongKey = 0; DEBUG_PRINT("onLongKeyDown vk="); DEBUG_PRINT(getKeyNames(vk)); DEBUG_PRINTLN(""); return p->onLongKeyDown(vk|uKeyOtherChannel) || bRes; } // vk != m_cOldKey if(m_ulBounceSubsided == 0) { m_ulBounceSubsided = ulNow + s_iDebounceDelay; return false; } if(m_bOldKey == VK_NONE) { m_ulToFireLongKey = ulNow + s_iLongKeyDelay; m_ulToFireAutoRepeat = ulNow + s_iAutoRepeatDelay; m_ulBounceSubsided = 0; DEBUG_PRINT("onKeyDown vk="); DEBUG_PRINT(getKeyNames(vk)); DEBUG_PRINT(" m_bOldKey="); DEBUG_PRINT(getKeyNames(m_bOldKey)); DEBUG_PRINTLN(""); bRes = p->onKeyDown(vk|uKeyOtherChannel); p->onUserActivity(ulNow); } else if(vk != VK_NONE) { // ignore transients! return false; } else { m_ulToFireAutoRepeat = m_ulToFireLongKey = m_ulBounceSubsided = 0; DEBUG_PRINT("onKeyUp vk="); DEBUG_PRINT(getKeyNames(vk)); DEBUG_PRINT(" m_bOldKey="); DEBUG_PRINT(getKeyNames(m_bOldKey)); DEBUG_PRINTLN(""); bRes = p->onKeyUp(m_bOldKey|uKeyOtherChannel); p->onUserActivity(ulNow); } m_bOldKey = vk; return bRes; }