Rev 2479 | Rev 2677 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2479 | Rev 2621 | ||
|---|---|---|---|
| Line 79... | Line 79... | ||
| 79 | 79 | ||
| 80 | static int active_console = 0; |
80 | static int active_console = 0; |
| 81 | 81 | ||
| 82 | static void vp_switch(int vp) |
82 | static void vp_switch(int vp) |
| 83 | { |
83 | { |
| 84 | async_msg(fbphone,FB_VIEWPORT_SWITCH, vp); |
84 | async_msg_1(fbphone,FB_VIEWPORT_SWITCH, vp); |
| 85 | } |
85 | } |
| 86 | 86 | ||
| 87 | /** Create view port */ |
87 | /** Create view port */ |
| 88 | static int vp_create(unsigned int x, unsigned int y, |
88 | static int vp_create(unsigned int x, unsigned int y, unsigned int width, |
| 89 | unsigned int width, unsigned int height) |
89 | unsigned int height) |
| 90 | { |
90 | { |
| 91 | return async_req_2(fbphone, FB_VIEWPORT_CREATE, |
91 | return async_req_2_0(fbphone, FB_VIEWPORT_CREATE, (x << 16) | y, |
| 92 | (x << 16) | y, (width << 16) | height, NULL, NULL); |
92 | (width << 16) | height); |
| 93 | } |
93 | } |
| 94 | 94 | ||
| 95 | static void clear(void) |
95 | static void clear(void) |
| 96 | { |
96 | { |
| 97 | async_msg(fbphone, FB_CLEAR, 0); |
97 | async_msg_0(fbphone, FB_CLEAR); |
| 98 | } |
98 | } |
| 99 | 99 | ||
| 100 | static void set_style(int fgcolor, int bgcolor) |
100 | static void set_style(int fgcolor, int bgcolor) |
| 101 | { |
101 | { |
| 102 | async_msg_2(fbphone, FB_SET_STYLE, fgcolor, bgcolor); |
102 | async_msg_2(fbphone, FB_SET_STYLE, fgcolor, bgcolor); |
| Line 116... | Line 116... | ||
| 116 | enum butstate state = console_state[consnum]; |
116 | enum butstate state = console_state[consnum]; |
| 117 | 117 | ||
| 118 | vp_switch(cstatus_vp[consnum]); |
118 | vp_switch(cstatus_vp[consnum]); |
| 119 | if (ic_pixmaps[state] != -1) |
119 | if (ic_pixmaps[state] != -1) |
| 120 | async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum], |
120 | async_msg_2(fbphone, FB_VP_DRAW_PIXMAP, cstatus_vp[consnum], |
| 121 | ic_pixmaps[state]); |
121 | ic_pixmaps[state]); |
| 122 | 122 | ||
| 123 | if (state != CONS_DISCONNECTED && state != CONS_KERNEL && |
123 | if (state != CONS_DISCONNECTED && state != CONS_KERNEL && |
| 124 | state != CONS_DISCONNECTED_SEL) { |
124 | state != CONS_DISCONNECTED_SEL) { |
| 125 | snprintf(data, 5, "%d", consnum + 1); |
125 | snprintf(data, 5, "%d", consnum + 1); |
| 126 | for (i = 0; data[i]; i++) |
126 | for (i = 0; data[i]; i++) |
| Line 138... | Line 138... | ||
| 138 | 138 | ||
| 139 | if (active_console == KERNEL_CONSOLE) { |
139 | if (active_console == KERNEL_CONSOLE) { |
| 140 | for (i = 0; i < CONSOLE_COUNT; i++) |
140 | for (i = 0; i < CONSOLE_COUNT; i++) |
| 141 | redraw_state(i); |
141 | redraw_state(i); |
| 142 | if (animation != -1) |
142 | if (animation != -1) |
| 143 | async_msg(fbphone, FB_ANIM_START, animation); |
143 | async_msg_1(fbphone, FB_ANIM_START, animation); |
| 144 | } else { |
144 | } else { |
| 145 | if (console_state[active_console] == CONS_DISCONNECTED_SEL) |
145 | if (console_state[active_console] == CONS_DISCONNECTED_SEL) |
| 146 | console_state[active_console] = CONS_DISCONNECTED; |
146 | console_state[active_console] = CONS_DISCONNECTED; |
| 147 | else |
147 | else |
| 148 | console_state[active_console] = CONS_IDLE; |
148 | console_state[active_console] = CONS_IDLE; |
| Line 222... | Line 222... | ||
| 222 | else |
222 | else |
| 223 | console_state[active_console] = CONS_IDLE; |
223 | console_state[active_console] = CONS_IDLE; |
| 224 | redraw_state(active_console); |
224 | redraw_state(active_console); |
| 225 | 225 | ||
| 226 | if (animation != -1) |
226 | if (animation != -1) |
| 227 | async_msg(fbphone, FB_ANIM_STOP, animation); |
227 | async_msg_1(fbphone, FB_ANIM_STOP, animation); |
| 228 | 228 | ||
| 229 | active_console = KERNEL_CONSOLE; /* Set to kernel console */ |
229 | active_console = KERNEL_CONSOLE; /* Set to kernel console */ |
| 230 | vp_switch(0); |
230 | vp_switch(0); |
| 231 | } |
231 | } |
| 232 | 232 | ||
| Line 314... | Line 314... | ||
| 314 | char *shm; |
314 | char *shm; |
| 315 | int rc; |
315 | int rc; |
| 316 | 316 | ||
| 317 | /* Create area */ |
317 | /* Create area */ |
| 318 | shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | |
318 | shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | |
| 319 | MAP_ANONYMOUS, 0, 0); |
319 | MAP_ANONYMOUS, 0, 0); |
| 320 | if (shm == MAP_FAILED) |
320 | if (shm == MAP_FAILED) |
| 321 | return; |
321 | return; |
| 322 | 322 | ||
| 323 | memcpy(shm, logo, size); |
323 | memcpy(shm, logo, size); |
| 324 | /* Send area */ |
324 | /* Send area */ |
| 325 | rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL, |
325 | rc = async_req_1_0(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm); |
| 326 | NULL); |
- | |
| 327 | if (rc) |
326 | if (rc) |
| 328 | goto exit; |
327 | goto exit; |
| 329 | rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, |
328 | rc = async_req_3_0(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, |
| 330 | PROTO_READ, NULL, NULL, NULL); |
329 | PROTO_READ); |
| 331 | if (rc) |
330 | if (rc) |
| 332 | goto drop; |
331 | goto drop; |
| 333 | /* Draw logo */ |
332 | /* Draw logo */ |
| 334 | async_msg_2(fbphone, FB_DRAW_PPM, x, y); |
333 | async_msg_2(fbphone, FB_DRAW_PPM, x, y); |
| 335 | drop: |
334 | drop: |
| 336 | /* Drop area */ |
335 | /* Drop area */ |
| 337 | async_msg(fbphone, FB_DROP_SHM, 0); |
336 | async_msg_0(fbphone, FB_DROP_SHM); |
| 338 | exit: |
337 | exit: |
| 339 | /* Remove area */ |
338 | /* Remove area */ |
| 340 | munmap(shm, size); |
339 | munmap(shm, size); |
| 341 | } |
340 | } |
| 342 | 341 | ||
| Line 354... | Line 353... | ||
| 354 | 353 | ||
| 355 | vp_switch(0); |
354 | vp_switch(0); |
| 356 | set_style(MAIN_COLOR, MAIN_COLOR); |
355 | set_style(MAIN_COLOR, MAIN_COLOR); |
| 357 | clear(); |
356 | clear(); |
| 358 | draw_pixmap(_binary_helenos_ppm_start, |
357 | draw_pixmap(_binary_helenos_ppm_start, |
| 359 | (size_t) &_binary_helenos_ppm_size, xres - 66, 2); |
358 | (size_t) &_binary_helenos_ppm_size, xres - 66, 2); |
| 360 | draw_pixmap(_binary_nameic_ppm_start, |
359 | draw_pixmap(_binary_nameic_ppm_start, |
| 361 | (size_t) &_binary_nameic_ppm_size, 5, 17); |
360 | (size_t) &_binary_nameic_ppm_size, 5, 17); |
| 362 | 361 | ||
| 363 | for (i = 0;i < CONSOLE_COUNT; i++) |
362 | for (i = 0; i < CONSOLE_COUNT; i++) |
| 364 | redraw_state(i); |
363 | redraw_state(i); |
| 365 | vp_switch(console_vp); |
364 | vp_switch(console_vp); |
| 366 | } |
365 | } |
| 367 | 366 | ||
| 368 | /** Creates a pixmap on framebuffer |
367 | /** Creates a pixmap on framebuffer |
| Line 377... | Line 376... | ||
| 377 | int rc; |
376 | int rc; |
| 378 | int pxid = -1; |
377 | int pxid = -1; |
| 379 | 378 | ||
| 380 | /* Create area */ |
379 | /* Create area */ |
| 381 | shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | |
380 | shm = mmap(NULL, size, PROTO_READ | PROTO_WRITE, MAP_SHARED | |
| 382 | MAP_ANONYMOUS, 0, 0); |
381 | MAP_ANONYMOUS, 0, 0); |
| 383 | if (shm == MAP_FAILED) |
382 | if (shm == MAP_FAILED) |
| 384 | return -1; |
383 | return -1; |
| 385 | 384 | ||
| 386 | memcpy(shm, data, size); |
385 | memcpy(shm, data, size); |
| 387 | /* Send area */ |
386 | /* Send area */ |
| 388 | rc = async_req_2(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm, 0, NULL, |
387 | rc = async_req_1_0(fbphone, FB_PREPARE_SHM, (ipcarg_t) shm); |
| 389 | NULL); |
- | |
| 390 | if (rc) |
388 | if (rc) |
| 391 | goto exit; |
389 | goto exit; |
| 392 | rc = async_req_3(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, |
390 | rc = async_req_3_0(fbphone, IPC_M_AS_AREA_SEND, (ipcarg_t) shm, 0, |
| 393 | PROTO_READ, NULL, NULL, NULL); |
391 | PROTO_READ); |
| 394 | if (rc) |
392 | if (rc) |
| 395 | goto drop; |
393 | goto drop; |
| 396 | 394 | ||
| 397 | /* Obtain pixmap */ |
395 | /* Obtain pixmap */ |
| 398 | rc = async_req(fbphone, FB_SHM2PIXMAP, 0, NULL); |
396 | rc = async_req_0_0(fbphone, FB_SHM2PIXMAP); |
| 399 | if (rc < 0) |
397 | if (rc < 0) |
| 400 | goto drop; |
398 | goto drop; |
| 401 | pxid = rc; |
399 | pxid = rc; |
| 402 | drop: |
400 | drop: |
| 403 | /* Drop area */ |
401 | /* Drop area */ |
| 404 | async_msg(fbphone, FB_DROP_SHM, 0); |
402 | async_msg_0(fbphone, FB_DROP_SHM); |
| 405 | exit: |
403 | exit: |
| 406 | /* Remove area */ |
404 | /* Remove area */ |
| 407 | munmap(shm, size); |
405 | munmap(shm, size); |
| 408 | 406 | ||
| 409 | return pxid; |
407 | return pxid; |
| Line 421... | Line 419... | ||
| 421 | static void make_anim(void) |
419 | static void make_anim(void) |
| 422 | { |
420 | { |
| 423 | int an; |
421 | int an; |
| 424 | int pm; |
422 | int pm; |
| 425 | 423 | ||
| 426 | an = async_req(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE], |
424 | an = async_req_1_0(fbphone, FB_ANIM_CREATE, cstatus_vp[KERNEL_CONSOLE]); |
| 427 | NULL); |
- | |
| 428 | if (an < 0) |
425 | if (an < 0) |
| 429 | return; |
426 | return; |
| 430 | 427 | ||
| 431 | pm = make_pixmap(_binary_anim_1_ppm_start, |
428 | pm = make_pixmap(_binary_anim_1_ppm_start, |
| 432 | (int) &_binary_anim_1_ppm_size); |
429 | (int) &_binary_anim_1_ppm_size); |
| 433 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
430 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
| 434 | 431 | ||
| 435 | pm = make_pixmap(_binary_anim_2_ppm_start, |
432 | pm = make_pixmap(_binary_anim_2_ppm_start, |
| 436 | (int) &_binary_anim_2_ppm_size); |
433 | (int) &_binary_anim_2_ppm_size); |
| 437 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
434 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
| 438 | 435 | ||
| 439 | pm = make_pixmap(_binary_anim_3_ppm_start, |
436 | pm = make_pixmap(_binary_anim_3_ppm_start, |
| 440 | (int) &_binary_anim_3_ppm_size); |
437 | (int) &_binary_anim_3_ppm_size); |
| 441 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
438 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
| 442 | 439 | ||
| 443 | pm = make_pixmap(_binary_anim_4_ppm_start, |
440 | pm = make_pixmap(_binary_anim_4_ppm_start, |
| 444 | (int) &_binary_anim_4_ppm_size); |
441 | (int) &_binary_anim_4_ppm_size); |
| 445 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
442 | async_msg_2(fbphone, FB_ANIM_ADDPIXMAP, an, pm); |
| 446 | 443 | ||
| 447 | async_msg(fbphone, FB_ANIM_START, an); |
444 | async_msg_1(fbphone, FB_ANIM_START, an); |
| 448 | 445 | ||
| 449 | animation = an; |
446 | animation = an; |
| 450 | } |
447 | } |
| 451 | 448 | ||
| 452 | extern char _binary_cons_selected_ppm_start[0]; |
449 | extern char _binary_cons_selected_ppm_start[0]; |
| Line 465... | Line 462... | ||
| 465 | int i; |
462 | int i; |
| 466 | int status_start = STATUS_START; |
463 | int status_start = STATUS_START; |
| 467 | 464 | ||
| 468 | fbphone = phone; |
465 | fbphone = phone; |
| 469 | 466 | ||
| 470 | rc = async_req_2(phone, FB_GET_RESOLUTION, 0, 0, &xres, &yres); |
467 | rc = async_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres); |
| 471 | if (rc) |
468 | if (rc) |
| 472 | return; |
469 | return; |
| 473 | 470 | ||
| 474 | if (xres < 800 || yres < 600) |
471 | if (xres < 800 || yres < 600) |
| 475 | return; |
472 | return; |
| 476 | 473 | ||
| 477 | /* create console viewport */ |
474 | /* create console viewport */ |
| 478 | /* Align width & height to character size */ |
475 | /* Align width & height to character size */ |
| 479 | console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, |
476 | console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, |
| 480 | ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8), |
477 | ALIGN_DOWN(xres - 2 * CONSOLE_MARGIN, 8), |
| 481 | ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16)); |
478 | ALIGN_DOWN(yres - (CONSOLE_TOP + CONSOLE_MARGIN), 16)); |
| 482 | if (console_vp < 0) |
479 | if (console_vp < 0) |
| 483 | return; |
480 | return; |
| 484 | 481 | ||
| 485 | /* Create status buttons */ |
482 | /* Create status buttons */ |
| 486 | status_start += (xres - 800) / 2; |
483 | status_start += (xres - 800) / 2; |
| 487 | for (i = 0; i < CONSOLE_COUNT; i++) { |
484 | for (i = 0; i < CONSOLE_COUNT; i++) { |
| 488 | cstatus_vp[i] = vp_create(status_start + CONSOLE_MARGIN + |
485 | cstatus_vp[i] = vp_create(status_start + CONSOLE_MARGIN + |
| 489 | i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP, |
486 | i * (STATUS_WIDTH + STATUS_SPACE), STATUS_TOP, |
| 490 | STATUS_WIDTH, STATUS_HEIGHT); |
487 | STATUS_WIDTH, STATUS_HEIGHT); |
| 491 | if (cstatus_vp[i] < 0) |
488 | if (cstatus_vp[i] < 0) |
| 492 | return; |
489 | return; |
| 493 | vp_switch(cstatus_vp[i]); |
490 | vp_switch(cstatus_vp[i]); |
| 494 | set_style(0x202020, 0xffffff); |
491 | set_style(0x202020, 0xffffff); |
| 495 | } |
492 | } |
| 496 | 493 | ||
| 497 | /* Initialize icons */ |
494 | /* Initialize icons */ |
| 498 | ic_pixmaps[CONS_SELECTED] = |
495 | ic_pixmaps[CONS_SELECTED] = |
| 499 | make_pixmap(_binary_cons_selected_ppm_start, |
496 | make_pixmap(_binary_cons_selected_ppm_start, |
| 500 | (int) &_binary_cons_selected_ppm_size); |
497 | (int) &_binary_cons_selected_ppm_size); |
| 501 | ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start, |
498 | ic_pixmaps[CONS_IDLE] = make_pixmap(_binary_cons_idle_ppm_start, |
| 502 | (int) &_binary_cons_idle_ppm_size); |
499 | (int) &_binary_cons_idle_ppm_size); |
| 503 | ic_pixmaps[CONS_HAS_DATA] = |
500 | ic_pixmaps[CONS_HAS_DATA] = |
| 504 | make_pixmap(_binary_cons_has_data_ppm_start, |
501 | make_pixmap(_binary_cons_has_data_ppm_start, |
| 505 | (int) &_binary_cons_has_data_ppm_size); |
502 | (int) &_binary_cons_has_data_ppm_size); |
| 506 | ic_pixmaps[CONS_DISCONNECTED] = |
503 | ic_pixmaps[CONS_DISCONNECTED] = |
| 507 | make_pixmap(_binary_cons_idle_ppm_start, |
504 | make_pixmap(_binary_cons_idle_ppm_start, |
| 508 | (int) &_binary_cons_idle_ppm_size); |
505 | (int) &_binary_cons_idle_ppm_size); |
| 509 | ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start, |
506 | ic_pixmaps[CONS_KERNEL] = make_pixmap(_binary_cons_kernel_ppm_start, |
| 510 | (int) &_binary_cons_kernel_ppm_size); |
507 | (int) &_binary_cons_kernel_ppm_size); |
| 511 | ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED]; |
508 | ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED]; |
| 512 | 509 | ||
| 513 | make_anim(); |
510 | make_anim(); |
| 514 | 511 | ||
| 515 | use_gcons = 1; |
512 | use_gcons = 1; |