Changeset 8c41328 in avrstuff for aktousb/code/main.c
- Timestamp:
- Sep 9, 2010, 7:14:21 PM (14 years ago)
- Branches:
- main
- Children:
- d3f2c17
- Parents:
- aeff83b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
aktousb/code/main.c
raeff83b r8c41328 6 6 7 7 #include <string.h> 8 #include <stdbool.h> 8 9 9 10 #include "amiga_keyboard/amiga_keyboard.h" … … 11 12 #include "keycodes.h" 12 13 14 #define LEDSWAP PORTD ^= (1<<PD6) 15 #define LEDON PORTD |= 1<<PD6 16 #define LEDOFF PORTD &= ~(1<<PD6) 17 13 18 static uint8_t pressingCaps = 0; 14 19 15 20 const uint8_t PROGMEM keymatrix[0x70] = { 16 // 0 1 2 3 4 5 6 7 8 9 A B C D E F17 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, //018 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, //119 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, //220 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, //321 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 22 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 23 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 24 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 25 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 26 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, //523 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, //627 KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_KPLParen, KEY_KPRParen, KEY_KPslash, KEY_KPasterisk,KEY_KPplus, KEY_Help, //5 28 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 24 29 }; 25 30 … … 86 91 87 92 93 /* 88 94 void usbSendReport(uint8_t mode, uint8_t key) { 89 95 // buffer for HID reports. we use a private one, so nobody gets disturbed … … 94 100 usbSetInterrupt(repBuffer, sizeof(repBuffer)); // send 95 101 } 96 102 */ 97 103 98 104 int main() { … … 102 108 103 109 wdt_enable(WDTO_2S); 104 // configure timer 0 for a rate of 1 2M/(1024 * 256) = 45.78Hz (~22ms)105 TCCR0 = 5; // timer 0 prescaler: 1024110 // configure timer 0 for a rate of 16M/(256 * 256) = ~244Hz 111 TCCR0 = 4; // timer 0 prescaler: 256 106 112 107 113 //debug LED - output … … 116 122 ak_init_keyboard(); 117 123 sei(); 124 bool doReport = false; 125 bool doRelease = false; 118 126 119 127 while(1) { … … 126 134 key_code = ak_read_scancode(); 127 135 // if an update is needed, send the report 128 if ((key_code & 1) == 0) 136 if ((key_code & 1) == 0) { 129 137 fillReportBuffer(key_code>>1); 130 else 138 LEDON; 139 doReport = true; 140 } else { 131 141 emptyReportBuffer(key_code>>1); 132 if (usbInterruptIsReady()) 133 usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); 142 doRelease = true; 143 } 144 } 145 146 if (doReport && usbInterruptIsReady()) { 147 usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); 148 LEDOFF; 149 doReport = false; 134 150 } 135 151 … … 138 154 if (TIFR & (1 << TOV0)) { 139 155 TIFR = (1 << TOV0); // reset flag 140 141 // PORTD ^= (1<<PD6); // blink del : we are alive !142 if (pressingCaps)143 PORTD |= 1<<PD6;144 else145 PORTD &= ~(1<<PD6);146 156 147 157 if (pressingCaps) { … … 162 172 } 163 173 164 if (idleRate != 0) { // do we need periodic reports? 165 if(idleCounter > 4){ // yes, but not yet 166 idleCounter -= 5; // 22ms in units of 4ms 167 } else { // yes, it is time now 168 idleCounter = idleRate; 169 if (pressingCaps) { 170 emptyReportBuffer(0x62); 171 pressingCaps = 0; 172 } 173 if (usbInterruptIsReady()) 174 usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); 174 ++idleCounter; 175 if(idleCounter > 4){ // yes, but not yet 176 idleCounter -= 5; // 22ms in units of 4ms 177 } else { // yes, it is time now 178 idleCounter = idleRate; 179 /* 180 if (pressingCaps) { 181 emptyReportBuffer(0x62); 182 pressingCaps = 0; 183 } 184 */ 185 if (doRelease && usbInterruptIsReady()) { 186 usbSetInterrupt(reportBuffer, sizeof(reportBuffer)); 187 doRelease = false; 175 188 } 176 189 } 177 178 190 } 179 191 }
Note:
See TracChangeset
for help on using the changeset viewer.