Changeset 45019865 in mainline for uspace/drv/usbkbd/main.c


Ignore:
Timestamp:
2011-01-14T13:35:14Z (13 years ago)
Author:
Lubos Slovak <lubos.slovak@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0a9ea4a
Parents:
f401312
Message:

Fixed descriptor parsing.

  • Properly parses standard descriptors.
  • Properly gets report descriptor.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbkbd/main.c

    rf401312 r45019865  
    3939#include <usb/descriptor.h>
    4040#include "descparser.h"
     41#include "descdump.h"
    4142
    4243#define BUFFER_SIZE 32
     
    109110        unsigned i;
    110111        for (i = 0; i < kbd_dev->conf->config_descriptor.interface_count; ++i) {
    111                 uint8_t type =
    112                     kbd_dev->conf->interfaces[i].hid_desc.report_desc_info.type;
    113112                // TODO: endianness
    114113                uint16_t length =
    115114                    kbd_dev->conf->interfaces[i].hid_desc.report_desc_info.length;
     115                size_t actual_size = 0;
    116116
    117117                // allocate space for the report descriptor
    118118                kbd_dev->conf->interfaces[i].report_desc = (uint8_t *)malloc(length);
     119               
    119120                // get the descriptor from the device
    120                
    121         }
     121                int rc = usb_drv_req_get_descriptor(kbd_dev->device->parent_phone,
     122                    kbd_dev->address, USB_REQUEST_TYPE_CLASS, USB_DESCTYPE_HID_REPORT,
     123                    0, i, kbd_dev->conf->interfaces[i].report_desc, length,
     124                    &actual_size);
     125
     126                if (rc != EOK) {
     127                        return rc;
     128                }
     129
     130                assert(actual_size == length);
     131
     132                dump_hid_class_descriptor(0, USB_DESCTYPE_HID_REPORT,
     133                    kbd_dev->conf->interfaces[i].report_desc, length);
     134        }
     135
     136        return EOK;
    122137}
    123138
     
    162177        rc = usbkbd_parse_descriptors(descriptors, transferred, kbd_dev->conf);
    163178        free(descriptors);
     179        if (rc != EOK) {
     180                printf("Problem with parsing standard descriptors.\n");
     181                return rc;
     182        }
    164183
    165184        // get and report descriptors
    166185        rc = usbkbd_get_report_descriptor(kbd_dev);
     186        if (rc != EOK) {
     187                printf("Problem with parsing HID REPORT descriptor.\n");
     188                return rc;
     189        }
    167190       
    168191        usbkbd_print_config(kbd_dev->conf);
    169192       
    170         return rc;
     193        return EOK;
    171194}
    172195
Note: See TracChangeset for help on using the changeset viewer.