void pokerMode(){ while (1) { for (r = 0; r < ROWS; r++) { pullDownRows(r); read_cols(r); unselect_rows(); } for (r = 0; r < ROWS; r++) { for (c = 0; c < COLS; c++) { if (keystate[r][c] > 0x08) { if (keytype[r][c] == 0x01) { if (FN == 0x00) presskey(hexaKeys[r][c]); else if (FN == 0x01) presskey(hexaKeys2[r][c]); } else if (keytype[r][c] == 0x02) { pressModifierKeys(hexaKeys[r][c]); } else if (keytype[r][c] == 0x04 && FN == 0x00) { FN = 0x02; } } else { if (keytype[r][c] == 0x01) { if (FN == 0x00) releasekey(hexaKeys[r][c]); else if (FN == 0x01) releasekey(hexaKeys2[r][c]); } else if (keytype[r][c] == 0x02) { releaseModifierKeys(hexaKeys[r][c]); } else if (keytype[r][c] == 0x04 && FN == 0x01) { FN = 0x04; } } } } if(FN==0x02){FN=0x01;releaseAll();} else if(FN==0x04){FN=0x00;releaseAll();} usb_keyboard_send(); /////////////////////////////////// } }
void usb_keyboard_class::release(uint16_t n) { uint8_t key, mod, msb; msb = n >> 8; if (msb >= 0xC2 && msb <= 0xDF) { n = (n & 0x3F) | ((uint16_t)(msb & 0x1F) << 6); } else if (msb == 0x80) { releasekey(0, n); return; } else if (msb == 0x40) { releasekey(n, 0); return; } KEYCODE_TYPE keycode = unicode_to_keycode(n); if (!keycode) return; mod = keycode_to_modifier(keycode); key = keycode_to_key(keycode); releasekey(key, mod); }
void usb_keyboard_class::press(uint16_t n) { uint8_t key, mod, msb, modrestore=0; msb = n >> 8; if (msb >= 0xC2 && msb <= 0xDF) { n = (n & 0x3F) | ((uint16_t)(msb & 0x1F) << 6); } else if (msb == 0x80) { presskey(0, n); return; } else if (msb == 0x40) { presskey(n, 0); return; } KEYCODE_TYPE keycode = unicode_to_keycode(n); if (!keycode) return; #ifdef DEADKEYS_MASK KEYCODE_TYPE deadkeycode = deadkey_to_keycode(keycode); if (deadkeycode) { modrestore = keyboard_report_data[0]; if (modrestore) { keyboard_report_data[0] = 0; send_now(); } // TODO: test if operating systems recognize // deadkey sequences when other keys are held mod = keycode_to_modifier(deadkeycode); key = keycode_to_key(deadkeycode); presskey(key, mod); releasekey(key, mod); } #endif mod = keycode_to_modifier(keycode); key = keycode_to_key(keycode); presskey(key, mod | modrestore); }