#include "DigiKeyboard.h" #ifndef DIGIKEYBOARDDE_H #define DIGIKEYBOARDDE_H #define DE_MOD_CONTROL_LEFT (1<<8) #define DE_MOD_SHIFT_LEFT (1<<9) #define DE_MOD_ALT_LEFT (1<<10) #define DE_MOD_GUI_LEFT (1<<11) #define DE_MOD_CONTROL_RIGHT (1<<12) #define DE_MOD_SHIFT_RIGHT (1<<13) #define DE_MOD_ALT_RIGHT (1<<14) #define DE_MOD_GUI_RIGHT (1<<15) const uint16_t _ascii_de_map[128] PROGMEM = { 0x00, // NUL 0x00, // SOH 0x00, // STX 0x00, // ETX 0x00, // EOT 0x00, // ENQ 0x00, // ACK 0x00, // BEL 0x2a, // BS Backspace 0x2b, // TAB Tab 0x28, // LF Enter 0x00, // VT 0x00, // FF 0x00, // CR 0x00, // SO 0x00, // SI 0x00, // DEL 0x00, // DC1 0x00, // DC2 0x00, // DC3 0x00, // DC4 0x00, // NAK 0x00, // SYN 0x00, // ETB 0x00, // CAN 0x00, // EM 0x00, // SUB 0x00, // ESC 0x00, // FS 0x00, // GS 0x00, // RS 0x00, // US 0x2c, // ' ' 0x1e|DE_MOD_SHIFT_LEFT, // ! 0x1F|DE_MOD_SHIFT_LEFT, // " 0x38, // # 0x21|DE_MOD_SHIFT_LEFT, // $ 0x22|DE_MOD_SHIFT_LEFT, // % 0x23|DE_MOD_SHIFT_LEFT, // & 0x32|DE_MOD_SHIFT_LEFT, // ' 0x25|DE_MOD_SHIFT_LEFT, // ( 0x26|DE_MOD_SHIFT_LEFT, // ) 0x30|DE_MOD_SHIFT_LEFT, // * 0x30, // + 0x36, // , 0x38, // - 0x37, // . 0x24|DE_MOD_SHIFT_LEFT, // / 0x27, // 0 0x1e, // 1 0x1f, // 2 0x20, // 3 0x21, // 4 0x22, // 5 0x23, // 6 0x24, // 7 0x25, // 8 0x26, // 9 0x37|DE_MOD_SHIFT_LEFT, // : 0x36|DE_MOD_SHIFT_LEFT, // ; 0x64, // < 0x27|DE_MOD_SHIFT_LEFT, // = 0x64|DE_MOD_SHIFT_LEFT, // > 0x2D|DE_MOD_SHIFT_LEFT, // ? 0x14|DE_MOD_ALT_RIGHT, // @ 0x40 0x14 0x04|DE_MOD_SHIFT_LEFT, // A 0x05|DE_MOD_SHIFT_LEFT, // B 0x06|DE_MOD_SHIFT_LEFT, // C 0x07|DE_MOD_SHIFT_LEFT, // D 0x08|DE_MOD_SHIFT_LEFT, // E 0x09|DE_MOD_SHIFT_LEFT, // F 0x0a|DE_MOD_SHIFT_LEFT, // G 0x0b|DE_MOD_SHIFT_LEFT, // H 0x0c|DE_MOD_SHIFT_LEFT, // I 0x0d|DE_MOD_SHIFT_LEFT, // J 0x0e|DE_MOD_SHIFT_LEFT, // K 0x0f|DE_MOD_SHIFT_LEFT, // L 0x10|DE_MOD_SHIFT_LEFT, // M 0x11|DE_MOD_SHIFT_LEFT, // N 0x12|DE_MOD_SHIFT_LEFT, // O 0x13|DE_MOD_SHIFT_LEFT, // P 0x14|DE_MOD_SHIFT_LEFT, // Q 0x15|DE_MOD_SHIFT_LEFT, // R 0x16|DE_MOD_SHIFT_LEFT, // S 0x17|DE_MOD_SHIFT_LEFT, // T 0x18|DE_MOD_SHIFT_LEFT, // U 0x19|DE_MOD_SHIFT_LEFT, // V 0x1a|DE_MOD_SHIFT_LEFT, // W 0x1b|DE_MOD_SHIFT_LEFT, // X 0x1d|DE_MOD_SHIFT_LEFT, // Y 0x1c|DE_MOD_SHIFT_LEFT, // Z 0x25|DE_MOD_ALT_RIGHT, // [ 0x2d|DE_MOD_ALT_RIGHT, // bslash 0x26|DE_MOD_ALT_RIGHT, // ] 0x35, // ^ 0x38|DE_MOD_SHIFT_LEFT, // _ 0x2E|DE_MOD_SHIFT_LEFT, // ` 0x04, // a 0x05, // b 0x06, // c 0x07, // d 0x08, // e 0x09, // f 0x0a, // g 0x0b, // h 0x0c, // i 0x0d, // j 0x0e, // k 0x0f, // l 0x10, // m 0x11, // n 0x12, // o 0x13, // p 0x14, // q 0x15, // r 0x16, // s 0x17, // t 0x18, // u 0x19, // v 0x1a, // w 0x1b, // x 0x1d, // y 0x1c, // z 0x24|DE_MOD_ALT_RIGHT, // { 0x64|DE_MOD_ALT_RIGHT, // | 0x27|DE_MOD_ALT_RIGHT, // } 0x30|DE_MOD_ALT_RIGHT, // ~ 0 // DEL }; class DigiKeyboardDeviceDe : public DigiKeyboardDevice{ public: size_t write(uint8_t chr) { unsigned int temp = pgm_read_word_near(_ascii_de_map + chr); unsigned char low = temp & 0xFF; unsigned char high = (temp >> 8) & 0xFF; sendKeyStroke(low,high); return 1; } void sendKeyReport(uchar *array,const unsigned int size){ while (!usbInterruptIsReady()) { // Note: We wait until we can send keyPress // so we know the previous keyPress was // sent. usbPoll(); _delay_ms(5); } usbSetInterrupt(array, size); } }; DigiKeyboardDeviceDe DigiKeyboardDe = DigiKeyboardDeviceDe(); #endif //DIGIKEYBOARDDE_H