Changeset 8b97256 in mainline for uspace/srv/fb/msim.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/msim.c

    r8231246 r8b97256  
    3737
    3838#include <async.h>
    39 #include <ipc/fb.h>
    40 #include <ipc/ipc.h>
    4139#include <libc.h>
    42 #include <errno.h>
    43 #include <string.h>
    44 #include <libc.h>
    45 #include <stdio.h>
    46 #include <ipc/fb.h>
    4740#include <sysinfo.h>
    4841#include <as.h>
    49 #include <align.h>
    5042#include <ddi.h>
    5143
     
    5648#define HEIGHT 25
    5749
    58 #define MAX_CONTROL 20
    59 
    60 /* Allow only 1 connection */
    61 static int client_connected = 0;
    62 
    6350static char *virt_addr;
    6451
     
    6653{
    6754        *virt_addr = c;
    68 }
    69 
    70 static void msim_client_connection(ipc_callid_t iid, ipc_call_t *icall)
    71 {
    72         int retval;
    73         ipc_callid_t callid;
    74         ipc_call_t call;
    75         char c;
    76         int lastcol = 0;
    77         int lastrow = 0;
    78         int newcol;
    79         int newrow;
    80         int fgcolor;
    81         int bgcolor;
    82         int i;
    83 
    84         if (client_connected) {
    85                 ipc_answer_0(iid, ELIMIT);
    86                 return;
    87         }
    88        
    89         client_connected = 1;
    90         ipc_answer_0(iid, EOK);
    91        
    92         /* Clear the terminal, set scrolling region
    93            to 0 - 25 lines */
    94         serial_clrscr();
    95         serial_goto(0, 0);
    96         serial_puts("\033[0;25r");
    97        
    98         while (true) {
    99                 callid = async_get_call(&call);
    100                 switch (IPC_GET_METHOD(call)) {
    101                 case IPC_M_PHONE_HUNGUP:
    102                         client_connected = 0;
    103                         ipc_answer_0(callid, EOK);
    104                         return;
    105                 case FB_PUTCHAR:
    106                         c = IPC_GET_ARG1(call);
    107                         newrow = IPC_GET_ARG2(call);
    108                         newcol = IPC_GET_ARG3(call);
    109                         if ((lastcol != newcol) || (lastrow != newrow))
    110                                 serial_goto(newrow, newcol);
    111                         lastcol = newcol + 1;
    112                         lastrow = newrow;
    113                         msim_putc(c);
    114                         retval = 0;
    115                         break;
    116                 case FB_CURSOR_GOTO:
    117                         newrow = IPC_GET_ARG1(call);
    118                         newcol = IPC_GET_ARG2(call);
    119                         serial_goto(newrow, newcol);
    120                         lastrow = newrow;
    121                         lastcol = newcol;
    122                         retval = 0;
    123                         break;
    124                 case FB_GET_CSIZE:
    125                         ipc_answer_2(callid, EOK, HEIGHT, WIDTH);
    126                         continue;
    127                 case FB_CLEAR:
    128                         serial_clrscr();
    129                         retval = 0;
    130                         break;
    131                 case FB_SET_STYLE:
    132                         fgcolor = IPC_GET_ARG1(call);
    133                         bgcolor = IPC_GET_ARG2(call);
    134                         if (fgcolor < bgcolor)
    135                                 serial_set_style(0);
    136                         else
    137                                 serial_set_style(7);
    138                         retval = 0;
    139                         break;
    140                 case FB_SCROLL:
    141                         i = IPC_GET_ARG1(call);
    142                         if ((i > HEIGHT) || (i < -HEIGHT)) {
    143                                 retval = EINVAL;
    144                                 break;
    145                         }
    146                         serial_scroll(i);
    147                         serial_goto(lastrow, lastcol);
    148                         retval = 0;
    149                         break;
    150                 case FB_CURSOR_VISIBILITY:
    151                         if(IPC_GET_ARG1(call))
    152                                 serial_cursor_enable();
    153                         else
    154                                 serial_cursor_disable();
    155                         retval = 0;
    156                         break;
    157                 default:
    158                         retval = ENOENT;
    159                 }
    160                 ipc_answer_0(callid, retval);
    161         }
    16255}
    16356
     
    17164        serial_console_init(msim_putc, WIDTH, HEIGHT);
    17265       
    173         async_set_client_connection(msim_client_connection);
     66        async_set_client_connection(serial_client_connection);
    17467        return 0;
    17568}
Note: See TracChangeset for help on using the changeset viewer.