Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/io/console.c

    r902f0906 r7c014d1  
    3838#include <async.h>
    3939#include <errno.h>
     40#include <stdio.h>
    4041#include <malloc.h>
    4142#include <vfs/vfs_sess.h>
     
    125126{
    126127        async_exch_t *exch = async_exchange_begin(ctrl->output_sess);
    127         async_req_1_0(exch, CONSOLE_SET_CURSOR_VISIBILITY, (show != false));
     128        async_req_1_0(exch, CONSOLE_CURSOR_VISIBILITY, (show != false));
    128129        async_exchange_end(exch);
    129130}
     
    150151{
    151152        async_exch_t *exch = async_exchange_begin(ctrl->output_sess);
    152         async_req_2_0(exch, CONSOLE_SET_POS, col, row);
    153         async_exchange_end(exch);
    154 }
    155 
    156 static int console_ev_decode(ipc_call_t *call, cons_event_t *event)
    157 {
    158         event->type = IPC_GET_ARG1(*call);
    159 
    160         switch (event->type) {
    161         case CEV_KEY:
    162                 event->ev.key.type = IPC_GET_ARG2(*call);
    163                 event->ev.key.key = IPC_GET_ARG3(*call);
    164                 event->ev.key.mods = IPC_GET_ARG4(*call);
    165                 event->ev.key.c = IPC_GET_ARG5(*call);
    166                 break;
    167         case CEV_POS:
    168                 event->ev.pos.pos_id = IPC_GET_ARG2(*call) >> 16;
    169                 event->ev.pos.type = IPC_GET_ARG2(*call) & 0xffff;
    170                 event->ev.pos.btn_num = IPC_GET_ARG3(*call);
    171                 event->ev.pos.hpos = IPC_GET_ARG4(*call);
    172                 event->ev.pos.vpos = IPC_GET_ARG5(*call);
    173                 break;
    174         default:
    175                 return EIO;
    176         }
    177 
    178         return EOK;
    179 }
    180 
    181 bool console_get_event(console_ctrl_t *ctrl, cons_event_t *event)
     153        async_req_2_0(exch, CONSOLE_GOTO, col, row);
     154        async_exchange_end(exch);
     155}
     156
     157bool console_get_kbd_event(console_ctrl_t *ctrl, kbd_event_t *event)
    182158{
    183159        if (ctrl->input_aid == 0) {
    184                 ipc_call_t result;
     160                sysarg_t type;
     161                sysarg_t key;
     162                sysarg_t mods;
     163                sysarg_t c;
    185164               
    186165                async_exch_t *exch = async_exchange_begin(ctrl->input_sess);
    187                 aid_t aid = async_send_0(exch, CONSOLE_GET_EVENT, &result);
     166                int rc = async_req_0_4(exch, CONSOLE_GET_EVENT, &type, &key, &mods, &c);
    188167                async_exchange_end(exch);
    189                
    190                 sysarg_t rc;
    191                 async_wait_for(aid, &rc);
    192168               
    193169                if (rc != EOK) {
     
    196172                }
    197173               
    198                 rc = console_ev_decode(&result, event);
    199                 if (rc != EOK) {
    200                         errno = rc;
    201                         return false;
    202                 }
     174                event->type = type;
     175                event->key = key;
     176                event->mods = mods;
     177                event->c = c;
    203178        } else {
    204179                sysarg_t retval;
     
    212187                }
    213188               
    214                 int rc = console_ev_decode(&ctrl->input_call, event);
    215                 if (rc != EOK) {
    216                         errno = rc;
    217                         return false;
    218                 }
     189                event->type = IPC_GET_ARG1(ctrl->input_call);
     190                event->key = IPC_GET_ARG2(ctrl->input_call);
     191                event->mods = IPC_GET_ARG3(ctrl->input_call);
     192                event->c = IPC_GET_ARG4(ctrl->input_call);
    219193        }
    220194       
     
    222196}
    223197
    224 bool console_get_event_timeout(console_ctrl_t *ctrl, cons_event_t *event,
     198bool console_get_kbd_event_timeout(console_ctrl_t *ctrl, kbd_event_t *event,
    225199    suseconds_t *timeout)
    226200{
     
    250224        }
    251225       
    252         rc = console_ev_decode(&ctrl->input_call, event);
    253         if (rc != EOK) {
    254                 errno = rc;
    255                 return false;
    256         }
     226        event->type = IPC_GET_ARG1(ctrl->input_call);
     227        event->key = IPC_GET_ARG2(ctrl->input_call);
     228        event->mods = IPC_GET_ARG3(ctrl->input_call);
     229        event->c = IPC_GET_ARG4(ctrl->input_call);
    257230       
    258231        /* Update timeout */
Note: See TracChangeset for help on using the changeset viewer.