Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/dist/src/bithenge/usbdesc.bh

    r71450c8 rff788c3  
    77# Originally by Vojtech Horky.
    88
    9 # Block prefixed with a byte length
    10 transform block = (in.data) <- struct {
    11         .bLength <- uint8;
    12         .data <- known_length(.bLength - 1);
    13 };
    14 
    159# USB configuration descriptor
    1610# This is not the full configuration descriptor (i.e. with interface
    1711# and endpoint descriptors included) but only the header.
    1812transform usb_configuration_descriptor_bare = struct {
     13        .bLength <- uint8; # assert bLength = 9
     14        .bDescriptorType <- uint8; # assert: bDescriptorType == 2
    1915        .wTotalLength <- uint16le;
    2016        .bNumInterfaces <- uint8;
     
    2723# USB interface descriptor
    2824transform usb_interface_descriptor = struct {
     25        .bLength <- uint8; # assert bLength = 9
     26        .bDescriptorType <- uint8; # assert: bDescriptorType == 4
    2927        .bInterfaceNumber <- uint8;
    3028        .bAlternateSetting <- uint8;
     
    3836# USB endpoint descriptor
    3937transform usb_endpoint_descriptor = struct {
     38        .bLength <- uint8; # assert bLength = 7
     39        .bDescriptorType <- uint8; # assert: bDescriptorType == 5
    4040        .bEndpointAddress  <- uint8;
    4141        .bmAttributes <- uint8;
     
    4646# USB HID descriptor
    4747transform usb_hid_descriptor = struct {
     48        .bLength <- uint8;
     49        .bDescriptorType <- uint8; # assert: bDescriptorType == 33
    4850        .bcdHID <- uint16le;
    4951        .bCountryCode <- uint8;
    5052        .bNumDescriptors <- uint8;
    51         <- repeat(.bNumDescriptors) { struct {
    52                 .bDescriptorType <- uint8;
    53                 .wDescriptorLength <- uint16le;
    54         } };
     53        # Following is repeated bNumDescriptors times
     54        .bDescriptorType <- uint8;
     55        .wDescriptorLength <- uint16le;
    5556};
    5657
    57 # USB descriptor
    58 transform usb_descriptor = struct {
    59         .bDescriptorType <- uint8;
    60         <- switch (.bDescriptorType) {
    61                  2: usb_configuration_descriptor_bare;
    62                  4: usb_interface_descriptor;
    63                  5: usb_endpoint_descriptor;
    64                 33: usb_hid_descriptor;
    65         };
    66 } <- block;
     58# Fixed configuration for QEMU USB keyboard.
     59transform qemu_usb_keyboard = struct {
     60        .configuration_descriptor <- usb_configuration_descriptor_bare;
     61        .interface_descriptor <- usb_interface_descriptor;
     62        .hid_descriptor <- usb_hid_descriptor;
     63        .endpoint_descriptor <- usb_endpoint_descriptor;
     64};
    6765
    68 transform main = repeat { usb_descriptor };
     66transform main = qemu_usb_keyboard;
Note: See TracChangeset for help on using the changeset viewer.