Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbhid/include/usb/hid/hidtypes.h

    r74b1e40 r160b75e  
    2727 */
    2828
    29 /** @addtogroup libusb
     29/** @addtogroup libusbhid
    3030 * @{
    3131 */
    3232/** @file
    33  * Basic data structures for USB HID Report descriptor and report parser.
    34  */
    35 #ifndef LIBUSB_HIDTYPES_H_
    36 #define LIBUSB_HIDTYPES_H_
     33 * USB HID report descriptor and report data parser
     34 */
     35#ifndef LIBUSBHID_HIDTYPES_H_
     36#define LIBUSBHID_HIDTYPES_H_
    3737
    3838#include <stdint.h>
    3939#include <adt/list.h>
    4040
    41 /*---------------------------------------------------------------------------*/
    42 
    43 /**
    44  * Maximum amount of specified usages for one report item
    45  */
    46 #define USB_HID_MAX_USAGES      0xffff
    47 
    48 /**
    49  * Converts integer from unsigned two's complement format format to signed
    50  * one.
    51  *
    52  * @param x Number to convert
    53  * @param size Length of the unsigned number in bites
    54  * @return signed int
    55  */
    56 #define USB_HID_UINT32_TO_INT32(x, size)        \
    57         ((((x) & (1 << ((size) - 1))) != 0) ?   \
    58          -(~((x) - 1) & ((1 << size) - 1)) : (x))
    59 
    60 /**
    61  * Convert integer from signed format to unsigned. If number is negative the
    62  * two's complement format is used.
    63  *
    64  * @param x Number to convert
    65  * @param size Length of result number in bites
    66  * @return unsigned int
    67  */
    68 #define USB_HID_INT32_TO_UINT32(x, size)        \
    69         (((x) < 0 ) ? ((1 << (size)) + (x)) : (x))
    70 
    71 /*---------------------------------------------------------------------------*/
    72 
    73 /**
    74  * Report type
    75  */
     41#define USB_HID_MAX_USAGES      20
     42
     43#define USB_HID_UINT32_TO_INT32(x, size)        ((((x) & (1 << ((size) - 1))) != 0) ? -(~(x - 1) & ((1 << size) - 1)) : (x)) //(-(~((x) - 1)))
     44#define USB_HID_INT32_TO_UINT32(x, size)        (((x) < 0 ) ? ((1 << (size)) + (x)) : (x))
     45
     46
    7647typedef enum {
    7748        USB_HID_REPORT_TYPE_INPUT = 1,
     
    8051} usb_hid_report_type_t;
    8152
    82 /*---------------------------------------------------------------------------*/
    83 
    84 /**
    85  * Description of all reports described in one report descriptor.
    86  */
    87 typedef struct {
    88         /** Count of available reports. */
     53
     54typedef struct {
     55        /** */
    8956        int report_count;
    90 
    91         /** Head of linked list of description of reports. */
    92         link_t reports;
    93 
    94         /** Head of linked list of all used usage/collection paths. */
     57        link_t reports;         /** list of usb_hid_report_description_t */
     58
    9559        link_t collection_paths;
    96 
    97         /** Length of list of usage paths. */
    9860        int collection_paths_count;
    9961
    100         /** Flag whether report ids are used. */
    10162        int use_report_ids;
    102 
    103         /** Report id of last parsed report. */
    10463        uint8_t last_report_id;
    10564       
    10665} usb_hid_report_t;
    107 /*---------------------------------------------------------------------------*/
    108 
    109 /**
    110  * Description of one concrete report
    111  */
    112 typedef struct {
    113         /** Report id. Zero when no report id is used. */
     66
     67typedef struct {
    11468        uint8_t report_id;
    115 
    116         /** Type of report */
    11769        usb_hid_report_type_t type;
    11870
    119         /** Bit length of the report */
    12071        size_t bit_length;
    121 
    122         /** Number of items in report */
    12372        size_t item_length;
    12473       
    125         /** Linked list of report items in report */
    126         link_t report_items;
    127 
    128         /** Linked list of descriptions. */
     74        link_t report_items;    /** list of report items (fields) */
     75
    12976        link_t link;
    13077} usb_hid_report_description_t;
    131 /*---------------------------------------------------------------------------*/
    132 
    133 /**
    134  * Description of one field/item in report
    135  */
    136 typedef struct {
    137         /** Bit offset of the field */
     78
     79typedef struct {
     80
    13881        int offset;
    139 
    140         /** Bit size of the field */
    14182        size_t size;
    14283
    143         /** Usage page. Zero when usage page can be changed. */
    14484        uint16_t usage_page;
    145 
    146         /** Usage. Zero when usage can be changed. */
    14785        uint16_t usage;
    14886
    149         /** Item's attributes */
    15087        uint8_t item_flags;
    151 
    152         /** Usage/Collection path of the field. */
    15388        usb_hid_report_path_t *collection_path;
    15489
    155         /**
    156          * The lowest valid logical value (value with the device operates)
    157          */
    15890        int32_t logical_minimum;
    159 
    160         /**
    161          * The greatest valid logical value
    162          */
    16391        int32_t logical_maximum;
    164 
    165         /**
    166          * The lowest valid physical value (value with the system operates)
    167          */
    16892        int32_t physical_minimum;
    169 
    170         /** The greatest valid physical value */
    17193        int32_t physical_maximum;
    172 
    173         /** The lowest valid usage index */
    174         int32_t usage_minimum;
    175 
    176         /** The greatest valid usage index */
    177         int32_t usage_maximum;
    178        
    179         /** Unit of the value */
     94        uint32_t usage_minimum;
     95        uint32_t usage_maximum;
    18096        uint32_t unit;
    181 
    182         /** Unit exponent */
    18397        uint32_t unit_exponent;
    184 
    185         /** Array of possible usages */
    186         uint32_t *usages;
    187 
    188         /** Size of the array of usages */
    189         size_t usages_count;
    190 
    191         /** Parsed value */
     98       
     99
    192100        int32_t value;
    193101
    194         /** List to another report items */
    195102        link_t link;
    196103} usb_hid_report_field_t;
    197104
    198 /*---------------------------------------------------------------------------*/
     105
    199106
    200107/**
    201  * State table for report descriptor parsing
     108 * state table
    202109 */
    203110typedef struct {
     
    205112        int32_t id;
    206113       
    207         /** Extended usage page */
     114        /** */
    208115        uint16_t extended_usage_page;
    209 
    210         /** Array of usages specified for this item */
    211116        uint32_t usages[USB_HID_MAX_USAGES];
    212        
    213         /** Length of usages array */
    214117        int usages_count;
    215118
    216         /** Usage page*/
     119        /** */
    217120        uint32_t usage_page;
    218121
    219         /** Minimum valid usage index */       
    220         int32_t usage_minimum;
    221        
    222         /** Maximum valid usage index */       
    223         int32_t usage_maximum;
    224        
    225         /** Minimum valid logical value */     
     122        /** */ 
     123        uint32_t usage_minimum;
     124        /** */ 
     125        uint32_t usage_maximum;
     126        /** */ 
    226127        int32_t logical_minimum;
    227        
    228         /** Maximum valid logical value */     
     128        /** */ 
    229129        int32_t logical_maximum;
    230 
    231         /** Length of the items in bits*/       
     130        /** */ 
    232131        int32_t size;
    233 
    234         /** COunt of items*/   
     132        /** */ 
    235133        int32_t count;
    236 
    237         /**  Bit offset of the item in report */       
     134        /** */ 
    238135        size_t offset;
    239 
    240         /** Unit exponent */   
     136        /** */ 
    241137        int32_t unit_exponent;
    242         /** Unit of the value */       
     138        /** */ 
    243139        int32_t unit;
    244140
    245         /** String index */
     141        /** */
    246142        uint32_t string_index;
    247 
    248         /** Minimum valid string index */       
     143        /** */ 
    249144        uint32_t string_minimum;
    250 
    251         /** Maximum valid string index */       
     145        /** */ 
    252146        uint32_t string_maximum;
    253 
    254         /** The designator index */     
     147        /** */ 
    255148        uint32_t designator_index;
    256 
    257         /** Minimum valid designator value*/   
     149        /** */ 
    258150        uint32_t designator_minimum;
    259 
    260         /** Maximum valid designator value*/   
     151        /** */ 
    261152        uint32_t designator_maximum;
    262 
    263         /** Minimal valid physical value*/     
     153        /** */ 
    264154        int32_t physical_minimum;
    265 
    266         /** Maximal valid physical value */     
     155        /** */ 
    267156        int32_t physical_maximum;
    268157
    269         /** Items attributes*/ 
     158        /** */ 
    270159        uint8_t item_flags;
    271160
    272         /** Report type */
    273161        usb_hid_report_type_t type;
    274162
    275163        /** current collection path*/   
    276164        usb_hid_report_path_t *usage_path;
    277 
    278         /** Unused*/   
     165        /** */ 
    279166        link_t link;
    280167
    281168        int in_delimiter;
    282169} usb_hid_report_item_t;
    283 /*---------------------------------------------------------------------------*/
    284 /**
    285  * Enum of the keyboard modifiers
    286  */
     170
     171/** HID parser callbacks for IN items. */
     172typedef struct {
     173        /** Callback for keyboard.
     174         *
     175         * @param key_codes Array of pressed key (including modifiers).
     176         * @param count Length of @p key_codes.
     177         * @param arg Custom argument.
     178         */
     179        void (*keyboard)(const uint8_t *key_codes, size_t count, const uint8_t report_id, void *arg);
     180} usb_hid_report_in_callbacks_t;
     181
     182
    287183typedef enum {
    288184        USB_HID_MOD_LCTRL = 0x01,
     
    308204        USB_HID_MOD_RGUI
    309205};
    310 /*---------------------------------------------------------------------------*/
    311 
    312206
    313207#endif
Note: See TracChangeset for help on using the changeset viewer.