Changeset 15c5418 in mainline for uspace/drv/hid/atkbd/atkbd.c
- Timestamp:
- 2017-11-18T20:06:15Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 75fcf9b
- Parents:
- efb9fd08
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/hid/atkbd/atkbd.c
refb9fd08 r15c5418 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; 209 205 210 206 while (true) { 211 if (!parent_exch)212 parent_exch = async_exchange_begin(kbd->parent_sess);213 214 207 uint8_t code = 0; 215 ssize_t size = chardev_read( parent_exch, &code, 1);208 ssize_t size = chardev_read(kbd->chardev, &code, 1); 216 209 if (size != 1) 217 210 return EIO; … … 224 217 map_size = sizeof(scanmap_e0) / sizeof(unsigned int); 225 218 226 size = chardev_read( parent_exch, &code, 1);219 size = chardev_read(kbd->chardev, &code, 1); 227 220 if (size != 1) 228 221 return EIO; 229 222 } else if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) { 230 size = chardev_read( parent_exch, &code, 1);223 size = chardev_read(kbd->chardev, &code, 1); 231 224 if (size != 1) 232 225 return EIO; … … 234 227 continue; 235 228 236 size = chardev_read( parent_exch, &code, 1);229 size = chardev_read(kbd->chardev, &code, 1); 237 230 if (size != 1) 238 231 return EIO; … … 240 233 continue; 241 234 242 size = chardev_read( parent_exch, &code, 1);235 size = chardev_read(kbd->chardev, &code, 1); 243 236 if (size != 1) 244 237 return EIO; … … 246 239 continue; 247 240 248 size = chardev_read( parent_exch, &code, 1);241 size = chardev_read(kbd->chardev, &code, 1); 249 242 if (size != 1) 250 243 return EIO; … … 252 245 continue; 253 246 254 size = chardev_read( parent_exch, &code, 1);247 size = chardev_read(kbd->chardev, &code, 1); 255 248 if (size != 1) 256 249 return EIO; … … 258 251 continue; 259 252 260 size = chardev_read( parent_exch, &code, 1);253 size = chardev_read(kbd->chardev, &code, 1); 261 254 if (size != 1) 262 255 return EIO; … … 264 257 continue; 265 258 266 size = chardev_read( parent_exch, &code, 1);259 size = chardev_read(kbd->chardev, &code, 1); 267 260 if (size != 1) 268 261 return EIO; … … 279 272 if (code == KBD_SCANCODE_KEY_RELEASE) { 280 273 type = KEY_RELEASE; 281 size = chardev_read( parent_exch, &code, 1);274 size = chardev_read(kbd->chardev, &code, 1); 282 275 if (size != 1) 283 276 return EIO; … … 362 355 int at_kbd_init(at_kbd_t *kbd, ddf_dev_t *dev) 363 356 { 357 async_sess_t *parent_sess; 358 int rc; 359 364 360 assert(kbd); 365 361 assert(dev); 366 362 367 363 kbd->client_sess = NULL; 368 kbd->parent_sess = ddf_dev_parent_sess_get(dev); 369 370 if (!kbd->parent_sess) { 364 parent_sess = ddf_dev_parent_sess_get(dev); 365 if (parent_sess == NULL) { 371 366 ddf_msg(LVL_ERROR, "Failed creating parent session."); 367 rc = EIO; 368 goto error; 369 } 370 371 rc = chardev_open(parent_sess, &kbd->chardev); 372 if (rc != EOK) { 373 ddf_msg(LVL_ERROR, "Failed opening character device."); 372 374 return EIO; 373 375 } … … 407 409 fibril_add_ready(kbd->polling_fibril); 408 410 return EOK; 411 error: 412 chardev_close(kbd->chardev); 413 kbd->chardev = NULL; 414 return rc; 409 415 }
Note:
See TracChangeset
for help on using the changeset viewer.