Changeset 8b97256 in mainline for uspace/srv/fb/sgcn.c


Ignore:
Timestamp:
2008-12-18T12:23:39Z (15 years ago)
Author:
Jiri Svoboda <jirik.svoboda@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d99b3f2
Parents:
8231246
Message:

Do not duplicate code in serial framebuffer drivers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fb/sgcn.c

    r8231246 r8b97256  
    3737
    3838#include <async.h>
    39 #include <ipc/ipc.h>
    40 #include <ipc/fb.h>
    4139#include <sysinfo.h>
    4240#include <as.h>
     
    6058 */
    6159static uintptr_t sram_buffer_offset;
    62 
    63 /* Allow only 1 connection */
    64 static int client_connected = 0;
    6560
    6661/**
     
    123118
    124119/**
    125  * Main function of the thread serving client connections.
    126  */
    127 static void sgcn_client_connection(ipc_callid_t iid, ipc_call_t *icall)
    128 {
    129         int retval;
    130         ipc_callid_t callid;
    131         ipc_call_t call;
    132         char c;
    133         int lastcol = 0;
    134         int lastrow = 0;
    135         int newcol;
    136         int newrow;
    137         int fgcolor;
    138         int bgcolor;
    139         int i;
    140        
    141         if (client_connected) {
    142                 ipc_answer_0(iid, ELIMIT);
    143                 return;
    144         }
    145        
    146         client_connected = 1;
    147         ipc_answer_0(iid, EOK);
    148        
    149         /* Clear the terminal, set scrolling region
    150            to 0 - 24 lines */
    151         serial_clrscr();
    152         serial_goto(0, 0);
    153         serial_puts("\033[0;24r");
    154        
    155         while (true) {
    156                 callid = async_get_call(&call);
    157                 switch (IPC_GET_METHOD(call)) {
    158                 case IPC_M_PHONE_HUNGUP:
    159                         client_connected = 0;
    160                         ipc_answer_0(callid, EOK);
    161                         return;
    162                 case FB_PUTCHAR:
    163                         c = IPC_GET_ARG1(call);
    164                         newrow = IPC_GET_ARG2(call);
    165                         newcol = IPC_GET_ARG3(call);
    166                         if ((lastcol != newcol) || (lastrow != newrow))
    167                                 serial_goto(newrow, newcol);
    168                         lastcol = newcol + 1;
    169                         lastrow = newrow;
    170                         sgcn_putc(c);
    171                         retval = 0;
    172                         break;
    173                 case FB_CURSOR_GOTO:
    174                         newrow = IPC_GET_ARG1(call);
    175                         newcol = IPC_GET_ARG2(call);
    176                         serial_goto(newrow, newcol);
    177                         lastrow = newrow;
    178                         lastcol = newcol;
    179                         retval = 0;
    180                         break;
    181                 case FB_GET_CSIZE:
    182                         ipc_answer_2(callid, EOK, HEIGHT, WIDTH);
    183                         continue;
    184                 case FB_CLEAR:
    185                         serial_clrscr();
    186                         retval = 0;
    187                         break;
    188                 case FB_SET_STYLE:
    189                         fgcolor = IPC_GET_ARG1(call);
    190                         bgcolor = IPC_GET_ARG2(call);
    191                         if (fgcolor < bgcolor)
    192                                 serial_set_style(0);
    193                         else
    194                                 serial_set_style(7);
    195                         retval = 0;
    196                         break;
    197                 case FB_SCROLL:
    198                         i = IPC_GET_ARG1(call);
    199                         if ((i > HEIGHT) || (i < -HEIGHT)) {
    200                                 retval = EINVAL;
    201                                 break;
    202                         }
    203                         serial_scroll(i);
    204                         serial_goto(lastrow, lastcol);
    205                         retval = 0;
    206                         break;
    207                 case FB_CURSOR_VISIBILITY:
    208                         if(IPC_GET_ARG1(call))
    209                                 serial_cursor_enable();
    210                         else
    211                                 serial_cursor_disable();
    212                         retval = 0;
    213                         break;
    214                 default:
    215                         retval = ENOENT;
    216                 }
    217                 ipc_answer_0(callid, retval);
    218         }
    219 }
    220 
    221 /**
    222120 * Initializes the SGCN serial driver.
    223121 */
     
    241139        sram_buffer_offset = sysinfo_value("sram.buffer.offset");
    242140       
    243         async_set_client_connection(sgcn_client_connection);
     141        async_set_client_connection(serial_client_connection);
    244142        return 0;
    245143}
Note: See TracChangeset for help on using the changeset viewer.