Changeset 8d96947 in avrstuff for kbd/pcw2hid/code/Descriptors.c


Ignore:
Timestamp:
Feb 7, 2023, 9:03:10 PM (16 months ago)
Author:
PulkoMandy <pulkomandy@…>
Branches:
main
Children:
88a38a8
Parents:
110c692
Message:

More untested code for PCW to HID keyboard adapter

  • Use VOTI shared keyboard ID
  • Use standard keyboard descriptor from LUFA demo
  • Don't scan past row 10 of the PCW keyboard (we don't need more)
  • Convert PCW keys to (roughly) corresponding USB HID keycodes

TODO:

  • If shift is pressed, maybe convert f1/3/5/7 to f2/4/6/8
  • Some keys (ab)use F2/4/6/8 keycodes, move them to F9-F12 instead
  • Some keys use "unusual" keycodes (cancel, stop), maybe move to more common ones
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kbd/pcw2hid/code/Descriptors.c

    r110c692 r8d96947  
    4444 *  more details on HID report descriptors.
    4545 */
    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)
     46const 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)
    11452};
    11553
     
    13169
    13270        .VendorID               = 0x16c0,
    133         .ProductID              = 0x27dc,
     71        .ProductID              = 0x27db,
    13472        .ReleaseNumber          = VERSION_BCD(0,0,1),
    13573
     
    167105                        .Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
    168106
    169                         .InterfaceNumber        = INTERFACE_ID_Joystick,
     107                        .InterfaceNumber        = INTERFACE_ID_Keyboard,
    170108                        .AlternateSetting       = 0x00,
    171109
     
    173111
    174112                        .Class                  = HID_CSCP_HIDClass,
    175                         .SubClass               = HID_CSCP_NonBootSubclass,
    176                         .Protocol               = HID_CSCP_NonBootProtocol,
     113                        .SubClass               = HID_CSCP_BootSubclass,
     114                        .Protocol               = HID_CSCP_KeyboardBootProtocol,
    177115
    178116                        .InterfaceStrIndex      = NO_DESCRIPTOR
    179117                },
    180118
    181         .HID_JoystickHID =
     119        .HID_KeyboardHID =
    182120                {
    183121                        .Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
     
    187125                        .TotalReportDescriptors = 1,
    188126                        .HIDReportType          = HID_DTYPE_Report,
    189                         .HIDReportLength        = sizeof(JoystickReport)
     127                        .HIDReportLength        = sizeof(KeyboardReport)
    190128                },
    191129
     
    194132                        .Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
    195133
    196                         .EndpointAddress        = JOYSTICK_EPADDR,
     134                        .EndpointAddress        = KEYBOARD_EPADDR,
    197135                        .Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
    198                         .EndpointSize           = JOYSTICK_EPSIZE,
     136                        .EndpointSize           = KEYBOARD_EPSIZE,
    199137                        .PollingIntervalMS      = 0x05
    200138                }
     
    264202                        break;
    265203                case HID_DTYPE_HID:
    266                         Address = &ConfigurationDescriptor.HID_JoystickHID;
     204                        Address = &ConfigurationDescriptor.HID_KeyboardHID;
    267205                        Size    = sizeof(USB_HID_Descriptor_HID_t);
    268206                        break;
    269207                case HID_DTYPE_Report:
    270                         Address = &JoystickReport;
    271                         Size    = sizeof(JoystickReport);
     208                        Address = &KeyboardReport;
     209                        Size    = sizeof(KeyboardReport);
    272210                        break;
    273211        }
Note: See TracChangeset for help on using the changeset viewer.