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; } }
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;