Changeset 88a38a8 in avrstuff
- Timestamp:
- Feb 7, 2023, 11:43:54 PM (15 months ago)
- Branches:
- main
- Children:
- 53cf5f5
- Parents:
- 8d96947
- Location:
- kbd/pcw2hid/code
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
kbd/pcw2hid/code/Keyboard.c
r8d96947 r88a38a8 113 113 void EVENT_USB_Device_Connect(void) 114 114 { 115 LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);115 //LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); 116 116 } 117 117 … … 119 119 void EVENT_USB_Device_Disconnect(void) 120 120 { 121 LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);121 //LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); 122 122 } 123 123 … … 131 131 USB_Device_EnableSOFEvents(); 132 132 133 LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);133 //LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); 134 134 } 135 135 … … 143 143 void EVENT_USB_Device_StartOfFrame(void) 144 144 { 145 HID_Device_MillisecondElapsed(&Keyboard_HID_Interface);145 //HID_Device_MillisecondElapsed(&Keyboard_HID_Interface); 146 146 } 147 147 … … 164 164 USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; 165 165 166 uint8_t* matrix = scanall(); 167 166 extern uint8_t matrix[16]; 167 168 scanall(); 168 169 uint8_t UsedKeyCodes = 0; 169 170 … … 182 183 MAP(0, 5, HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW); 183 184 MAP(0, 4, HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP); 184 MAP(0, 3, HID_KEYBOARD_SC_ PASTE);185 MAP(0, 3, HID_KEYBOARD_SC_INSERT); // PASTE 185 186 MAP(0, 2, HID_KEYBOARD_SC_F1); 186 187 MAP(0, 1, HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT); … … 191 192 MAP(1, 5, HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW); 192 193 MAP(1, 4, HID_KEYBOARD_SC_KEYPAD_8_AND_UP_ARROW); 193 MAP(1, 3, HID_KEYBOARD_SC_ COPY);194 MAP(1, 2, HID_KEYBOARD_SC_ CUT);194 MAP(1, 3, HID_KEYBOARD_SC_PAGE_DOWN); // COPY 195 MAP(1, 2, HID_KEYBOARD_SC_PAGE_UP); // CUT 195 196 MAP(1, 1, HID_KEYBOARD_SC_F2); 196 197 MAP(1, 0, HID_KEYBOARD_SC_F4); 197 198 198 199 MAP(2, 7, HID_KEYBOARD_SC_KEYPAD_PLUS); 199 MAP(2, 6, HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE); 200 MODIFIER(2, 5, HID_KEYBOARD_MODIFIER_LEFTSHIFT | HID_KEYBOARD_MODIFIER_RIGHTSHIFT); 200 MAP(2, 6, HID_KEYBOARD_SC_NON_US_BACKSLASH_AND_PIPE); 201 MAP(2, 5, HID_KEYBOARD_SC_LEFT_SHIFT); 202 MODIFIER(2, 5, HID_KEYBOARD_MODIFIER_LEFTSHIFT); 201 203 MAP(2, 4, HID_KEYBOARD_SC_KEYPAD_7_AND_HOME); 202 MAP(2, 3, HID_KEYBOARD_SC_ BACKSLASH_AND_PIPE);204 MAP(2, 3, HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE); 203 205 MAP(2, 2, HID_KEYBOARD_SC_ENTER); 204 206 MAP(2, 1, HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE); … … 238 240 MAP(6, 3, HID_KEYBOARD_SC_T); 239 241 MAP(6, 2, HID_KEYBOARD_SC_R); 240 MAP(6, 1, HID_KEYBOARD_SC_ S);242 MAP(6, 1, HID_KEYBOARD_SC_5_AND_PERCENTAGE); 241 243 MAP(6, 0, HID_KEYBOARD_SC_6_AND_CARET); 242 244 … … 255 257 MAP(8, 4, HID_KEYBOARD_SC_TAB); 256 258 MAP(8, 3, HID_KEYBOARD_SC_Q); 257 MAP(8, 2, HID_KEYBOARD_SC_ STOP);259 MAP(8, 2, HID_KEYBOARD_SC_ESCAPE); // STOP 258 260 MAP(8, 1, HID_KEYBOARD_SC_2_AND_AT); 259 261 MAP(8, 0, HID_KEYBOARD_SC_1_AND_EXCLAMATION); 260 262 261 263 MAP(9, 7, HID_KEYBOARD_SC_BACKSPACE); 262 //MAP(9, 6, HID_KEYBOARD_SC_CAPS_LOCK);264 //MAP(9, 6, Nothing here); 263 265 MAP(9, 5, HID_KEYBOARD_SC_F6); 264 266 MAP(9, 4, HID_KEYBOARD_SC_F8); … … 268 270 MAP(9, 0, HID_KEYBOARD_SC_UP_ARROW); 269 271 270 MODIFIER(10, 7, HID_KEYBOARD_MODIFIER_LEFTALT | HID_KEYBOARD_MODIFIER_RIGHTALT); 272 MODIFIER(10, 7, HID_KEYBOARD_MODIFIER_LEFTALT); 273 MAP(10, 7, HID_KEYBOARD_SC_LEFT_ALT); 271 274 MAP(10, 6, HID_KEYBOARD_SC_KEYPAD_DOT_AND_DELETE); 272 275 MAP(10, 5, HID_KEYBOARD_SC_KEYPAD_ENTER); 273 276 MAP(10, 4, HID_KEYBOARD_SC_F7); 274 277 MAP(10, 3, HID_KEYBOARD_SC_KEYPAD_MINUS); 275 MAP(10, 2, HID_KEYBOARD_SC_ CANCEL);278 MAP(10, 2, HID_KEYBOARD_SC_END); // CANCEL 276 279 MAP(10, 1, HID_KEYBOARD_SC_HOME); 277 280 MAP(10, 0, HID_KEYBOARD_SC_F5); -
kbd/pcw2hid/code/makefile
r8d96947 r88a38a8 12 12 # Run "make help" for target help. 13 13 14 MCU = at90usb162 14 #MCU = at90usb162 15 MCU = at90usb1287 15 16 ARCH = AVR8 16 17 BOARD = 17 18 F_CPU = 8000000 18 19 F_USB = $(F_CPU) 19 OPTIMIZATION = s20 OPTIMIZATION = 3 20 21 TARGET = Keyboard 21 22 SRC = $(TARGET).c Descriptors.c protocol.cpp $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS) … … 43 44 include $(DMBS_PATH)/atprogram.mk 44 45 45 PROG=usbasp 46 #PROG=usbasp 47 PROG=avr109 -P /dev/ports/usb0 46 48 flash: $(TARGET).hex 47 49 avrdude -u -c $(PROG) -p $(MCU) -Uflash:w:$^ -
kbd/pcw2hid/code/protocol.cpp
r8d96947 r88a38a8 1 1 #include <avr/io.h> 2 #include <avr/interrupt.h> 2 3 3 4 #include <stdbool.h> … … 11 12 #define PCW_DAT_A (1 << 1) 12 13 13 static uint8_t data; 14 static uint8_t address; 14 uint8_t matrix[16]; 15 15 16 static uint8_t oldv; 17 static uint8_t newv; 16 static uint16_t scanbyte() 17 { 18 uint8_t pulses = 0; 19 uint8_t oldv, newv; 20 uint16_t rxbuffer = 0; 18 21 19 static uint8_t pulses; 20 21 static uint8_t kmatrix[16]; 22 23 uint8_t scanbyte() 24 { 25 pulses = 0; 26 address = 0; 27 22 // This is a bit timing critical so don't be interrupted while we do it 23 cli(); 28 24 oldv = PCW_PIN; 29 25 30 for ( int i = 0; i < 2048; i++) {26 for (;;) { 31 27 newv = PCW_PIN; 32 28 … … 37 33 // We are not in sync, start over 38 34 pulses = 0; 39 address= 0;35 rxbuffer = 0; 40 36 } 41 37 if (((newv & PCW_DAT_A) == 0) && ((oldv & PCW_DAT_A) != 0)) { 42 pulses++;43 }44 } else if (pulses < 6) {45 // Receiving address (4 bits)46 if (((newv & PCW_CLK_A) == 0) && ((oldv & PCW_CLK_A) != 0)) {47 address = (address << 1) | ((newv & PCW_DAT_A) ? 1 : 0);48 38 pulses++; 49 39 } … … 51 41 // Receiving data (8 bits) 52 42 if (((newv & PCW_CLK_A) == 0) && ((oldv & PCW_CLK_A) != 0)) { 53 data = (data << 1) | ((newv & PCW_DAT_A) ? 1 : 0); 43 rxbuffer = (rxbuffer << 1); 44 if (newv & PCW_DAT_A) 45 rxbuffer |= 1; 54 46 pulses++; 55 }56 47 57 // If we reached the last bit, we can stop 58 if (pulses >= 10) { 59 kmatrix[address] = data; 60 return address; 48 // If we reached the last bit, we can stop 49 if (pulses == 14) { 50 // We can be interrupted again. 51 sei(); 52 return rxbuffer; 53 } 61 54 } 62 55 } … … 64 57 oldv = newv; 65 58 } 66 67 // TODO set up some error LED or something?68 return 255;69 59 } 70 60 71 extern "C" uint8_t*scanall()61 extern "C" void scanall() 72 62 { 73 uint8_t address; 74 75 do { 76 address = scanbyte(); 77 // } while ((address < 15) && ((kmatrix[15] & 0x80) != 0)); 78 } while ((address != 10) && ((kmatrix[15] & 0x80) != 0)); 79 // nothing interesting past row 10, so stop scanning there. 80 81 return kmatrix; 63 uint16_t rxbuffer; 64 65 for (int i = 0; i < 17; i++) { 66 rxbuffer = scanbyte(); 67 matrix[rxbuffer >> 8] = rxbuffer & 0xFF; 68 } 82 69 } 83 70 84 71 extern "C" void PCW_Init() { 85 72 // GrIP input 86 PCW_PORT = 0xFF; // Enable pull-ups87 PCW_DDR = 0; // Port as input73 PCW_PORT |= 0x3; // Enable pull-ups 74 PCW_DDR &= 0xFC; // Port as input 88 75 } 89 76
Note:
See TracChangeset
for help on using the changeset viewer.