Changeset 8d96947 in avrstuff for kbd/pcw2hid/code
- Timestamp:
- Feb 7, 2023, 9:03:10 PM (17 months ago)
- Branches:
- main
- Children:
- 88a38a8
- Parents:
- 110c692
- Location:
- kbd/pcw2hid/code
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
kbd/pcw2hid/code/Descriptors.c
r110c692 r8d96947 44 44 * more details on HID report descriptors. 45 45 */ 46 const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] = 47 { 48 HID_RI_USAGE_PAGE(8, 0x01), 49 HID_RI_USAGE(8, 0x04), 50 HID_RI_COLLECTION(8, 0x01), 51 52 0x85, 0x01, // Report ID 1 53 54 // 15 constant bytes 55 HID_RI_REPORT_SIZE(8, 15), 56 HID_RI_REPORT_COUNT(8, 0x01), 57 HID_RI_INPUT(8, HID_IOF_CONSTANT), 58 59 HID_RI_USAGE_PAGE(8, 0x09), 60 HID_RI_LOGICAL_MINIMUM(8, 0x00), 61 HID_RI_LOGICAL_MAXIMUM(8, 0x01), 62 63 HID_RI_USAGE_MINIMUM(8, 7), 64 HID_RI_USAGE_MAXIMUM(8, 9), 65 HID_RI_USAGE(8, 4), 66 HID_RI_REPORT_SIZE(8, 0x01), 67 HID_RI_REPORT_COUNT(8, 4), 68 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), 69 70 HID_RI_REPORT_SIZE(8, 1), 71 HID_RI_REPORT_COUNT(8, 0x01), 72 HID_RI_INPUT(8, HID_IOF_CONSTANT), 73 74 HID_RI_USAGE(8, 10), 75 HID_RI_USAGE_MINIMUM(8, 1), 76 HID_RI_USAGE_MAXIMUM(8, 3), 77 HID_RI_REPORT_SIZE(8, 0x01), 78 HID_RI_REPORT_COUNT(8, 4), 79 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), 80 81 HID_RI_REPORT_SIZE(8, 1), 82 HID_RI_REPORT_COUNT(8, 0x01), 83 HID_RI_INPUT(8, HID_IOF_CONSTANT), 84 85 HID_RI_USAGE_MINIMUM(8, 5), 86 HID_RI_USAGE_MAXIMUM(8, 6), 87 HID_RI_REPORT_SIZE(8, 0x01), 88 HID_RI_REPORT_COUNT(8, 2), 89 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), 90 91 HID_RI_USAGE_PAGE(8, 0x01), 92 HID_RI_USAGE(8, 0x01), 93 HID_RI_COLLECTION(8, 0x00), 94 HID_RI_USAGE(8, 0x31), 95 HID_RI_LOGICAL_MINIMUM(8, -2), 96 HID_RI_LOGICAL_MAXIMUM(8, 1), 97 HID_RI_REPORT_COUNT(8, 1), 98 HID_RI_REPORT_SIZE(8, 2), 99 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), 100 101 HID_RI_REPORT_SIZE(8, 1), 102 HID_RI_REPORT_COUNT(8, 0x01), 103 HID_RI_INPUT(8, HID_IOF_CONSTANT), 104 105 HID_RI_USAGE(8, 0x30), 106 HID_RI_LOGICAL_MINIMUM(8, -2), 107 HID_RI_LOGICAL_MAXIMUM(8, 1), 108 HID_RI_REPORT_COUNT(8, 1), 109 HID_RI_REPORT_SIZE(8, 2), 110 HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), 111 HID_RI_END_COLLECTION(0), 112 113 HID_RI_END_COLLECTION(0) 46 const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = 47 { 48 /* Use the HID class driver's standard Keyboard report. 49 * Max simultaneous keys: 6 50 */ 51 HID_DESCRIPTOR_KEYBOARD(6) 114 52 }; 115 53 … … 131 69 132 70 .VendorID = 0x16c0, 133 .ProductID = 0x27d c,71 .ProductID = 0x27db, 134 72 .ReleaseNumber = VERSION_BCD(0,0,1), 135 73 … … 167 105 .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, 168 106 169 .InterfaceNumber = INTERFACE_ID_ Joystick,107 .InterfaceNumber = INTERFACE_ID_Keyboard, 170 108 .AlternateSetting = 0x00, 171 109 … … 173 111 174 112 .Class = HID_CSCP_HIDClass, 175 .SubClass = HID_CSCP_ NonBootSubclass,176 .Protocol = HID_CSCP_ NonBootProtocol,113 .SubClass = HID_CSCP_BootSubclass, 114 .Protocol = HID_CSCP_KeyboardBootProtocol, 177 115 178 116 .InterfaceStrIndex = NO_DESCRIPTOR 179 117 }, 180 118 181 .HID_ JoystickHID =119 .HID_KeyboardHID = 182 120 { 183 121 .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, … … 187 125 .TotalReportDescriptors = 1, 188 126 .HIDReportType = HID_DTYPE_Report, 189 .HIDReportLength = sizeof( JoystickReport)127 .HIDReportLength = sizeof(KeyboardReport) 190 128 }, 191 129 … … 194 132 .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, 195 133 196 .EndpointAddress = JOYSTICK_EPADDR,134 .EndpointAddress = KEYBOARD_EPADDR, 197 135 .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), 198 .EndpointSize = JOYSTICK_EPSIZE,136 .EndpointSize = KEYBOARD_EPSIZE, 199 137 .PollingIntervalMS = 0x05 200 138 } … … 264 202 break; 265 203 case HID_DTYPE_HID: 266 Address = &ConfigurationDescriptor.HID_ JoystickHID;204 Address = &ConfigurationDescriptor.HID_KeyboardHID; 267 205 Size = sizeof(USB_HID_Descriptor_HID_t); 268 206 break; 269 207 case HID_DTYPE_Report: 270 Address = & JoystickReport;271 Size = sizeof( JoystickReport);208 Address = &KeyboardReport; 209 Size = sizeof(KeyboardReport); 272 210 break; 273 211 } -
kbd/pcw2hid/code/Descriptors.h
r110c692 r8d96947 51 51 USB_Descriptor_Configuration_Header_t Config; 52 52 53 // JoystickHID Interface53 // Keyboard HID Interface 54 54 USB_Descriptor_Interface_t HID_Interface; 55 USB_HID_Descriptor_HID_t HID_ JoystickHID;56 55 USB_HID_Descriptor_HID_t HID_KeyboardHID; 56 USB_Descriptor_Endpoint_t HID_ReportINEndpoint; 57 57 } USB_Descriptor_Configuration_t; 58 58 … … 63 63 enum InterfaceDescriptors_t 64 64 { 65 INTERFACE_ID_ Joystick = 0, /**< Joystick interface desciptor ID */65 INTERFACE_ID_Keyboard = 0, /**< Keyboard interface descriptor ID */ 66 66 }; 67 67 … … 78 78 79 79 /* Macros: */ 80 /** Endpoint address of the JoystickHID reporting IN endpoint. */81 #define JOYSTICK_EPADDR (ENDPOINT_DIR_IN | 1)80 /** Endpoint address of the Keyboard HID reporting IN endpoint. */ 81 #define KEYBOARD_EPADDR (ENDPOINT_DIR_IN | 1) 82 82 83 /** Size in bytes of the JoystickHID reporting IN endpoint. */84 #define JOYSTICK_EPSIZE 1683 /** Size in bytes of the Keyboard HID reporting IN endpoint. */ 84 #define KEYBOARD_EPSIZE 8 85 85 86 86 /* Function Prototypes: */ -
kbd/pcw2hid/code/Keyboard.c
r110c692 r8d96947 31 31 /** \file 32 32 * 33 * Main source file for the Joystickdemo. This file contains the main tasks of33 * Main source file for the Keyboard demo. This file contains the main tasks of 34 34 * the demo and is responsible for the initial application hardware configuration. 35 35 */ … … 37 37 #include "Keyboard.h" 38 38 39 extern void PCW_Init( );40 extern void scanall();41 42 /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */43 static uint8_t Prev JoystickHIDReportBuffer[4];39 extern void PCW_Init(void); 40 extern uint8_t* scanall(void); 41 42 /** Buffer to hold the previously generated Keyboard HID report, for comparison purposes inside the HID class driver. */ 43 static uint8_t PrevKeyboardHIDReportBuffer[sizeof(USB_KeyboardReport_Data_t)]; 44 44 45 45 /** LUFA HID Class driver interface configuration and state information. This structure is … … 47 47 * within a device can be differentiated from one another. 48 48 */ 49 USB_ClassInfo_HID_Device_t Joystick_HID_Interface =49 USB_ClassInfo_HID_Device_t Keyboard_HID_Interface = 50 50 { 51 51 .Config = 52 52 { 53 .InterfaceNumber = INTERFACE_ID_ Joystick,53 .InterfaceNumber = INTERFACE_ID_Keyboard, 54 54 .ReportINEndpoint = 55 55 { 56 .Address = JOYSTICK_EPADDR,57 .Size = JOYSTICK_EPSIZE,56 .Address = KEYBOARD_EPADDR, 57 .Size = KEYBOARD_EPSIZE, 58 58 .Banks = 1, 59 59 }, 60 .PrevReportINBuffer = Prev JoystickHIDReportBuffer,61 .PrevReportINBufferSize = sizeof(Prev JoystickHIDReportBuffer),60 .PrevReportINBuffer = PrevKeyboardHIDReportBuffer, 61 .PrevReportINBufferSize = sizeof(PrevKeyboardHIDReportBuffer), 62 62 }, 63 63 }; … … 76 76 for (;;) 77 77 { 78 HID_Device_USBTask(& Joystick_HID_Interface);78 HID_Device_USBTask(&Keyboard_HID_Interface); 79 79 USB_USBTask(); 80 80 } … … 127 127 bool ConfigSuccess = true; 128 128 129 ConfigSuccess &= HID_Device_ConfigureEndpoints(& Joystick_HID_Interface);129 ConfigSuccess &= HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface); 130 130 131 131 USB_Device_EnableSOFEvents(); … … 137 137 void EVENT_USB_Device_ControlRequest(void) 138 138 { 139 HID_Device_ProcessControlRequest(& Joystick_HID_Interface);139 HID_Device_ProcessControlRequest(&Keyboard_HID_Interface); 140 140 } 141 141 … … 143 143 void EVENT_USB_Device_StartOfFrame(void) 144 144 { 145 HID_Device_MillisecondElapsed(& Joystick_HID_Interface);145 HID_Device_MillisecondElapsed(&Keyboard_HID_Interface); 146 146 } 147 147 … … 162 162 uint16_t* const ReportSize) 163 163 { 164 USB_KeyboardReport_Data_t* KeyboardReport = (USB_KeyboardReport_Data_t*)ReportData; 165 164 166 uint8_t* matrix = scanall(); 165 *ReportID = 1; 166 167 *ReportSize = 16; 168 for (int i = 0; i < 16; i++) { 169 ReportData[i] = matrix[i]; 170 } 171 return true; 167 168 uint8_t UsedKeyCodes = 0; 169 170 #define MAP(i, j, k) \ 171 if (matrix[i] & (1 << j)) \ 172 KeyboardReport->KeyCode[UsedKeyCodes++] = k; \ 173 if (UsedKeyCodes == 6) \ 174 goto full; 175 176 #define MODIFIER(i, j, k) \ 177 if (matrix[i] & (1 << j)) \ 178 KeyboardReport->Modifier |= k; 179 180 MAP(0, 7, HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW); 181 MAP(0, 6, HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN); 182 MAP(0, 5, HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW); 183 MAP(0, 4, HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP); 184 MAP(0, 3, HID_KEYBOARD_SC_PASTE); 185 MAP(0, 2, HID_KEYBOARD_SC_F1); 186 MAP(0, 1, HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT); 187 MAP(0, 0, HID_KEYBOARD_SC_F3); 188 189 MAP(1, 7, HID_KEYBOARD_SC_KEYPAD_1_AND_END); 190 MAP(1, 6, HID_KEYBOARD_SC_KEYPAD_5); 191 MAP(1, 5, HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW); 192 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); 195 MAP(1, 1, HID_KEYBOARD_SC_F2); 196 MAP(1, 0, HID_KEYBOARD_SC_F4); 197 198 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); 201 MAP(2, 4, HID_KEYBOARD_SC_KEYPAD_7_AND_HOME); 202 MAP(2, 3, HID_KEYBOARD_SC_BACKSLASH_AND_PIPE); 203 MAP(2, 2, HID_KEYBOARD_SC_ENTER); 204 MAP(2, 1, HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE); 205 MAP(2, 0, HID_KEYBOARD_SC_DELETE); 206 207 MAP(3, 7, HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN); 208 MAP(3, 6, HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK); 209 MAP(3, 5, HID_KEYBOARD_SC_SEMICOLON_AND_COLON); 210 MAP(3, 4, HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE); 211 MAP(3, 3, HID_KEYBOARD_SC_P); 212 MAP(3, 2, HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE); 213 MAP(3, 1, HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE); 214 MAP(3, 0, HID_KEYBOARD_SC_EQUAL_AND_PLUS); 215 216 MAP(4, 7, HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN); 217 MAP(4, 6, HID_KEYBOARD_SC_M); 218 MAP(4, 5, HID_KEYBOARD_SC_K); 219 MAP(4, 4, HID_KEYBOARD_SC_L); 220 MAP(4, 3, HID_KEYBOARD_SC_I); 221 MAP(4, 2, HID_KEYBOARD_SC_O); 222 MAP(4, 1, HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS); 223 MAP(4, 0, HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS); 224 225 MAP(5, 7, HID_KEYBOARD_SC_SPACE); 226 MAP(5, 6, HID_KEYBOARD_SC_N); 227 MAP(5, 5, HID_KEYBOARD_SC_J); 228 MAP(5, 4, HID_KEYBOARD_SC_H); 229 MAP(5, 3, HID_KEYBOARD_SC_Y); 230 MAP(5, 2, HID_KEYBOARD_SC_U); 231 MAP(5, 1, HID_KEYBOARD_SC_7_AND_AMPERSAND); 232 MAP(5, 0, HID_KEYBOARD_SC_8_AND_ASTERISK); 233 234 MAP(6, 7, HID_KEYBOARD_SC_V); 235 MAP(6, 6, HID_KEYBOARD_SC_B); 236 MAP(6, 5, HID_KEYBOARD_SC_F); 237 MAP(6, 4, HID_KEYBOARD_SC_G); 238 MAP(6, 3, HID_KEYBOARD_SC_T); 239 MAP(6, 2, HID_KEYBOARD_SC_R); 240 MAP(6, 1, HID_KEYBOARD_SC_S); 241 MAP(6, 0, HID_KEYBOARD_SC_6_AND_CARET); 242 243 MAP(7, 7, HID_KEYBOARD_SC_X); 244 MAP(7, 6, HID_KEYBOARD_SC_C); 245 MAP(7, 5, HID_KEYBOARD_SC_D); 246 MAP(7, 4, HID_KEYBOARD_SC_S); 247 MAP(7, 3, HID_KEYBOARD_SC_W); 248 MAP(7, 2, HID_KEYBOARD_SC_E); 249 MAP(7, 1, HID_KEYBOARD_SC_3_AND_HASHMARK); 250 MAP(7, 0, HID_KEYBOARD_SC_4_AND_DOLLAR); 251 252 MAP(8, 7, HID_KEYBOARD_SC_Z); 253 MAP(8, 6, HID_KEYBOARD_SC_CAPS_LOCK); 254 MAP(8, 5, HID_KEYBOARD_SC_A); 255 MAP(8, 4, HID_KEYBOARD_SC_TAB); 256 MAP(8, 3, HID_KEYBOARD_SC_Q); 257 MAP(8, 2, HID_KEYBOARD_SC_STOP); 258 MAP(8, 1, HID_KEYBOARD_SC_2_AND_AT); 259 MAP(8, 0, HID_KEYBOARD_SC_1_AND_EXCLAMATION); 260 261 MAP(9, 7, HID_KEYBOARD_SC_BACKSPACE); 262 //MAP(9, 6, HID_KEYBOARD_SC_CAPS_LOCK); 263 MAP(9, 5, HID_KEYBOARD_SC_F6); 264 MAP(9, 4, HID_KEYBOARD_SC_F8); 265 MAP(9, 3, HID_KEYBOARD_SC_RIGHT_ARROW); 266 MAP(9, 2, HID_KEYBOARD_SC_LEFT_ARROW); 267 MAP(9, 1, HID_KEYBOARD_SC_DOWN_ARROW); 268 MAP(9, 0, HID_KEYBOARD_SC_UP_ARROW); 269 270 MODIFIER(10, 7, HID_KEYBOARD_MODIFIER_LEFTALT | HID_KEYBOARD_MODIFIER_RIGHTALT); 271 MAP(10, 6, HID_KEYBOARD_SC_KEYPAD_DOT_AND_DELETE); 272 MAP(10, 5, HID_KEYBOARD_SC_KEYPAD_ENTER); 273 MAP(10, 4, HID_KEYBOARD_SC_F7); 274 MAP(10, 3, HID_KEYBOARD_SC_KEYPAD_MINUS); 275 MAP(10, 2, HID_KEYBOARD_SC_CANCEL); 276 MAP(10, 1, HID_KEYBOARD_SC_HOME); 277 MAP(10, 0, HID_KEYBOARD_SC_F5); 278 279 full: 280 *ReportSize = sizeof(USB_KeyboardReport_Data_t); 281 return false; 172 282 } 173 283 -
kbd/pcw2hid/code/Keyboard.h
r110c692 r8d96947 31 31 /** \file 32 32 * 33 * Header file for Joystick.c.33 * Header file for Keyboard.c. 34 34 */ 35 35 36 #ifndef _ JOYSTICK_H_37 #define _ JOYSTICK_H_36 #ifndef _KEYBOARD_H_ 37 #define _KEYBOARD_H_ 38 38 39 39 /* Includes: */ -
kbd/pcw2hid/code/protocol.cpp
r110c692 r8d96947 75 75 do { 76 76 address = scanbyte(); 77 } while ((address < 15) && (kmatrix[15] & 0x80 != 0)); 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. 78 80 79 81 return kmatrix;
Note:
See TracChangeset
for help on using the changeset viewer.