Changeset 65b458c4 in mainline for uspace/drv/usbhid/mouse/mousedev.c


Ignore:
Timestamp:
2011-05-13T12:44:37Z (13 years ago)
Author:
Lubos Slovak <lubos.slovak@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
37f87fa
Parents:
97cb542
Message:

Subdriver-specific data moved to the subdriver structure.

+ DDF ops removed from hid_dev_t.

Should fix #225

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/usbhid/mouse/mousedev.c

    r97cb542 r65b458c4  
    122122        sysarg_t method = IPC_GET_IMETHOD(*icall);
    123123       
    124         usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
    125        
    126         if (hid_dev == NULL || hid_dev->data == NULL) {
     124        usb_mouse_t *mouse_dev = (usb_mouse_t *)fun->driver_data;
     125       
     126        if (mouse_dev == NULL) {
    127127                usb_log_debug("default_connection_handler: Missing "
    128128                    "parameters.\n");
     
    131131        }
    132132       
    133         assert(hid_dev != NULL);
    134         assert(hid_dev->data != NULL);
    135         usb_mouse_t *mouse_dev = (usb_mouse_t *)hid_dev->data;
    136        
    137133        int *phone = (str_cmp(fun->name, HID_MOUSE_FUN_NAME) == 0)
    138134                     ? &mouse_dev->mouse_phone : &mouse_dev->wheel_phone;
     
    145141                            "phone to mouse already set.\n");
    146142                        async_answer_0(icallid, ELIMIT);
    147                         //async_answer_0(icallid, EOK);
    148143                        return;
    149144                }
     
    224219/*----------------------------------------------------------------------------*/
    225220
    226 static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev, uint8_t *buffer,
    227     size_t buffer_size)
    228 {
    229         usb_mouse_t *mouse_dev = (usb_mouse_t *)hid_dev->data;
     221static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev,
     222                                     usb_mouse_t *mouse_dev, uint8_t *buffer,
     223                                     size_t buffer_size)
     224{
     225        assert(mouse_dev != NULL);
    230226       
    231227        usb_log_debug2("got buffer: %s.\n",
     
    378374/*----------------------------------------------------------------------------*/
    379375
    380 static int usb_mouse_create_function(usb_hid_dev_t *hid_dev)
    381 {
     376static int usb_mouse_create_function(usb_hid_dev_t *hid_dev, usb_mouse_t *mouse)
     377{
     378        assert(hid_dev != NULL);
     379        assert(mouse != NULL);
     380       
    382381        /* Create the function exposed under /dev/devices. */
    383382        usb_log_debug("Creating DDF function %s...\n", HID_MOUSE_FUN_NAME);
     
    389388        }
    390389       
    391         /*
    392          * Store the initialized HID device and HID ops
    393          * to the DDF function.
    394          */
    395         fun->ops = &hid_dev->ops;
    396         fun->driver_data = hid_dev;   // TODO: maybe change to hid_dev->data
     390        fun->ops = &mouse->ops;
     391        fun->driver_data = mouse;   // TODO: maybe change to hid_dev->data
    397392
    398393        int rc = ddf_fun_bind(fun);
     
    431426         * to the DDF function.
    432427         */
    433         fun->ops = &hid_dev->ops;
     428        fun->ops = &mouse->ops;
    434429        fun->driver_data = hid_dev;   // TODO: maybe change to hid_dev->data
    435430
     
    458453/*----------------------------------------------------------------------------*/
    459454
    460 int usb_mouse_init(usb_hid_dev_t *hid_dev)
     455int usb_mouse_init(usb_hid_dev_t *hid_dev, void **data)
    461456{
    462457        usb_log_debug("Initializing HID/Mouse structure...\n");
     
    485480       
    486481        // save the Mouse device structure into the HID device structure
    487         hid_dev->data = mouse_dev;
     482        *data = mouse_dev;
    488483       
    489484        // set handler for incoming calls
    490         hid_dev->ops.default_handler = default_connection_handler;
     485        // TODO: must be one for each subdriver!!
     486        mouse_dev->ops.default_handler = default_connection_handler;
    491487       
    492488        // TODO: how to know if the device supports the request???
     
    494490//          hid_dev->usb_dev->interface_no, IDLE_RATE);
    495491       
    496         int rc = usb_mouse_create_function(hid_dev);
     492        int rc = usb_mouse_create_function(hid_dev, mouse_dev);
    497493        if (rc != EOK) {
    498494                usb_mouse_free(&mouse_dev);
     
    505501/*----------------------------------------------------------------------------*/
    506502
    507 bool usb_mouse_polling_callback(usb_hid_dev_t *hid_dev, uint8_t *buffer,
    508      size_t buffer_size)
     503bool usb_mouse_polling_callback(usb_hid_dev_t *hid_dev, void *data,
     504     uint8_t *buffer, size_t buffer_size)
    509505{
    510506        usb_log_debug("usb_mouse_polling_callback()\n");
    511507        usb_debug_str_buffer(buffer, buffer_size, 0);
    512508       
    513         if (hid_dev == NULL) {
     509        if (hid_dev == NULL || data == NULL) {
    514510                usb_log_error("Missing argument to the mouse polling callback."
    515511                    "\n");
     
    517513        }
    518514       
    519         if (hid_dev->data == NULL) {
    520                 usb_log_error("Wrong argument to the mouse polling callback."
    521                     "\n");
    522                 return false;
    523         }
    524        
    525         return usb_mouse_process_report(hid_dev, buffer, buffer_size);
    526 }
    527 
    528 /*----------------------------------------------------------------------------*/
    529 
    530 void usb_mouse_deinit(usb_hid_dev_t *hid_dev)
    531 {
    532         usb_mouse_free((usb_mouse_t **)&hid_dev->data);
     515        usb_mouse_t *mouse_dev = (usb_mouse_t *)data;
     516               
     517        return usb_mouse_process_report(hid_dev, mouse_dev, buffer,
     518                                        buffer_size);
     519}
     520
     521/*----------------------------------------------------------------------------*/
     522
     523void usb_mouse_deinit(usb_hid_dev_t *hid_dev, void *data)
     524{
     525        if (data != NULL) {
     526                usb_mouse_free((usb_mouse_t **)&data);
     527        }
    533528}
    534529
Note: See TracChangeset for help on using the changeset viewer.