Changes in uspace/srv/hid/console/gcons.c [c6f08726:306061a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/console/gcons.c
rc6f08726 r306061a 35 35 #include <ipc/fb.h> 36 36 #include <async.h> 37 #include <async_obsolete.h>38 37 #include <stdio.h> 39 38 #include <sys/mman.h> … … 41 40 #include <align.h> 42 41 #include <bool.h> 43 #include <imgmap.h>44 42 45 43 #include "console.h" 46 44 #include "gcons.h" 47 #include "images.h"48 45 49 46 #define CONSOLE_TOP 66 … … 60 57 #define COLOR_BACKGROUND 0xffffff 61 58 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 62 82 static bool use_gcons = false; 63 83 static sysarg_t xres; 64 84 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;78 85 79 86 enum butstate { … … 93 100 static int fbphone; 94 101 95 /** List of imagemaps identifying these icons */96 static int ic_ imgmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1};102 /** List of pixmaps identifying these icons */ 103 static int ic_pixmaps[CONS_LAST] = {-1, -1, -1, -1, -1, -1}; 97 104 static int animation = -1; 98 105 … … 108 115 static void vp_switch(int vp) 109 116 { 110 async_ obsolete_msg_1(fbphone, FB_VIEWPORT_SWITCH, vp);117 async_msg_1(fbphone, FB_VIEWPORT_SWITCH, vp); 111 118 } 112 119 … … 114 121 static int vp_create(sysarg_t x, sysarg_t y, sysarg_t width, sysarg_t height) 115 122 { 116 return async_ obsolete_req_2_0(fbphone, FB_VIEWPORT_CREATE, (x << 16) | y,123 return async_req_2_0(fbphone, FB_VIEWPORT_CREATE, (x << 16) | y, 117 124 (width << 16) | height); 118 125 } … … 120 127 static void clear(void) 121 128 { 122 async_ obsolete_msg_0(fbphone, FB_CLEAR);129 async_msg_0(fbphone, FB_CLEAR); 123 130 } 124 131 125 132 static void set_rgb_color(uint32_t fgcolor, uint32_t bgcolor) 126 133 { 127 async_ obsolete_msg_2(fbphone, FB_SET_RGB_COLOR, fgcolor, bgcolor);134 async_msg_2(fbphone, FB_SET_RGB_COLOR, fgcolor, bgcolor); 128 135 } 129 136 … … 131 138 static void tran_putch(wchar_t ch, sysarg_t col, sysarg_t row) 132 139 { 133 async_ obsolete_msg_3(fbphone, FB_PUTCHAR, ch, col, row);140 async_msg_3(fbphone, FB_PUTCHAR, ch, col, row); 134 141 } 135 142 … … 141 148 enum butstate state = console_state[index]; 142 149 143 if (ic_ imgmaps[state] != -1)144 async_ obsolete_msg_2(fbphone, FB_VP_DRAW_IMGMAP, cstatus_vp[index],145 ic_ imgmaps[state]);150 if (ic_pixmaps[state] != -1) 151 async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[index], 152 ic_pixmaps[state]); 146 153 147 154 if ((state != CONS_DISCONNECTED) && (state != CONS_KERNEL) … … 160 167 void gcons_change_console(size_t index) 161 168 { 162 if (!use_gcons) { 163 active_console = index; 164 return; 165 } 169 if (!use_gcons) 170 return; 166 171 167 172 if (active_console == KERNEL_CONSOLE) { … … 172 177 173 178 if (animation != -1) 174 async_ obsolete_msg_1(fbphone, FB_ANIM_START, animation);179 async_msg_1(fbphone, FB_ANIM_START, animation); 175 180 } else { 176 181 if (console_state[active_console] == CONS_DISCONNECTED_SEL) … … 253 258 { 254 259 if (animation != -1) 255 async_ obsolete_msg_1(fbphone, FB_ANIM_STOP, animation);260 async_msg_1(fbphone, FB_ANIM_STOP, animation); 256 261 257 262 active_console = KERNEL_CONSOLE; … … 289 294 290 295 if (active_console != KERNEL_CONSOLE) 291 async_ obsolete_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);296 async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y); 292 297 } 293 298 … … 350 355 } 351 356 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 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 { 364 367 /* Create area */ 365 char *shm = mmap(NULL, img->size, PROTO_READ | PROTO_WRITE, MAP_SHARED |368 char *shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 366 369 MAP_ANONYMOUS, 0, 0); 367 370 if (shm == MAP_FAILED) 368 371 return; 369 372 370 memcpy(shm, img, img->size);373 memcpy(shm, logo, size); 371 374 372 375 /* Send area */ 373 int rc = async_ obsolete_req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm);376 int rc = async_req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm); 374 377 if (rc) 375 378 goto exit; 376 379 377 rc = async_ obsolete_share_out_start(fbphone, shm, PROTO_READ);380 rc = async_share_out_start(fbphone, shm, PROTO_READ); 378 381 if (rc) 379 382 goto drop; 380 383 381 384 /* Draw logo */ 382 async_ obsolete_msg_2(fbphone, FB_DRAW_IMGMAP, x, y);385 async_msg_2(fbphone, FB_DRAW_PPM, x, y); 383 386 384 387 drop: 385 388 /* Drop area */ 386 async_ obsolete_msg_0(fbphone, FB_DROP_SHM);389 async_msg_0(fbphone, FB_DROP_SHM); 387 390 388 391 exit: 389 392 /* Remove area */ 390 munmap(shm, img->size);393 munmap(shm, size); 391 394 } 392 395 … … 400 403 set_rgb_color(COLOR_MAIN, COLOR_MAIN); 401 404 clear(); 402 draw_imgmap(helenos_img, xres - 66, 2); 403 draw_imgmap(nameic_img, 5, 17); 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); 404 409 405 410 unsigned int i; … … 410 415 } 411 416 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 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 { 424 427 /* Create area */ 425 char *shm = mmap(NULL, img->size, PROTO_READ | PROTO_WRITE,426 MAP_ SHARED | MAP_ANONYMOUS, 0, 0);428 char *shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | 429 MAP_ANONYMOUS, 0, 0); 427 430 if (shm == MAP_FAILED) 428 431 return -1; 429 432 430 memcpy(shm, img, img->size);431 432 int id = -1;433 memcpy(shm, data, size); 434 435 int pxid = -1; 433 436 434 437 /* Send area */ 435 int rc = async_ obsolete_req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm);438 int rc = async_req_1_0(fbphone, FB_PREPARE_SHM, (sysarg_t) shm); 436 439 if (rc) 437 440 goto exit; 438 441 439 rc = async_ obsolete_share_out_start(fbphone, shm, PROTO_READ);442 rc = async_share_out_start(fbphone, shm, PROTO_READ); 440 443 if (rc) 441 444 goto drop; 442 445 443 /* Obtain image map identifier*/444 rc = async_ obsolete_req_0_0(fbphone, FB_SHM2IMGMAP);446 /* Obtain pixmap */ 447 rc = async_req_0_0(fbphone, FB_SHM2PIXMAP); 445 448 if (rc < 0) 446 449 goto drop; 447 450 448 id = rc;451 pxid = rc; 449 452 450 453 drop: 451 454 /* Drop area */ 452 async_ obsolete_msg_0(fbphone, FB_DROP_SHM);455 async_msg_0(fbphone, FB_DROP_SHM); 453 456 454 457 exit: 455 458 /* Remove area */ 456 munmap(shm, img->size);457 458 return id;459 munmap(shm, size); 460 461 return pxid; 459 462 } 460 463 461 464 static void make_anim(void) 462 465 { 463 int an = async_ obsolete_req_1_0(fbphone, FB_ANIM_CREATE,466 int an = async_req_1_0(fbphone, FB_ANIM_CREATE, 464 467 cstatus_vp[KERNEL_CONSOLE]); 465 468 if (an < 0) 466 469 return; 467 470 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); 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); 481 488 482 489 animation = an; … … 488 495 fbphone = phone; 489 496 490 int rc = async_ obsolete_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres);497 int rc = async_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres); 491 498 if (rc) 492 499 return; … … 494 501 if ((xres < 800) || (yres < 600)) 495 502 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);520 503 521 504 /* Create console viewport */ … … 545 528 546 529 /* Initialize icons */ 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]; 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]; 553 546 554 547 make_anim();
Note:
See TracChangeset
for help on using the changeset viewer.