Changes in uspace/lib/c/generic/io/console.c [902f0906:5d94b16c] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/console.c
r902f0906 r5d94b16c 154 154 } 155 155 156 static int console_ev_decode(ipc_call_t *call, cons_event_t *event) 157 { 158 event->type = IPC_GET_ARG1(*call); 159 160 switch (event->type) { 161 case CEV_KEY: 162 event->ev.key.type = IPC_GET_ARG2(*call); 163 event->ev.key.key = IPC_GET_ARG3(*call); 164 event->ev.key.mods = IPC_GET_ARG4(*call); 165 event->ev.key.c = IPC_GET_ARG5(*call); 166 break; 167 case CEV_POS: 168 event->ev.pos.pos_id = IPC_GET_ARG2(*call) >> 16; 169 event->ev.pos.type = IPC_GET_ARG2(*call) & 0xffff; 170 event->ev.pos.btn_num = IPC_GET_ARG3(*call); 171 event->ev.pos.hpos = IPC_GET_ARG4(*call); 172 event->ev.pos.vpos = IPC_GET_ARG5(*call); 173 break; 174 default: 175 return EIO; 176 } 177 178 return EOK; 179 } 180 181 bool console_get_event(console_ctrl_t *ctrl, cons_event_t *event) 156 bool console_get_kbd_event(console_ctrl_t *ctrl, kbd_event_t *event) 182 157 { 183 158 if (ctrl->input_aid == 0) { 184 ipc_call_t result; 159 sysarg_t type; 160 sysarg_t key; 161 sysarg_t mods; 162 sysarg_t c; 185 163 186 164 async_exch_t *exch = async_exchange_begin(ctrl->input_sess); 187 aid_t aid = async_send_0(exch, CONSOLE_GET_EVENT, &result);165 int rc = async_req_0_4(exch, CONSOLE_GET_EVENT, &type, &key, &mods, &c); 188 166 async_exchange_end(exch); 189 190 sysarg_t rc;191 async_wait_for(aid, &rc);192 167 193 168 if (rc != EOK) { … … 196 171 } 197 172 198 rc = console_ev_decode(&result, event); 199 if (rc != EOK) { 200 errno = rc; 201 return false; 202 } 173 event->type = type; 174 event->key = key; 175 event->mods = mods; 176 event->c = c; 203 177 } else { 204 178 sysarg_t retval; … … 212 186 } 213 187 214 int rc = console_ev_decode(&ctrl->input_call, event); 215 if (rc != EOK) { 216 errno = rc; 217 return false; 218 } 188 event->type = IPC_GET_ARG1(ctrl->input_call); 189 event->key = IPC_GET_ARG2(ctrl->input_call); 190 event->mods = IPC_GET_ARG3(ctrl->input_call); 191 event->c = IPC_GET_ARG4(ctrl->input_call); 219 192 } 220 193 … … 222 195 } 223 196 224 bool console_get_ event_timeout(console_ctrl_t *ctrl, cons_event_t *event,197 bool console_get_kbd_event_timeout(console_ctrl_t *ctrl, kbd_event_t *event, 225 198 suseconds_t *timeout) 226 199 { … … 250 223 } 251 224 252 rc = console_ev_decode(&ctrl->input_call, event); 253 if (rc != EOK) { 254 errno = rc; 255 return false; 256 } 225 event->type = IPC_GET_ARG1(ctrl->input_call); 226 event->key = IPC_GET_ARG2(ctrl->input_call); 227 event->mods = IPC_GET_ARG3(ctrl->input_call); 228 event->c = IPC_GET_ARG4(ctrl->input_call); 257 229 258 230 /* Update timeout */
Note:
See TracChangeset
for help on using the changeset viewer.