예제 #1
0
	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;
	}
예제 #2
0
	const char *getKeyName(int scan_code) {
		const char **KeyNames = getKeyNames();
		if (scan_code < 0 || scan_code >= KEY_COUNT) return NULL;
		return KeyNames[scan_code];
	}
예제 #3
0
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;
}