Changeset f4f866c in mainline for uspace/srv/hid/console/console.c


Ignore:
Timestamp:
2010-04-23T21:42:26Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6c39a907
Parents:
38aaacc2 (diff), 80badbe (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

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

    r38aaacc2 rf4f866c  
    5454#include <vfs/vfs.h>
    5555#include <fibril_synch.h>
     56#include <io/style.h>
     57#include <io/screenbuffer.h>
    5658
    5759#include "console.h"
    5860#include "gcons.h"
    5961#include "keybuffer.h"
    60 #include "screenbuffer.h"
     62
    6163
    6264#define NAME       "console"
     
    7173/** Information about framebuffer */
    7274struct {
    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) */
     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) */
    7779} fb_info;
    7880
     
    99101/** Information on row-span yet unsent to FB driver. */
    100102struct {
    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. */
     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. */
    104106} fb_pending;
    105107
     
    117119}
    118120
    119 static void curs_goto(size_t x, size_t y)
     121static void curs_goto(ipcarg_t x, ipcarg_t y)
    120122{
    121123        async_msg_2(fb_info.phone, FB_CURSOR_GOTO, x, y);
     
    147149}
    148150
    149 static void set_style(int style)
     151static void set_style(uint8_t style)
    150152{
    151153        async_msg_1(fb_info.phone, FB_SET_STYLE, style);
    152154}
    153155
    154 static void set_color(int fgcolor, int bgcolor, int flags)
     156static void set_color(uint8_t fgcolor, uint8_t bgcolor, uint8_t flags)
    155157{
    156158        async_msg_3(fb_info.phone, FB_SET_COLOR, fgcolor, bgcolor, flags);
    157159}
    158160
    159 static void set_rgb_color(int fgcolor, int bgcolor)
     161static void set_rgb_color(uint32_t fgcolor, uint32_t bgcolor)
    160162{
    161163        async_msg_2(fb_info.phone, FB_SET_RGB_COLOR, fgcolor, bgcolor);
     
    178180}
    179181
    180 static int ccap_fb_to_con(int ccap_fb, int *ccap_con)
     182static int ccap_fb_to_con(ipcarg_t ccap_fb, ipcarg_t *ccap_con)
    181183{
    182184        switch (ccap_fb) {
    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 
     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       
    190201        return EOK;
    191202}
     
    226237 *
    227238 */
    228 static void cell_mark_changed(size_t col, size_t row)
     239static void cell_mark_changed(ipcarg_t col, ipcarg_t row)
    229240{
    230241        if (fb_pending.cnt != 0) {
     
    253264{
    254265        bool flush_cursor = false;
    255 
     266       
    256267        switch (ch) {
    257268        case '\n':
     
    297308                        async_msg_1(fb_info.phone, FB_SCROLL, 1);
    298309        }
    299 
     310       
    300311        if (cons == active_console && flush_cursor)
    301312                curs_goto(cons->scr.position_x, cons->scr.position_y);
     
    327338       
    328339        if (cons != kernel_console) {
    329                 size_t x;
    330                 size_t y;
    331                 int rc = 0;
    332                
    333340                async_serialize_start();
    334341               
     
    344351                set_attrs(&cons->scr.attrs);
    345352                curs_visibility(false);
     353               
     354                ipcarg_t x;
     355                ipcarg_t y;
     356                int rc = 0;
     357               
    346358                if (interbuffer) {
    347359                        for (y = 0; y < cons->scr.size_y; y++) {
     
    390402        /* Ignore parameters, the connection is already opened */
    391403        while (true) {
    392                
    393404                ipc_call_t call;
    394405                ipc_callid_t callid = async_get_call(&call);
     
    433444static void mouse_events(ipc_callid_t iid, ipc_call_t *icall)
    434445{
    435         int button, press;
    436         int dx, dy;
    437         int newcon;
    438 
    439446        /* Ignore parameters, the connection is already opened */
    440447        while (true) {
    441 
    442448                ipc_call_t call;
    443449                ipc_callid_t callid = async_get_call(&call);
    444 
     450               
    445451                int retval;
    446 
     452               
    447453                switch (IPC_GET_METHOD(call)) {
    448454                case IPC_M_PHONE_HUNGUP:
     
    450456                        return;
    451457                case MEVENT_BUTTON:
    452                         button = IPC_GET_ARG1(call);
    453                         press = IPC_GET_ARG2(call);
    454                         if (button == 1) {
    455                                 newcon = gcons_mouse_btn(press);
     458                        if (IPC_GET_ARG1(call) == 1) {
     459                                int newcon = gcons_mouse_btn((bool) IPC_GET_ARG2(call));
    456460                                if (newcon != -1)
    457461                                        change_console(&consoles[newcon]);
     
    460464                        break;
    461465                case MEVENT_MOVE:
    462                         dx = IPC_GET_ARG1(call);
    463                         dy = IPC_GET_ARG2(call);
    464                         gcons_mouse_move(dx, dy);
     466                        gcons_mouse_move((int) IPC_GET_ARG1(call),
     467                            (int) IPC_GET_ARG2(call));
    465468                        retval = 0;
    466469                        break;
     
    520523        console_event_t ev;
    521524        fibril_mutex_lock(&input_mutex);
     525       
    522526recheck:
    523527        while ((keybuffer_pop(&cons->keybuffer, &ev)) && (pos < size)) {
     
    536540                goto recheck;
    537541        }
     542       
    538543        fibril_mutex_unlock(&input_mutex);
    539544}
     
    542547{
    543548        console_event_t ev;
    544 
     549       
    545550        fibril_mutex_lock(&input_mutex);
     551       
    546552recheck:
    547553        if (keybuffer_pop(&cons->keybuffer, &ev)) {
     
    551557                goto recheck;
    552558        }
     559       
    553560        fibril_mutex_unlock(&input_mutex);
    554561}
     
    580587        ipcarg_t arg2;
    581588        ipcarg_t arg3;
    582 
    583         int cons_ccap;
     589       
    584590        int rc;
    585591       
     
    622628                        if (cons == active_console) {
    623629                                async_req_0_0(fb_info.phone, FB_FLUSH);
    624                                
    625630                                curs_goto(cons->scr.position_x, cons->scr.position_y);
    626631                        }
     
    650655                        break;
    651656                case CONSOLE_GET_COLOR_CAP:
    652                         rc = ccap_fb_to_con(fb_info.color_cap, &cons_ccap);
     657                        rc = ccap_fb_to_con(fb_info.color_cap, &arg1);
    653658                        if (rc != EOK) {
    654659                                ipc_answer_0(callid, rc);
    655660                                continue;
    656661                        }
    657                         arg1 = cons_ccap;
    658662                        break;
    659663                case CONSOLE_SET_STYLE:
     
    714718                return false;
    715719        }
    716 
     720       
    717721        kbd_phone = fd_phone(input_fd);
    718722        if (kbd_phone < 0) {
     
    720724                return false;
    721725        }
    722 
     726       
    723727        /* NB: The callback connection is slotted for removal */
    724728        ipcarg_t phonehash;
     
    727731                return false;
    728732        }
    729 
     733       
    730734        async_new_connection(phonehash, 0, NULL, keyboard_events);
    731 
     735       
    732736        /* Connect to mouse device */
    733737        mouse_phone = -1;
    734738        int mouse_fd = open("/dev/hid_in/mouse", O_RDONLY);
    735 
     739       
    736740        if (mouse_fd < 0) {
    737741                printf(NAME ": Notice - failed opening %s\n", "/dev/hid_in/mouse");
    738742                goto skip_mouse;
    739743        }
    740 
     744       
    741745        mouse_phone = fd_phone(mouse_fd);
    742746        if (mouse_phone < 0) {
     
    744748                goto skip_mouse;
    745749        }
    746 
     750       
    747751        if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
    748752                printf(NAME ": Failed to create callback from mouse device\n");
     
    750754                goto skip_mouse;
    751755        }
    752 
     756       
    753757        async_new_connection(phonehash, 0, NULL, mouse_events);
    754758skip_mouse:
    755 
     759       
    756760        /* Connect to framebuffer driver */
    757761        fb_info.phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VIDEO, 0, 0);
     
    760764                return -1;
    761765        }
    762 
     766       
    763767        /* Register driver */
    764768        int rc = devmap_driver_register(NAME, client_connection);
     
    772776       
    773777        /* Synchronize, the gcons could put something in queue */
    774         ipcarg_t color_cap;
    775778        async_req_0_0(fb_info.phone, FB_FLUSH);
    776779        async_req_0_2(fb_info.phone, FB_GET_CSIZE, &fb_info.cols, &fb_info.rows);
    777         async_req_0_1(fb_info.phone, FB_GET_COLOR_CAP, &color_cap);
    778         fb_info.color_cap = color_cap;
     780        async_req_0_1(fb_info.phone, FB_GET_COLOR_CAP, &fb_info.color_cap);
    779781       
    780782        /* Set up shared memory buffer. */
     
    827829        async_serialize_start();
    828830        gcons_redraw_console();
    829         set_rgb_color(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND);
     831        set_style(STYLE_NORMAL);
    830832        screen_clear();
    831833        curs_goto(0, 0);
Note: See TracChangeset for help on using the changeset viewer.