Ejemplo n.º 1
0
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);
}