Changeset 8ff0bd2 in mainline for uspace/srv/hid/input
- Timestamp:
- 2011-09-04T11:30:58Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 03bc76a
- Parents:
- d2c67e7 (diff), deac215e (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. - Location:
- uspace/srv/hid/input
- Files:
-
- 11 added
- 31 moved
-
Makefile (added)
-
ctl/apple.c (moved) (moved from uspace/srv/hid/kbd/ctl/apple.c ) (4 diffs)
-
ctl/gxe_fb.c (moved) (moved from uspace/srv/hid/kbd/ctl/gxe_fb.c ) (7 diffs)
-
ctl/kbdev.c (added)
-
ctl/pc.c (moved) (moved from uspace/srv/hid/kbd/ctl/pc.c ) (7 diffs)
-
ctl/stty.c (moved) (moved from uspace/srv/hid/kbd/ctl/stty.c ) (8 diffs)
-
ctl/sun.c (moved) (moved from uspace/srv/hid/kbd/ctl/sun.c ) (5 diffs)
-
generic/gsp.c (moved) (moved from uspace/srv/hid/kbd/genarch/gsp.c ) (4 diffs)
-
generic/input.c (added)
-
generic/layout.c (added)
-
generic/stroke.c (moved) (moved from uspace/srv/hid/kbd/genarch/stroke.c ) (6 diffs)
-
include/gsp.h (moved) (moved from uspace/srv/hid/kbd/include/gsp.h ) (1 diff)
-
include/input.h (moved) (moved from uspace/srv/hid/kbd/include/kbd.h ) (3 diffs)
-
include/kbd.h (added)
-
include/kbd_ctl.h (moved) (moved from uspace/srv/hid/kbd/include/kbd_ctl.h ) (4 diffs)
-
include/kbd_port.h (added)
-
include/layout.h (added)
-
include/mouse.h (added)
-
include/mouse_port.h (moved) (moved from uspace/srv/hid/char_mouse/include/mouse_port.h ) (4 diffs)
-
include/mouse_proto.h (moved) (moved from uspace/srv/hid/char_mouse/include/mouse_proto.h ) (3 diffs)
-
include/stroke.h (moved) (moved from uspace/srv/hid/kbd/include/stroke.h ) (3 diffs)
-
include/sun.h (moved) (moved from uspace/srv/hid/kbd/include/sun.h )
-
layout/cz.c (moved) (moved from uspace/srv/hid/kbd/layout/cz.c ) (9 diffs)
-
layout/us_dvorak.c (moved) (moved from uspace/srv/hid/kbd/layout/us_dvorak.c ) (4 diffs)
-
layout/us_qwerty.c (moved) (moved from uspace/srv/hid/kbd/layout/us_qwerty.c ) (4 diffs)
-
port/adb.c (moved) (moved from uspace/srv/hid/kbd/port/adb.c ) (5 diffs)
-
port/adb_mouse.c (moved) (moved from uspace/srv/hid/char_mouse/chardev.c ) (3 diffs)
-
port/chardev.c (moved) (moved from uspace/srv/hid/kbd/port/chardev.c ) (5 diffs)
-
port/chardev_mouse.c (added)
-
port/dummy.c (moved) (moved from uspace/srv/hid/kbd/port/dummy.c )
-
port/gxemul.c (moved) (moved from uspace/srv/hid/kbd/port/gxemul.c ) (5 diffs)
-
port/msim.c (moved) (moved from uspace/srv/hid/kbd/port/msim.c ) (6 diffs)
-
port/niagara.c (moved) (moved from uspace/srv/hid/kbd/port/niagara.c ) (6 diffs)
-
port/ns16550.c (moved) (moved from uspace/srv/hid/kbd/port/ns16550.c ) (4 diffs)
-
port/pl050.c (moved) (moved from uspace/srv/hid/kbd/port/pl050.c ) (5 diffs)
-
port/sgcn.c (moved) (moved from uspace/srv/hid/kbd/port/sgcn.c )
-
port/ski.c (moved) (moved from uspace/srv/hid/kbd/port/ski.c ) (7 diffs)
-
port/sun.c (moved) (moved from uspace/srv/hid/kbd/port/sun.c )
-
port/z8530.c (moved) (moved from uspace/srv/hid/kbd/port/z8530.c )
-
proto/adb.c (added)
-
proto/mousedev.c (added)
-
proto/ps2.c (moved) (moved from uspace/srv/hid/char_mouse/proto/ps2.c ) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/input/ctl/apple.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 201 0Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 28 28 29 29 /** @addtogroup kbd_ctl 30 * @ingroup kbd30 * @ingroup input 31 31 * @{ 32 32 */ 33 33 /** 34 34 * @file 35 * @brief Apple ADB keyboard controller driver.35 * @brief Apple ADB keyboard controller driver. 36 36 */ 37 37 … … 40 40 #include <io/keycode.h> 41 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 }; 42 53 43 54 #define KBD_KEY_RELEASE 0x80 44 55 56 static kbd_dev_t *kbd_dev; 57 45 58 static int scanmap[]; 46 59 47 int kbd_ctl_init(void)60 static int apple_ctl_init(kbd_dev_t *kdev) 48 61 { 62 kbd_dev = kdev; 49 63 return 0; 50 64 } 51 65 52 void kbd_ctl_parse_scancode(int scancode)66 static void apple_ctl_parse(sysarg_t scancode) 53 67 { 54 68 kbd_event_type_t type; 55 69 unsigned int key; 56 70 57 if (scancode < 0 || scancode>= 0x100)71 if (scancode >= 0x100) 58 72 return; 59 73 … … 67 81 key = scanmap[scancode]; 68 82 if (key != 0) 69 kbd_push_ev (type, key);83 kbd_push_event(kbd_dev, type, key); 70 84 } 71 85 72 void kbd_ctl_set_ind(unsigned mods)86 static void apple_ctl_set_ind(kbd_dev_t *kdev, unsigned mods) 73 87 { 74 88 (void) mods; -
uspace/srv/hid/input/ctl/gxe_fb.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 28 28 29 29 /** @addtogroup kbd_ctl 30 * @ingroup kbd30 * @ingroup input 31 31 * @{ 32 32 */ … … 40 40 #include <io/keycode.h> 41 41 #include <kbd_ctl.h> 42 #include <kbd_port.h> 42 43 #include <gsp.h> 43 44 #include <stroke.h> 44 45 46 static void gxe_fb_ctl_parse(sysarg_t); 47 static int gxe_fb_ctl_init(kbd_dev_t *); 48 static void gxe_fb_ctl_set_ind(kbd_dev_t *, unsigned int); 49 50 kbd_ctl_ops_t gxe_fb_ctl = { 51 .parse = gxe_fb_ctl_parse, 52 .init = gxe_fb_ctl_init, 53 .set_ind = gxe_fb_ctl_set_ind 54 }; 55 56 static kbd_dev_t *kbd_dev; 57 45 58 /** Scancode parser */ 46 59 static gsp_t sp; … … 51 64 #include <stdio.h> 52 65 53 int seq_defs[] = {66 static int seq_defs[] = { 54 67 /* Not shifted */ 55 68 … … 207 220 }; 208 221 209 int kbd_ctl_init(void)222 static int gxe_fb_ctl_init(kbd_dev_t *kdev) 210 223 { 224 kbd_dev = kdev; 211 225 ds = 0; 212 226 … … 215 229 } 216 230 217 void kbd_ctl_parse_scancode(int scancode)231 static void gxe_fb_ctl_parse(sysarg_t scancode) 218 232 { 219 233 unsigned mods, key; … … 221 235 ds = gsp_step(&sp, ds, scancode, &mods, &key); 222 236 if (key != 0) { 223 stroke_sim( mods, key);237 stroke_sim(kbd_dev, mods, key); 224 238 } 225 239 } 226 240 227 void kbd_ctl_set_ind(unsigned mods)241 static void gxe_fb_ctl_set_ind(kbd_dev_t *kdev, unsigned mods) 228 242 { 229 243 (void) mods; -
uspace/srv/hid/input/ctl/pc.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 28 28 29 29 /** @addtogroup kbd_ctl 30 * @ingroup kbd30 * @ingroup input 31 31 * @{ 32 32 */ … … 43 43 #include <gsp.h> 44 44 45 static void pc_ctl_parse(sysarg_t); 46 static int pc_ctl_init(kbd_dev_t *); 47 static void pc_ctl_set_ind(kbd_dev_t *, unsigned int); 48 49 kbd_ctl_ops_t pc_ctl = { 50 .parse = pc_ctl_parse, 51 .init = pc_ctl_init, 52 .set_ind = pc_ctl_set_ind 53 }; 54 45 55 enum dec_state { 46 56 ds_s, … … 64 74 65 75 static enum dec_state ds; 76 static kbd_dev_t *kbd_dev; 66 77 67 78 static int scanmap_simple[] = { … … 197 208 }; 198 209 199 int kbd_ctl_init(void)210 static int pc_ctl_init(kbd_dev_t *kdev) 200 211 { 212 kbd_dev = kdev; 201 213 ds = ds_s; 202 214 return 0; 203 215 } 204 216 205 void kbd_ctl_parse_scancode(int scancode)217 static void pc_ctl_parse(sysarg_t scancode) 206 218 { 207 219 kbd_event_type_t type; … … 245 257 } 246 258 247 if ((s cancode < 0) || ((size_t) scancode >= map_length))259 if ((size_t) scancode >= map_length) 248 260 return; 249 261 250 262 key = map[scancode]; 251 263 if (key != 0) 252 kbd_push_ev (type, key);264 kbd_push_event(kbd_dev, type, key); 253 265 } 254 266 255 void kbd_ctl_set_ind(unsigned mods)267 static void pc_ctl_set_ind(kbd_dev_t *kdev, unsigned mods) 256 268 { 257 269 uint8_t b; … … 265 277 b = b | LI_SCROLL; 266 278 267 kbd_port_write(KBD_CMD_SET_LEDS);268 kbd_port_write(b);279 (*kbd_dev->port_ops->write)(KBD_CMD_SET_LEDS); 280 (*kbd_dev->port_ops->write)(b); 269 281 } 270 282 -
uspace/srv/hid/input/ctl/stty.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 28 28 29 29 /** @addtogroup kbd_ctl 30 * @ingroup kbd30 * @ingroup input 31 31 * @{ 32 32 */ 33 33 /** 34 34 * @file 35 * @brief Serial TTY-like keyboard controller driver. 35 * @brief Serial TTY-like keyboard controller driver. 36 * 37 * Keyboard emulation on a serial terminal. 36 38 */ 37 39 … … 39 41 #include <io/keycode.h> 40 42 #include <kbd_ctl.h> 43 #include <kbd_port.h> 41 44 #include <gsp.h> 42 45 #include <stroke.h> 43 46 47 static void stty_ctl_parse(sysarg_t); 48 static int stty_ctl_init(kbd_dev_t *); 49 static void stty_ctl_set_ind(kbd_dev_t *, unsigned int); 50 51 kbd_ctl_ops_t stty_ctl = { 52 .parse = stty_ctl_parse, 53 .init = stty_ctl_init, 54 .set_ind = stty_ctl_set_ind 55 }; 56 57 static kbd_dev_t *kbd_dev; 58 44 59 /** Scancode parser */ 45 60 static gsp_t sp; … … 50 65 #include <stdio.h> 51 66 52 int seq_defs[] = { 67 /** 68 * Sequnece definitions are primarily for Xterm. Additionally we define 69 * sequences that are unique to Gnome terminal -- most are the same but 70 * some differ. 71 */ 72 static int seq_defs[] = { 53 73 /* Not shifted */ 54 74 … … 68 88 0, KC_MINUS, 0x2d, GSP_END, 69 89 0, KC_EQUALS, 0x3d, GSP_END, 90 70 91 0, KC_BACKSPACE, 0x08, GSP_END, 71 92 … … 203 224 0, KC_RIGHT, 0x1b, 0x5b, 0x43, GSP_END, 204 225 226 /* 227 * Sequences specific to Gnome terminal 228 */ 229 0, KC_BACKSPACE, 0x7f, GSP_END, /* ASCII DEL */ 230 0, KC_HOME, 0x1b, 0x4f, 0x48, GSP_END, 231 0, KC_END, 0x1b, 0x4f, 0x46, GSP_END, 232 205 233 0, 0 206 234 }; 207 235 208 int kbd_ctl_init(void)236 static int stty_ctl_init(kbd_dev_t *kdev) 209 237 { 238 kbd_dev = kdev; 210 239 ds = 0; 211 240 … … 214 243 } 215 244 216 void kbd_ctl_parse_scancode(int scancode)245 static void stty_ctl_parse(sysarg_t scancode) 217 246 { 218 247 unsigned mods, key; … … 220 249 ds = gsp_step(&sp, ds, scancode, &mods, &key); 221 250 if (key != 0) { 222 stroke_sim( mods, key);251 stroke_sim(kbd_dev, mods, key); 223 252 } 224 253 } 225 254 226 void kbd_ctl_set_ind(unsigned mods)255 static void stty_ctl_set_ind(kbd_dev_t *kdev, unsigned mods) 227 256 { 228 257 (void) mods; -
uspace/srv/hid/input/ctl/sun.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2006 Jakub Jermar 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 28 29 29 30 /** @addtogroup kbd_ctl 30 * @ingroup kbd31 * @ingroup input 31 32 * @{ 32 33 */ 33 34 /** 34 35 * @file 35 * @brief Sun keyboard controller driver.36 * @brief Sun keyboard controller driver. 36 37 */ 37 38 … … 40 41 #include <io/keycode.h> 41 42 #include <kbd_ctl.h> 43 #include <kbd_port.h> 44 45 static void sun_ctl_parse(sysarg_t); 46 static int sun_ctl_init(kbd_dev_t *); 47 static void sun_ctl_set_ind(kbd_dev_t *, unsigned int); 48 49 kbd_ctl_ops_t sun_ctl = { 50 .parse = sun_ctl_parse, 51 .init = sun_ctl_init, 52 .set_ind = sun_ctl_set_ind 53 }; 54 55 static kbd_dev_t *kbd_dev; 42 56 43 57 #define KBD_KEY_RELEASE 0x80 … … 46 60 static int scanmap_simple[]; 47 61 48 int kbd_ctl_init(void)62 static int sun_ctl_init(kbd_dev_t *kdev) 49 63 { 64 kbd_dev = kdev; 50 65 return 0; 51 66 } 52 67 53 void kbd_ctl_parse_scancode(int scancode)68 static void sun_ctl_parse(sysarg_t scancode) 54 69 { 55 70 kbd_event_type_t type; 56 71 unsigned int key; 57 72 58 if (scancode < 0 || scancode>= 0x100)73 if (scancode >= 0x100) 59 74 return; 60 75 … … 71 86 key = scanmap_simple[scancode]; 72 87 if (key != 0) 73 kbd_push_ev (type, key);88 kbd_push_event(kbd_dev, type, key); 74 89 } 75 90 76 void kbd_ctl_set_ind(unsigned mods)91 static void sun_ctl_set_ind(kbd_dev_t *kdev, unsigned mods) 77 92 { 78 93 (void) mods; -
uspace/srv/hid/input/generic/gsp.c
rd2c67e7 r8ff0bd2 29 29 /** 30 30 * @addtogroup kbdgen generic 31 * @ingroup kbd31 * @ingroup input 32 32 * @{ 33 33 */ … … 104 104 if (key == 0) break; 105 105 106 /* Insert one sequence. */ 106 /* Insert one sequence. */ 107 107 rc = gsp_insert_seq(p, dp, mods, key); 108 108 if (rc != 0) … … 197 197 198 198 if (t == NULL) { 199 printf("gsp_step: not found\n"); 199 printf("gsp_step: not found, state=%d, input=0x%x\n", 200 state, input); 200 201 *mods = 0; 201 202 *key = 0; … … 205 206 *mods = t->out_mods; 206 207 *key = t->out_key; 208 207 209 return t->new_state; 208 210 } -
uspace/srv/hid/input/generic/stroke.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbd29 /** @addtogroup input 30 30 * @{ 31 31 */ … … 52 52 53 53 /** Simulate keystroke using sequences of key presses and releases. */ 54 void stroke_sim( unsigned mod, unsigned key)54 void stroke_sim(kbd_dev_t *kdev, unsigned mod, unsigned key) 55 55 { 56 56 int i; … … 60 60 while (mods_keys[i][0] != 0) { 61 61 if (mod & mods_keys[i][0]) { 62 kbd_push_ev (KEY_PRESS, mods_keys[i][1]);62 kbd_push_event(kdev, KEY_PRESS, mods_keys[i][1]); 63 63 } 64 64 ++i; … … 67 67 /* Simulate key press and release. */ 68 68 if (key != 0) { 69 kbd_push_ev (KEY_PRESS, key);70 kbd_push_ev (KEY_RELEASE, key);69 kbd_push_event(kdev, KEY_PRESS, key); 70 kbd_push_event(kdev, KEY_RELEASE, key); 71 71 } 72 72 … … 75 75 while (mods_keys[i][0] != 0) { 76 76 if (mod & mods_keys[i][0]) { 77 kbd_push_ev (KEY_RELEASE, mods_keys[i][1]);77 kbd_push_event(kdev, KEY_RELEASE, mods_keys[i][1]); 78 78 } 79 79 ++i; -
uspace/srv/hid/input/include/gsp.h
rd2c67e7 r8ff0bd2 27 27 */ 28 28 29 /** @addtogroup kbdgen generic29 /** @addtogroup inputgen generic 30 30 * @brief Generic scancode parser. 31 * @ingroup kbd31 * @ingroup input 32 32 * @{ 33 */ 33 */ 34 34 /** @file 35 35 */ -
uspace/srv/hid/input/include/input.h
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 29 /** @addtogroup kbdgen generic30 * @brief HelenOS generic uspace keyboard handler.31 * @ingroup kbd30 /** @addtogroup inputgen generic 31 * @brief HelenOS input server. 32 * @ingroup input 32 33 * @{ 33 34 */ … … 35 36 */ 36 37 37 #ifndef KBD_KBD_H_38 #define KBD_KBD_H_38 #ifndef INPUT_H_ 39 #define INPUT_H_ 39 40 40 41 #include <bool.h> 41 42 43 #define NAME "input" 44 #define NAMESPACE "hid" 45 42 46 extern bool irc_service; 43 47 extern int irc_phone; 44 45 extern void kbd_push_scancode(int);46 extern void kbd_push_ev(int, unsigned int);47 48 48 49 #endif -
uspace/srv/hid/input/include/kbd_ctl.h
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbdgen generic30 * @brief HelenOS generic uspace keyboard handler.31 * @ingroup kbd29 /** @addtogroup inputgen generic 30 * @brief Keyboard controller driver interface. 31 * @ingroup input 32 32 * @{ 33 */ 33 */ 34 34 /** @file 35 35 */ … … 38 38 #define KBD_CTL_H_ 39 39 40 extern void kbd_ctl_parse_scancode(int); 41 extern int kbd_ctl_init(void); 42 extern void kbd_ctl_set_ind(unsigned); 40 #include <kbd_port.h> 41 42 struct kbd_dev; 43 44 typedef struct kbd_ctl_ops { 45 void (*parse)(sysarg_t); 46 int (*init)(struct kbd_dev *); 47 void (*set_ind)(struct kbd_dev *, unsigned int); 48 } kbd_ctl_ops_t; 49 50 extern kbd_ctl_ops_t apple_ctl; 51 extern kbd_ctl_ops_t gxe_fb_ctl; 52 extern kbd_ctl_ops_t kbdev_ctl; 53 extern kbd_ctl_ops_t pc_ctl; 54 extern kbd_ctl_ops_t stty_ctl; 55 extern kbd_ctl_ops_t sun_ctl; 43 56 44 57 #endif … … 46 59 /** 47 60 * @} 48 */ 49 61 */ -
uspace/srv/hid/input/include/mouse_port.h
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09 Jiri Svoboda2 * Copyright (c) 2011 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mouse 30 * @brief 29 /** @addtogroup inputgen generic 30 * @brief Mouse port driver interface. 31 * @ingroup input 31 32 * @{ 32 33 */ … … 39 40 #include <sys/types.h> 40 41 41 extern int mouse_port_init(void); 42 extern void mouse_port_yield(void); 43 extern void mouse_port_reclaim(void); 44 extern void mouse_port_write(uint8_t); 42 struct mouse_dev; 43 44 typedef struct mouse_port_ops { 45 int (*init)(struct mouse_dev *); 46 void (*yield)(void); 47 void (*reclaim)(void); 48 void (*write)(uint8_t); 49 } mouse_port_ops_t; 50 51 extern mouse_port_ops_t adb_mouse_port; 52 extern mouse_port_ops_t chardev_mouse_port; 45 53 46 54 #endif … … 48 56 /** 49 57 * @} 50 */ 51 58 */ -
uspace/srv/hid/input/include/mouse_proto.h
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09 Jiri Svoboda2 * Copyright (c) 2011 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mouse 30 * @brief 29 /** @addtogroup inputgen generic 30 * @brief Mouse protocol driver interface. 31 * @ingroup input 31 32 * @{ 32 33 */ … … 37 38 #define MOUSE_PROTO_H_ 38 39 39 extern void mouse_proto_parse_byte(int); 40 extern int mouse_proto_init(void); 40 #include <mouse_port.h> 41 42 struct mouse_dev; 43 44 typedef struct mouse_proto_ops { 45 void (*parse)(sysarg_t); 46 int (*init)(struct mouse_dev *); 47 } mouse_proto_ops_t; 48 49 extern mouse_proto_ops_t adb_proto; 50 extern mouse_proto_ops_t ps2_proto; 51 extern mouse_proto_ops_t mousedev_proto; 41 52 42 53 #endif -
uspace/srv/hid/input/include/stroke.h
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbdgen generic29 /** @addtogroup inputgen generic 30 30 * @brief Generic scancode parser. 31 * @ingroup kbd31 * @ingroup input 32 32 * @{ 33 33 */ … … 38 38 #define KBD_STROKE_H_ 39 39 40 extern void stroke_sim(unsigned, unsigned); 40 #include <kbd.h> 41 42 extern void stroke_sim(kbd_dev_t *, unsigned, unsigned); 41 43 42 44 #endif -
uspace/srv/hid/input/layout/cz.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbd29 /** @addtogroup input 30 30 * @brief Czech QWERTZ layout. 31 31 * @{ 32 32 */ 33 33 34 #include <kbd.h> 34 #include <errno.h> 35 #include <input.h> 35 36 #include <io/console.h> 36 37 #include <io/keycode.h> 37 38 #include <bool.h> 38 39 #include <layout.h> 39 40 static void layout_reset(void); 41 static wchar_t layout_parse_ev(kbd_event_t *ev); 40 #include <stdlib.h> 41 42 static int cz_create(layout_t *); 43 static void cz_destroy(layout_t *); 44 static wchar_t cz_parse_ev(layout_t *, kbd_event_t *ev); 42 45 43 46 enum m_state { … … 47 50 }; 48 51 49 static enum m_state mstate; 50 51 layout_op_t cz_op = { 52 layout_reset, 53 layout_parse_ev 52 typedef struct { 53 enum m_state mstate; 54 } layout_cz_t; 55 56 layout_ops_t cz_ops = { 57 .create = cz_create, 58 .destroy = cz_destroy, 59 .parse_ev = cz_parse_ev 54 60 }; 55 61 … … 273 279 } 274 280 275 static wchar_t parse_ms_hacek( kbd_event_t *ev)281 static wchar_t parse_ms_hacek(layout_cz_t *cz_state, kbd_event_t *ev) 276 282 { 277 283 wchar_t c; 278 284 279 mstate = ms_start;285 cz_state->mstate = ms_start; 280 286 281 287 /* Produce no characters when Ctrl or Alt is pressed. */ … … 291 297 } 292 298 293 static wchar_t parse_ms_carka( kbd_event_t *ev)299 static wchar_t parse_ms_carka(layout_cz_t *cz_state, kbd_event_t *ev) 294 300 { 295 301 wchar_t c; 296 302 297 mstate = ms_start;303 cz_state->mstate = ms_start; 298 304 299 305 /* Produce no characters when Ctrl or Alt is pressed. */ … … 309 315 } 310 316 311 static wchar_t parse_ms_start( kbd_event_t *ev)317 static wchar_t parse_ms_start(layout_cz_t *cz_state, kbd_event_t *ev) 312 318 { 313 319 wchar_t c; … … 319 325 if (ev->key == KC_EQUALS) { 320 326 if ((ev->mods & KM_SHIFT) != 0) 321 mstate = ms_hacek;327 cz_state->mstate = ms_hacek; 322 328 else 323 mstate = ms_carka;329 cz_state->mstate = ms_carka; 324 330 325 331 return 0; … … 379 385 } 380 386 381 static void layout_reset(void) 382 { 383 mstate = ms_start; 384 } 385 386 static wchar_t layout_parse_ev(kbd_event_t *ev) 387 { 387 static int cz_create(layout_t *state) 388 { 389 layout_cz_t *cz_state; 390 391 cz_state = malloc(sizeof(layout_cz_t)); 392 if (cz_state == NULL) { 393 printf("%s: Out of memory.\n", NAME); 394 return ENOMEM; 395 } 396 397 cz_state->mstate = ms_start; 398 state->layout_priv = (void *) cz_state; 399 400 return EOK; 401 } 402 403 static void cz_destroy(layout_t *state) 404 { 405 free(state->layout_priv); 406 } 407 408 static wchar_t cz_parse_ev(layout_t *state, kbd_event_t *ev) 409 { 410 layout_cz_t *cz_state = (layout_cz_t *) state->layout_priv; 411 388 412 if (ev->type != KEY_PRESS) 389 413 return 0; … … 392 416 return 0; 393 417 394 switch ( mstate) {418 switch (cz_state->mstate) { 395 419 case ms_start: 396 return parse_ms_start( ev);420 return parse_ms_start(cz_state, ev); 397 421 case ms_hacek: 398 return parse_ms_hacek( ev);422 return parse_ms_hacek(cz_state, ev); 399 423 case ms_carka: 400 return parse_ms_carka( ev);424 return parse_ms_carka(cz_state, ev); 401 425 } 402 426 -
uspace/srv/hid/input/layout/us_dvorak.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbd29 /** @addtogroup input 30 30 * @brief US Dvorak Simplified Keyboard layout. 31 31 * @{ 32 32 */ 33 33 34 #include <errno.h> 34 35 #include <kbd.h> 35 36 #include <io/console.h> … … 37 38 #include <layout.h> 38 39 39 static void layout_reset(void); 40 static wchar_t layout_parse_ev(kbd_event_t *ev); 41 42 layout_op_t us_dvorak_op = { 43 layout_reset, 44 layout_parse_ev 40 static int us_dvorak_create(layout_t *); 41 static void us_dvorak_destroy(layout_t *); 42 static wchar_t us_dvorak_parse_ev(layout_t *, kbd_event_t *ev); 43 44 layout_ops_t us_dvorak_ops = { 45 .create = us_dvorak_create, 46 .destroy = us_dvorak_destroy, 47 .parse_ev = us_dvorak_parse_ev 45 48 }; 46 49 … … 206 209 } 207 210 208 static void layout_reset(void) 209 { 210 } 211 212 static wchar_t layout_parse_ev(kbd_event_t *ev) 211 static int us_dvorak_create(layout_t *state) 212 { 213 return EOK; 214 } 215 216 static void us_dvorak_destroy(layout_t *state) 217 { 218 } 219 220 static wchar_t us_dvorak_parse_ev(layout_t *state, kbd_event_t *ev) 213 221 { 214 222 wchar_t c; -
uspace/srv/hid/input/layout/us_qwerty.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup kbd29 /** @addtogroup input 30 30 * @brief US QWERTY layout. 31 31 * @{ 32 */ 33 32 */ 33 34 #include <errno.h> 34 35 #include <kbd.h> 35 36 #include <io/console.h> … … 37 38 #include <layout.h> 38 39 39 static void layout_reset(void); 40 static wchar_t layout_parse_ev(kbd_event_t *ev); 41 42 layout_op_t us_qwerty_op = { 43 layout_reset, 44 layout_parse_ev 40 static int us_qwerty_create(layout_t *); 41 static void us_qwerty_destroy(layout_t *); 42 static wchar_t us_qwerty_parse_ev(layout_t *, kbd_event_t *ev); 43 44 layout_ops_t us_qwerty_ops = { 45 .create = us_qwerty_create, 46 .destroy = us_qwerty_destroy, 47 .parse_ev = us_qwerty_parse_ev 45 48 }; 46 49 … … 200 203 } 201 204 202 static void layout_reset(void) 203 { 204 } 205 206 static wchar_t layout_parse_ev(kbd_event_t *ev) 205 static int us_qwerty_create(layout_t *state) 206 { 207 return EOK; 208 } 209 210 static void us_qwerty_destroy(layout_t *state) 211 { 212 } 213 214 static wchar_t us_qwerty_parse_ev(layout_t *state, kbd_event_t *ev) 207 215 { 208 216 wchar_t c; -
uspace/srv/hid/input/port/adb.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 201 0Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 37 37 #include <ipc/adb.h> 38 38 #include <async.h> 39 #include < async_obsolete.h>39 #include <input.h> 40 40 #include <kbd_port.h> 41 41 #include <kbd.h> … … 43 43 #include <fcntl.h> 44 44 #include <errno.h> 45 #include <devmap.h> 46 #include <devmap_obsolete.h> 45 #include <loc.h> 47 46 48 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall );47 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 49 48 static void adb_kbd_reg0_data(uint16_t data); 50 49 51 static int dev_phone; 50 static int adb_port_init(kbd_dev_t *); 51 static void adb_port_yield(void); 52 static void adb_port_reclaim(void); 53 static void adb_port_write(uint8_t data); 52 54 53 #define NAME "kbd" 55 kbd_port_ops_t adb_port = { 56 .init = adb_port_init, 57 .yield = adb_port_yield, 58 .reclaim = adb_port_reclaim, 59 .write = adb_port_write 60 }; 54 61 55 int kbd_port_init(void) 62 static kbd_dev_t *kbd_dev; 63 static async_sess_t *dev_sess; 64 65 static int adb_port_init(kbd_dev_t *kdev) 56 66 { 57 67 const char *dev = "adb/kbd"; 58 devmap_handle_t handle; 68 service_id_t service_id; 69 async_exch_t *exch; 70 int rc; 59 71 60 int rc = devmap_device_get_handle(dev, &handle, 0); 61 if (rc == EOK) { 62 dev_phone = devmap_obsolete_device_connect(handle, 0); 63 if (dev_phone < 0) { 64 printf("%s: Failed to connect to device\n", NAME); 65 return dev_phone; 66 } 67 } else 72 kbd_dev = kdev; 73 74 rc = loc_service_get_id(dev, &service_id, 0); 75 if (rc != EOK) 68 76 return rc; 69 77 78 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 79 if (dev_sess == NULL) { 80 printf("%s: Failed to connect to device\n", NAME); 81 return ENOENT; 82 } 83 84 exch = async_exchange_begin(dev_sess); 85 if (exch == NULL) { 86 printf("%s: Failed starting exchange with device\n", NAME); 87 async_hangup(dev_sess); 88 return ENOMEM; 89 } 90 70 91 /* NB: The callback connection is slotted for removal */ 71 rc = async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events); 92 rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL); 93 async_exchange_end(exch); 72 94 if (rc != EOK) { 73 printf(NAME ": Failed to create callback from device\n"); 95 printf("%s: Failed to create callback from device\n", NAME); 96 async_hangup(dev_sess); 74 97 return rc; 75 98 } … … 78 101 } 79 102 80 void kbd_port_yield(void)103 static void adb_port_yield(void) 81 104 { 82 105 } 83 106 84 void kbd_port_reclaim(void)107 static void adb_port_reclaim(void) 85 108 { 86 109 } 87 110 88 void kbd_port_write(uint8_t data)111 static void adb_port_write(uint8_t data) 89 112 { 90 113 /*async_msg_1(dev_phone, CHAR_WRITE_BYTE, data);*/ 91 114 } 92 115 93 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall )116 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 94 117 { 95 118 /* Ignore parameters, the connection is already opened */ … … 119 142 static void adb_kbd_reg0_data(uint16_t data) 120 143 { 121 uint8_t b0, b1; 122 123 b0 = (data >> 8) & 0xff; 124 b1 = data & 0xff; 125 144 uint8_t b0 = (data >> 8) & 0xff; 145 uint8_t b1 = data & 0xff; 146 126 147 if (b0 != 0xff) 127 kbd_push_scancode(b0); 148 kbd_push_data(kbd_dev, b0); 149 128 150 if (b1 != 0xff) 129 kbd_push_ scancode(b1);151 kbd_push_data(kbd_dev, b1); 130 152 } 131 153 -
uspace/srv/hid/input/port/adb_mouse.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09 Jiri Svoboda2 * Copyright (c) 2011 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mouse 29 /** @addtogroup mouse_port 30 * @ingroup mouse 30 31 * @{ 31 */ 32 */ 32 33 /** @file 33 * @brief 34 * @brief ADB mouse port driver. 34 35 */ 35 36 36 #include <ipc/ char.h>37 #include <ipc/adb.h> 37 38 #include <async.h> 38 #include < async_obsolete.h>39 #include < vfs/vfs.h>40 #include < fcntl.h>39 #include <input.h> 40 #include <mouse_port.h> 41 #include <mouse.h> 41 42 #include <errno.h> 42 #include <devmap.h> 43 #include <devmap_obsolete.h> 44 #include <char_mouse.h> 45 #include <mouse_port.h> 43 #include <loc.h> 44 #include <stdio.h> 46 45 47 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall); 46 static mouse_dev_t *mouse_dev; 47 static async_sess_t *dev_sess; 48 48 49 static int dev_phone; 50 51 #define NAME "char_mouse" 52 53 int mouse_port_init(void) 54 { 55 devmap_handle_t handle; 56 int rc = devmap_device_get_handle("char/ps2b", &handle, 57 IPC_FLAG_BLOCKING); 58 59 if (rc != EOK) { 60 printf("%s: Failed resolving PS/2\n", NAME); 61 return rc; 62 } 63 64 dev_phone = devmap_obsolete_device_connect(handle, IPC_FLAG_BLOCKING); 65 if (dev_phone < 0) { 66 printf("%s: Failed connecting to PS/2\n", NAME); 67 return ENOENT; 68 } 69 70 /* NB: The callback connection is slotted for removal */ 71 if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, chardev_events) != 0) { 72 printf(NAME ": Failed to create callback from device\n"); 73 return false; 74 } 75 76 return 0; 77 } 78 79 void mouse_port_yield(void) 80 { 81 } 82 83 void mouse_port_reclaim(void) 84 { 85 } 86 87 void mouse_port_write(uint8_t data) 88 { 89 async_obsolete_msg_1(dev_phone, CHAR_WRITE_BYTE, data); 90 } 91 92 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall) 49 static void mouse_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 93 50 { 94 51 /* Ignore parameters, the connection is already opened */ 95 52 while (true) { 96 97 53 ipc_call_t call; 98 54 ipc_callid_t callid = async_get_call(&call); 99 55 100 56 int retval; 101 57 … … 104 60 return; 105 61 } 106 62 107 63 switch (IPC_GET_IMETHOD(call)) { 108 case IPC_FIRST_USER_METHOD:109 mouse_ handle_byte(IPC_GET_ARG1(call));64 case ADB_REG_NOTIF: 65 mouse_push_data(mouse_dev, IPC_GET_ARG1(call)); 110 66 break; 111 67 default: 112 68 retval = ENOENT; 113 69 } 70 114 71 async_answer_0(callid, retval); 115 72 } 116 73 } 117 74 75 static int adb_port_init(mouse_dev_t *mdev) 76 { 77 const char *dev = "adb/mouse"; 78 79 mouse_dev = mdev; 80 81 service_id_t service_id; 82 int rc = loc_service_get_id(dev, &service_id, 0); 83 if (rc != EOK) 84 return rc; 85 86 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 0); 87 if (dev_sess == NULL) { 88 printf("%s: Failed to connect to device\n", NAME); 89 return ENOENT; 90 } 91 92 async_exch_t *exch = async_exchange_begin(dev_sess); 93 if (exch == NULL) { 94 printf("%s: Failed starting exchange with device\n", NAME); 95 async_hangup(dev_sess); 96 return ENOMEM; 97 } 98 99 /* NB: The callback connection is slotted for removal */ 100 rc = async_connect_to_me(exch, 0, 0, 0, mouse_port_events, NULL); 101 async_exchange_end(exch); 102 if (rc != EOK) { 103 printf("%s: Failed to create callback from device\n", NAME); 104 async_hangup(dev_sess); 105 return rc; 106 } 107 108 return EOK; 109 } 110 111 static void adb_port_yield(void) 112 { 113 } 114 115 static void adb_port_reclaim(void) 116 { 117 } 118 119 static void adb_port_write(uint8_t data) 120 { 121 } 122 123 mouse_port_ops_t adb_mouse_port = { 124 .init = adb_port_init, 125 .yield = adb_port_yield, 126 .reclaim = adb_port_reclaim, 127 .write = adb_port_write 128 }; 129 118 130 /** 119 131 * @} -
uspace/srv/hid/input/port/chardev.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 09Jiri Svoboda2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 37 37 #include <ipc/char.h> 38 38 #include <async.h> 39 #include < async_obsolete.h>39 #include <input.h> 40 40 #include <kbd_port.h> 41 41 #include <kbd.h> 42 #include <devmap.h> 43 #include <devmap_obsolete.h> 42 #include <loc.h> 44 43 #include <errno.h> 45 44 #include <stdio.h> 46 45 47 #define NAME "kbd/chardev" 46 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 48 47 49 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall); 48 static int chardev_port_init(kbd_dev_t *); 49 static void chardev_port_yield(void); 50 static void chardev_port_reclaim(void); 51 static void chardev_port_write(uint8_t data); 50 52 51 static int dev_phone; 53 kbd_port_ops_t chardev_port = { 54 .init = chardev_port_init, 55 .yield = chardev_port_yield, 56 .reclaim = chardev_port_reclaim, 57 .write = chardev_port_write 58 }; 59 60 static kbd_dev_t *kbd_dev; 61 static async_sess_t *dev_sess; 52 62 53 63 /** List of devices to try connecting to. */ … … 59 69 static const unsigned int num_devs = sizeof(in_devs) / sizeof(in_devs[0]); 60 70 61 int kbd_port_init(void)71 static int chardev_port_init(kbd_dev_t *kdev) 62 72 { 63 devmap_handle_t handle; 73 service_id_t service_id; 74 async_exch_t *exch; 64 75 unsigned int i; 65 76 int rc; 66 77 78 kbd_dev = kdev; 79 67 80 for (i = 0; i < num_devs; i++) { 68 rc = devmap_device_get_handle(in_devs[i], &handle, 0);81 rc = loc_service_get_id(in_devs[i], &service_id, 0); 69 82 if (rc == EOK) 70 83 break; … … 76 89 } 77 90 78 dev_phone = devmap_obsolete_device_connect(handle, IPC_FLAG_BLOCKING); 79 if (dev_phone < 0) { 91 dev_sess = loc_service_connect(EXCHANGE_ATOMIC, service_id, 92 IPC_FLAG_BLOCKING); 93 if (dev_sess == NULL) { 80 94 printf("%s: Failed connecting to device\n", NAME); 81 95 return ENOENT; 82 96 } 83 97 98 exch = async_exchange_begin(dev_sess); 99 if (exch == NULL) { 100 printf("%s: Failed starting exchange with device\n", NAME); 101 async_hangup(dev_sess); 102 return ENOMEM; 103 } 104 84 105 /* NB: The callback connection is slotted for removal */ 85 if (async_obsolete_connect_to_me(dev_phone, 0, 0, 0, kbd_port_events) != 0) { 86 printf(NAME ": Failed to create callback from device\n"); 106 rc = async_connect_to_me(exch, 0, 0, 0, kbd_port_events, NULL); 107 async_exchange_end(exch); 108 109 if (rc != 0) { 110 printf("%s: Failed to create callback from device\n", NAME); 111 async_hangup(dev_sess); 87 112 return -1; 88 113 } 89 114 90 115 return 0; 91 116 } 92 117 93 void kbd_port_yield(void)118 static void chardev_port_yield(void) 94 119 { 95 120 } 96 121 97 void kbd_port_reclaim(void)122 static void chardev_port_reclaim(void) 98 123 { 99 124 } 100 125 101 void kbd_port_write(uint8_t data)126 static void chardev_port_write(uint8_t data) 102 127 { 103 async_obsolete_msg_1(dev_phone, CHAR_WRITE_BYTE, data); 128 async_exch_t *exch = async_exchange_begin(dev_sess); 129 if (exch == NULL) { 130 printf("%s: Failed starting exchange with device\n", NAME); 131 return; 132 } 133 134 async_msg_1(exch, CHAR_WRITE_BYTE, data); 135 async_exchange_end(exch); 104 136 } 105 137 106 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall )138 static void kbd_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 107 139 { 108 140 /* Ignore parameters, the connection is already opened */ … … 121 153 switch (IPC_GET_IMETHOD(call)) { 122 154 case CHAR_NOTIF_BYTE: 123 kbd_push_ scancode(IPC_GET_ARG1(call));155 kbd_push_data(kbd_dev, IPC_GET_ARG1(call)); 124 156 break; 125 157 default: -
uspace/srv/hid/input/port/gxemul.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2007 Michal Kebrt 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 42 43 #include <errno.h> 43 44 45 static int gxemul_port_init(kbd_dev_t *); 46 static void gxemul_port_yield(void); 47 static void gxemul_port_reclaim(void); 48 static void gxemul_port_write(uint8_t data); 49 50 kbd_port_ops_t gxemul_port = { 51 .init = gxemul_port_init, 52 .yield = gxemul_port_yield, 53 .reclaim = gxemul_port_reclaim, 54 .write = gxemul_port_write 55 }; 56 57 static kbd_dev_t *kbd_dev; 58 44 59 static irq_cmd_t gxemul_cmds[] = { 45 60 { … … 61 76 62 77 /** Initializes keyboard handler. */ 63 int kbd_port_init(void)78 static int gxemul_port_init(kbd_dev_t *kdev) 64 79 { 80 kbd_dev = kdev; 81 65 82 sysarg_t addr; 66 83 if (sysinfo_get_value("kbd.address.virtual", &addr) != EOK) … … 77 94 } 78 95 79 void kbd_port_yield(void)96 static void gxemul_port_yield(void) 80 97 { 81 98 } 82 99 83 void kbd_port_reclaim(void)100 static void gxemul_port_reclaim(void) 84 101 { 85 102 } 86 103 87 void kbd_port_write(uint8_t data)104 static void gxemul_port_write(uint8_t data) 88 105 { 89 106 (void) data; … … 91 108 92 109 /** Process data sent when a key is pressed. 93 *94 * @param keybuffer Buffer of pressed keys.95 * @param call IPC call.96 110 * 97 * @return Always 1. 111 * @param keybuffer Buffer of pressed keys. 112 * @param call IPC call. 113 * 98 114 */ 99 115 static void gxemul_irq_handler(ipc_callid_t iid, ipc_call_t *call) 100 116 { 101 int scan_code = IPC_GET_ARG2(*call); 102 103 kbd_push_scancode(scan_code); 117 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 104 118 } 105 119 -
uspace/srv/hid/input/port/msim.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 42 43 #include <errno.h> 43 44 44 irq_cmd_t msim_cmds[] = { 45 static int msim_port_init(kbd_dev_t *); 46 static void msim_port_yield(void); 47 static void msim_port_reclaim(void); 48 static void msim_port_write(uint8_t data); 49 50 kbd_port_ops_t msim_port = { 51 .init = msim_port_init, 52 .yield = msim_port_yield, 53 .reclaim = msim_port_reclaim, 54 .write = msim_port_write 55 }; 56 57 static kbd_dev_t *kbd_dev; 58 59 static irq_cmd_t msim_cmds[] = { 45 60 { 46 61 .cmd = CMD_PIO_READ_8, … … 51 66 .cmd = CMD_ACCEPT 52 67 } 53 54 68 }; 55 69 56 irq_code_t msim_kbd = {70 static irq_code_t msim_kbd = { 57 71 sizeof(msim_cmds) / sizeof(irq_cmd_t), 58 72 msim_cmds … … 61 75 static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call); 62 76 63 int kbd_port_init(void)77 static int msim_port_init(kbd_dev_t *kdev) 64 78 { 79 kbd_dev = kdev; 80 65 81 sysarg_t vaddr; 66 82 if (sysinfo_get_value("kbd.address.virtual", &vaddr) != EOK) … … 78 94 } 79 95 80 void kbd_port_yield(void)96 static void msim_port_yield(void) 81 97 { 82 98 } 83 99 84 void kbd_port_reclaim(void)100 static void msim_port_reclaim(void) 85 101 { 86 102 } 87 103 88 void kbd_port_write(uint8_t data)104 static void msim_port_write(uint8_t data) 89 105 { 90 106 (void) data; … … 93 109 static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call) 94 110 { 95 int scan_code = IPC_GET_ARG2(*call); 96 kbd_push_scancode(scan_code); 111 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 97 112 } 98 113 99 114 /** @} 100 */115 */ -
uspace/srv/hid/input/port/niagara.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2008 Pavel Rimsky 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 46 47 #include <errno.h> 47 48 49 static int niagara_port_init(kbd_dev_t *); 50 static void niagara_port_yield(void); 51 static void niagara_port_reclaim(void); 52 static void niagara_port_write(uint8_t data); 53 54 kbd_port_ops_t niagara_port = { 55 .init = niagara_port_init, 56 .yield = niagara_port_yield, 57 .reclaim = niagara_port_reclaim, 58 .write = niagara_port_write 59 }; 60 61 static kbd_dev_t *kbd_dev; 62 48 63 #define POLL_INTERVAL 10000 49 64 … … 70 85 71 86 /* virtual address of the shared buffer */ 72 input_buffer_t input_buffer;87 static input_buffer_t input_buffer; 73 88 74 89 static volatile bool polling_disabled = false; … … 79 94 * Maps the shared buffer and creates the polling thread. 80 95 */ 81 int kbd_port_init(void)96 static int niagara_port_init(kbd_dev_t *kdev) 82 97 { 98 kbd_dev = kdev; 99 83 100 sysarg_t paddr; 84 101 if (sysinfo_get_value("niagara.inbuf.address", &paddr) != EOK) … … 105 122 } 106 123 107 void kbd_port_yield(void)124 static void niagara_port_yield(void) 108 125 { 109 126 polling_disabled = true; 110 127 } 111 128 112 void kbd_port_reclaim(void)129 static void niagara_port_reclaim(void) 113 130 { 114 131 polling_disabled = false; 115 132 } 116 133 117 void kbd_port_write(uint8_t data)134 static void niagara_port_write(uint8_t data) 118 135 { 119 136 (void) data; … … 131 148 c = input_buffer->data[input_buffer->read_ptr]; 132 149 input_buffer->read_ptr = 133 ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE;134 kbd_push_ scancode(c);150 ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE; 151 kbd_push_data(kbd_dev, c); 135 152 } 136 153 } 137 154 138 155 /** 139 * Thread to poll SGCNfor keypresses.156 * Thread to poll Niagara console for keypresses. 140 157 */ 141 158 static void niagara_thread_impl(void *arg) -
uspace/srv/hid/input/port/ns16550.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2006 Josef Cejka 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 39 40 #include <async_obsolete.h> 40 41 #include <sysinfo.h> 42 #include <input.h> 41 43 #include <kbd.h> 42 44 #include <kbd_port.h> 43 #include <sun.h>44 45 #include <ddi.h> 45 46 #include <errno.h> 47 48 static int ns16550_port_init(kbd_dev_t *); 49 static void ns16550_port_yield(void); 50 static void ns16550_port_reclaim(void); 51 static void ns16550_port_write(uint8_t data); 52 53 kbd_port_ops_t ns16550_port = { 54 .init = ns16550_port_init, 55 .yield = ns16550_port_yield, 56 .reclaim = ns16550_port_reclaim, 57 .write = ns16550_port_write 58 }; 59 60 static kbd_dev_t *kbd_dev; 46 61 47 62 /* NS16550 registers */ … … 91 106 92 107 static uintptr_t ns16550_physical; 93 static uintptr_t ns16550_kernel; 108 static uintptr_t ns16550_kernel; 94 109 95 int ns16550_port_init(void) 110 static kbd_dev_t *kbd_dev; 111 112 static int ns16550_port_init(kbd_dev_t *kdev) 96 113 { 97 114 void *vaddr; 98 115 116 kbd_dev = kdev; 117 118 sysarg_t ns16550; 119 if (sysinfo_get_value("kbd.type.ns16550", &ns16550) != EOK) 120 return -1; 121 if (!ns16550) 122 return -1; 123 99 124 if (sysinfo_get_value("kbd.address.physical", &ns16550_physical) != EOK) 100 125 return -1; … … 116 141 } 117 142 143 static void ns16550_port_yield(void) 144 { 145 } 146 147 static void ns16550_port_reclaim(void) 148 { 149 } 150 151 static void ns16550_port_write(uint8_t data) 152 { 153 (void) data; 154 } 155 118 156 static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call) 119 157 { 120 int scan_code = IPC_GET_ARG2(*call); 121 kbd_push_scancode(scan_code); 158 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 122 159 123 160 if (irc_service) -
uspace/srv/hid/input/port/pl050.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2009 Vineeth Pillai 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 46 47 #include <errno.h> 47 48 49 static int pl050_port_init(kbd_dev_t *); 50 static void pl050_port_yield(void); 51 static void pl050_port_reclaim(void); 52 static void pl050_port_write(uint8_t data); 53 54 kbd_port_ops_t pl050_port = { 55 .init = pl050_port_init, 56 .yield = pl050_port_yield, 57 .reclaim = pl050_port_reclaim, 58 .write = pl050_port_write 59 }; 60 61 static kbd_dev_t *kbd_dev; 62 48 63 #define PL050_STAT_RXFULL (1 << 4) 49 64 … … 82 97 static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call); 83 98 84 int kbd_port_init(void)99 static int pl050_port_init(kbd_dev_t *kdev) 85 100 { 101 kbd_dev = kdev; 102 86 103 sysarg_t addr; 87 104 if (sysinfo_get_value("kbd.address.status", &addr) != EOK) … … 105 122 } 106 123 107 void kbd_port_yield(void)124 static void pl050_port_yield(void) 108 125 { 109 126 } 110 127 111 void kbd_port_reclaim(void)128 static void pl050_port_reclaim(void) 112 129 { 113 130 } 114 131 115 void kbd_port_write(uint8_t data)132 static void pl050_port_write(uint8_t data) 116 133 { 117 134 (void) data; … … 120 137 static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call) 121 138 { 122 int scan_code = IPC_GET_ARG2(*call); 123 124 kbd_push_scancode(scan_code); 125 return; 139 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 126 140 } 127 141 128 142 /** 129 143 * @} 130 */ 144 */ -
uspace/srv/hid/input/port/ski.c
rd2c67e7 r8ff0bd2 1 1 /* 2 2 * Copyright (c) 2005 Jakub Jermar 3 * Copyright (c) 20 09Jiri Svoboda3 * Copyright (c) 2011 Jiri Svoboda 4 4 * All rights reserved. 5 5 * … … 45 45 #include <bool.h> 46 46 47 static int ski_port_init(kbd_dev_t *); 48 static void ski_port_yield(void); 49 static void ski_port_reclaim(void); 50 static void ski_port_write(uint8_t data); 51 52 kbd_port_ops_t ski_port = { 53 .init = ski_port_init, 54 .yield = ski_port_yield, 55 .reclaim = ski_port_reclaim, 56 .write = ski_port_write 57 }; 58 59 static kbd_dev_t *kbd_dev; 60 47 61 #define SKI_GETCHAR 21 48 62 … … 55 69 56 70 /** Initialize Ski port driver. */ 57 int kbd_port_init(void)71 static int ski_port_init(kbd_dev_t *kdev) 58 72 { 59 73 thread_id_t tid; 60 74 int rc; 75 76 kbd_dev = kdev; 61 77 62 78 rc = thread_create(ski_thread_impl, NULL, "kbd_poll", &tid); … … 68 84 } 69 85 70 void kbd_port_yield(void)86 static void ski_port_yield(void) 71 87 { 72 88 polling_disabled = true; 73 89 } 74 90 75 void kbd_port_reclaim(void)91 static void ski_port_reclaim(void) 76 92 { 77 93 polling_disabled = false; 78 94 } 79 95 80 void kbd_port_write(uint8_t data)96 static void ski_port_write(uint8_t data) 81 97 { 82 98 (void) data; … … 94 110 if (c == 0) 95 111 break; 96 kbd_push_ scancode(c);112 kbd_push_data(kbd_dev, c); 97 113 } 98 114 … … 112 128 uint64_t ch; 113 129 130 #ifdef UARCH_ia64 114 131 asm volatile ( 115 132 "mov r15 = %1\n" … … 121 138 : "r15", "r8" 122 139 ); 123 140 #else 141 ch = 0; 142 #endif 124 143 return (int32_t) ch; 125 144 } -
uspace/srv/hid/input/proto/ps2.c
rd2c67e7 r8ff0bd2 1 1 /* 2 * Copyright (c) 20 06 Ondrej Palkovsky2 * Copyright (c) 2011 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mouse 29 /** @addtogroup mouse_proto 30 * @ingroup input 30 31 * @{ 31 32 */ 32 33 /** 33 34 * @file 34 * @brief PS/2 mouseprotocol driver.35 * @brief PS/2 protocol driver. 35 36 */ 36 37 37 #include < stdio.h>38 #include <mouse.h> 38 39 #include <mouse_port.h> 39 #include <char_mouse.h>40 40 #include <mouse_proto.h> 41 42 #define BUFSIZE 343 41 44 42 #define PS2_MOUSE_OUT_INIT 0xf4 45 43 #define PS2_MOUSE_ACK 0xfa 44 45 #define BUFSIZE 3 46 46 47 47 typedef struct { … … 49 49 unsigned char data[BUFSIZE]; 50 50 struct { 51 unsigned leftbtn : 1;52 unsigned rightbtn : 1;53 unsigned middlebtn : 1;54 unsigned i sone : 1; /* Always one */55 unsigned xsign : 1;56 unsigned ysign : 1;57 unsigned xovfl : 1;58 unsigned yovfl : 1;51 unsigned int leftbtn : 1; 52 unsigned int rightbtn : 1; 53 unsigned int middlebtn : 1; 54 unsigned int isone : 1; /* Always one */ 55 unsigned int xsign : 1; 56 unsigned int ysign : 1; 57 unsigned int xovfl : 1; 58 unsigned int yovfl : 1; 59 59 unsigned char x; 60 60 unsigned char y; … … 64 64 65 65 static ps2packet_t buf; 66 static int bufpos = 0;67 static int leftbtn = 0;68 static int rightbtn = 0;69 static int middlebtn = 0;66 static unsigned int bufpos; 67 static unsigned int leftbtn; 68 static unsigned int rightbtn; 69 static unsigned int middlebtn; 70 70 71 int mouse_proto_init(void) 71 static mouse_dev_t *mouse_dev; 72 73 static int ps2_proto_init(mouse_dev_t *mdev) 72 74 { 73 mouse_port_write(PS2_MOUSE_OUT_INIT); 75 mouse_dev = mdev; 76 bufpos = 0; 77 leftbtn = 0; 78 rightbtn = 0; 79 80 mouse_dev->port_ops->write(PS2_MOUSE_OUT_INIT); 74 81 return 0; 75 82 } … … 79 86 { 80 87 int tmp; 81 88 82 89 if (!sign) 83 90 return data; 84 85 tmp = ((unsigned char) ~data) + 1;91 92 tmp = ((unsigned char) ~data) + 1; 86 93 return -tmp; 87 94 } 88 95 89 96 /** Process mouse data */ 90 void mouse_proto_parse_byte(int data)97 static void ps2_proto_parse(sysarg_t data) 91 98 { 92 99 int x, y; 93 100 94 101 /* Check that we have not lost synchronization */ 95 102 if (bufpos == 0 && !(data & 0x8)) 96 103 return; /* Synchro lost, ignore byte */ 97 104 98 105 buf.u.data[bufpos++] = data; 99 106 if (bufpos == BUFSIZE) { 100 107 bufpos = 0; 101 108 102 109 if (buf.u.val.leftbtn ^ leftbtn) { 103 110 leftbtn = buf.u.val.leftbtn; 104 mouse_ ev_btn(1, leftbtn);111 mouse_push_event_button(mouse_dev, 1, leftbtn); 105 112 } 106 113 107 114 if (buf.u.val.rightbtn ^ rightbtn) { 108 115 rightbtn = buf.u.val.rightbtn; 109 mouse_ ev_btn(2, rightbtn);116 mouse_push_event_button(mouse_dev, 2, rightbtn); 110 117 } 111 118 112 119 if (buf.u.val.middlebtn ^ middlebtn) { 113 120 middlebtn = buf.u.val.middlebtn; 114 mouse_ ev_btn(3, middlebtn);121 mouse_push_event_button(mouse_dev, 3, middlebtn); 115 122 } 123 124 x = bit9toint(buf.u.val.xsign, buf.u.val.x); 125 y = -bit9toint(buf.u.val.ysign, buf.u.val.y); 126 127 if (x != 0 || y != 0) 128 mouse_push_event_move(mouse_dev, x, y); 129 } 130 } 116 131 117 x = bit9toint(buf.u.val.xsign, buf.u.val.x); 118 y = - bit9toint(buf.u.val.ysign, buf.u.val.y); 119 120 if (x != 0 || y != 0) { 121 mouse_ev_move(x, y); 122 } 123 } 124 125 return; 126 } 132 mouse_proto_ops_t ps2_proto = { 133 .parse = ps2_proto_parse, 134 .init = ps2_proto_init 135 }; 127 136 128 137 /**
Note:
See TracChangeset
for help on using the changeset viewer.
