Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbhid/multimedia/multimedia.c

    r2a5b62b r5da7199  
    6464        //int32_t *keys;
    6565        /** Count of stored keys (i.e. number of keys in the report). */
    66         //size_t key_count;
     66        //size_t key_count;     
    6767        /** IPC session to the console device (for sending key events). */
    6868        async_sess_t *console_sess;
    69         /** DDF function */
    70         ddf_fun_t *fun;
    7169} usb_multimedia_t;
    7270
     
    8886{
    8987        usb_log_debug(NAME " default_connection_handler()\n");
    90 
     88       
    9189        usb_multimedia_t *multim_dev = (usb_multimedia_t *)fun->driver_data;
    92 
     90       
    9391        if (multim_dev == NULL) {
    9492                async_answer_0(icallid, EINVAL);
    9593                return;
    9694        }
    97 
     95       
    9896        async_sess_t *sess =
    9997            async_callback_receive_start(EXCHANGE_SERIALIZE, icall);
     
    139137        assert(hid_dev != NULL);
    140138        assert(multim_dev != NULL);
    141 
     139       
    142140        kbd_event_t ev;
    143 
     141       
    144142        ev.type = type;
    145143        ev.key = key;
     
    153151                return;
    154152        }
    155 
     153       
    156154        async_exch_t *exch = async_exchange_begin(multim_dev->console_sess);
    157155        async_msg_4(exch, KBDEV_EVENT, ev.type, ev.key, ev.mods, ev.c);
     
    171169                return ENOMEM;
    172170        }
    173 
     171       
    174172        fun->ops = &multimedia_ops;
    175173        fun->driver_data = multim_dev;   // TODO: maybe change to hid_dev->data
    176 
     174       
    177175        int rc = ddf_fun_bind(fun);
    178176        if (rc != EOK) {
    179177                usb_log_error("Could not bind DDF function: %s.\n",
    180178                    str_error(rc));
     179                // TODO: Can / should I destroy the DDF function?
    181180                ddf_fun_destroy(fun);
    182181                return rc;
    183182        }
    184 
     183       
    185184        usb_log_debug("%s function created (handle: %" PRIun ").\n",
    186185            NAME, fun->handle);
    187 
     186       
    188187        rc = ddf_fun_add_to_category(fun, "keyboard");
    189188        if (rc != EOK) {
     
    191190                    "Could not add DDF function to category 'keyboard': %s.\n",
    192191                    str_error(rc));
     192                // TODO: Can / should I destroy the DDF function?
    193193                ddf_fun_destroy(fun);
    194194                return rc;
    195195        }
    196         multim_dev->fun = fun;
    197 
     196       
    198197        return EOK;
    199198}
     
    206205                return EINVAL; /*! @todo Other return code? */
    207206        }
    208 
     207       
    209208        usb_log_debug(NAME " Initializing HID/multimedia structure...\n");
    210 
     209       
    211210        usb_multimedia_t *multim_dev = (usb_multimedia_t *)malloc(
    212211            sizeof(usb_multimedia_t));
     
    214213                return ENOMEM;
    215214        }
    216 
     215       
    217216        multim_dev->console_sess = NULL;
    218 
     217       
    219218        /*! @todo Autorepeat */
    220 
     219       
    221220        // save the KBD device structure into the HID device structure
    222221        *data = multim_dev;
    223 
     222       
    224223        usb_log_debug(NAME " HID/multimedia device structure initialized.\n");
    225 
     224       
    226225        int rc = usb_multimedia_create_function(hid_dev, multim_dev);
    227226        if (rc != EOK)
    228227                return rc;
    229 
     228       
    230229        usb_log_debug(NAME " HID/multimedia structure initialized.\n");
    231 
     230       
    232231        return EOK;
    233232}
     
    240239                return;
    241240        }
    242 
     241       
    243242        if (data != NULL) {
    244243                usb_multimedia_t *multim_dev = (usb_multimedia_t *)data;
    245244                // hangup session to the console
    246245                async_hangup(multim_dev->console_sess);
    247                 const int ret = ddf_fun_unbind(multim_dev->fun);
    248                 if (ret != EOK) {
    249                         usb_log_error("Failed to unbind multim function.\n");
    250                 } else {
    251                         usb_log_debug2("%s unbound.\n", multim_dev->fun->name);
    252                         ddf_fun_destroy(multim_dev->fun);
    253                 }
    254246        }
    255247}
     
    265257
    266258        usb_multimedia_t *multim_dev = (usb_multimedia_t *)data;
    267 
     259       
    268260        usb_hid_report_path_t *path = usb_hid_report_path();
    269261        usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0);
     
    291283                                               key);
    292284                }
    293 
     285               
    294286                field = usb_hid_report_get_sibling(
    295287                    hid_dev->report, field, path, USB_HID_PATH_COMPARE_END
    296288                    | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
    297289                    USB_HID_REPORT_TYPE_INPUT);
    298         }
     290        }       
    299291
    300292        usb_hid_report_path_free(path);
    301 
     293       
    302294        return true;
    303295}
Note: See TracChangeset for help on using the changeset viewer.