Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhid/generic/hiddev.c

    r65b458c4 rda56be2  
    6262static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun);
    6363
    64 static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer,
     64static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer,
    6565    size_t size, size_t *act_size, unsigned int flags);
    6666
    6767static int usb_generic_hid_client_connected(ddf_fun_t *fun);
     68
     69static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun);
     70
     71static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc,
     72    size_t size, size_t *actual_size);
    6873
    6974/*----------------------------------------------------------------------------*/
     
    7176static usbhid_iface_t usb_generic_iface = {
    7277        .get_event = usb_generic_hid_get_event,
    73         .get_event_length = usb_generic_hid_get_event_length
     78        .get_event_length = usb_generic_hid_get_event_length,
     79        .get_report_descriptor_length = usb_generic_get_report_descriptor_length,
     80        .get_report_descriptor = usb_generic_get_report_descriptor
    7481};
    7582
     
    8390static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun)
    8491{
    85         if (fun == NULL || fun->driver_data) {
     92        usb_log_debug("Generic HID: Get event length (fun: %p, "
     93            "fun->driver_data: %p.\n", fun, fun->driver_data);
     94       
     95        if (fun == NULL || fun->driver_data == NULL) {
    8696                return 0;
    8797        }
     
    8999        usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
    90100       
    91         return hid_dev->input_report_size;
    92 }
    93 
    94 /*----------------------------------------------------------------------------*/
    95 
    96 static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer,
     101        usb_log_debug("hid_dev: %p, Max input report size (%d).\n",
     102            hid_dev, hid_dev->max_input_report_size);
     103       
     104        return hid_dev->max_input_report_size;
     105}
     106
     107/*----------------------------------------------------------------------------*/
     108
     109static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer,
    97110    size_t size, size_t *act_size, unsigned int flags)
    98111{
    99         if (fun == NULL || fun->driver_data) {
     112        usb_log_debug("Generic HID: Get event.\n");
     113       
     114        if (fun == NULL || fun->driver_data == NULL) {
     115                usb_log_debug("No function");
    100116                return EINVAL;
    101117        }
     
    104120       
    105121        if (hid_dev->input_report_size > size) {
     122                usb_log_debug("input_report_size > size (%zu, %zu)\n",
     123                    hid_dev->input_report_size, size);
    106124                return EINVAL;  // TODO: other error code
    107125        }
     
    109127        /*! @todo This should probably be atomic. */
    110128        if (usb_hid_report_ready()) {
     129                usb_log_debug("Report ready, size: %zu\n",
     130                    hid_dev->input_report_size);
    111131                memcpy(buffer, hid_dev->input_report,
    112132                    hid_dev->input_report_size);
     
    120140        // note that we already received this report
    121141//      report_received = true;
     142        usb_log_debug("OK\n");
     143       
     144        return EOK;
     145}
     146
     147/*----------------------------------------------------------------------------*/
     148
     149static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun)
     150{
     151        usb_log_debug("Generic HID: Get report descriptor length.\n");
     152       
     153        if (fun == NULL || fun->driver_data == NULL) {
     154                usb_log_debug("No function");
     155                return EINVAL;
     156        }
     157       
     158        usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
     159       
     160        printf("hid_dev->report_desc_size = %zu\n", hid_dev->report_desc_size);
     161       
     162        return hid_dev->report_desc_size;
     163}
     164
     165/*----------------------------------------------------------------------------*/
     166
     167static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc,
     168    size_t size, size_t *actual_size)
     169{
     170        usb_log_debug("Generic HID: Get report descriptor.\n");
     171       
     172        if (fun == NULL || fun->driver_data == NULL) {
     173                usb_log_debug("No function");
     174                return EINVAL;
     175        }
     176       
     177        usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
     178       
     179        if (hid_dev->report_desc_size > size) {
     180                return EINVAL;  // TODO: other error code
     181        }
     182       
     183        memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size);
     184        *actual_size = hid_dev->report_desc_size;
    122185       
    123186        return EOK;
     
    128191static int usb_generic_hid_client_connected(ddf_fun_t *fun)
    129192{
     193        usb_log_debug("Generic HID: Client connected.\n");
    130194        usb_hid_report_received();
    131195        return EOK;
     
    145209                return ENOMEM;
    146210        }
     211       
     212        fun->ops = &usb_generic_hid_ops;
     213        fun->driver_data = hid_dev;
    147214
    148215        int rc = ddf_fun_bind(fun);
     
    154221        }
    155222       
    156         fun->ops = &usb_generic_hid_ops;
    157         fun->driver_data = hid_dev;
     223        usb_log_debug("HID function created. Handle: %d\n", fun->handle);
    158224       
    159225        return EOK;
Note: See TracChangeset for help on using the changeset viewer.