Changeset a2afd8f in mainline for uspace/drv/hid
- Timestamp:
- 2017-11-13T18:07:46Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0dd4779
- Parents:
- 56763a4
- Location:
- uspace/drv/hid
- Files:
-
- 10 added
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/hid/adb-kbd/ctl.c
r56763a4 ra2afd8f 27 27 */ 28 28 29 /** @addtogroup kbd_ctl30 * @ingroup input31 * @{32 */33 29 /** 34 30 * @file 35 * @brief Apple ADB keyboard controller driver. 36 */ 37 31 * @brief Apple ADB keyboard controller 32 */ 33 34 #include <errno.h> 38 35 #include <io/console.h> 39 36 #include <io/keycode.h> 40 #include "../kbd.h" 41 #include "../kbd_ctl.h" 42 #include "../kbd_port.h" 43 44 static void apple_ctl_parse(sysarg_t); 45 static int apple_ctl_init(kbd_dev_t *); 46 static void apple_ctl_set_ind(kbd_dev_t *, unsigned int); 47 48 kbd_ctl_ops_t apple_ctl = { 49 .parse = apple_ctl_parse, 50 .init = apple_ctl_init, 51 .set_ind = apple_ctl_set_ind 52 }; 37 38 #include "ctl.h" 53 39 54 40 #define KBD_KEY_RELEASE 0x80 … … 185 171 }; 186 172 187 static kbd_dev_t *kbd_dev; 188 189 static int apple_ctl_init(kbd_dev_t *kdev) 173 /** Translate ADB keyboard scancode into keyboard event. 174 * 175 * @param scancode Scancode 176 * @param rtype Place to store type of keyboard event (press or release) 177 * @param rkey Place to store key code 178 * 179 * @return EOK on success, ENOENT if no translation exists 180 */ 181 int adb_kbd_key_translate(sysarg_t scancode, kbd_event_type_t *rtype, 182 unsigned int *rkey) 190 183 { 191 kbd_dev = kdev; 192 return 0; 193 } 194 195 static void apple_ctl_parse(sysarg_t scancode) 196 { 197 kbd_event_type_t type; 198 184 kbd_event_type_t etype; 185 unsigned int key; 186 199 187 if (scancode & KBD_KEY_RELEASE) { 200 188 scancode &= ~KBD_KEY_RELEASE; 201 type = KEY_RELEASE; 202 } else 203 type = KEY_PRESS; 204 189 etype = KEY_RELEASE; 190 } else { 191 etype = KEY_PRESS; 192 } 193 205 194 if (scancode >= sizeof(scanmap) / sizeof(unsigned int)) 206 return; 207 208 unsigned int key = scanmap[scancode]; 209 if (key != 0) 210 kbd_push_event(kbd_dev, type, key); 195 return ENOENT; 196 197 key = scanmap[scancode]; 198 if (key == 0) 199 return ENOENT; 200 201 *rtype = etype; 202 *rkey = key; 203 return EOK; 211 204 } 212 205 213 static void apple_ctl_set_ind(kbd_dev_t *kdev, unsigned mods)214 {215 (void) mods;216 }217 218 206 /** @} 219 207 */ -
uspace/drv/hid/adb-mouse/adb-mouse.h
r56763a4 ra2afd8f 1 1 /* 2 * Copyright (c) 201 1 Martin Decky2 * Copyright (c) 2017 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mouse_proto 30 * @ingroup input 31 * @{ 32 */ 33 /** 34 * @file 35 * @brief ADB protocol driver. 29 /** @file ADB mouse driver 36 30 */ 37 31 32 #ifndef ADB_MOUSE_H 33 #define ADB_MOUSE_H 34 35 #include <async.h> 36 #include <ddf/driver.h> 38 37 #include <stdbool.h> 39 #include "../mouse.h"40 #include "../mouse_port.h"41 #include "../mouse_proto.h"42 38 43 static mouse_dev_t *mouse_dev; 44 static bool b1_pressed; 45 static bool b2_pressed; 39 /** ADB mouse */ 40 typedef struct { 41 ddf_dev_t *dev; 42 async_sess_t *parent_sess; 43 ddf_fun_t *fun; 44 async_sess_t *client_sess; 45 bool b1_pressed; 46 bool b2_pressed; 47 } adb_mouse_t; 46 48 47 static int adb_proto_init(mouse_dev_t *mdev) 48 { 49 mouse_dev = mdev; 50 b1_pressed = false; 51 b2_pressed = false; 52 53 return 0; 54 } 49 extern int adb_mouse_add(adb_mouse_t *); 50 extern int adb_mouse_remove(adb_mouse_t *); 51 extern int adb_mouse_gone(adb_mouse_t *); 55 52 56 /** Process mouse data */ 57 static void adb_proto_parse(sysarg_t data) 58 { 59 bool b1, b2; 60 uint16_t udx, udy; 61 int dx, dy; 62 63 /* Extract fields. */ 64 b1 = ((data >> 15) & 1) == 0; 65 udy = (data >> 8) & 0x7f; 66 b2 = ((data >> 7) & 1) == 0; 67 udx = data & 0x7f; 68 69 /* Decode 7-bit two's complement signed values. */ 70 dx = (udx & 0x40) ? (udx - 0x80) : udx; 71 dy = (udy & 0x40) ? (udy - 0x80) : udy; 72 73 if (b1 != b1_pressed) { 74 mouse_push_event_button(mouse_dev, 1, b1); 75 b1_pressed = b1; 76 } 77 78 if (b2 != b2_pressed) { 79 mouse_push_event_button(mouse_dev, 2, b2); 80 b1_pressed = b1; 81 } 82 83 if (dx != 0 || dy != 0) 84 mouse_push_event_move(mouse_dev, dx, dy, 0); 85 } 53 #endif 86 54 87 mouse_proto_ops_t adb_proto = { 88 .parse = adb_proto_parse, 89 .init = adb_proto_init 90 }; 91 92 /** 93 * @} 55 /** @} 94 56 */
Note:
See TracChangeset
for help on using the changeset viewer.