Changeset 5d50c419 in mainline for uspace/drv/hid/atkbd/atkbd.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/atkbd/atkbd.c

    r75fcf9b r5d50c419  
    203203{
    204204        at_kbd_t *kbd = arg;
     205        size_t nwr;
     206        int rc;
    205207       
    206208        while (true) {
    207209                uint8_t code = 0;
    208                 ssize_t size = chardev_read(kbd->chardev, &code, 1);
    209                 if (size != 1)
     210                rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     211                if (rc != EOK)
    210212                        return EIO;
    211213               
     
    217219                        map_size = sizeof(scanmap_e0) / sizeof(unsigned int);
    218220                       
    219                         size = chardev_read(kbd->chardev, &code, 1);
    220                         if (size != 1)
     221                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     222                        if (rc != EOK)
    221223                                return EIO;
    222224                } else if (code == KBD_SCANCODE_SET_EXTENDED_SPECIAL) {
    223                         size = chardev_read(kbd->chardev, &code, 1);
    224                         if (size != 1)
     225                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     226                        if (rc != EOK)
    225227                                return EIO;
    226228                        if (code != 0x14)
    227229                                continue;
    228230
    229                         size = chardev_read(kbd->chardev, &code, 1);
    230                         if (size != 1)
     231                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     232                        if (rc != EOK)
    231233                                return EIO;
    232234                        if (code != 0x77)
    233235                                continue;
    234236
    235                         size = chardev_read(kbd->chardev, &code, 1);
    236                         if (size != 1)
     237                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     238                        if (rc != EOK)
    237239                                return EIO;
    238240                        if (code != 0xe1)
    239241                                continue;
    240242
    241                         size = chardev_read(kbd->chardev, &code, 1);
    242                         if (size != 1)
     243                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     244                        if (rc != EOK)
    243245                                return EIO;
    244246                        if (code != 0xf0)
    245247                                continue;
    246248
    247                         size = chardev_read(kbd->chardev, &code, 1);
    248                         if (size != 1)
     249                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     250                        if (rc != EOK)
    249251                                return EIO;
    250252                        if (code != 0x14)
    251253                                continue;
    252254
    253                         size = chardev_read(kbd->chardev, &code, 1);
    254                         if (size != 1)
     255                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     256                        if (rc != EOK)
    255257                                return EIO;
    256258                        if (code != 0xf0)
    257259                                continue;
    258260
    259                         size = chardev_read(kbd->chardev, &code, 1);
    260                         if (size != 1)
     261                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     262                        if (rc != EOK)
    261263                                return EIO;
    262264                        if (code == 0x77)
     
    272274                if (code == KBD_SCANCODE_KEY_RELEASE) {
    273275                        type = KEY_RELEASE;
    274                         size = chardev_read(kbd->chardev, &code, 1);
    275                         if (size != 1)
     276                        rc = chardev_read(kbd->chardev, &code, 1, &nwr);
     277                        if (rc != EOK)
    276278                                return EIO;
    277279                } else {
Note: See TracChangeset for help on using the changeset viewer.