Changeset 8b97256 in mainline for uspace/srv/fb/sgcn.c
- Timestamp:
- 2008-12-18T12:23:39Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d99b3f2
- Parents:
- 8231246
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fb/sgcn.c
r8231246 r8b97256 37 37 38 38 #include <async.h> 39 #include <ipc/ipc.h>40 #include <ipc/fb.h>41 39 #include <sysinfo.h> 42 40 #include <as.h> … … 60 58 */ 61 59 static uintptr_t sram_buffer_offset; 62 63 /* Allow only 1 connection */64 static int client_connected = 0;65 60 66 61 /** … … 123 118 124 119 /** 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 region150 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 else194 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 else211 serial_cursor_disable();212 retval = 0;213 break;214 default:215 retval = ENOENT;216 }217 ipc_answer_0(callid, retval);218 }219 }220 221 /**222 120 * Initializes the SGCN serial driver. 223 121 */ … … 241 139 sram_buffer_offset = sysinfo_value("sram.buffer.offset"); 242 140 243 async_set_client_connection(s gcn_client_connection);141 async_set_client_connection(serial_client_connection); 244 142 return 0; 245 143 }
Note:
See TracChangeset
for help on using the changeset viewer.