Changeset 5d50c419 in mainline for uspace/drv/hid/xtkbd/xtkbd.c


Ignore:
Timestamp:
2017-11-19T21:14:19Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c657bd7
Parents:
75fcf9b
Message:

Chardev API should separate error code from number of bytes transferred. This is cleaner, allows the code to be more independent of Exxx sign and allows for partial success (some bytes successfully transferred and then an error occurred.)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/hid/xtkbd/xtkbd.c

    r75fcf9b r5d50c419  
    208208{
    209209        xt_kbd_t *kbd = arg;
     210        size_t nread;
     211        int rc;
    210212       
    211213        while (true) {
     
    214216               
    215217                uint8_t code = 0;
    216                 ssize_t size = chardev_read(kbd->chardev, &code, 1);
    217                 if (size != 1)
     218                rc = chardev_read(kbd->chardev, &code, 1, &nread);
     219                if (rc != EOK)
    218220                        return EIO;
    219221               
     
    227229                        map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
    228230                       
    229                         size = chardev_read(kbd->chardev, &code, 1);
    230                         if (size != 1)
     231                        rc = chardev_read(kbd->chardev, &code, 1, &nread);
     232                        if (rc != EOK)
    231233                                return EIO;
    232234                       
     
    234236                       
    235237                        if (code == 0x2a) {  /* Print Screen */
    236                                 size = chardev_read(kbd->chardev, &code, 1);
    237                                 if (size != 1)
     238                                rc = chardev_read(kbd->chardev, &code, 1, &nread);
     239                                if (rc != EOK)
    238240                                        return EIO;
    239241                               
     
    241243                                        continue;
    242244                               
    243                                 size = chardev_read(kbd->chardev, &code, 1);
    244                                 if (size != 1)
     245                                rc = chardev_read(kbd->chardev, &code, 1, &nread);
     246                                if (rc != EOK)
    245247                                        return EIO;
    246248                               
     
    252254                       
    253255                        if (code == 0x46) {  /* Break */
    254                                 size = chardev_read(kbd->chardev, &code, 1);
    255                                 if (size != 1)
     256                                rc = chardev_read(kbd->chardev, &code, 1, &nread);
     257                                if (rc != EOK)
    256258                                        return EIO;
    257259                               
     
    259261                                        continue;
    260262                               
    261                                 size = chardev_read(kbd->chardev, &code, 1);
    262                                 if (size != 1)
     263                                rc = chardev_read(kbd->chardev, &code, 1, &nread);
     264                                if (rc != EOK)
    263265                                        return EIO;
    264266                               
     
    272274                /* Extended special set */
    273275                if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
    274                         size = chardev_read(kbd->chardev, &code, 1);
    275                         if (size != 1)
     276                        rc = chardev_read(kbd->chardev, &code, 1, &nread);
     277                        if (rc != EOK)
    276278                                return EIO;
    277279                       
     
    279281                                continue;
    280282                       
    281                         size = chardev_read(kbd->chardev, &code, 1);
    282                         if (size != 1)
     283                        rc = chardev_read(kbd->chardev, &code, 1, &nread);
     284                        if (rc != EOK)
    283285                                return EIO;
    284286                       
     
    286288                                continue;
    287289                       
    288                         size = chardev_read(kbd->chardev, &code, 1);
    289                         if (size != 1)
     290                        rc = chardev_read(kbd->chardev, &code, 1, &nread);
     291                        if (rc != EOK)
    290292                                return EIO;
    291293                       
     
    293295                                continue;
    294296                       
    295                         size = chardev_read(kbd->chardev, &code, 1);
    296                         if (size != 1)
     297                        rc = chardev_read(kbd->chardev, &code, 1, &nread);
     298                        if (rc != EOK)
    297299                                return EIO;
    298300                       
     
    300302                                continue;
    301303                       
    302                         size = chardev_read(kbd->chardev, &code, 1);
    303                         if (size != 1)
     304                        rc = chardev_read(kbd->chardev, &code, 1, &nread);
     305                        if (rc != EOK)
    304306                                return EIO;
    305307                       
     
    350352                uint8_t cmds[] = { KBD_CMD_SET_LEDS, status };
    351353               
    352                 ssize_t size = chardev_write(kbd->chardev, cmds, sizeof(cmds));
    353                
    354                 async_answer_0(icallid, size < 0 ? size : EOK);
     354                size_t nwr;
     355                int rc = chardev_write(kbd->chardev, cmds, sizeof(cmds), &nwr);
     356                if (nwr != sizeof(cmds))
     357                        rc = EIO;
     358
     359                async_answer_0(icallid, rc);
    355360                break;
    356361        }
Note: See TracChangeset for help on using the changeset viewer.