Exemplo n.º 1
0
static void putChangedKey(uint8_t xKeyidx, bool xIsDown, uint8_t xCol, uint8_t xRow){

    applyKeyDownForFullLED(xKeyidx, xCol, xRow, xIsDown);

    // 빈 키코드는 LED 반응 이외의 기능 없음;
    if(xKeyidx == KEY_NONE ) return;

    // fn 키가 눌렸을 경우 해당 위치의 키는 무시한다.
    uint8_t gLayer, gKeyIndex, gFnIndex;
    if(getBeyondFN()) {
        gLayer = getBeyondFN();
    }else{
        gLayer = LAYER_NORMAL;
    }

    if(isFnPosition(xCol, xRow))
    {
        // 현재 레이어에서 눌린 FN키가 듀얼 액션 키이면, 변경된 레이어의 키를 듀얼 액션 키로 강제 치환시켜서 진행
        gKeyIndex = getCurrentKeyindex(gLayer, xRow, xCol);

        // fn key는 하나만 눌릴 수 있도록 처리;
        if(xIsDown)
        {
            // dual action key라면 FN을 추출;
            gFnIndex = getDualActionDownKeyIndexWhenIsCompounded(gKeyIndex, true);
//            DBG1(0x32, (uchar *)&gFnIndex, 1);
            setFnPressed(gFnIndex);
        }
        else
        {
            setFnPressed(KEY_NONE);
            clearFnPosition();
        }

        IF_IS_DUAL_ACTION_KEY(gKeyIndex)
        {
            xKeyidx = gKeyIndex;
        }
        else
        {
            return;
        }
    }
Exemplo n.º 2
0
static void putChangedKey(uint8_t xKeyidx, bool xIsDown, uint8_t xCol, uint8_t xRow){

    applyKeyDownForFullLED(xKeyidx, xCol, xRow, xIsDown);

    // 빈 키코드는 LED 반응 이외의 기능 없음;
    if(xKeyidx == KEY_NONE ) return;

    // fn 키가 눌렸을 경우 해당 위치의 키는 무시한다.
    uint8_t gLayer, gKeyIndex, gFnIndex;

    gLayer = getCurrentFnLayer();
    DBG1(0xC2, (uchar *)&gLayer, 1);

    if(isFnPosition(xCol, xRow) /* -> */ && (xIsDown || (!xIsDown && isFnPressed())) /* <- */)
        // 키 입력 동안 레이어 토글이 변경될 경우 FN 키와 같은 위치의 키들은 up 신호가 무시 되어 계속 눌려진 상태가 된다. 이를 패치.
        // 이 경우 fnPressed가 false 상태로 진행되므로 이를 확인
    {
        // 현재 레이어에서 눌린 FN키가 듀얼 액션 키이면, 변경된 레이어의 키를 듀얼 액션 키로 강제 치환시켜서 진행
        gKeyIndex = getCurrentKeyindex(gLayer, xRow, xCol);

        // fn key는 하나만 눌릴 수 있도록 처리;
        if(xIsDown)
        {
            // dual action key라면 FN을 추출;
            gFnIndex = getDualActionDownKeyIndexWhenIsCompounded(gKeyIndex, true);
//            DBG1(0x32, (uchar *)&gFnIndex, 1);
            setFnPressed(gFnIndex);
        }
        else
        {
            setFnPressed(KEY_NONE);
            clearFnPosition();
        }

        IF_IS_DUAL_ACTION_KEY(gKeyIndex)
        {
            xKeyidx = gKeyIndex;
        }
        else
        {
            return;