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