source: mainline/uspace/drv/usbhid/kbddev.h@ 408ebc5

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 408ebc5 was 00b13408, checked in by Lubos Slovak <lubos.slovak@…>, 14 years ago

Fixed destroying of KBD structure when polling ended.

The structure must be destroyed in the autorepeat fibril, as there is
no nice way to stop the fibril on demand.

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/*
2 * Copyright (c) 2011 Lubos Slovak
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup drvusbhid
30 * @{
31 */
32/** @file
33 * USB HID keyboard device structure and API.
34 */
35
36#ifndef USBHID_KBDDEV_H_
37#define USBHID_KBDDEV_H_
38
39#include <stdint.h>
40
41#include <fibril_synch.h>
42
43#include <usb/classes/hid.h>
44#include <usb/classes/hidparser.h>
45#include <ddf/driver.h>
46#include <usb/pipes.h>
47
48#include "hiddev.h"
49
50/*----------------------------------------------------------------------------*/
51/**
52 * Structure for keeping information needed for auto-repeat of keys.
53 */
54typedef struct {
55 /** Last pressed key. */
56 unsigned int key_new;
57 /** Key to be repeated. */
58 unsigned int key_repeated;
59 /** Delay before first repeat in microseconds. */
60 unsigned int delay_before;
61 /** Delay between repeats in microseconds. */
62 unsigned int delay_between;
63} usbhid_kbd_repeat_t;
64
65/**
66 * USB/HID keyboard device type.
67 *
68 * Holds a reference to generic USB/HID device structure and keyboard-specific
69 * data, such as currently pressed keys, modifiers and lock keys.
70 *
71 * Also holds a IPC phone to the console (since there is now no other way to
72 * communicate with it).
73 *
74 * @note Storing active lock keys in this structure results in their setting
75 * being device-specific.
76 */
77typedef struct {
78 /** Structure holding generic USB/HID device information. */
79 usbhid_dev_t *hid_dev;
80
81 /** Currently pressed keys (not translated to key codes). */
82 uint8_t *keys;
83 /** Count of stored keys (i.e. number of keys in the report). */
84 size_t key_count;
85 /** Currently pressed modifiers (bitmap). */
86 uint8_t modifiers;
87
88 /** Currently active modifiers including locks. Sent to the console. */
89 unsigned mods;
90
91 /** Currently active lock keys. */
92 unsigned lock_keys;
93
94 /** IPC phone to the console device (for sending key events). */
95 int console_phone;
96
97 /** Information for auto-repeat of keys. */
98 usbhid_kbd_repeat_t repeat;
99
100 /** Mutex for accessing the information about auto-repeat. */
101 fibril_mutex_t *repeat_mtx;
102
103 /** State of the structure (for checking before use).
104 *
105 * 0 - not initialized
106 * 1 - initialized
107 * -1 - ready for destroying
108 */
109 int initialized;
110} usbhid_kbd_t;
111
112/*----------------------------------------------------------------------------*/
113
114int usbhid_kbd_try_add_device(ddf_dev_t *dev);
115
116int usbhid_kbd_is_usable(const usbhid_kbd_t *kbd_dev);
117
118void usbhid_kbd_free(usbhid_kbd_t **kbd_dev);
119
120void usbhid_kbd_push_ev(usbhid_kbd_t *kbd_dev, int type, unsigned int key);
121
122#endif /* USBHID_KBDDEV_H_ */
123
124/**
125 * @}
126 */
Note: See TracBrowser for help on using the repository browser.