Esempio n. 1
0
/**
 *  스캔 코드를 ASCII 코드로 변환
 */
BOOL kConvertScanCodeToASCIICode( BYTE bScanCode, BYTE* pbASCIICode, BOOL* pbFlags )
{
    BOOL bUseCombinedKey;

    // 이전에 Pause 키가 수신되었다면, Pause의 남은 스캔 코드를 무시
    if( gs_stKeyboardManager.iSkipCountForPause > 0 )
    {
        gs_stKeyboardManager.iSkipCountForPause--;
        return FALSE;
    }
    
    // Pause 키는 특별히 처리
    if( bScanCode == 0xE1 )
    {
        *pbASCIICode = KEY_PAUSE;
        *pbFlags = KEY_FLAGS_DOWN;
        gs_stKeyboardManager.iSkipCountForPause = KEY_SKIPCOUNTFORPAUSE;
        return TRUE;
    }
    // 확장 키 코드가 들어왔을 때, 실제 키 값은 다음에 들어오므로 플래그 설정만 하고 종료
    else if( bScanCode == 0xE0 )
    {
        gs_stKeyboardManager.bExtendedCodeIn = TRUE;
        return FALSE;
    }    
    
    // 조합된 키를 반환해야 하는가?
    bUseCombinedKey = kIsUseCombinedCode( bScanCode );

    // 키 값 설정
    if( bUseCombinedKey == TRUE )
    {
        *pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bCombinedCode;
    }
    else
    {
        *pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bNormalCode;
    }

    // 확장 키 유무 설정
    if( gs_stKeyboardManager.bExtendedCodeIn == TRUE )
    {
        *pbFlags = KEY_FLAGS_EXTENDEDKEY;
        gs_stKeyboardManager.bExtendedCodeIn = FALSE;
    }
    else
    {
        *pbFlags = 0;
    }
    
    // 눌러짐 또는 떨어짐 유무 설정
    if( ( bScanCode & 0x80 ) == 0 )
    {
        *pbFlags |= KEY_FLAGS_DOWN;
    }
 
    // 조합 키 눌림 또는 떨어짐 상태를 갱신
    UpdateCombinationKeyStatusAndLED( bScanCode );
    return TRUE;
}
Esempio n. 2
0
BOOL kConvertScanCodeToASCIICode( BYTE bScanCode, BYTE* pbASCIICode, BOOL* pbFlags )
{
	BOOL bUseCombinedKey;

	// 이전에 PAUSE키가 수신되었다면 PAUSE의 남은 스캔코드 무시
	if ( gs_stKeyboardManager.iSkipCountForPause > 0 )
	{
		gs_stKeyboardManager.iSkipCountForPause--;
		return FALSE;
	}

	// PAUSE키는 특별히 처리
	if (bScanCode == 0xE1)
	{
		*pbASCIICode = KEY_PAUSE;
		*pbFlags = KEY_FLAGS_DOWN;
		gs_stKeyboardManager.iSkipCountForPause = KEY_SKIPCOUNTFORPAUSE;
		return TRUE;
	}

	// 확장 키코드인경우 실제 키는 다음에 들어오므로 플래그 설정만 하고 종료
	if (bScanCode == 0xE0)
	{
		gs_stKeyboardManager.bExtendedCodeIn = TRUE;
		return TRUE;
	}

	// 앞서 어떤 키보드인경우 신호를 주는 루틴은 처리 완료, 앞으로는 키 반환 루틴
	bUseCombinedKey = kIsUseCombinedCode( bScanCode );

	// 조합키인경우
	if ( bUseCombinedKey == TRUE )
	{
		*pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bCombinedCode;
	}
	else
	{
		*pbASCIICode = gs_vstKeyMappingTable[ bScanCode & 0x7F ].bNormalCode;
	}

	// 확장 키 유무 설정
	if ( gs_stKeyboardManager.bExtendedCodeIn == TRUE )
	{
		*pbFlags = KEY_FLAGS_EXTENDEDKEY;
		gs_stKeyboardManager.bExtendedCodeIn = FALSE;
	}
	else
	{
		*pbFlags = 0;
	}

	if( (bScanCode & 0x80) == 0 )
	{
		*pbFlags |= KEY_FLAGS_DOWN;
	}
	UpdateCombinationKeyStatusAndLED( bScanCode );
	return TRUE;
}
Esempio n. 3
0
/// Translate ScFALSEan Code to ASCII.
bool kKeyboard::kConvertScanCodeToASCIICode(BYTE bScanCode, 
                                            char* pbASCIICode, 
                                            BYTE* pbFlags)
{
    bool bUseCombineKey;
    
    // If Pause is pused before, 
    // ignore rest Scan Code of Pause.
    if (iSkipCountForPause > 0)
    {
        iSkipCountForPause--;
        return false;
    }
    
    // Special handling for Pause.
    if (bScanCode == 0xE1)
    {
        *pbASCIICode = KEY_PAUSE;
        *pbFlags = KEY_FLAGS_DOWN;
        iSkipCountForPause = KEY_SKIPCOUNTFORPAUSE;
        return true;
    }
    // If exnteded key is entered, actual key value will be entered next.
    // So set flag and return
    else if (bScanCode == 0xE0)
    {
        bExtendedCodeIn = true;
        return false;
    }
    
    // Return a combination key?
    bUseCombineKey = kIsUseCombinedCode(bScanCode);
    
    // Set key value
    if (bUseCombineKey == true)
    {
        *pbASCIICode = stKeyMappingTable[bScanCode & 0x7F].bCombinedCode;
    }
    else
    {
        *pbASCIICode = stKeyMappingTable[bScanCode & 0x7F].bNormalCode;
    }
    
    // Set whether or not it is extended key
    if (bExtendedCodeIn == true)
    {
        *pbFlags = KEY_FLAGS_EXTENDEDKEY;
        bExtendedCodeIn = false;
    }
    else
    {
        *pbFlags = 0;
    }
    
    // Check push or release
    if ((bScanCode & 0x80) == 0)
    {
        *pbFlags |= KEY_FLAGS_DOWN;
    }
    
    // update push or release of a combination key
    kUpdateCombinationKeyStatusAndLED(bScanCode);
    
    return true;
}