- Timestamp:
- 2006-05-21T19:28:37Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a410beb
- Parents:
- 1ee11f4
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fb/fb.c
r1ee11f4 r80649a91 45 45 46 46 #include <kernel/errno.h> 47 47 #include <async.h> 48 48 49 49 #include "fb.h" 50 51 52 53 #define pl /*printf("FB:L:%d\n",(int)__LINE__);*/54 50 55 51 #define EFB (-1) … … 80 76 81 77 82 83 84 int main(int argc, char *argv[]) 85 { 86 78 static int init_fb(void) 79 { 87 80 __address fb_ph_addr; 88 81 unsigned int fb_width; … … 92 85 __address fb_addr; 93 86 int a=0; 94 95 96 if(!sysinfo_value("fb")) return -1;97 87 int i,j,k; 88 int w; 89 char text[]="HelenOS Framebuffer driver\non Virtual Framebuffer\nVFB "; 90 98 91 fb_ph_addr=sysinfo_value("fb.address.physical"); 99 92 fb_width=sysinfo_value("fb.width"); … … 105 98 106 99 107 100 108 101 map_physmem(task_get_id(),(void *)((__address)fb_ph_addr),(void *)fb_addr, 109 (fb_scanline*fb_height+PAGE_SIZE-1)>>PAGE_WIDTH,1);102 (fb_scanline*fb_height+PAGE_SIZE-1)>>PAGE_WIDTH,1); 110 103 111 104 fb_init(0,fb_addr, fb_width, fb_height, fb_bpp, fb_scanline, … … 115 108 fb_putchar(0,' '); 116 109 117 118 { 119 int i,j; 120 121 for(i=0;i<H_NO_VFBS;i++) 122 for(j=0;j<V_NO_VFBS;j++) 123 { 124 125 int w=create_window(0,(fb_width/H_NO_VFBS)*i+SPACING, 126 (fb_height/V_NO_VFBS)*j+SPACING,(fb_width/H_NO_VFBS)-2*SPACING , 127 (fb_height/V_NO_VFBS)-2*SPACING,mod_col(DEFAULT_BGCOLOR,/*i+j*H_NO_VFBS*/0), 128 mod_col(DEFAULT_FGCOLOR,/*i+j*H_NO_VFBS*/0), 129 mod_col(DEFAULT_LOGOCOLOR,/*i+j*H_NO_VFBS)*/0)); 130 131 if(w==EFB) return -1; 132 133 { 134 char text[]="Hello, World from\nHelenOS Framebuffer driver\non Virtual Framebuffer\nVFB "; 135 int i; 136 for(i=0;text[i];i++) fb_putchar(w,text[i]); 137 fb_putchar(w,w+'0'); 138 fb_putchar(w,'\n'); 139 } 140 } 110 for(i=0;i<H_NO_VFBS;i++) 111 for(j=0;j<V_NO_VFBS;j++) { 112 w = create_window(0,(fb_width/H_NO_VFBS)*i+SPACING, 113 (fb_height/V_NO_VFBS)*j+SPACING,(fb_width/H_NO_VFBS)-2*SPACING , 114 (fb_height/V_NO_VFBS)-2*SPACING,mod_col(DEFAULT_BGCOLOR,/*i+j*H_NO_VFBS*/0), 115 mod_col(DEFAULT_FGCOLOR,/*i+j*H_NO_VFBS*/0), 116 mod_col(DEFAULT_LOGOCOLOR,/*i+j*H_NO_VFBS)*/0)); 117 118 if( w== EFB) 119 return -1; 120 121 for(k=0;text[k];k++) 122 fb_putchar(w,text[k]); 123 fb_putchar(w,w+'0'); 124 fb_putchar(w,'\n'); 125 } 126 return 0; 127 } 128 129 int vfb_no = 1; 130 void client_connection(ipc_callid_t iid, ipc_call_t *icall) 131 { 132 ipc_callid_t callid; 133 ipc_call_t call; 134 int vfb = vfb_no++; 135 136 if (vfb > 9) { 137 ipc_answer_fast(iid, ELIMIT, 0,0); 138 return; 141 139 } 142 143 140 ipc_answer_fast(iid, 0, 0, 0); 141 142 while (1) { 143 callid = async_get_call(&call); 144 switch (IPC_GET_METHOD(call)) { 145 case IPC_M_PHONE_HUNGUP: 146 ipc_answer_fast(callid,0,0,0); 147 return; /* Exit thread */ 148 149 case FB_PUTCHAR: 150 ipc_answer_fast(callid,0,0,0); 151 fb_putchar(vfb,IPC_GET_ARG2(call)); 152 break; 153 default: 154 ipc_answer_fast(callid,ENOENT,0,0); 155 } 156 } 157 } 158 159 int main(int argc, char *argv[]) 160 { 144 161 ipc_call_t call; 145 162 ipc_callid_t callid; … … 151 168 ipcarg_t retval, arg1, arg2; 152 169 170 if(!sysinfo_value("fb")) return -1; 153 171 154 172 155 173 if ((res = ipc_connect_to_me(PHONE_NS, SERVICE_VIDEO, 0, &phonead)) != 0) 156 {157 174 return -1; 158 }; 159 160 161 while (1) { 162 static int vfb_no=1; 163 164 callid = ipc_wait_for_call(&call); 165 // printf("%s:Call phone=%lX..", NAME, call.in_phone_hash); 166 switch (IPC_GET_METHOD(call)&((1<<METHOD_WIDTH)-1)) { 167 case IPC_M_PHONE_HUNGUP: 168 // fb_putchar(4,((a++)&15)+'A'); 169 170 retval = 0; 171 break; 172 case IPC_M_CONNECT_ME_TO: 173 retval = 0; 174 // fb_putchar(1,((a++)&15)+'A'); 175 break; 176 case FB_GET_VFB: 177 retval = 0; 178 arg1 = vfb_no++; 179 // fb_putchar(2,((a++)&15)+'A'); 180 181 break; 182 183 case FB_PUTCHAR: 184 retval = 0; 185 fb_putchar(IPC_GET_ARG1(call),IPC_GET_ARG2(call)); 186 // fb_putchar(2,((a++)&15)+'A'); 187 break; 188 189 default: 190 retval = ENOENT; 191 // fb_putchar(3,((a++)&15)+'A'); 192 break; 193 } 194 195 if (! (callid & IPC_CALLID_NOTIFICATION)) { 196 ipc_answer_fast(callid, retval, arg1, arg2); 197 } 198 } 199 175 176 init_fb(); 177 178 async_manager(); 179 /* Never reached */ 200 180 return 0; 201 181 } … … 310 290 FB(item,fbaddress)[startbyte + 0] = BLUE(color, 8); 311 291 #endif 312 313 292 314 293 } … … 372 351 for (y = 0; y < FB(item,yres); y++) 373 352 { 374 clear_line(item,y); pl353 clear_line(item,y); 375 354 } 376 355 } … … 554 533 555 534 556 FB(item,fbaddress) = (unsigned char *) addr; pl557 FB(item,xres) = x; pl558 FB(item,yres) = y; pl559 FB(item,scanline) = scan; pl560 561 562 FB(item,rows) = y / FONT_SCANLINES; pl563 FB(item,columns) = x / COL_WIDTH; pl535 FB(item,fbaddress) = (unsigned char *) addr; 536 FB(item,xres) = x; 537 FB(item,yres) = y; 538 FB(item,scanline) = scan; 539 540 541 FB(item,rows) = y / FONT_SCANLINES; 542 FB(item,columns) = x / COL_WIDTH; 564 543 565 544 FB(item,BGCOLOR)=BGCOLOR; … … 568 547 569 548 570 clear_screen(item); pl571 draw_logo(item,FB(item,xres) - helenos_width, 0); pl572 invert_cursor(item); pl549 clear_screen(item); 550 draw_logo(item,FB(item,xres) - helenos_width, 0); 551 invert_cursor(item); 573 552 574 553 }
Note:
See TracChangeset
for help on using the changeset viewer.
