Changeset e765ccb in mainline for uspace/lib


Ignore:
Timestamp:
2011-05-20T10:44:53Z (15 years ago)
Author:
Lubos Slovak <lubos.slovak@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e7079cf
Parents:
d1fb591
Message:

Changed HID driver interface and modified mkbd + fixes.

Location:
uspace/lib
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/drv/generic/remote_usbhid.c

    rd1fb591 re765ccb  
    7171        }
    7272
    73         int len = hid_iface->get_event_length(fun);
     73        size_t len = hid_iface->get_event_length(fun);
    7474        if (len == 0) {
    7575                len = EEMPTY;
     
    100100                return;
    101101        }
    102         /* Check that length is even number. Truncate otherwise. */
    103         if ((len % 2) == 1) {
    104                 len--;
    105         }
     102//      /* Check that length is even number. Truncate otherwise. */
     103//      if ((len % 2) == 1) {
     104//              len--;
     105//      }
    106106        if (len == 0) {
    107107                async_answer_0(data_callid, EINVAL);
     
    111111        int rc;
    112112
    113         size_t items = len / 2;
    114         uint16_t *usage_pages_and_usages = malloc(sizeof(uint16_t) * len);
    115         if (usage_pages_and_usages == NULL) {
     113        int32_t *data = malloc(len);
     114        if (data == NULL) {
    116115                async_answer_0(data_callid, ENOMEM);
    117116                async_answer_0(callid, ENOMEM);
    118117        }
    119118
    120         size_t act_items;
    121         int rc = hid_iface->get_event(fun, usage_pages_and_usages,
    122             usage_pages_and_usages + items, items, &act_items, flags);
     119        size_t act_length;
     120        rc = hid_iface->get_event(fun, data, len, &act_length, flags);
    123121        if (rc != EOK) {
    124                 free(usage_pages_and_usages);
     122                free(data);
    125123                async_answer_0(data_callid, rc);
    126124                async_answer_0(callid, rc);
    127125        }
    128         if (act_items >= items) {
     126        if (act_length >= len) {
    129127                /* This shall not happen. */
    130128                // FIXME: how about an assert here?
    131                 act_items = items;
     129                act_length = len;
    132130        }
    133131
    134         async_data_read_finalize(data_callid, usage_pages_and_usages,
    135             act_items * 2 * sizeof(uint16_t));
     132        async_data_read_finalize(data_callid, data, act_length);
    136133
    137         free(usage_pages_and_usages);
     134        free(data);
    138135
    139136        async_answer_0(callid, EOK);
  • uspace/lib/usbhid/include/usb/hid/iface.h

    rd1fb591 re765ccb  
    3838#include <sys/types.h>
    3939
    40 int usbhid_dev_get_event_length(int);
    41 int usbhid_dev_get_event(int, uint16_t *, uint16_t *, size_t, size_t *,
     40int usbhid_dev_get_event_length(int, size_t *);
     41int usbhid_dev_get_event(int, int32_t *, size_t, size_t *,
    4242    unsigned int);
    4343
  • uspace/lib/usbhid/src/hidiface.c

    rd1fb591 re765ccb  
    4646 * @return Number of usages returned or negative error code.
    4747 */
    48 int usbhid_dev_get_event_length(int dev_phone)
     48int usbhid_dev_get_event_length(int dev_phone, size_t *size)
    4949{
    5050        if (dev_phone < 0) {
     
    5656            IPC_M_USBHID_GET_EVENT_LENGTH, &len);
    5757        if (rc == EOK) {
    58                 return (int) len;
    59         } else {
    60                 return rc;
     58                *size = (size_t) len;
    6159        }
     60       
     61        return rc;
    6262}
    6363
     
    7474 * @return Error code.
    7575 */
    76 int usbhid_dev_get_event(int dev_phone, uint16_t *usage_pages, uint16_t *usages,
    77     size_t usage_count, size_t *actual_usage_count, unsigned int flags)
     76int usbhid_dev_get_event(int dev_phone, int32_t *buf,
     77    size_t size, size_t *actual_size, unsigned int flags)
    7878{
    7979        if (dev_phone < 0) {
    8080                return EINVAL;
    8181        }
    82         if ((usage_pages == NULL) || (usages == NULL)) {
     82        if ((buf == NULL)) {
    8383                return ENOMEM;
    8484        }
    85         if (usage_count == 0) {
     85        if (size == 0) {
    8686                return EINVAL;
    8787        }
    8888
    89         size_t buffer_size = sizeof(uint16_t) * usage_count * 2;
     89        size_t buffer_size =  size;
    9090        uint16_t *buffer = malloc(buffer_size);
    9191        if (buffer == NULL) {
     
    128128        }
    129129
    130         size_t actual_size = IPC_GET_ARG2(data_request_call);
    131         size_t items = actual_size / 2;
     130        size_t act_size = IPC_GET_ARG2(data_request_call);
    132131
    133132        /* Copy the individual items. */
    134         memcpy(usage_pages, buffer, items * sizeof(uint16_t));
    135         memcpy(usages, buffer + items, items * sizeof(uint16_t));
     133        memcpy(buf, buffer, act_size);
     134//      memcpy(usages, buffer + items, items * sizeof(int32_t));
    136135
    137         if (actual_usage_count != NULL) {
    138                 *actual_usage_count = items;
     136        if (actual_size != NULL) {
     137                *actual_size = act_size;
    139138        }
    140139
Note: See TracChangeset for help on using the changeset viewer.