Changes in / [f401312:6610565b] in mainline


Ignore:
Location:
uspace
Files:
4 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/virtusbkbd/virtusbkbd.c

    rf401312 r6610565b  
    271271        printf("%s: Simulating keyboard events...\n", NAME);
    272272        fibril_sleep(10);
    273         //while (1) {
     273        while (1) {
    274274                kb_process_events(&status, keyboard_events, keyboard_events_count,
    275275                        on_keyboard_change);
    276         //}
     276        }
    277277       
    278278        printf("%s: Terminating...\n", NAME);
  • uspace/drv/usbhub/usbhub.c

    rf401312 r6610565b  
    462462                target.address = hub_info->usb_device->address;
    463463                target.endpoint = 1;/// \TODO get from endpoint descriptor
    464                 /*dprintf(1,"[usb_hub] checking changes for hub at addr %d",
    465                     target.address);*/
     464                dprintf(1,"[usb_hub] checking changes for hub at addr %d",
     465                    target.address);
    466466
    467467                size_t port_count = hub_info->port_count;
  • uspace/drv/usbkbd/Makefile

    rf401312 r6610565b  
    3333
    3434SOURCES = \
    35         main.c \
    36         descparser.c \
    37         descdump.c
     35        main.c
    3836
    3937include $(USPACE_PREFIX)/Makefile.common
  • uspace/drv/usbkbd/main.c

    rf401312 r6610565b  
    3838#include <usb/devreq.h>
    3939#include <usb/descriptor.h>
    40 #include "descparser.h"
    4140
    4241#define BUFFER_SIZE 32
     
    9291                                    void *arg)
    9392{
    94         printf("Got keys: ");
    95         unsigned i;
    96         for (i = 0; i < count; ++i) {
    97                 printf("%d ", key_codes[i]);
    98         }
    99         printf("\n");
     93
    10094}
    10195
     
    10397 * Kbd functions
    10498 */
    105 static int usbkbd_get_report_descriptor(usb_hid_dev_kbd_t *kbd_dev)
    106 {
    107         // iterate over all configurations and interfaces
    108         // TODO: more configurations!!
    109         unsigned i;
    110         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;
    113                 // TODO: endianness
    114                 uint16_t length =
    115                     kbd_dev->conf->interfaces[i].hid_desc.report_desc_info.length;
    116 
    117                 // allocate space for the report descriptor
    118                 kbd_dev->conf->interfaces[i].report_desc = (uint8_t *)malloc(length);
    119                 // get the descriptor from the device
    120                
    121         }
    122 }
    123 
    124 static int usbkbd_process_descriptors(usb_hid_dev_kbd_t *kbd_dev)
    125 {
    126         // get the first configuration descriptor (TODO: parse also other!)
     99static int usbkbd_parse_descriptors(usb_hid_dev_kbd_t *kbd_dev,
     100                                    const uint8_t *data, size_t size)
     101{
     102//      const uint8_t *pos = data;
     103       
     104//      // get the configuration descriptor (should be first)
     105//      if (*pos != sizeof(usb_standard_configuration_descriptor_t)
     106//          || *(pos + 1) != USB_DESCTYPE_CONFIGURATION) {
     107//              fprintf(stderr, "Wrong format of configuration descriptor");
     108//              return EINVAL;
     109//      }
     110       
     111//      usb_standard_configuration_descriptor_t config_descriptor;
     112//      memcpy(&config_descriptor, pos,
     113//          sizeof(usb_standard_configuration_descriptor_t));
     114//      pos += sizeof(usb_standard_configuration_descriptor_t);
     115       
     116//      // parse other descriptors
     117//      while (pos - data < size) {
     118//              //uint8_t desc_size = *pos;
     119//              uint8_t desc_type = *(pos + 1);
     120//              switch (desc_type) {
     121//              case USB_DESCTYPE_INTERFACE:
     122//                      break;
     123//              case USB_DESCTYPE_ENDPOINT:
     124//                      break;
     125//              case USB_DESCTYPE_HID:
     126//                      break;
     127//              case USB_DESCTYPE_HID_REPORT:
     128//                      break;
     129//              case USB_DESCTYPE_HID_PHYSICAL:
     130//                      break;
     131//              }
     132//      }
     133       
     134        return EOK;
     135}
     136
     137static int usbkbd_get_descriptors(usb_hid_dev_kbd_t *kbd_dev)
     138{
     139        // get the first configuration descriptor (TODO: or some other??)
    127140        usb_standard_configuration_descriptor_t config_desc;
    128141       
     
    153166        }
    154167       
    155         kbd_dev->conf = (usb_hid_configuration_t *)calloc(1,
    156             sizeof(usb_hid_configuration_t));
    157         if (kbd_dev->conf == NULL) {
    158                 free(descriptors);
    159                 return ENOMEM;
    160         }
    161        
    162         rc = usbkbd_parse_descriptors(descriptors, transferred, kbd_dev->conf);
     168        rc = usbkbd_parse_descriptors(kbd_dev, descriptors, transferred);
    163169        free(descriptors);
    164 
    165         // get and report descriptors
    166         rc = usbkbd_get_report_descriptor(kbd_dev);
    167        
    168         usbkbd_print_config(kbd_dev->conf);
    169170       
    170171        return rc;
     
    173174static usb_hid_dev_kbd_t *usbkbd_init_device(device_t *dev)
    174175{
    175         usb_hid_dev_kbd_t *kbd_dev = (usb_hid_dev_kbd_t *)calloc(1,
    176             sizeof(usb_hid_dev_kbd_t));
     176        usb_hid_dev_kbd_t *kbd_dev = (usb_hid_dev_kbd_t *)malloc(
     177                        sizeof(usb_hid_dev_kbd_t));
    177178
    178179        if (kbd_dev == NULL) {
     
    207208         */
    208209
    209         // TODO: get descriptors, parse descriptors and save endpoints
    210         usbkbd_process_descriptors(kbd_dev);
     210        // TODO: get descriptors
     211        usbkbd_get_descriptors(kbd_dev);
     212        // TODO: parse descriptors and save endpoints
    211213
    212214        return kbd_dev;
     
    232234static void usbkbd_poll_keyboard(usb_hid_dev_kbd_t *kbd_dev)
    233235{
    234         return;
    235        
    236236        int rc;
    237237        usb_handle_t handle;
  • uspace/drv/vhc/hcd.c

    rf401312 r6610565b  
    116116        sleep(5);
    117117
    118         usb_dprintf_enable(NAME, -1);
     118        usb_dprintf_enable(NAME, 0);
    119119
    120120        printf(NAME ": virtual USB host controller driver.\n");
  • uspace/lib/usb/include/usb/classes/hid.h

    rf401312 r6610565b  
    3939#include <driver.h>
    4040#include <usb/classes/hidparser.h>
    41 #include <usb/descriptor.h>
    4241
    4342/** USB/HID device requests. */
     
    6463 */
    6564typedef struct {
    66         /** Type of class-specific descriptor (Report or Physical). */
    67         uint8_t type;
    68         /** Length of class-specific descriptor in bytes. */
    69         uint16_t length;
    70 } __attribute__ ((packed)) usb_standard_hid_class_descriptor_info_t;
     65        /** Type of class descriptor (Report or Physical). */
     66        uint8_t class_descriptor_type;
     67        /** Length of class descriptor. */
     68        uint16_t class_descriptor_length;
     69} __attribute__ ((packed)) usb_standard_hid_descriptor_class_item_t;
    7170
    7271/** Standard USB HID descriptor.
     
    7473 * (See HID Specification, p.22)
    7574 *
    76  * It is actually only the "header" of the descriptor, it does not contain
    77  * the last two mandatory fields (type and length of the first class-specific
    78  * descriptor).
     75 * It is actually only the "header" of the descriptor, as it may have arbitrary
     76 * length if more than one class descritor is provided.
    7977 */
    8078typedef struct {
    81         /** Total size of this descriptor in bytes.
    82          *
    83          * This includes all class-specific descriptor info - type + length
    84          * for each descriptor.
    85          */
     79        /** Size of this descriptor in bytes. */
    8680        uint8_t length;
    8781        /** Descriptor type (USB_DESCTYPE_HID). */
     
    9185        /** Country code of localized hardware. */
    9286        uint8_t country_code;
    93         /** Total number of class-specific (i.e. Report and Physical)
    94          * descriptors.
    95          *
    96          * @note There is always only one Report descriptor.
    97          */
    98         uint8_t class_desc_count;
    99         /** First mandatory class descriptor (Report) info. */
    100         usb_standard_hid_descriptor_class_item_t report_desc_info;
     87        /** Total number of class (i.e. Report and Physical) descriptors. */
     88        uint8_t class_count;
     89        /** First mandatory class descriptor info. */
     90        usb_standard_hid_descriptor_class_item_t class_descriptor;
    10191} __attribute__ ((packed)) usb_standard_hid_descriptor_t;
    10292
    103 /**
    104  *
    105  */
    106 typedef struct {
    107         usb_standard_interface_descriptor_t iface_desc;
    108         usb_standard_endpoint_descriptor_t *endpoints;
    109         usb_standard_hid_descriptor_t hid_desc;
    110         uint8_t *report_desc;
    111         //usb_standard_hid_class_descriptor_info_t *class_desc_info;
    112         //uint8_t **class_descs;
    113 } usb_hid_iface_t;
    114 
    115 /**
    116  *
    117  */
    118 typedef struct {
    119         usb_standard_configuration_descriptor_t config_descriptor;
    120         usb_hid_iface_t *interfaces;
    121 } usb_hid_configuration_t;
    12293
    12394/**
     
    12899typedef struct {
    129100        device_t *device;
    130         usb_hid_configuration_t *conf;
    131101        usb_address_t address;
    132102        usb_endpoint_t poll_endpoint;
     
    134104} usb_hid_dev_kbd_t;
    135105
    136 // TODO: more configurations!
    137 
    138106#endif
    139107/**
  • uspace/srv/devman/main.c

    rf401312 r6610565b  
    479479        }
    480480
    481 //      printf(NAME ": devman_forward: forward connection to device %s to "
    482 //          "driver %s.\n", dev->pathname, driver->name);
     481        printf(NAME ": devman_forward: forward connection to device %s to "
     482            "driver %s.\n", dev->pathname, driver->name);
    483483        ipc_forward_fast(iid, driver->phone, method, dev->handle, 0, IPC_FF_NONE);
    484484}
Note: See TracChangeset for help on using the changeset viewer.