Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/console/console.c

    r369a5f8 r19f857a  
    5454#include <vfs/vfs.h>
    5555#include <fibril_synch.h>
    56 #include <io/style.h>
    57 #include <io/screenbuffer.h>
    5856
    5957#include "console.h"
    6058#include "gcons.h"
    6159#include "keybuffer.h"
    62 
     60#include "screenbuffer.h"
    6361
    6462#define NAME       "console"
     
    7371/** Information about framebuffer */
    7472struct {
    75         int phone;           /**< Framebuffer phone */
    76         ipcarg_t cols;       /**< Framebuffer columns */
    77         ipcarg_t rows;       /**< Framebuffer rows */
    78         ipcarg_t color_cap;  /**< Color capabilities (FB_CCAP_xxx) */
     73        int phone;      /**< Framebuffer phone */
     74        ipcarg_t cols;  /**< Framebuffer columns */
     75        ipcarg_t rows;  /**< Framebuffer rows */
     76        int color_cap;  /**< Color capabilities (FB_CCAP_xxx) */
    7977} fb_info;
    8078
     
    10199/** Information on row-span yet unsent to FB driver. */
    102100struct {
    103         ipcarg_t col;  /**< Leftmost column of the span. */
    104         ipcarg_t row;  /**< Row where the span lies. */
    105         ipcarg_t cnt;  /**< Width of the span. */
     101        size_t col;  /**< Leftmost column of the span. */
     102        size_t row;  /**< Row where the span lies. */
     103        size_t cnt;  /**< Width of the span. */
    106104} fb_pending;
    107105
     
    119117}
    120118
    121 static void curs_goto(ipcarg_t x, ipcarg_t y)
     119static void curs_goto(size_t x, size_t y)
    122120{
    123121        async_msg_2(fb_info.phone, FB_CURSOR_GOTO, x, y);
     
    149147}
    150148
    151 static void set_style(uint8_t style)
     149static void set_style(int style)
    152150{
    153151        async_msg_1(fb_info.phone, FB_SET_STYLE, style);
    154152}
    155153
    156 static void set_color(uint8_t fgcolor, uint8_t bgcolor, uint8_t flags)
     154static void set_color(int fgcolor, int bgcolor, int flags)
    157155{
    158156        async_msg_3(fb_info.phone, FB_SET_COLOR, fgcolor, bgcolor, flags);
    159157}
    160158
    161 static void set_rgb_color(uint32_t fgcolor, uint32_t bgcolor)
     159static void set_rgb_color(int fgcolor, int bgcolor)
    162160{
    163161        async_msg_2(fb_info.phone, FB_SET_RGB_COLOR, fgcolor, bgcolor);
     
    180178}
    181179
    182 static int ccap_fb_to_con(ipcarg_t ccap_fb, ipcarg_t *ccap_con)
     180static int ccap_fb_to_con(int ccap_fb, int *ccap_con)
    183181{
    184182        switch (ccap_fb) {
    185         case FB_CCAP_NONE:
    186                 *ccap_con = CONSOLE_CCAP_NONE;
    187                 break;
    188         case FB_CCAP_STYLE:
    189                 *ccap_con = CONSOLE_CCAP_STYLE;
    190                 break;
    191         case FB_CCAP_INDEXED:
    192                 *ccap_con = CONSOLE_CCAP_INDEXED;
    193                 break;
    194         case FB_CCAP_RGB:
    195                 *ccap_con = CONSOLE_CCAP_RGB;
    196                 break;
    197         default:
    198                 return EINVAL;
    199         }
    200        
     183        case FB_CCAP_NONE: *ccap_con = CONSOLE_CCAP_NONE; break;
     184        case FB_CCAP_STYLE: *ccap_con = CONSOLE_CCAP_STYLE; break;
     185        case FB_CCAP_INDEXED: *ccap_con = CONSOLE_CCAP_INDEXED; break;
     186        case FB_CCAP_RGB: *ccap_con = CONSOLE_CCAP_RGB; break;
     187        default: return EINVAL;
     188        }
     189
    201190        return EOK;
    202191}
     
    237226 *
    238227 */
    239 static void cell_mark_changed(ipcarg_t col, ipcarg_t row)
     228static void cell_mark_changed(size_t col, size_t row)
    240229{
    241230        if (fb_pending.cnt != 0) {
     
    264253{
    265254        bool flush_cursor = false;
    266        
     255
    267256        switch (ch) {
    268257        case '\n':
     
    308297                        async_msg_1(fb_info.phone, FB_SCROLL, 1);
    309298        }
    310        
     299
    311300        if (cons == active_console && flush_cursor)
    312301                curs_goto(cons->scr.position_x, cons->scr.position_y);
     
    338327       
    339328        if (cons != kernel_console) {
     329                size_t x;
     330                size_t y;
     331                int rc = 0;
     332               
    340333                async_serialize_start();
    341334               
     
    351344                set_attrs(&cons->scr.attrs);
    352345                curs_visibility(false);
    353                
    354                 ipcarg_t x;
    355                 ipcarg_t y;
    356                 int rc = 0;
    357                
    358346                if (interbuffer) {
    359347                        for (y = 0; y < cons->scr.size_y; y++) {
     
    402390        /* Ignore parameters, the connection is already opened */
    403391        while (true) {
     392               
    404393                ipc_call_t call;
    405394                ipc_callid_t callid = async_get_call(&call);
     
    444433static void mouse_events(ipc_callid_t iid, ipc_call_t *icall)
    445434{
     435        int button, press;
     436        int dx, dy;
     437        int newcon;
     438
    446439        /* Ignore parameters, the connection is already opened */
    447440        while (true) {
     441
    448442                ipc_call_t call;
    449443                ipc_callid_t callid = async_get_call(&call);
    450                
     444
    451445                int retval;
    452                
     446
    453447                switch (IPC_GET_METHOD(call)) {
    454448                case IPC_M_PHONE_HUNGUP:
     
    456450                        return;
    457451                case MEVENT_BUTTON:
    458                         if (IPC_GET_ARG1(call) == 1) {
    459                                 int newcon = gcons_mouse_btn((bool) IPC_GET_ARG2(call));
     452                        button = IPC_GET_ARG1(call);
     453                        press = IPC_GET_ARG2(call);
     454                        if (button == 1) {
     455                                newcon = gcons_mouse_btn(press);
    460456                                if (newcon != -1)
    461457                                        change_console(&consoles[newcon]);
     
    464460                        break;
    465461                case MEVENT_MOVE:
    466                         gcons_mouse_move((int) IPC_GET_ARG1(call),
    467                             (int) IPC_GET_ARG2(call));
     462                        dx = IPC_GET_ARG1(call);
     463                        dy = IPC_GET_ARG2(call);
     464                        gcons_mouse_move(dx, dy);
    468465                        retval = 0;
    469466                        break;
     
    523520        console_event_t ev;
    524521        fibril_mutex_lock(&input_mutex);
    525        
    526522recheck:
    527523        while ((keybuffer_pop(&cons->keybuffer, &ev)) && (pos < size)) {
     
    540536                goto recheck;
    541537        }
    542        
    543538        fibril_mutex_unlock(&input_mutex);
    544539}
     
    547542{
    548543        console_event_t ev;
    549        
     544
    550545        fibril_mutex_lock(&input_mutex);
    551        
    552546recheck:
    553547        if (keybuffer_pop(&cons->keybuffer, &ev)) {
     
    557551                goto recheck;
    558552        }
    559        
    560553        fibril_mutex_unlock(&input_mutex);
    561554}
     
    587580        ipcarg_t arg2;
    588581        ipcarg_t arg3;
    589        
     582
     583        int cons_ccap;
    590584        int rc;
    591585       
     
    628622                        if (cons == active_console) {
    629623                                async_req_0_0(fb_info.phone, FB_FLUSH);
     624                               
    630625                                curs_goto(cons->scr.position_x, cons->scr.position_y);
    631626                        }
     
    655650                        break;
    656651                case CONSOLE_GET_COLOR_CAP:
    657                         rc = ccap_fb_to_con(fb_info.color_cap, &arg1);
     652                        rc = ccap_fb_to_con(fb_info.color_cap, &cons_ccap);
    658653                        if (rc != EOK) {
    659654                                ipc_answer_0(callid, rc);
    660655                                continue;
    661656                        }
     657                        arg1 = cons_ccap;
    662658                        break;
    663659                case CONSOLE_SET_STYLE:
     
    718714                return false;
    719715        }
    720        
     716
    721717        kbd_phone = fd_phone(input_fd);
    722718        if (kbd_phone < 0) {
     
    724720                return false;
    725721        }
    726        
     722
    727723        /* NB: The callback connection is slotted for removal */
    728724        ipcarg_t phonehash;
     
    731727                return false;
    732728        }
    733        
     729
    734730        async_new_connection(phonehash, 0, NULL, keyboard_events);
    735        
     731
    736732        /* Connect to mouse device */
    737733        mouse_phone = -1;
    738734        int mouse_fd = open("/dev/hid_in/mouse", O_RDONLY);
    739        
     735
    740736        if (mouse_fd < 0) {
    741737                printf(NAME ": Notice - failed opening %s\n", "/dev/hid_in/mouse");
    742738                goto skip_mouse;
    743739        }
    744        
     740
    745741        mouse_phone = fd_phone(mouse_fd);
    746742        if (mouse_phone < 0) {
     
    748744                goto skip_mouse;
    749745        }
    750        
     746
    751747        if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
    752748                printf(NAME ": Failed to create callback from mouse device\n");
     
    754750                goto skip_mouse;
    755751        }
    756        
     752
    757753        async_new_connection(phonehash, 0, NULL, mouse_events);
    758754skip_mouse:
    759        
     755
    760756        /* Connect to framebuffer driver */
    761757        fb_info.phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VIDEO, 0, 0);
     
    764760                return -1;
    765761        }
    766        
     762
    767763        /* Register driver */
    768764        int rc = devmap_driver_register(NAME, client_connection);
     
    776772       
    777773        /* Synchronize, the gcons could put something in queue */
     774        ipcarg_t color_cap;
    778775        async_req_0_0(fb_info.phone, FB_FLUSH);
    779776        async_req_0_2(fb_info.phone, FB_GET_CSIZE, &fb_info.cols, &fb_info.rows);
    780         async_req_0_1(fb_info.phone, FB_GET_COLOR_CAP, &fb_info.color_cap);
     777        async_req_0_1(fb_info.phone, FB_GET_COLOR_CAP, &color_cap);
     778        fb_info.color_cap = color_cap;
    781779       
    782780        /* Set up shared memory buffer. */
     
    829827        async_serialize_start();
    830828        gcons_redraw_console();
    831         set_style(STYLE_NORMAL);
     829        set_rgb_color(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND);
    832830        screen_clear();
    833831        curs_goto(0, 0);
Note: See TracChangeset for help on using the changeset viewer.