Ignore:
File:
1 edited

Legend:

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

    r266fcd8 r65b458c4  
    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, uint8_t *buffer,
    65     size_t size, size_t *act_size, int *event_nr, unsigned int flags);
     64static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer,
     65    size_t size, size_t *act_size, unsigned int flags);
    6666
    6767static int usb_generic_hid_client_connected(ddf_fun_t *fun);
    68 
    69 static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun);
    70 
    71 static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc,
    72     size_t size, size_t *actual_size);
    7368
    7469/*----------------------------------------------------------------------------*/
     
    7671static usbhid_iface_t usb_generic_iface = {
    7772        .get_event = usb_generic_hid_get_event,
    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
     73        .get_event_length = usb_generic_hid_get_event_length
    8174};
    8275
     
    9083static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun)
    9184{
    92         usb_log_debug2("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) {
     85        if (fun == NULL || fun->driver_data) {
    9686                return 0;
    9787        }
     
    9989        usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
    10090       
    101         usb_log_debug2("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;
     91        return hid_dev->input_report_size;
    10592}
    10693
    10794/*----------------------------------------------------------------------------*/
    10895
    109 static int usb_generic_hid_get_event(ddf_fun_t *fun, uint8_t *buffer,
    110     size_t size, size_t *act_size, int *event_nr, unsigned int flags)
     96static int usb_generic_hid_get_event(ddf_fun_t *fun, int32_t *buffer,
     97    size_t size, size_t *act_size, unsigned int flags)
    11198{
    112         usb_log_debug2("Generic HID: Get event.\n");
    113        
    114         if (fun == NULL || fun->driver_data == NULL || buffer == NULL
    115             || act_size == NULL || event_nr == NULL) {
    116                 usb_log_debug("No function");
     99        if (fun == NULL || fun->driver_data) {
    117100                return EINVAL;
    118101        }
     
    121104       
    122105        if (hid_dev->input_report_size > size) {
    123                 usb_log_debug("input_report_size > size (%zu, %zu)\n",
    124                     hid_dev->input_report_size, size);
    125106                return EINVAL;  // TODO: other error code
    126107        }
    127108       
    128109        /*! @todo This should probably be atomic. */
    129 //      if (usb_hid_report_ready()) {
    130 //              usb_log_debug2("Report ready, size: %zu\n",
    131 //                  hid_dev->input_report_size);
    132                
    133 //              usb_hid_report_received();
    134 //      } else {
    135 //              memset(buffer, 0, hid_dev->input_report_size);
    136 //      }
    137         memcpy(buffer, hid_dev->input_report,
    138             hid_dev->input_report_size);
    139         *act_size = hid_dev->input_report_size;
    140         *event_nr = usb_hid_report_number(hid_dev);
     110        if (usb_hid_report_ready()) {
     111                memcpy(buffer, hid_dev->input_report,
     112                    hid_dev->input_report_size);
     113                *act_size = hid_dev->input_report_size;
     114                usb_hid_report_received();
     115        }
    141116       
    142117        // clear the buffer so that it will not be received twice
     
    145120        // note that we already received this report
    146121//      report_received = true;
    147         usb_log_debug2("OK\n");
    148        
    149         return EOK;
    150 }
    151 
    152 /*----------------------------------------------------------------------------*/
    153 
    154 static size_t usb_generic_get_report_descriptor_length(ddf_fun_t *fun)
    155 {
    156         usb_log_debug("Generic HID: Get report descriptor length.\n");
    157        
    158         if (fun == NULL || fun->driver_data == NULL) {
    159                 usb_log_debug("No function");
    160                 return EINVAL;
    161         }
    162        
    163         usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
    164        
    165         usb_log_debug2("hid_dev->report_desc_size = %zu\n",
    166             hid_dev->report_desc_size);
    167        
    168         return hid_dev->report_desc_size;
    169 }
    170 
    171 /*----------------------------------------------------------------------------*/
    172 
    173 static int usb_generic_get_report_descriptor(ddf_fun_t *fun, uint8_t *desc,
    174     size_t size, size_t *actual_size)
    175 {
    176         usb_log_debug2("Generic HID: Get report descriptor.\n");
    177        
    178         if (fun == NULL || fun->driver_data == NULL) {
    179                 usb_log_debug("No function");
    180                 return EINVAL;
    181         }
    182        
    183         usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
    184        
    185         if (hid_dev->report_desc_size > size) {
    186                 return EINVAL;  // TODO: other error code
    187         }
    188        
    189         memcpy(desc, hid_dev->report_desc, hid_dev->report_desc_size);
    190         *actual_size = hid_dev->report_desc_size;
    191122       
    192123        return EOK;
     
    197128static int usb_generic_hid_client_connected(ddf_fun_t *fun)
    198129{
    199         usb_log_debug("Generic HID: Client connected.\n");
     130        usb_hid_report_received();
    200131        return EOK;
    201132}
     
    214145                return ENOMEM;
    215146        }
    216        
    217         fun->ops = &usb_generic_hid_ops;
    218         fun->driver_data = hid_dev;
    219147
    220148        int rc = ddf_fun_bind(fun);
     
    226154        }
    227155       
    228         usb_log_debug("HID function created. Handle: %d\n", fun->handle);
     156        fun->ops = &usb_generic_hid_ops;
     157        fun->driver_data = hid_dev;
    229158       
    230159        return EOK;
     
    247176    uint8_t *buffer, size_t buffer_size)
    248177{
    249         usb_log_debug2("usb_hid_polling_callback(%p, %p, %zu)\n",
     178        usb_log_debug("usb_hid_polling_callback(%p, %p, %zu)\n",
    250179            hid_dev, buffer, buffer_size);
    251180        usb_debug_str_buffer(buffer, buffer_size, 0);
Note: See TracChangeset for help on using the changeset viewer.