Ignore:
File:
1 edited

Legend:

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

    r65b458c4 rfa8d346  
    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        }
     
    126142/*----------------------------------------------------------------------------*/
    127143
     144static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun)
     145{
     146        usb_log_debug("Generic HID: Get report descriptor length.\n");
     147       
     148        if (fun == NULL || fun->driver_data == NULL) {
     149                usb_log_debug("No function");
     150                return EINVAL;
     151        }
     152       
     153        usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
     154       
     155        printf("hid_dev->report_desc_size = %zu\n", hid_dev->report_desc_size);
     156       
     157        return hid_dev->report_desc_size;
     158}
     159
     160/*----------------------------------------------------------------------------*/
     161
     162static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc,
     163    size_t size, size_t *actual_size)
     164{
     165        usb_log_debug("Generic HID: Get report descriptor.\n");
     166       
     167        if (fun == NULL || fun->driver_data == NULL) {
     168                usb_log_debug("No function");
     169                return EINVAL;
     170        }
     171       
     172        usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
     173       
     174        if (hid_dev->report_desc_size > size) {
     175                return EINVAL;  // TODO: other error code
     176        }
     177       
     178        memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size);
     179        *actual_size = hid_dev->report_desc_size;
     180       
     181        return EOK;
     182}
     183
     184/*----------------------------------------------------------------------------*/
     185
    128186static int usb_generic_hid_client_connected(ddf_fun_t *fun)
    129187{
     188        usb_log_debug("Generic HID: Client connected.\n");
    130189        usb_hid_report_received();
    131190        return EOK;
     
    145204                return ENOMEM;
    146205        }
     206       
     207        fun->ops = &usb_generic_hid_ops;
     208        fun->driver_data = hid_dev;
    147209
    148210        int rc = ddf_fun_bind(fun);
     
    154216        }
    155217       
    156         fun->ops = &usb_generic_hid_ops;
    157         fun->driver_data = hid_dev;
     218        usb_log_debug("HID function created. Handle: %d\n", fun->handle);
    158219       
    159220        return EOK;
Note: See TracChangeset for help on using the changeset viewer.