Changeset bbc6277 in mainline for uspace/srv/hid/output/port/chardev.c


Ignore:
Timestamp:
2017-11-30T17:00:09Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b5abaf7
Parents:
7f345cd0
Message:

Chardev output needs buffering.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/output/port/chardev.c

    r7f345cd0 rbbc6277  
    4646#include "chardev.h"
    4747
     48enum {
     49        chardev_buf_size = 4096
     50};
     51
    4852static char *console;
    4953
     
    5357static service_id_t console_cat_id;
    5458
     59static uint8_t chardev_buf[chardev_buf_size];
     60static size_t chardev_bused;
     61
    5562static FIBRIL_MUTEX_INITIALIZE(discovery_lock);
    5663static bool discovery_finished;
    5764static FIBRIL_CONDVAR_INITIALIZE(discovery_cv);
    5865
     66static void chardev_flush(void)
     67{
     68        size_t nwr;
     69
     70        if (chardev_bused == 0)
     71                return;
     72
     73        chardev_write(chardev, chardev_buf, chardev_bused, &nwr);
     74        /* XXX Handle error */
     75
     76        chardev_bused = 0;
     77}
     78
    5979static void chardev_putchar(wchar_t ch)
    6080{
    61         uint8_t byte = (uint8_t) ch;
    62         size_t nwr;
    63         chardev_write(chardev, &byte, 1, &nwr);
    64         /* XXX Handle error */
     81        if (chardev_bused == chardev_buf_size)
     82                chardev_flush();
     83        if (!ascii_check(ch))
     84                ch = '?';
     85        chardev_buf[chardev_bused++] = (uint8_t) ch;
    6586}
    6687
    6788static void chardev_control_puts(const char *str)
    6889{
    69         size_t nwr;
    70         chardev_write(chardev, (void *) str, str_size(str), &nwr);
    71         /* XXX Handle error */
     90        const char *p;
     91
     92        p = str;
     93        while (*p != '\0')
     94                chardev_putchar(*p++);
    7295}
    7396
     
    175198        }
    176199
    177         serial_init(chardev_putchar, chardev_control_puts);
     200        serial_init(chardev_putchar, chardev_control_puts, chardev_flush);
    178201
    179202        discovery_finished = true;
Note: See TracChangeset for help on using the changeset viewer.