Changeset d8503fd in mainline


Ignore:
Timestamp:
2023-01-09T21:14:04Z (16 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
46b02cb
Parents:
e04b72d6
Message:

Display configuration utility and server support

Currently we can only create, list and delete seats using the
'disp' utility (but no way to assign devices).

Location:
uspace
Files:
8 added
15 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/meson.build

    re04b72d6 rd8503fd  
    3939        'devctl',
    4040        'df',
     41        'disp',
    4142        'dnscfg',
    4243        'dnsres',
  • uspace/srv/hid/display/display.c

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    9898        list_initialize(&disp->clients);
    9999        list_initialize(&disp->wmclients);
     100        list_initialize(&disp->cfgclients);
    100101        disp->next_wnd_id = 1;
    101102        list_initialize(&disp->ddevs);
     
    120121        assert(list_empty(&disp->clients));
    121122        assert(list_empty(&disp->wmclients));
     123        assert(list_empty(&disp->cfgclients));
    122124        assert(list_empty(&disp->seats));
    123125        assert(list_empty(&disp->ddevs));
     
    241243        list_remove(&wmclient->lwmclients);
    242244        wmclient->display = NULL;
     245}
     246
     247/** Add CFG client to display.
     248 *
     249 * @param disp Display
     250 * @param cfgclient CFG client
     251 */
     252void ds_display_add_cfgclient(ds_display_t *disp, ds_cfgclient_t *cfgclient)
     253{
     254        assert(cfgclient->display == NULL);
     255        assert(!link_used(&cfgclient->lcfgclients));
     256
     257        cfgclient->display = disp;
     258        list_append(&cfgclient->lcfgclients, &disp->cfgclients);
     259}
     260
     261/** Remove CFG client from display.
     262 *
     263 * @param cfgclient CFG client
     264 */
     265void ds_display_remove_cfgclient(ds_cfgclient_t *cfgclient)
     266{
     267        list_remove(&cfgclient->lcfgclients);
     268        cfgclient->display = NULL;
    243269}
    244270
     
    525551
    526552        seat->display = disp;
     553        seat->id = disp->next_seat_id++;
    527554        list_append(&seat->lseats, &disp->seats);
    528555}
     
    566593
    567594        return list_get_instance(link, ds_seat_t, lseats);
     595}
     596
     597/** Find seat by ID.
     598 *
     599 * @param display Display
     600 * @param id Seat ID
     601 */
     602ds_seat_t *ds_display_find_seat(ds_display_t *display, ds_seat_id_t id)
     603{
     604        ds_seat_t *seat;
     605
     606        seat = ds_display_first_seat(display);
     607        while (seat != NULL) {
     608                if (seat->id == id)
     609                        return seat;
     610
     611                seat = ds_display_next_seat(seat);
     612        }
     613
     614        return NULL;
    568615}
    569616
  • uspace/srv/hid/display/display.h

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4242#include <gfx/coord.h>
    4343#include <io/kbd_event.h>
     44#include "types/display/cfgclient.h"
    4445#include "types/display/client.h"
    4546#include "types/display/cursor.h"
     
    6364extern void ds_display_add_wmclient(ds_display_t *, ds_wmclient_t *);
    6465extern void ds_display_remove_wmclient(ds_wmclient_t *);
     66extern void ds_display_add_cfgclient(ds_display_t *, ds_cfgclient_t *);
     67extern void ds_display_remove_cfgclient(ds_cfgclient_t *);
    6568extern ds_wmclient_t *ds_display_first_wmclient(ds_display_t *);
    6669extern ds_wmclient_t *ds_display_next_wmclient(ds_wmclient_t *);
     
    8184extern ds_seat_t *ds_display_first_seat(ds_display_t *);
    8285extern ds_seat_t *ds_display_next_seat(ds_seat_t *);
     86extern ds_seat_t *ds_display_find_seat(ds_display_t *, ds_seat_id_t);
    8387extern ds_seat_t *ds_display_seat_by_idev(ds_display_t *, ds_idev_id_t);
    8488extern errno_t ds_display_add_ddev(ds_display_t *, ds_ddev_t *);
  • uspace/srv/hid/display/main.c

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3636#include <async.h>
    3737#include <disp_srv.h>
     38#include <dispcfg_srv.h>
    3839#include <errno.h>
    3940#include <gfx/context.h>
     
    4849#include <task.h>
    4950#include <wndmgt_srv.h>
     51#include "cfgclient.h"
     52#include "cfgops.h"
    5053#include "client.h"
    5154#include "display.h"
     
    6265static void display_client_ev_pending(void *);
    6366static void display_wmclient_ev_pending(void *);
     67static void display_cfgclient_ev_pending(void *);
    6468static void display_gc_conn(ipc_call_t *, void *);
    6569static void display_wndmgt_conn(ipc_call_t *, void *);
     70static void display_dispcfg_conn(ipc_call_t *, void *);
    6671
    6772#ifdef CONFIG_DISP_DOUBLE_BUF
     
    8691};
    8792
     93static ds_cfgclient_cb_t display_cfgclient_cb = {
     94        .ev_pending = display_cfgclient_ev_pending
     95};
     96
    8897static void display_client_ev_pending(void *arg)
    8998{
     
    98107
    99108        wndmgt_srv_ev_pending(srv);
     109}
     110
     111static void display_cfgclient_ev_pending(void *arg)
     112{
     113        dispcfg_srv_t *srv = (dispcfg_srv_t *) arg;
     114
     115        dispcfg_srv_ev_pending(srv);
    100116}
    101117
     
    110126        port_id_t gc_port;
    111127        port_id_t wm_port;
     128        port_id_t dc_port;
    112129        errno_t rc;
    113130
     
    118135                goto error;
    119136
    120         rc = ds_seat_create(disp, &seat);
     137        rc = ds_seat_create(disp, "Alice", &seat);
    121138        if (rc != EOK)
    122139                goto error;
     
    146163        rc = async_create_port(INTERFACE_WNDMGT, display_wndmgt_conn, disp,
    147164            &wm_port);
     165        if (rc != EOK)
     166                goto error;
     167
     168        rc = async_create_port(INTERFACE_DISPCFG, display_dispcfg_conn, disp,
     169            &dc_port);
    148170        if (rc != EOK)
    149171                goto error;
     
    170192        // XXX destroy gc_port
    171193        // XXX destroy wm_port
     194        // XXX destroy dc_port
    172195#if 0
    173196        if (disp->input != NULL)
     
    284307}
    285308
     309/** Handle configuration connection to display server */
     310static void display_dispcfg_conn(ipc_call_t *icall, void *arg)
     311{
     312        ds_display_t *disp = (ds_display_t *) arg;
     313        errno_t rc;
     314        dispcfg_srv_t srv;
     315        ds_cfgclient_t *cfgclient = NULL;
     316
     317        /* Create CFG client object */
     318        ds_display_lock(disp);
     319        rc = ds_cfgclient_create(disp, &display_cfgclient_cb, &srv, &cfgclient);
     320        ds_display_unlock(disp);
     321        if (rc != EOK) {
     322                async_answer_0(icall, ENOMEM);
     323                return;
     324        }
     325
     326        /* Set up protocol structure */
     327        dispcfg_srv_initialize(&srv);
     328        srv.ops = &dispcfg_srv_ops;
     329        srv.arg = cfgclient;
     330
     331        /* Handle connection */
     332        dispcfg_conn(icall, &srv);
     333
     334        ds_display_lock(disp);
     335        ds_cfgclient_destroy(cfgclient);
     336        ds_display_unlock(disp);
     337}
     338
    286339int main(int argc, char *argv[])
    287340{
  • uspace/srv/hid/display/meson.build

    re04b72d6 rd8503fd  
    11#
    2 # Copyright (c) 2022 Jiri Svoboda
     2# Copyright (c) 2023 Jiri Svoboda
    33# All rights reserved.
    44#
     
    2727#
    2828
    29 deps = [ 'ipcgfx', 'memgfx', 'display', 'ddev', 'wndmgt' ]
     29deps = [ 'ipcgfx', 'memgfx', 'display', 'ddev', 'dispcfg', 'wndmgt' ]
    3030
    3131src = files(
     32        'cfgclient.c',
     33        'cfgops.c',
    3234        'client.c',
    3335        'clonegc.c',
     
    4749
    4850test_src = files(
     51        'cfgclient.c',
    4952        'client.c',
    5053        'clonegc.c',
     
    5659        'window.c',
    5760        'wmclient.c',
     61        'test/cfgclient.c',
    5862        'test/client.c',
    5963        'test/clonegc.c',
  • uspace/srv/hid/display/seat.c

    re04b72d6 rd8503fd  
    3939#include <gfx/render.h>
    4040#include <stdlib.h>
     41#include <str.h>
    4142#include "client.h"
    4243#include "cursor.h"
     
    5152 *
    5253 * @param display Parent display
     54 * @param name Seat name
    5355 * @param rseat Place to store pointer to new seat.
    5456 * @return EOK on success, ENOMEM if out of memory
    5557 */
    56 errno_t ds_seat_create(ds_display_t *display, ds_seat_t **rseat)
     58errno_t ds_seat_create(ds_display_t *display, const char *name,
     59    ds_seat_t **rseat)
    5760{
    5861        ds_seat_t *seat;
     62        ds_seat_t *s0;
     63
     64        s0 = ds_display_first_seat(display);
     65        while (s0 != NULL) {
     66                if (str_cmp(s0->name, name) == 0)
     67                        return EEXIST;
     68                s0 = ds_display_next_seat(s0);
     69        }
    5970
    6071        seat = calloc(1, sizeof(ds_seat_t));
     
    6273                return ENOMEM;
    6374
     75        seat->name = str_dup(name);
     76        if (seat->name == NULL) {
     77                free(seat);
     78                return ENOMEM;
     79        }
     80
    6481        ds_display_add_seat(display, seat);
    6582        seat->pntpos.x = 0;
     
    8097{
    8198        ds_display_remove_seat(seat);
     99        free(seat->name);
    82100        free(seat);
    83101}
  • uspace/srv/hid/display/seat.h

    re04b72d6 rd8503fd  
    4646#include "types/display/window.h"
    4747
    48 extern errno_t ds_seat_create(ds_display_t *, ds_seat_t **);
     48extern errno_t ds_seat_create(ds_display_t *, const char *, ds_seat_t **);
    4949extern void ds_seat_destroy(ds_seat_t *);
    5050extern void ds_seat_set_focus(ds_seat_t *, ds_window_t *);
  • uspace/srv/hid/display/test/client.c

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    9393        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    9494
    95         rc = ds_seat_create(disp, &seat);
     95        rc = ds_seat_create(disp, "Alice", &seat);
    9696        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    9797
     
    144144        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    145145
    146         rc = ds_seat_create(disp, &seat);
     146        rc = ds_seat_create(disp, "Alice", &seat);
    147147        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    148148
     
    192192        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    193193
    194         rc = ds_seat_create(disp, &seat);
     194        rc = ds_seat_create(disp, "Alice", &seat);
    195195        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    196196
     
    250250        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    251251
    252         rc = ds_seat_create(disp, &seat);
     252        rc = ds_seat_create(disp, "Alice", &seat);
    253253        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    254254
     
    309309        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    310310
    311         rc = ds_seat_create(disp, &seat);
     311        rc = ds_seat_create(disp, "Alice", &seat);
    312312        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    313313
     
    377377        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    378378
    379         rc = ds_seat_create(disp, &seat);
     379        rc = ds_seat_create(disp, "Alice", &seat);
    380380        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    381381
     
    445445        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    446446
    447         rc = ds_seat_create(disp, &seat);
     447        rc = ds_seat_create(disp, "Alice", &seat);
    448448        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    449449
     
    514514        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    515515
    516         rc = ds_seat_create(disp, &seat);
     516        rc = ds_seat_create(disp, "Alice", &seat);
    517517        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    518518
     
    572572        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    573573
    574         rc = ds_seat_create(disp, &seat);
     574        rc = ds_seat_create(disp, "Alice", &seat);
    575575        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    576576
     
    618618        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    619619
    620         rc = ds_seat_create(disp, &seat);
     620        rc = ds_seat_create(disp, "Alice", &seat);
    621621        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    622622
  • uspace/srv/hid/display/test/display.c

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3232#include <str.h>
    3333
     34#include "../cfgclient.h"
    3435#include "../client.h"
    3536#include "../display.h"
     
    5455};
    5556
     57static void test_ds_cfgev_pending(void *);
     58
     59static ds_cfgclient_cb_t test_ds_cfgclient_cb = {
     60        .ev_pending = test_ds_cfgev_pending
     61};
     62
    5663static void test_ds_ev_pending(void *arg)
    5764{
     
    6673}
    6774
     75static void test_ds_cfgev_pending(void *arg)
     76{
     77        bool *called_cb = (bool *) arg;
     78        *called_cb = true;
     79}
     80
    6881/** Display creation and destruction. */
    6982PCUT_TEST(display_create_destroy)
     
    123136
    124137        ds_wmclient_destroy(wmclient);
     138        ds_display_destroy(disp);
     139}
     140
     141/** Basic CFG client operation. */
     142PCUT_TEST(display_cfgclient)
     143{
     144        ds_display_t *disp;
     145        ds_cfgclient_t *cfgclient;
     146        errno_t rc;
     147
     148        rc = ds_display_create(NULL, df_none, &disp);
     149        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     150
     151        rc = ds_cfgclient_create(disp, &test_ds_cfgclient_cb, NULL, &cfgclient);
     152        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     153
     154        ds_cfgclient_destroy(cfgclient);
    125155        ds_display_destroy(disp);
    126156}
     
    145175        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    146176
    147         rc = ds_seat_create(disp, &seat);
     177        rc = ds_seat_create(disp, "Alice", &seat);
    148178        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    149179
     
    216246        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    217247
    218         rc = ds_seat_create(disp, &seat);
     248        rc = ds_seat_create(disp, "Alice", &seat);
    219249        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    220250
     
    287317        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    288318
    289         rc = ds_seat_create(disp, &seat);
     319        rc = ds_seat_create(disp, "Alice", &seat);
    290320        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    291321
     
    331361        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    332362
    333         rc = ds_seat_create(disp, &seat);
     363        rc = ds_seat_create(disp, "Alice", &seat);
    334364        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    335365
     
    372402        ds_display_t *disp;
    373403        ds_seat_t *seat;
    374         ds_seat_t *s0, *s1;
    375         errno_t rc;
    376 
    377         rc = ds_display_create(NULL, df_none, &disp);
    378         PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    379 
    380         rc = ds_seat_create(disp, &seat);
     404        ds_seat_t *s0, *s1, *s2;
     405        errno_t rc;
     406
     407        rc = ds_display_create(NULL, df_none, &disp);
     408        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     409
     410        rc = ds_seat_create(disp, "Alice", &seat);
    381411        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    382412
     
    386416        s1 = ds_display_next_seat(s0);
    387417        PCUT_ASSERT_NULL(s1);
     418
     419        s2 = ds_display_find_seat(disp, seat->id);
     420        PCUT_ASSERT_EQUALS(s2, seat);
    388421
    389422        ds_seat_destroy(seat);
     
    413446        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    414447
    415         rc = ds_seat_create(disp, &seat);
     448        rc = ds_seat_create(disp, "Alice", &seat);
    416449        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    417450
     
    461494        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    462495
    463         rc = ds_seat_create(disp, &seat);
     496        rc = ds_seat_create(disp, "Alice", &seat);
    464497        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    465498
     
    529562        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    530563
    531         rc = ds_seat_create(disp, &seat);
     564        rc = ds_seat_create(disp, "Alice", &seat);
    532565        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    533566
     
    614647        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    615648
    616         rc = ds_seat_create(disp, &seat);
     649        rc = ds_seat_create(disp, "Alice", &seat);
    617650        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    618651
  • uspace/srv/hid/display/test/main.c

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2019 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3131PCUT_INIT;
    3232
     33PCUT_IMPORT(cfgclient);
    3334PCUT_IMPORT(client);
    3435PCUT_IMPORT(clonegc);
  • uspace/srv/hid/display/test/seat.c

    re04b72d6 rd8503fd  
    7070        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7171
    72         rc = ds_seat_create(disp, &seat);
     72        rc = ds_seat_create(disp, "Alice", &seat);
    7373        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7474
     
    110110        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    111111
    112         rc = ds_seat_create(disp, &seat);
     112        rc = ds_seat_create(disp, "Alice", &seat);
    113113        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    114114
     
    155155        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    156156
    157         rc = ds_seat_create(disp, &seat);
     157        rc = ds_seat_create(disp, "Alice", &seat);
    158158        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    159159
     
    196196        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    197197
    198         rc = ds_seat_create(disp, &seat);
     198        rc = ds_seat_create(disp, "Alice", &seat);
    199199        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    200200
     
    245245        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    246246
    247         rc = ds_seat_create(disp, &seat);
     247        rc = ds_seat_create(disp, "Alice", &seat);
    248248        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    249249
     
    295295        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    296296
    297         rc = ds_seat_create(disp, &seat);
     297        rc = ds_seat_create(disp, "Alice", &seat);
    298298        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    299299
     
    341341        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    342342
    343         rc = ds_seat_create(disp, &seat);
     343        rc = ds_seat_create(disp, "Alice", &seat);
    344344        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    345345
     
    382382        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    383383
    384         rc = ds_seat_create(disp, &seat);
     384        rc = ds_seat_create(disp, "Alice", &seat);
    385385        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    386386
     
    431431        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    432432
    433         rc = ds_seat_create(disp, &seat);
     433        rc = ds_seat_create(disp, "Alice", &seat);
    434434        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    435435
     
    475475        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    476476
    477         rc = ds_seat_create(disp, &seat);
     477        rc = ds_seat_create(disp, "Alice", &seat);
    478478        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    479479
     
    528528        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    529529
    530         rc = ds_seat_create(disp, &seat);
     530        rc = ds_seat_create(disp, "Alice", &seat);
    531531        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    532532
     
    592592        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    593593
    594         rc = ds_seat_create(disp, &seat);
     594        rc = ds_seat_create(disp, "Alice", &seat);
    595595        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    596596
     
    688688        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    689689
    690         rc = ds_seat_create(disp, &seat);
     690        rc = ds_seat_create(disp, "Alice", &seat);
    691691        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    692692
  • uspace/srv/hid/display/test/window.c

    re04b72d6 rd8503fd  
    6767        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    6868
    69         rc = ds_seat_create(disp, &seat);
     69        rc = ds_seat_create(disp, "Alice", &seat);
    7070        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    7171
     
    100100        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    101101
    102         rc = ds_seat_create(disp, &seat);
     102        rc = ds_seat_create(disp, "Alice", &seat);
    103103        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    104104
     
    147147        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    148148
    149         rc = ds_seat_create(disp, &seat);
     149        rc = ds_seat_create(disp, "Alice", &seat);
    150150        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    151151
     
    194194        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    195195
    196         rc = ds_seat_create(disp, &seat);
     196        rc = ds_seat_create(disp, "Alice", &seat);
    197197        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    198198
     
    235235        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    236236
    237         rc = ds_seat_create(disp, &seat);
     237        rc = ds_seat_create(disp, "Alice", &seat);
    238238        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    239239
     
    277277        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    278278
    279         rc = ds_seat_create(disp, &seat);
     279        rc = ds_seat_create(disp, "Alice", &seat);
    280280        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    281281
     
    314314        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    315315
    316         rc = ds_seat_create(disp, &seat);
     316        rc = ds_seat_create(disp, "Alice", &seat);
    317317        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    318318
     
    352352        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    353353
    354         rc = ds_seat_create(disp, &seat);
     354        rc = ds_seat_create(disp, "Alice", &seat);
    355355        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    356356
     
    392392        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    393393
    394         rc = ds_seat_create(disp, &seat);
     394        rc = ds_seat_create(disp, "Alice", &seat);
    395395        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    396396
     
    436436        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    437437
    438         rc = ds_seat_create(disp, &seat);
     438        rc = ds_seat_create(disp, "Alice", &seat);
    439439        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    440440
     
    471471        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    472472
    473         rc = ds_seat_create(disp, &seat);
     473        rc = ds_seat_create(disp, "Alice", &seat);
    474474        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    475475
     
    516516        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    517517
    518         rc = ds_seat_create(disp, &seat);
     518        rc = ds_seat_create(disp, "Alice", &seat);
    519519        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    520520
     
    571571        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    572572
    573         rc = ds_seat_create(disp, &seat);
     573        rc = ds_seat_create(disp, "Alice", &seat);
    574574        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    575575
     
    643643        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    644644
    645         rc = ds_seat_create(disp, &seat);
     645        rc = ds_seat_create(disp, "Alice", &seat);
    646646        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    647647
     
    682682        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    683683
    684         rc = ds_seat_create(disp, &seat);
     684        rc = ds_seat_create(disp, "Alice", &seat);
    685685        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    686686
     
    722722        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    723723
    724         rc = ds_seat_create(disp, &seat);
     724        rc = ds_seat_create(disp, "Alice", &seat);
    725725        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    726726
     
    769769        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    770770
    771         rc = ds_seat_create(disp, &seat);
     771        rc = ds_seat_create(disp, "Alice", &seat);
    772772        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    773773
     
    816816        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    817817
    818         rc = ds_seat_create(disp, &seat);
     818        rc = ds_seat_create(disp, "Alice", &seat);
    819819        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    820820
     
    10861086        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    10871087
    1088         rc = ds_seat_create(disp, &seat);
     1088        rc = ds_seat_create(disp, "Alice", &seat);
    10891089        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    10901090
     
    11401140        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    11411141
    1142         rc = ds_seat_create(disp, &seat);
     1142        rc = ds_seat_create(disp, "Alice", &seat);
    11431143        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    11441144
     
    11851185        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    11861186
    1187         rc = ds_seat_create(disp, &seat);
     1187        rc = ds_seat_create(disp, "Alice", &seat);
    11881188        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    11891189
     
    12411241        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    12421242
    1243         rc = ds_seat_create(disp, &seat);
     1243        rc = ds_seat_create(disp, "Alice", &seat);
    12441244        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    12451245
  • uspace/srv/hid/display/types/display/display.h

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4646#include "cursor.h"
    4747#include "clonegc.h"
     48#include "seat.h"
    4849#include "window.h"
    4950
     
    6465        /** WM clients (of ds_wmclient_t) */
    6566        list_t wmclients;
     67        /** CFG clients (of ds_cfgclient_t) */
     68        list_t cfgclients;
    6669
    6770        /** Next ID to assign to a window.
     
    7376         */
    7477        ds_wnd_id_t next_wnd_id;
     78        /** Next ID to assign to a seat */
     79        ds_seat_id_t next_seat_id;
    7580        /** Input service */
    7681        input_t *input;
  • uspace/srv/hid/display/types/display/seat.h

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4040#include <gfx/coord.h>
    4141
     42typedef sysarg_t ds_seat_id_t;
     43
    4244/** Display server seat */
    4345typedef struct ds_seat {
     
    4648        /** Link to display->seats */
    4749        link_t lseats;
     50        /** Seat ID */
     51        ds_seat_id_t id;
     52        /** Seat name */
     53        char *name;
    4854        /** Window this seat is focused on */
    4955        struct ds_window *focus;
  • uspace/srv/hid/display/wmclient.c

    re04b72d6 rd8503fd  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    3636#include <adt/list.h>
    3737#include <errno.h>
     38#include <io/log.h>
    3839#include <stdlib.h>
    3940#include "display.h"
     
    122123        }
    123124}
    124 #include <io/log.h>
     125
    125126/** Post window added event to the WM client's message queue.
    126127 *
Note: See TracChangeset for help on using the changeset viewer.