Changeset 0a9ea4a in mainline for uspace/lib/usb


Ignore:
Timestamp:
2011-01-14T14:28:57Z (15 years ago)
Author:
Lubos Slovak <lubos.slovak@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1d7a74e, 6336b6e
Parents:
45019865 (diff), 2f60e57d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge development into lelian/hidd

Location:
uspace/lib/usb
Files:
1 added
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/Makefile

    r45019865 r0a9ea4a  
    3636        src/class.c \
    3737        src/debug.c \
     38        src/dp.c \
    3839        src/drvpsync.c \
    3940        src/hcdhubd.c \
  • uspace/lib/usb/include/usb/classes/hidparser.h

    r45019865 r0a9ea4a  
    3838#include <stdint.h>
    3939
     40/**
     41 * Description of report items
     42 */
     43typedef struct {
     44
     45        uint8_t usage_min;
     46        uint8_t usage_max;
     47        uint8_t logical_min;
     48        uint8_t logical_max;
     49        uint8_t size;
     50        uint8_t count;
     51        uint8_t offset;
     52
     53} usb_hid_report_item_t;
     54
     55
    4056/** HID report parser structure. */
    4157typedef struct {
    4258} usb_hid_report_parser_t;
     59
    4360
    4461/** HID parser callbacks for IN items. */
     
    5067         * @param arg Custom argument.
    5168         */
    52         void (*keyboard)(const uint16_t *key_codes, size_t count, void *arg);
     69        void (*keyboard)(const uint8_t *key_codes, size_t count, const uint8_t modifiers, void *arg);
    5370} usb_hid_report_in_callbacks_t;
     71
     72#define USB_HID_BOOT_KEYBOARD_NUM_LOCK          0x01
     73#define USB_HID_BOOT_KEYBOARD_CAPS_LOCK         0x02
     74#define USB_HID_BOOT_KEYBOARD_SCROLL_LOCK       0x04
     75#define USB_HID_BOOT_KEYBOARD_COMPOSE           0x08
     76#define USB_HID_BOOT_KEYBOARD_KANA                      0x10
     77
     78/*
     79 * modifiers definitions
     80 */
     81
     82int usb_hid_boot_keyboard_input_report(const uint8_t *data, size_t size,
     83        const usb_hid_report_in_callbacks_t *callbacks, void *arg);
     84
     85int usb_hid_boot_keyboard_output_report(uint8_t leds, uint8_t *data, size_t size);
    5486
    5587int usb_hid_parse_report_descriptor(usb_hid_report_parser_t *parser,
     
    6092    const usb_hid_report_in_callbacks_t *callbacks, void *arg);
    6193
     94
     95int usb_hid_free_report_parser(usb_hid_report_parser_t *parser);
     96
    6297#endif
    6398/**
  • uspace/lib/usb/include/usb/dp.h

    r45019865 r0a9ea4a  
    11/*
    2  * Copyright (c) 2008 Lukas Mejdrech
     2 * Copyright (c) 2011 Vojtech Horky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libusb
    3030 * @{
    3131 */
     32/** @file
     33 * @brief USB descriptor parser.
     34 */
     35#ifndef LIBUSB_DP_H_
     36#define LIBUSB_DP_H_
    3237
    33 /** @file
    34  * ICMP module functions.
    35  * The functions are used as ICMP module entry points.
    36  */
     38#include <sys/types.h>
     39#include <usb/usb.h>
     40#include <usb/descriptor.h>
    3741
    38 #ifndef NET_ICMP_MODULE_H_
    39 #define NET_ICMP_MODULE_H_
     42typedef struct {
     43        int child;
     44        int parent;
     45} usb_dp_descriptor_nesting_t;
    4046
    41 #include <async.h>
    42 #include <ipc/ipc.h>
     47typedef struct {
     48        usb_dp_descriptor_nesting_t *nesting;
     49} usb_dp_parser_t;
    4350
    44 extern int icmp_initialize(async_client_conn_t);
    45 extern int icmp_message_standalone(ipc_callid_t, ipc_call_t *, ipc_call_t *,
    46     size_t *);
     51typedef struct {
     52        uint8_t *data;
     53        size_t size;
     54        void *arg;
     55} usb_dp_parser_data_t;
     56
     57uint8_t *usb_dp_get_nested_descriptor(usb_dp_parser_t *,
     58    usb_dp_parser_data_t *, uint8_t *);
     59uint8_t *usb_dp_get_sibling_descriptor(usb_dp_parser_t *,
     60    usb_dp_parser_data_t *, uint8_t *, uint8_t *);
    4761
    4862#endif
    49 
    50 /** @}
     63/**
     64 * @}
    5165 */
  • uspace/lib/usb/src/hidparser.c

    r45019865 r0a9ea4a  
    4040 * @param parser Opaque HID report parser structure.
    4141 * @param data Data describing the report.
    42  * @param size Size of the descriptor in bytes.
    4342 * @return Error code.
    4443 */
     
    5554 * @param parser Opaque HID report parser structure.
    5655 * @param data Data for the report.
    57  * @param size Size of the data in bytes.
    5856 * @param callbacks Callbacks for report actions.
    5957 * @param arg Custom argument (passed through to the callbacks).
     
    6664        int i;
    6765       
    68         // TODO: parse report
     66        /* main parsing loop */
     67        while(0){
     68        }
    6969       
    70         uint16_t keys[6];
     70       
     71        uint8_t keys[6];
    7172       
    7273        for (i = 0; i < 6; ++i) {
     
    7475        }
    7576       
    76         callbacks->keyboard(keys, 6, arg);
    77        
     77        callbacks->keyboard(keys, 6, 0, arg);
     78
     79        return EOK;
     80}
     81
     82/** Free the HID report parser structure
     83 *
     84 * @param parser Opaque HID report parser structure
     85 * @return Error code
     86 */
     87int usb_hid_free_report_parser(usb_hid_report_parser_t *parser)
     88{
     89
    7890        return EOK;
    7991}
     
    8193
    8294/**
     95 * Parse input report.
     96 *
     97 * @param data Data for report
     98 * @param size Size of report
     99 * @param callbacks Callbacks for report actions
     100 * @param arg Custom arguments
     101 *
     102 * @return Error code
     103 */
     104int usb_hid_boot_keyboard_input_report(const uint8_t *data, size_t size,
     105        const usb_hid_report_in_callbacks_t *callbacks, void *arg)
     106{
     107        int i;
     108        usb_hid_report_item_t item;
     109
     110        /* fill item due to the boot protocol report descriptor */
     111        // modifier keys are in the first byte
     112        uint8_t modifiers = data[0];
     113
     114        item.offset = 2; /* second byte is reserved */
     115        item.size = 8;
     116        item.count = 6;
     117        item.usage_min = 0;
     118        item.usage_max = 255;
     119        item.logical_min = 0;
     120        item.logical_max = 255;
     121
     122        if(size != 8){
     123                return -1;
     124        }
     125
     126        uint8_t keys[6];
     127        for(i=item.offset; i<item.count; i++) {
     128                keys[i-2] = data[i];
     129        }
     130
     131        callbacks->keyboard(keys, 6, modifiers, arg);
     132        return EOK;
     133}
     134
     135/**
     136 * Makes output report for keyboard boot protocol
     137 *
     138 * @param leds
     139 * @param output Output report data buffer
     140 * @param size Size of the output buffer
     141 * @return Error code
     142 */
     143int usb_hid_boot_keyboard_output_report(uint8_t leds, uint8_t *data, size_t size)
     144{
     145        if(size != 1){
     146                return -1;
     147        }
     148
     149        /* used only first five bits, others are only padding*/
     150        *data = leds;
     151        return EOK;
     152}
     153
     154/**
    83155 * @}
    84156 */
  • uspace/lib/usb/src/recognise.c

    r45019865 r0a9ea4a  
    346346    usb_address_t address, devman_handle_t *child_handle)
    347347{
     348        static size_t device_name_index = 0;
     349
    348350        device_t *child = NULL;
    349351        char *child_name = NULL;
     
    357359
    358360        /*
    359          * TODO: some better child naming
    360          */
    361         rc = asprintf(&child_name, "usb%p", child);
     361         * TODO: Once the device driver framework support persistent
     362         * naming etc., something more descriptive could be created.
     363         */
     364        rc = asprintf(&child_name, "usbdev%02zu", device_name_index);
    362365        if (rc < 0) {
    363366                goto failure;
     
    381384        }
    382385       
     386        device_name_index++;
     387
    383388        return EOK;
    384389
  • uspace/lib/usb/src/usbdrvreq.c

    r45019865 r0a9ea4a  
    6060#define PREPARE_SETUP_PACKET(name, p_direction, p_type, p_recipient, \
    6161    p_request, p_value, p_index, p_length) \
    62         usb_device_request_setup_packet_t setup_packet = { \
     62        usb_device_request_setup_packet_t name = { \
    6363                .request_type = \
    6464                        ((p_direction) == USB_DIRECTION_IN ? 128 : 0) \
Note: See TracChangeset for help on using the changeset viewer.