Ignore:
File:
1 edited

Legend:

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

    rc8ea6eca rfafb8e5  
    4949#define PS2_MOUSE_SET_SAMPLE_RATE   0xf3
    5050#define PS2_MOUSE_ENABLE_DATA_REPORT   0xf4
     51#define PS2_MOUSE_DISABLE_DATA_REPORT   0xf5
    5152#define PS2_MOUSE_ACK   0xfa
    5253
     
    7778        uint8_t data = 0; \
    7879        size_t nread; \
    79         const errno_t rc = chardev_read((mouse)->chardev, &data, 1, &nread); \
     80        const errno_t rc = chardev_read((mouse)->chardev, &data, 1, &nread, \
     81            chardev_f_none); \
    8082        if (rc != EOK) { \
    8183                ddf_msg(LVL_ERROR, "Failed reading byte: %s", str_error_name(rc));\
     
    164166        }
    165167
     168        /* Disable mouse data reporting. */
     169        uint8_t report = PS2_MOUSE_ENABLE_DATA_REPORT;
     170        size_t nwr;
     171        rc = chardev_write(mouse->chardev, &report, 1, &nwr);
     172        if (rc != EOK) {
     173                ddf_msg(LVL_ERROR, "Failed to enable data reporting.");
     174                rc = EIO;
     175                goto error;
     176        }
     177
     178        /* Drain input buffer */
     179        size_t nread;
     180        uint8_t b;
     181        do {
     182                rc = chardev_read(mouse->chardev, &b, 1, &nread, chardev_f_nonblock);
     183                if (rc != EOK) {
     184                        ddf_msg(LVL_ERROR, "Failed to drain input buffer.\n");
     185                        rc = EIO;
     186                        goto error;
     187                }
     188        } while (nread > 0);
     189
    166190        /* Probe IntelliMouse extensions. */
    167191        errno_t (*polling_f)(void *) = polling_ps2;
     
    174198
    175199        /* Enable mouse data reporting. */
    176         uint8_t report = PS2_MOUSE_ENABLE_DATA_REPORT;
    177         size_t nwr;
     200        report = PS2_MOUSE_ENABLE_DATA_REPORT;
    178201        rc = chardev_write(mouse->chardev, &report, 1, &nwr);
    179202        if (rc != EOK) {
     
    183206        }
    184207
    185         size_t nread;
    186         rc = chardev_read(mouse->chardev, &report, 1, &nread);
     208        rc = chardev_read(mouse->chardev, &report, 1, &nread, chardev_f_none);
    187209        if (rc != EOK || report != PS2_MOUSE_ACK) {
    188210                ddf_msg(LVL_ERROR, "Failed to confirm data reporting: %hhx.",
     
    232254        while (pos < psize) {
    233255                rc = chardev_read(mouse->chardev, pbuf + pos, psize - pos,
    234                     &nread);
     256                    &nread, chardev_f_none);
    235257                if (rc != EOK) {
    236258                        ddf_msg(LVL_WARN, "Error reading packet.");
     
    407429void default_connection_handler(ddf_fun_t *fun, ipc_call_t *icall)
    408430{
    409         const sysarg_t method = IPC_GET_IMETHOD(*icall);
     431        const sysarg_t method = ipc_get_imethod(icall);
    410432        ps2_mouse_t *mouse = ddf_dev_data_get(ddf_fun_get_dev(fun));
    411433        async_sess_t *sess;
Note: See TracChangeset for help on using the changeset viewer.