Changeset 1875a0c in mainline for uspace/srv/hid/input/port
- Timestamp:
- 2011-06-21T19:10:20Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 022d9f67
- Parents:
- a9d85df
- Location:
- uspace/srv/hid/input/port
- Files:
-
- 10 edited
- 2 moved
-
adb.c (modified) (2 diffs)
-
adb_mouse.c (moved) (moved from uspace/srv/hid/char_mouse/chardev.c ) (3 diffs)
-
chardev.c (modified) (2 diffs)
-
chardev_mouse.c (moved) (moved from uspace/srv/hid/adb_mouse/adb_dev.c ) (4 diffs)
-
gxemul.c (modified) (1 diff)
-
msim.c (modified) (1 diff)
-
niagara.c (modified) (1 diff)
-
ns16550.c (modified) (1 diff)
-
pl050.c (modified) (1 diff)
-
sgcn.c (modified) (1 diff)
-
ski.c (modified) (1 diff)
-
z8530.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/input/port/adb.c
ra9d85df r1875a0c 93 93 async_exchange_end(exch); 94 94 if (rc != EOK) { 95 printf( NAME ": Failed to create callback from device\n");95 printf("%s: Failed to create callback from device\n", NAME); 96 96 async_hangup(dev_sess); 97 97 return rc; … … 142 142 static void adb_kbd_reg0_data(uint16_t data) 143 143 { 144 uint8_t b0, b1; 145 146 b0 = (data >> 8) & 0xff; 147 b1 = data & 0xff; 148 144 uint8_t b0 = (data >> 8) & 0xff; 145 uint8_t b1 = data & 0xff; 146 149 147 if (b0 != 0xff) 150 kbd_push_scancode(kbd_dev, b0); 148 kbd_push_data(kbd_dev, b0); 149 151 150 if (b1 != 0xff) 152 kbd_push_ scancode(kbd_dev, b1);151 kbd_push_data(kbd_dev, b1); 153 152 } 154 153 -
uspace/srv/hid/input/port/adb_mouse.c
ra9d85df r1875a0c 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 <vfs/vfs.h> 39 #include <fcntl.h> 39 #include <input.h> 40 #include <mouse_port.h> 41 #include <mouse.h> 40 42 #include <errno.h> 41 43 #include <devmap.h> 42 #include <char_mouse.h>43 #include <mouse_port.h>44 44 45 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 46 45 static mouse_dev_t *mouse_dev; 47 46 static async_sess_t *dev_sess; 48 47 49 #define NAME "char_mouse" 50 51 int mouse_port_init(void) 52 { 53 devmap_handle_t handle; 54 async_exch_t *exch; 55 int rc; 56 57 rc = devmap_device_get_handle("char/ps2b", &handle, 58 IPC_FLAG_BLOCKING); 59 60 if (rc != EOK) { 61 printf("%s: Failed resolving PS/2\n", NAME); 62 return rc; 63 } 64 65 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 66 IPC_FLAG_BLOCKING); 67 if (dev_sess == NULL) { 68 printf("%s: Failed connecting to PS/2\n", NAME); 69 return ENOENT; 70 } 71 72 exch = async_exchange_begin(dev_sess); 73 if (exch == NULL) { 74 printf("%s: Failed starting exchange with PS/2\n", NAME); 75 async_hangup(dev_sess); 76 return ENOMEM; 77 } 78 79 /* NB: The callback connection is slotted for removal */ 80 rc = async_connect_to_me(exch, 0, 0, 0, chardev_events, NULL); 81 async_exchange_end(exch); 82 83 if (rc != 0) { 84 printf(NAME ": Failed to create callback from device\n"); 85 async_hangup(dev_sess); 86 return false; 87 } 88 89 return 0; 90 } 91 92 void mouse_port_yield(void) 93 { 94 } 95 96 void mouse_port_reclaim(void) 97 { 98 } 99 100 void mouse_port_write(uint8_t data) 101 { 102 async_exch_t *exch = async_exchange_begin(dev_sess); 103 if (exch == NULL) { 104 printf("%s: Failed starting exchange with PS/2\n", NAME); 105 return; 106 } 107 108 async_msg_1(exch, CHAR_WRITE_BYTE, data); 109 110 async_exchange_end(exch); 111 } 112 113 static void chardev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 48 static void mouse_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 114 49 { 115 50 /* Ignore parameters, the connection is already opened */ 116 51 while (true) { 117 118 52 ipc_call_t call; 119 53 ipc_callid_t callid = async_get_call(&call); 120 54 121 55 int retval; 122 56 … … 125 59 return; 126 60 } 127 61 128 62 switch (IPC_GET_IMETHOD(call)) { 129 case IPC_FIRST_USER_METHOD:130 mouse_ handle_byte(IPC_GET_ARG1(call));63 case ADB_REG_NOTIF: 64 mouse_push_data(mouse_dev, IPC_GET_ARG1(call)); 131 65 break; 132 66 default: 133 67 retval = ENOENT; 134 68 } 69 135 70 async_answer_0(callid, retval); 136 71 } 137 72 } 138 73 74 static int adb_port_init(mouse_dev_t *mdev) 75 { 76 const char *dev = "adb/mouse"; 77 78 mouse_dev = mdev; 79 80 devmap_handle_t handle; 81 int rc = devmap_device_get_handle(dev, &handle, 0); 82 if (rc != EOK) 83 return rc; 84 85 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 0); 86 if (dev_sess == NULL) { 87 printf("%s: Failed to connect to device\n", NAME); 88 return ENOENT; 89 } 90 91 async_exch_t *exch = async_exchange_begin(dev_sess); 92 if (exch == NULL) { 93 printf("%s: Failed starting exchange with device\n", NAME); 94 async_hangup(dev_sess); 95 return ENOMEM; 96 } 97 98 /* NB: The callback connection is slotted for removal */ 99 rc = async_connect_to_me(exch, 0, 0, 0, mouse_port_events, NULL); 100 async_exchange_end(exch); 101 if (rc != EOK) { 102 printf("%s: Failed to create callback from device\n", NAME); 103 async_hangup(dev_sess); 104 return rc; 105 } 106 107 return EOK; 108 } 109 110 static void adb_port_yield(void) 111 { 112 } 113 114 static void adb_port_reclaim(void) 115 { 116 } 117 118 static void adb_port_write(uint8_t data) 119 { 120 } 121 122 mouse_port_ops_t adb_mouse_port = { 123 .init = adb_port_init, 124 .yield = adb_port_yield, 125 .reclaim = adb_port_reclaim, 126 .write = adb_port_write 127 }; 128 139 129 /** 140 130 * @} -
uspace/srv/hid/input/port/chardev.c
ra9d85df r1875a0c 108 108 109 109 if (rc != 0) { 110 printf( NAME ": Failed to create callback from device\n");110 printf("%s: Failed to create callback from device\n", NAME); 111 111 async_hangup(dev_sess); 112 112 return -1; … … 153 153 switch (IPC_GET_IMETHOD(call)) { 154 154 case CHAR_NOTIF_BYTE: 155 kbd_push_ scancode(kbd_dev, IPC_GET_ARG1(call));155 kbd_push_data(kbd_dev, IPC_GET_ARG1(call)); 156 156 break; 157 157 default: -
uspace/srv/hid/input/port/chardev_mouse.c
ra9d85df r1875a0c 1 1 /* 2 * Copyright (c) 201 0 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 Chardev mouse port driver. 34 35 */ 35 36 36 #include <ipc/adb.h> 37 #include <ipc/char.h> 38 #include <stdio.h> 37 39 #include <async.h> 38 #include <vfs/vfs.h>39 #include <fcntl.h>40 40 #include <errno.h> 41 41 #include <devmap.h> 42 #include <async.h> 43 #include <kernel/ipc/ipc_methods.h> 42 #include <input.h> 43 #include <mouse_port.h> 44 #include <mouse.h> 44 45 45 #include "adb_mouse.h" 46 #include "adb_dev.h" 46 static mouse_dev_t *mouse_dev; 47 static async_sess_t *dev_sess; 47 48 48 static void adb_dev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg); 49 /** List of devices to try connecting to. */ 50 static const char *in_devs[] = { 51 "char/ps2b", 52 }; 49 53 50 int adb_dev_init(void) 54 static const unsigned int num_devs = sizeof(in_devs) / sizeof(in_devs[0]); 55 56 static void mouse_port_events(ipc_callid_t iid, ipc_call_t *icall, void *arg) 57 { 58 /* Ignore parameters, the connection is already opened */ 59 while (true) { 60 ipc_call_t call; 61 ipc_callid_t callid = async_get_call(&call); 62 63 if (!IPC_GET_IMETHOD(call)) { 64 /* TODO: Handle hangup */ 65 return; 66 } 67 68 int retval; 69 70 switch (IPC_GET_IMETHOD(call)) { 71 case CHAR_NOTIF_BYTE: 72 mouse_push_data(mouse_dev, IPC_GET_ARG1(call)); 73 break; 74 default: 75 retval = ENOENT; 76 } 77 78 async_answer_0(callid, retval); 79 } 80 } 81 82 static int chardev_port_init(mouse_dev_t *mdev) 51 83 { 52 84 devmap_handle_t handle; 53 async_exch_t *exch;85 unsigned int i; 54 86 int rc; 55 87 56 rc = devmap_device_get_handle("adb/mouse", &handle, 57 IPC_FLAG_BLOCKING); 58 if (rc != EOK) { 59 printf("%s: Failed resolving ADB\n", NAME); 60 return rc; 88 mouse_dev = mdev; 89 90 for (i = 0; i < num_devs; i++) { 91 rc = devmap_device_get_handle(in_devs[i], &handle, 0); 92 if (rc == EOK) 93 break; 61 94 } 62 95 63 async_sess_t *dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 96 if (i >= num_devs) { 97 printf("%s: Could not find any suitable input device\n", NAME); 98 return -1; 99 } 100 101 dev_sess = devmap_device_connect(EXCHANGE_ATOMIC, handle, 64 102 IPC_FLAG_BLOCKING); 65 103 if (dev_sess == NULL) { 66 printf("%s: Failed connecting to ADB\n", NAME);104 printf("%s: Failed connecting to device\n", NAME); 67 105 return ENOENT; 68 106 } 69 107 70 exch = async_exchange_begin(dev_sess);108 async_exch_t *exch = async_exchange_begin(dev_sess); 71 109 if (exch == NULL) { 72 printf("%s: Failed starting exchange with ADB\n", NAME);110 printf("%s: Failed starting exchange with device\n", NAME); 73 111 async_hangup(dev_sess); 74 112 return ENOMEM; … … 76 114 77 115 /* NB: The callback connection is slotted for removal */ 78 rc = async_connect_to_me(exch, 0, 0, 0, adb_dev_events, NULL);116 rc = async_connect_to_me(exch, 0, 0, 0, mouse_port_events, NULL); 79 117 async_exchange_end(exch); 80 118 81 119 if (rc != 0) { 82 printf( NAME ": Failed to create callback from device\n");120 printf("%s: Failed to create callback from device\n", NAME); 83 121 async_hangup(dev_sess); 84 return ENOENT;122 return -1; 85 123 } 86 124 … … 88 126 } 89 127 90 static void adb_dev_events(ipc_callid_t iid, ipc_call_t *icall, void *arg)128 static void chardev_port_yield(void) 91 129 { 92 /* Ignore parameters, the connection is already opened */ 93 while (true) { 130 } 94 131 95 ipc_call_t call; 96 ipc_callid_t callid = async_get_call(&call); 132 static void chardev_port_reclaim(void) 133 { 134 } 97 135 98 int retval; 99 100 if (!IPC_GET_IMETHOD(call)) { 101 /* TODO: Handle hangup */ 102 return; 103 } 136 static void chardev_port_write(uint8_t data) 137 { 138 async_exch_t *exch = async_exchange_begin(dev_sess); 139 if (exch == NULL) { 140 printf("%s: Failed starting exchange with device\n", NAME); 141 return; 142 } 104 143 105 switch (IPC_GET_IMETHOD(call)) { 106 case IPC_FIRST_USER_METHOD: 107 mouse_handle_data(IPC_GET_ARG1(call)); 108 break; 109 default: 110 retval = ENOENT; 111 } 112 async_answer_0(callid, retval); 113 } 144 async_msg_1(exch, CHAR_WRITE_BYTE, data); 145 async_exchange_end(exch); 114 146 } 147 148 mouse_port_ops_t chardev_mouse_port = { 149 .init = chardev_port_init, 150 .yield = chardev_port_yield, 151 .reclaim = chardev_port_reclaim, 152 .write = chardev_port_write 153 }; 115 154 116 155 /** -
uspace/srv/hid/input/port/gxemul.c
ra9d85df r1875a0c 108 108 109 109 /** Process data sent when a key is pressed. 110 *111 * @param keybuffer Buffer of pressed keys.112 * @param call IPC call.113 110 * 114 * @return Always 1. 111 * @param keybuffer Buffer of pressed keys. 112 * @param call IPC call. 113 * 115 114 */ 116 115 static void gxemul_irq_handler(ipc_callid_t iid, ipc_call_t *call) 117 116 { 118 int scan_code = IPC_GET_ARG2(*call); 119 120 kbd_push_scancode(kbd_dev, scan_code); 117 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 121 118 } 122 119 -
uspace/srv/hid/input/port/msim.c
ra9d85df r1875a0c 109 109 static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call) 110 110 { 111 int scan_code = IPC_GET_ARG2(*call); 112 kbd_push_scancode(kbd_dev, scan_code); 111 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 113 112 } 114 113 115 114 /** @} 116 */115 */ -
uspace/srv/hid/input/port/niagara.c
ra9d85df r1875a0c 148 148 c = input_buffer->data[input_buffer->read_ptr]; 149 149 input_buffer->read_ptr = 150 ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE;151 kbd_push_ scancode(kbd_dev, c);150 ((input_buffer->read_ptr) + 1) % INPUT_BUFFER_SIZE; 151 kbd_push_data(kbd_dev, c); 152 152 } 153 153 } -
uspace/srv/hid/input/port/ns16550.c
ra9d85df r1875a0c 156 156 static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call) 157 157 { 158 int scan_code = IPC_GET_ARG2(*call); 159 kbd_push_scancode(kbd_dev, scan_code); 158 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 160 159 161 160 if (irc_service) -
uspace/srv/hid/input/port/pl050.c
ra9d85df r1875a0c 137 137 static void pl050_irq_handler(ipc_callid_t iid, ipc_call_t *call) 138 138 { 139 int scan_code = IPC_GET_ARG2(*call); 140 141 kbd_push_scancode(kbd_dev, scan_code); 142 return; 139 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 143 140 } 144 141 145 142 /** 146 143 * @} 147 */ 144 */ -
uspace/srv/hid/input/port/sgcn.c
ra9d85df r1875a0c 183 183 *in_rdptr_ptr = (((*in_rdptr_ptr) - begin + 1) % size) + begin; 184 184 buf_ptr = (volatile char *) 185 SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr);186 kbd_push_ scancode(kbd_dev, c);185 SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); 186 kbd_push_data(kbd_dev, c); 187 187 } 188 188 } -
uspace/srv/hid/input/port/ski.c
ra9d85df r1875a0c 110 110 if (c == 0) 111 111 break; 112 kbd_push_ scancode(kbd_dev, c);112 kbd_push_data(kbd_dev, c); 113 113 } 114 114 -
uspace/srv/hid/input/port/z8530.c
ra9d85df r1875a0c 142 142 static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call) 143 143 { 144 int scan_code = IPC_GET_ARG2(*call); 145 kbd_push_scancode(kbd_dev, scan_code); 144 kbd_push_data(kbd_dev, IPC_GET_ARG2(*call)); 146 145 147 146 if (irc_service)
Note:
See TracChangeset
for help on using the changeset viewer.
