Changes in uspace/drv/hid/atkbd/atkbd.c [5d50c419:d420b22] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/hid/atkbd/atkbd.c
r5d50c419 rd420b22 1 1 /* 2 * Copyright (c) 2017 Jiri Svoboda3 2 * Copyright (c) 2011 Jan Vesely 4 3 * Copyright (c) 2009 Vineeth Pillai … … 202 201 static int polling(void *arg) 203 202 { 204 at_kbd_t *kbd = arg; 205 size_t nwr; 206 int rc; 203 const at_kbd_t *kbd = arg; 204 205 assert(kbd); 206 assert(kbd->parent_sess); 207 208 async_exch_t *parent_exch = async_exchange_begin(kbd->parent_sess); 207 209 208 210 while (true) { 211 if (!parent_exch) 212 parent_exch = async_exchange_begin(kbd->parent_sess); 213 209 214 uint8_t code = 0; 210 rc = chardev_read(kbd->chardev, &code, 1, &nwr);211 if ( rc != EOK)215 ssize_t size = chardev_read(parent_exch, &code, 1); 216 if (size != 1) 212 217 return EIO; 213 218 … … 219 224 map_size = sizeof(scanmap_e0) / sizeof(unsigned int); 220 225 221 rc = chardev_read(kbd->chardev, &code, 1, &nwr);222 if ( rc != EOK)226 size = chardev_read(parent_exch, &code, 1); 227 if (size != 1) 223 228 return EIO; 224 229 } else if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) { 225 rc = chardev_read(kbd->chardev, &code, 1, &nwr);226 if ( rc != EOK)230 size = chardev_read(parent_exch, &code, 1); 231 if (size != 1) 227 232 return EIO; 228 233 if (code != 0x14) 229 234 continue; 230 235 231 rc = chardev_read(kbd->chardev, &code, 1, &nwr);232 if ( rc != EOK)236 size = chardev_read(parent_exch, &code, 1); 237 if (size != 1) 233 238 return EIO; 234 239 if (code != 0x77) 235 240 continue; 236 241 237 rc = chardev_read(kbd->chardev, &code, 1, &nwr);238 if ( rc != EOK)242 size = chardev_read(parent_exch, &code, 1); 243 if (size != 1) 239 244 return EIO; 240 245 if (code != 0xe1) 241 246 continue; 242 247 243 rc = chardev_read(kbd->chardev, &code, 1, &nwr);244 if ( rc != EOK)248 size = chardev_read(parent_exch, &code, 1); 249 if (size != 1) 245 250 return EIO; 246 251 if (code != 0xf0) 247 252 continue; 248 253 249 rc = chardev_read(kbd->chardev, &code, 1, &nwr);250 if ( rc != EOK)254 size = chardev_read(parent_exch, &code, 1); 255 if (size != 1) 251 256 return EIO; 252 257 if (code != 0x14) 253 258 continue; 254 259 255 rc = chardev_read(kbd->chardev, &code, 1, &nwr);256 if ( rc != EOK)260 size = chardev_read(parent_exch, &code, 1); 261 if (size != 1) 257 262 return EIO; 258 263 if (code != 0xf0) 259 264 continue; 260 265 261 rc = chardev_read(kbd->chardev, &code, 1, &nwr);262 if ( rc != EOK)266 size = chardev_read(parent_exch, &code, 1); 267 if (size != 1) 263 268 return EIO; 264 269 if (code == 0x77) … … 274 279 if (code == KBD_SCANCODE_KEY_RELEASE) { 275 280 type = KEY_RELEASE; 276 rc = chardev_read(kbd->chardev, &code, 1, &nwr);277 if ( rc != EOK)281 size = chardev_read(parent_exch, &code, 1); 282 if (size != 1) 278 283 return EIO; 279 284 } else { … … 357 362 int at_kbd_init(at_kbd_t *kbd, ddf_dev_t *dev) 358 363 { 359 async_sess_t *parent_sess;360 int rc;361 362 364 assert(kbd); 363 365 assert(dev); 364 366 365 367 kbd->client_sess = NULL; 366 parent_sess = ddf_dev_parent_sess_get(dev); 367 if (parent_sess == NULL) { 368 kbd->parent_sess = ddf_dev_parent_sess_get(dev); 369 370 if (!kbd->parent_sess) { 368 371 ddf_msg(LVL_ERROR, "Failed creating parent session."); 369 rc = EIO;370 goto error;371 }372 373 rc = chardev_open(parent_sess, &kbd->chardev);374 if (rc != EOK) {375 ddf_msg(LVL_ERROR, "Failed opening character device.");376 372 return EIO; 377 373 } … … 411 407 fibril_add_ready(kbd->polling_fibril); 412 408 return EOK; 413 error:414 chardev_close(kbd->chardev);415 kbd->chardev = NULL;416 return rc;417 409 }
Note:
See TracChangeset
for help on using the changeset viewer.