Changes in uspace/srv/hid/console/gcons.c [306061a:c6f08726] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/console/gcons.c
r306061a rc6f08726 35 35 #include <ipc/fb.h> 36 36 #include <async.h> 37 #include <async_obsolete.h> 37 38 #include <stdio.h> 38 39 #include <sys/mman.h> … … 40 41 #include <align.h> 41 42 #include <bool.h> 43 #include <imgmap.h> 42 44 43 45 #include "console.h" 44 46 #include "gcons.h" 47 #include "images.h" 45 48 46 49 #define CONSOLE_TOP 66 … … 57 60 #define COLOR_BACKGROUND 0xffffff 58 61 59 extern char _binary_gfx_helenos_ppm_start[0];60 extern int _binary_gfx_helenos_ppm_size;61 extern char _binary_gfx_nameic_ppm_start[0];62 extern int _binary_gfx_nameic_ppm_size;63 64 extern char _binary_gfx_anim_1_ppm_start[0];65 extern int _binary_gfx_anim_1_ppm_size;66 extern char _binary_gfx_anim_2_ppm_start[0];67 extern int _binary_gfx_anim_2_ppm_size;68 extern char _binary_gfx_anim_3_ppm_start[0];69 extern int _binary_gfx_anim_3_ppm_size;70 extern char _binary_gfx_anim_4_ppm_start[0];71 extern int _binary_gfx_anim_4_ppm_size;72 73 extern char _binary_gfx_cons_selected_ppm_start[0];74 extern int _binary_gfx_cons_selected_ppm_size;75 extern char _binary_gfx_cons_idle_ppm_start[0];76 extern int _binary_gfx_cons_idle_ppm_size;77 extern char _binary_gfx_cons_has_data_ppm_start[0];78 extern int _binary_gfx_cons_has_data_ppm_size;79 extern char _binary_gfx_cons_kernel_ppm_start[0];80 extern int _binary_gfx_cons_kernel_ppm_size;81 82 62 static bool use_gcons = false; 83 63 static sysarg_t xres; 84 64 static sysarg_t yres; 65 66 static imgmap_t *helenos_img; 67 static imgmap_t *nameic_img; 68 69 static imgmap_t *anim_1_img; 70 static imgmap_t *anim_2_img; 71 static imgmap_t *anim_3_img; 72 static imgmap_t *anim_4_img; 73 74 static imgmap_t *cons_has_data_img; 75 static imgmap_t *cons_idle_img; 76 static imgmap_t *cons_kernel_img; 77 static imgmap_t *cons_selected_img; 85 78 86 79 enum butstate { … … 100 93 static int fbphone; 101 94 102 /** List of pixmaps identifying these icons */103 static int ic_ pixmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1};95 /** List of image maps identifying these icons */ 96 static int ic_imgmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1}; 104 97 static int animation = -1; 105 98 … … 115 108 static void vp_switch(int vp) 116 109 { 117 async_ msg_1(fbphone, FB_VIEWPORT_SWITCH, vp);110 async_obsolete_msg_1(fbphone, FB_VIEWPORT_SWITCH, vp); 118 111 } 119 112 … … 121 114 static int vp_create(sysarg_t x, sysarg_t y, sysarg_t width, sysarg_t height) 122 115 { 123 return async_ req_2_0(fbphone, FB_VIEWPORT_CREATE, (x << 16) | y,116 return async_obsolete_req_2_0(fbphone, FB_VIEWPORT_CREATE, (x << 16) | y, 124 117 (width << 16) | height); 125 118 } … … 127 120 static void clear(void) 128 121 { 129 async_ msg_0(fbphone, FB_CLEAR);122 async_obsolete_msg_0(fbphone, FB_CLEAR); 130 123 } 131 124 132 125 static void set_rgb_color(uint32_t fgcolor, uint32_t bgcolor) 133 126 { 134 async_ msg_2(fbphone, FB_SET_RGB_COLOR, fgcolor, bgcolor);127 async_obsolete_msg_2(fbphone, FB_SET_RGB_COLOR, fgcolor, bgcolor); 135 128 } 136 129 … … 138 131 static void tran_putch(wchar_t ch, sysarg_t col, sysarg_t row) 139 132 { 140 async_ msg_3(fbphone, FB_PUTCHAR, ch, col, row);133 async_obsolete_msg_3(fbphone, FB_PUTCHAR, ch, col, row); 141 134 } 142 135 … … 148 141 enum butstate state = console_state[index]; 149 142 150 if (ic_ pixmaps[state] != -1)151 async_ msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[index],152 ic_ pixmaps[state]);143 if (ic_imgmaps[state] != -1) 144 async_obsolete_msg_2(fbphone, FB_VP_DRAW_IMGMAP, cstatus_vp[index], 145 ic_imgmaps[state]); 153 146 154 147 if ((state != CONS_DISCONNECTED) && (state != CONS_KERNEL) … … 167 160 void gcons_change_console(size_t index) 168 161 { 169 if (!use_gcons) 170 return; 162 if (!use_gcons) { 163 active_console = index; 164 return; 165 } 171 166 172 167 if (active_console == KERNEL_CONSOLE) { … … 177 172 178 173 if (animation != -1) 179 async_ msg_1(fbphone, FB_ANIM_START, animation);174 async_obsolete_msg_1(fbphone, FB_ANIM_START, animation); 180 175 } else { 181 176 if (console_state[active_console] == CONS_DISCONNECTED_SEL) … … 258 253 { 259 254 if (animation != -1) 260 async_ msg_1(fbphone, FB_ANIM_STOP, animation);255 async_obsolete_msg_1(fbphone, FB_ANIM_STOP, animation); 261 256 262 257 active_console = KERNEL_CONSOLE; … … 294 289 295 290 if (active_console != KERNEL_CONSOLE) 296 async_ msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);291 async_obsolete_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y); 297 292 } 298 293 … … 355 350 } 356 351 357 /** Draw a PPM pixmap to framebuffer 358 * 359 * @param logo Pointer to PPM data 360 * @param size Size of PPM data 361 * @param x Coordinate of upper left corner 362 * @param y Coordinate of upper left corner 363 * 364 */ 365 static void draw_pixmap(char *logo, size_t size, sysarg_t x, sysarg_t y) 366 { 352 /** Draw an image map to framebuffer 353 * 354 * @param img Image map 355 * @param x Coordinate of upper left corner 356 * @param y Coordinate of upper left corner 357 * 358 */ 359 static void draw_imgmap(imgmap_t *img, sysarg_t x, sysarg_t y) 360 { 361 if (img == NULL) 362 return; 363 367 364 /* Create area */ 368 char *shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED |365 char *shm = mmap(NULL, img->size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 369 366 MAP_ANONYMOUS, 0, 0); 370 367 if (shm == MAP_FAILED) 371 368 return; 372 369 373 memcpy(shm, logo,size);370 memcpy(shm, img, img->size); 374 371 375 372 /* Send area */ 376 int rc = async_ req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm);373 int rc = async_obsolete_req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm); 377 374 if (rc) 378 375 goto exit; 379 376 380 rc = async_ share_out_start(fbphone, shm, PROTO_READ);377 rc = async_obsolete_share_out_start(fbphone, shm, PROTO_READ); 381 378 if (rc) 382 379 goto drop; 383 380 384 381 /* Draw logo */ 385 async_ msg_2(fbphone, FB_DRAW_PPM, x, y);382 async_obsolete_msg_2(fbphone, FB_DRAW_IMGMAP, x, y); 386 383 387 384 drop: 388 385 /* Drop area */ 389 async_ msg_0(fbphone, FB_DROP_SHM);386 async_obsolete_msg_0(fbphone, FB_DROP_SHM); 390 387 391 388 exit: 392 389 /* Remove area */ 393 munmap(shm, size);390 munmap(shm, img->size); 394 391 } 395 392 … … 403 400 set_rgb_color(COLOR_MAIN, COLOR_MAIN); 404 401 clear(); 405 draw_pixmap(_binary_gfx_helenos_ppm_start, 406 (size_t) &_binary_gfx_helenos_ppm_size, xres - 66, 2); 407 draw_pixmap(_binary_gfx_nameic_ppm_start, 408 (size_t) &_binary_gfx_nameic_ppm_size, 5, 17); 402 draw_imgmap(helenos_img, xres - 66, 2); 403 draw_imgmap(nameic_img, 5, 17); 409 404 410 405 unsigned int i; … … 415 410 } 416 411 417 /** Creates a pixmap on framebuffer 418 * 419 * @param data PPM data 420 * @param size PPM data size 421 * 422 * @return Pixmap identification 423 * 424 */ 425 static int make_pixmap(char *data, size_t size) 426 { 412 /** Create an image map on framebuffer 413 * 414 * @param img Image map. 415 * 416 * @return Image map identification 417 * 418 */ 419 static int make_imgmap(imgmap_t *img) 420 { 421 if (img == NULL) 422 return -1; 423 427 424 /* Create area */ 428 char *shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED |429 MAP_ ANONYMOUS, 0, 0);425 char *shm = mmap(NULL, img->size, PROTO_READ | PROTO_WRITE, 426 MAP_SHARED | MAP_ANONYMOUS, 0, 0); 430 427 if (shm == MAP_FAILED) 431 428 return -1; 432 429 433 memcpy(shm, data,size);434 435 int pxid = -1;430 memcpy(shm, img, img->size); 431 432 int id = -1; 436 433 437 434 /* Send area */ 438 int rc = async_ req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm);435 int rc = async_obsolete_req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm); 439 436 if (rc) 440 437 goto exit; 441 438 442 rc = async_ share_out_start(fbphone, shm, PROTO_READ);439 rc = async_obsolete_share_out_start(fbphone, shm, PROTO_READ); 443 440 if (rc) 444 441 goto drop; 445 442 446 /* Obtain pixmap*/447 rc = async_ req_0_0(fbphone, FB_SHM2PIXMAP);443 /* Obtain image map identifier */ 444 rc = async_obsolete_req_0_0(fbphone, FB_SHM2IMGMAP); 448 445 if (rc < 0) 449 446 goto drop; 450 447 451 pxid = rc;448 id = rc; 452 449 453 450 drop: 454 451 /* Drop area */ 455 async_ msg_0(fbphone, FB_DROP_SHM);452 async_obsolete_msg_0(fbphone, FB_DROP_SHM); 456 453 457 454 exit: 458 455 /* Remove area */ 459 munmap(shm, size);460 461 return pxid;456 munmap(shm, img->size); 457 458 return id; 462 459 } 463 460 464 461 static void make_anim(void) 465 462 { 466 int an = async_ req_1_0(fbphone, FB_ANIM_CREATE,463 int an = async_obsolete_req_1_0(fbphone, FB_ANIM_CREATE, 467 464 cstatus_vp[KERNEL_CONSOLE]); 468 465 if (an < 0) 469 466 return; 470 467 471 int pm = make_pixmap(_binary_gfx_anim_1_ppm_start, 472 (size_t) &_binary_gfx_anim_1_ppm_size); 473 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 474 475 pm = make_pixmap(_binary_gfx_anim_2_ppm_start, 476 (size_t) &_binary_gfx_anim_2_ppm_size); 477 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 478 479 pm = make_pixmap(_binary_gfx_anim_3_ppm_start, 480 (size_t) &_binary_gfx_anim_3_ppm_size); 481 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 482 483 pm = make_pixmap(_binary_gfx_anim_4_ppm_start, 484 (size_t) &_binary_gfx_anim_4_ppm_size); 485 async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); 486 487 async_msg_1(fbphone, FB_ANIM_START, an); 468 int pm = make_imgmap(anim_1_img); 469 async_obsolete_msg_2(fbphone, FB_ANIM_ADDIMGMAP, an, pm); 470 471 pm = make_imgmap(anim_2_img); 472 async_obsolete_msg_2(fbphone, FB_ANIM_ADDIMGMAP, an, pm); 473 474 pm = make_imgmap(anim_3_img); 475 async_obsolete_msg_2(fbphone, FB_ANIM_ADDIMGMAP, an, pm); 476 477 pm = make_imgmap(anim_4_img); 478 async_obsolete_msg_2(fbphone, FB_ANIM_ADDIMGMAP, an, pm); 479 480 async_obsolete_msg_1(fbphone, FB_ANIM_START, an); 488 481 489 482 animation = an; … … 495 488 fbphone = phone; 496 489 497 int rc = async_ req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres);490 int rc = async_obsolete_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres); 498 491 if (rc) 499 492 return; … … 501 494 if ((xres < 800) || (yres < 600)) 502 495 return; 496 497 /* Create image maps */ 498 helenos_img = imgmap_decode_tga((void *) helenos_tga, 499 helenos_tga_size); 500 nameic_img = imgmap_decode_tga((void *) nameic_tga, 501 nameic_tga_size); 502 503 anim_1_img = imgmap_decode_tga((void *) anim_1_tga, 504 anim_1_tga_size); 505 anim_2_img = imgmap_decode_tga((void *) anim_2_tga, 506 anim_2_tga_size); 507 anim_3_img = imgmap_decode_tga((void *) anim_3_tga, 508 anim_3_tga_size); 509 anim_4_img = imgmap_decode_tga((void *) anim_4_tga, 510 anim_4_tga_size); 511 512 cons_has_data_img = imgmap_decode_tga((void *) cons_has_data_tga, 513 cons_has_data_tga_size); 514 cons_idle_img = imgmap_decode_tga((void *) cons_idle_tga, 515 cons_idle_tga_size); 516 cons_kernel_img = imgmap_decode_tga((void *) cons_kernel_tga, 517 cons_kernel_tga_size); 518 cons_selected_img = imgmap_decode_tga((void *) cons_selected_tga, 519 cons_selected_tga_size); 503 520 504 521 /* Create console viewport */ … … 528 545 529 546 /* Initialize icons */ 530 ic_pixmaps[CONS_SELECTED] = 531 make_pixmap(_binary_gfx_cons_selected_ppm_start, 532 (size_t) &_binary_gfx_cons_selected_ppm_size); 533 ic_pixmaps[CONS_IDLE] = 534 make_pixmap(_binary_gfx_cons_idle_ppm_start, 535 (size_t) &_binary_gfx_cons_idle_ppm_size); 536 ic_pixmaps[CONS_HAS_DATA] = 537 make_pixmap(_binary_gfx_cons_has_data_ppm_start, 538 (size_t) &_binary_gfx_cons_has_data_ppm_size); 539 ic_pixmaps[CONS_DISCONNECTED] = 540 make_pixmap(_binary_gfx_cons_idle_ppm_start, 541 (size_t) &_binary_gfx_cons_idle_ppm_size); 542 ic_pixmaps[CONS_KERNEL] = 543 make_pixmap(_binary_gfx_cons_kernel_ppm_start, 544 (size_t) &_binary_gfx_cons_kernel_ppm_size); 545 ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED]; 547 ic_imgmaps[CONS_SELECTED] = make_imgmap(cons_selected_img); 548 ic_imgmaps[CONS_IDLE] = make_imgmap(cons_idle_img); 549 ic_imgmaps[CONS_HAS_DATA] = make_imgmap(cons_has_data_img); 550 ic_imgmaps[CONS_DISCONNECTED] = make_imgmap(cons_idle_img); 551 ic_imgmaps[CONS_KERNEL] = make_imgmap(cons_kernel_img); 552 ic_imgmaps[CONS_DISCONNECTED_SEL] = ic_imgmaps[CONS_SELECTED]; 546 553 547 554 make_anim();
Note:
See TracChangeset
for help on using the changeset viewer.