Changeset 659bbff in avrstuff for aktoserial/code/main.c
- Timestamp:
- Jul 31, 2010, 6:22:24 PM (14 years ago)
- Branches:
- main
- Children:
- d056b2b
- Parents:
- d851b8b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
aktoserial/code/main.c
rd851b8b r659bbff 11 11 #include "keycodes.h" 12 12 13 const uint8_t PROGMEM keymatrix[128] = { 14 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 15 KEY_grave, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_minus, KEY_equals, KEY_backslash, KEY_Reserved, KEY_KP0, //0 16 KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_rbracket, KEY_lbracket, KEY_Reserved, KEY_KP1, KEY_KP2, KEY_KP3, //1 17 KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_semicolon, KEY_apostroph,KEY_hash, KEY_Reserved, KEY_KP4, KEY_KP5, KEY_KP6, //2 18 KEY_Euro, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_comma, KEY_dot, KEY_slash, KEY_Reserved, KEY_KPcomma, KEY_KP7, KEY_KP8, KEY_KP9, //3 19 KEY_Spacebar,KEY_DeleteForward,KEY_Tab, KEY_KPenter, KEY_Return,KEY_ESCAPE,KEY_DELETE, KEY_Reserved,KEY_Reserved,KEY_Reserved, KEY_KPminus, KEY_Reserved, KEY_UpArrow, KEY_DownArrow, KEY_RightArrow,KEY_LeftArrow,//4 20 KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_KPRParen, KEY_KPLParen, KEY_KPslash, KEY_KPasterisk,KEY_KPplus, KEY_Help, //5 21 KEY_Reserved,KEY_Reserved, KEY_capslock,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved, KEY_Reserved, KEY_Reserved, //6 22 KEY_Reserved,KEY_Reserved, KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved, KEY_Reserved, KEY_Reserved, //7 13 static uint8_t pressingCaps = 0; 14 15 const uint8_t PROGMEM keymatrix[0x70] = { 16 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 17 KEY_grave, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_minus, KEY_equals, KEY_F11, KEY_Reserved, KEY_KP0, //0 18 KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_lbracket, KEY_rbracket, KEY_Reserved, KEY_KP1, KEY_KP2, KEY_KP3, //1 19 KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_semicolon, KEY_apostroph,KEY_hash, KEY_Reserved, KEY_KP4, KEY_KP5, KEY_KP6, //2 20 KEY_Euro, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_comma, KEY_dot, KEY_slash, KEY_Reserved, KEY_KPcomma, KEY_KP7, KEY_KP8, KEY_KP9, //3 21 KEY_Spacebar,KEY_DELETE, KEY_Tab, KEY_KPenter, KEY_Return,KEY_ESCAPE,KEY_DeleteForward,KEY_Reserved,KEY_Reserved,KEY_Reserved, KEY_KPminus, KEY_Reserved, KEY_UpArrow, KEY_DownArrow, KEY_RightArrow,KEY_LeftArrow,//4 22 KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_Home, KEY_End, KEY_KPslash, KEY_KPasterisk,KEY_KPplus, KEY_F12, //5 23 KEY_Reserved,KEY_Reserved,KEY_capslock,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved,KEY_Reserved, KEY_Reserved, KEY_Reserved, //6 23 24 }; 24 25 … … 30 31 const uint8_t PROGMEM modmatrix[8] = { // contains positions of modifiers in the matrix 31 32 // 0 1 2 3 4 5 6 7 32 MOD_SHIFT_LEFT,MOD_SHIFT_RIGHT,MOD_NONE,MOD_CONTROL_LEFT,MOD_ALT_LEFT,MOD_ NONE, MOD_GUI_LEFT, MOD_GUI_RIGHT,33 MOD_SHIFT_LEFT,MOD_SHIFT_RIGHT,MOD_NONE,MOD_CONTROL_LEFT,MOD_ALT_LEFT,MOD_ALT_RIGHT, MOD_GUI_LEFT, MOD_GUI_RIGHT, 33 34 }; 34 35 35 36 static uint8_t idleRate; 37 static uint8_t reportIndex = 2; 36 38 static uint8_t reportBuffer[8]; 37 39 38 40 void fillReportBuffer(uint8_t key_code) { 39 41 uint8_t key, modifier; 40 uint8_t reportIndex = 2; // reportBuffer[0] contains modifiers 41 memset(reportBuffer, 0, sizeof(reportBuffer)); // clear report buffer 42 key = pgm_read_byte(&keymatrix[key_code]); 43 if (key_code >= 0x60 && key_code < 0x68) 44 modifier = pgm_read_byte(&modmatrix[key_code - 0x60]); 45 else 46 modifier = MOD_NONE; 47 if (key != KEY_Reserved && reportIndex < 8) { 48 reportBuffer[reportIndex] = key; // set next available entry 49 reportIndex++; 50 if (key == KEY_capslock) 51 pressingCaps = 1; 52 } 53 reportBuffer[0] |= modifier; 54 } 55 56 57 void emptyReportBuffer(uint8_t key_code) { 58 59 uint8_t key, modifier; 60 uint8_t i; 42 61 key = pgm_read_byte(&keymatrix[key_code]); 43 62 if (key_code >= 0x60 && key_code < 0x68) … … 46 65 modifier = MOD_NONE; 47 66 if (key != KEY_Reserved) { 48 reportBuffer[reportIndex] = key; // set next available entry 49 reportIndex++; 67 for (i = 2; i < reportIndex; i++) { 68 if (reportBuffer[i] == key) { 69 for (; i < 7; i++) 70 reportBuffer[i] = reportBuffer[i+1]; 71 reportBuffer[7] = 0; 72 reportIndex--; 73 } 74 } 50 75 } 51 reportBuffer[0] |=modifier;76 reportBuffer[0] &= ~modifier; 52 77 } 53 78 … … 72 97 73 98 //debug LED - output 74 DDRD |= (1<<PD6); 99 DDRC |= (1<<PC5); 100 DDRC |= (1<<PC4); 75 101 76 102 // Keyboard 77 uint8_t key_code = 0; 103 uint8_t key_code = 255; 104 memset(reportBuffer, 0, sizeof(reportBuffer)); // clear report buffer 78 105 79 106 // USB … … 90 117 if (char_waiting) { 91 118 key_code = ak_read_scancode(); 119 PORTC ^= (1<<PC4); 120 PORTC ^= (1<<PC5); 121 // if an update is needed, send the report 122 if ((key_code & 1) == 0) 123 fillReportBuffer(key_code>>1); 124 else 125 emptyReportBuffer(key_code>>1); 126 if (usbInterruptIsReady()) 127 usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); 92 128 } 93 129 … … 99 135 idleCounter -= 5; // 22ms in units of 4ms 100 136 } else { // yes, it is time now 101 updateNeeded = 1;102 137 idleCounter = idleRate; 138 if (pressingCaps) { 139 emptyReportBuffer(0x62); 140 pressingCaps = 0; 141 } 142 if (usbInterruptIsReady()) 143 usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); 103 144 } 104 145 } 105 146 106 }107 // if an update is needed, send the report108 if (updateNeeded && usbInterruptIsReady()) {109 updateNeeded = 0;110 //fillReportBuffer(key_code);111 fillReportBuffer(KEY_Y);112 usbSetInterrupt(reportBuffer, sizeof(reportBuffer));113 PORTD ^= (1<<PD6);114 147 } 115 148 }
Note:
See TracChangeset
for help on using the changeset viewer.