Changeset d31c3ea in mainline


Ignore:
Timestamp:
2024-10-01T11:13:28Z (3 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
6907f26
Parents:
357d9dd
git-author:
Jiri Svoboda <jiri@…> (2024-09-30 19:13:18)
git-committer:
Jiri Svoboda <jiri@…> (2024-10-01 11:13:28)
Message:

Group vt callbacks into a callback structure

Location:
uspace
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/vt/include/vt/vt100.h

    r357d9dd rd31c3ea  
    7171} sgr_command_t;
    7272
    73 typedef void (*vt100_putuchar_t)(void *, char32_t ch);
    74 typedef void (*vt100_control_puts_t)(void *, const char *str);
    75 typedef void (*vt100_flush_t)(void *);
     73typedef struct {
     74        void (*putuchar)(void *, char32_t);
     75        void (*control_puts)(void *, const char *);
     76        void (*flush)(void *);
     77} vt100_cb_t;
    7678
     79/** VT100 instance */
    7780typedef struct {
     81        /** Number of columns */
    7882        sysarg_t cols;
     83        /** Number of rows */
    7984        sysarg_t rows;
    8085
     86        /** Current column */
    8187        sysarg_t cur_col;
     88        /** Current row */
    8289        sysarg_t cur_row;
     90        /** Current attributes */
    8391        char_attrs_t cur_attrs;
    8492
     93        /** Enable RGB color */
    8594        bool enable_rgb;
    8695
     96        /** Callback functions */
     97        vt100_cb_t *cb;
     98        /** Argument to callback functions */
    8799        void *arg;
    88         vt100_putuchar_t putuchar;
    89         vt100_control_puts_t control_puts;
    90         vt100_flush_t flush;
    91100} vt100_t;
    92101
     
    94103
    95104extern vt100_t *vt100_create(void *, sysarg_t, sysarg_t,
    96     vt100_putuchar_t, vt100_control_puts_t, vt100_flush_t);
     105    vt100_cb_t *);
    97106extern void vt100_destroy(vt100_t *);
    98107
  • uspace/lib/vt/src/vt100.c

    r357d9dd rd31c3ea  
    5151void vt100_cls(vt100_t *state)
    5252{
    53         state->control_puts(state->arg, "\033[2J");
     53        state->cb->control_puts(state->arg, "\033[2J");
    5454}
    5555
     
    6060
    6161        snprintf(control, MAX_CONTROL, "\033[%um", mode);
    62         state->control_puts(state->arg, control);
     62        state->cb->control_puts(state->arg, control);
    6363}
    6464
     
    7171        snprintf(control, MAX_CONTROL, "\033[%u;%u;%u;%u;%um",
    7272            a1, a2, a3, a4, a5);
    73         state->control_puts(state->arg, control);
     73        state->cb->control_puts(state->arg, control);
    7474}
    7575
     
    8080        snprintf(control, MAX_CONTROL, "\033[%" PRIun ";%" PRIun "f",
    8181            row + 1, col + 1);
    82         state->control_puts(state->arg, control);
     82        state->cb->control_puts(state->arg, control);
    8383}
    8484
     
    147147}
    148148
    149 vt100_t *vt100_create(void *arg, sysarg_t cols, sysarg_t rows,
    150     vt100_putuchar_t putuchar_fn, vt100_control_puts_t control_puts_fn,
    151     vt100_flush_t flush_fn)
     149vt100_t *vt100_create(void *arg, sysarg_t cols, sysarg_t rows, vt100_cb_t *cb)
    152150{
    153151        vt100_t *state = malloc(sizeof(vt100_t));
     
    155153                return NULL;
    156154
     155        state->cb = cb;
    157156        state->arg = arg;
    158         state->putuchar = putuchar_fn;
    159         state->control_puts = control_puts_fn;
    160         state->flush = flush_fn;
    161157
    162158        state->cols = cols;
     
    217213{
    218214        if (visible)
    219                 state->control_puts(state->arg, "\033[?25h");
     215                state->cb->control_puts(state->arg, "\033[?25h");
    220216        else
    221                 state->control_puts(state->arg, "\033[?25l");
     217                state->cb->control_puts(state->arg, "\033[?25l");
    222218}
    223219
    224220void vt100_putuchar(vt100_t *state, char32_t ch)
    225221{
    226         state->putuchar(state->arg, ch == 0 ? ' ' : ch);
     222        state->cb->putuchar(state->arg, ch == 0 ? ' ' : ch);
    227223        state->cur_col++;
    228224
     
    235231void vt100_flush(vt100_t *state)
    236232{
    237         state->flush(state->arg);
     233        state->cb->flush(state->arg);
    238234}
    239235
  • uspace/srv/hid/output/ctl/serial.c

    r357d9dd rd31c3ea  
    4444#define SERIAL_COLS  80
    4545#define SERIAL_ROWS  24
     46
     47static serial_putuchar_t serial_putuchar_fn;
     48static serial_control_puts_t serial_control_puts_fn;
     49static serial_flush_t serial_flush_fn;
     50
     51static void serial_vt_putuchar(void *, char32_t);
     52static void serial_vt_control_puts(void *, const char *);
     53static void serial_vt_flush(void *);
     54
     55static vt100_cb_t serial_vt_cb = {
     56        .putuchar = serial_vt_putuchar,
     57        .control_puts = serial_vt_control_puts,
     58        .flush = serial_vt_flush
     59};
    4660
    4761/** Draw the character at the specified position.
     
    124138};
    125139
    126 errno_t serial_init(vt100_putuchar_t putuchar_fn,
    127     vt100_control_puts_t control_puts_fn, vt100_flush_t flush_fn)
     140errno_t serial_init(serial_putuchar_t putuchar_fn,
     141    serial_control_puts_t control_puts_fn, serial_flush_t flush_fn)
    128142{
    129143        char_attrs_t attrs;
    130         vt100_t *vt100 =
    131             vt100_create(NULL, SERIAL_COLS, SERIAL_ROWS, putuchar_fn,
    132             control_puts_fn, flush_fn);
     144        vt100_t *vt100;
     145
     146        serial_putuchar_fn = putuchar_fn;
     147        serial_control_puts_fn = control_puts_fn;
     148        serial_flush_fn = flush_fn;
     149
     150        vt100 = vt100_create(NULL, SERIAL_COLS, SERIAL_ROWS, &serial_vt_cb);
    133151        if (vt100 == NULL)
    134152                return ENOMEM;
     
    150168}
    151169
     170static void serial_vt_putuchar(void *arg, char32_t c)
     171{
     172        (void)arg;
     173        serial_putuchar_fn(c);
     174}
     175
     176static void serial_vt_control_puts(void *arg, const char *str)
     177{
     178        (void)arg;
     179        serial_control_puts_fn(str);
     180}
     181
     182static void serial_vt_flush(void *arg)
     183{
     184        (void)arg;
     185        serial_flush_fn();
     186}
     187
    152188/** @}
    153189 */
  • uspace/srv/hid/output/ctl/serial.h

    r357d9dd rd31c3ea  
    3838#include <vt/vt100.h>
    3939
    40 extern errno_t serial_init(vt100_putuchar_t, vt100_control_puts_t, vt100_flush_t);
     40typedef void (*serial_putuchar_t)(char32_t);
     41typedef void (*serial_control_puts_t)(const char *);
     42typedef void (*serial_flush_t)(void);
     43
     44extern errno_t serial_init(serial_putuchar_t, serial_control_puts_t,
     45    serial_flush_t);
    4146
    4247#endif
  • uspace/srv/hid/output/port/chardev.c

    r357d9dd rd31c3ea  
    6565static FIBRIL_CONDVAR_INITIALIZE(discovery_cv);
    6666
    67 static void chardev_flush(void *arg)
     67static void chardev_flush(void)
    6868{
    6969        size_t nwr;
    70 
    71         (void)arg;
    7270
    7371        if (chardev_bused == 0)
     
    8381{
    8482        if (chardev_bused == chardev_buf_size)
    85                 chardev_flush(NULL);
     83                chardev_flush();
    8684        chardev_buf[chardev_bused++] = (uint8_t) ch;
    8785}
    8886
    89 static void chardev_putuchar(void *arg, char32_t ch)
     87static void chardev_putuchar(char32_t ch)
    9088{
    9189        char buf[STR_BOUNDS(1)];
     
    9492        errno_t rc;
    9593
    96         (void)arg;
    97 
    9894        off = 0;
    9995        rc = chr_encode(ch, buf, &off, sizeof(buf));
     
    105101}
    106102
    107 static void chardev_control_puts(void *arg, const char *str)
     103static void chardev_control_puts(const char *str)
    108104{
    109105        const char *p;
     
    111107        p = str;
    112108        while (*p != '\0')
    113                 chardev_putuchar(arg, *p++);
     109                chardev_putuchar(*p++);
    114110}
    115111
  • uspace/srv/hid/remcons/remcons.c

    r357d9dd rd31c3ea  
    121121};
    122122
     123static void remcons_vt_putchar(void *, char32_t);
     124static void remcons_vt_cputs(void *, const char *);
     125static void remcons_vt_flush(void *);
     126
     127static vt100_cb_t remcons_vt_cb = {
     128        .putuchar = remcons_vt_putchar,
     129        .control_puts = remcons_vt_cputs,
     130        .flush = remcons_vt_flush
     131};
     132
    123133static void remcons_new_conn(tcp_listener_t *lst, tcp_conn_t *conn);
    124134
     
    568578        remcons->curs_visible = true;
    569579
    570         remcons->vt = vt100_create((void *)remcons, 80, 25,
    571             remcons_vt_putchar, remcons_vt_cputs, remcons_vt_flush);
     580        remcons->vt = vt100_create((void *)remcons, 80, 25, &remcons_vt_cb);
    572581        assert(remcons->vt != NULL); // XXX
    573582        remcons->vt->enable_rgb = remcons->enable_rgb;
Note: See TracChangeset for help on using the changeset viewer.