Changes in uspace/srv/hid/console/console.c [ffa2c8ef:369a5f8] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/console/console.c
rffa2c8ef r369a5f8 34 34 35 35 #include <libc.h> 36 #include <ipc/ipc.h> 36 37 #include <ipc/kbd.h> 37 38 #include <io/keycode.h> … … 39 40 #include <ipc/fb.h> 40 41 #include <ipc/services.h> 41 #include <ipc/ns.h>42 42 #include <errno.h> 43 43 #include <ipc/console.h> … … 74 74 struct { 75 75 int phone; /**< Framebuffer phone */ 76 sysarg_t cols; /**< Framebuffer columns */77 sysarg_t rows; /**< Framebuffer rows */78 sysarg_t color_cap; /**< Color capabilities (FB_CCAP_xxx) */76 ipcarg_t cols; /**< Framebuffer columns */ 77 ipcarg_t rows; /**< Framebuffer rows */ 78 ipcarg_t color_cap; /**< Color capabilities (FB_CCAP_xxx) */ 79 79 } fb_info; 80 80 … … 82 82 size_t index; /**< Console index */ 83 83 size_t refcount; /**< Connection reference count */ 84 dev map_handle_t devmap_handle; /**< Device handle */84 dev_handle_t dev_handle; /**< Device handle */ 85 85 keybuffer_t keybuffer; /**< Buffer for incoming keys. */ 86 86 screenbuffer_t scr; /**< Screenbuffer for saving screen … … 101 101 /** Information on row-span yet unsent to FB driver. */ 102 102 struct { 103 sysarg_t col; /**< Leftmost column of the span. */104 sysarg_t row; /**< Row where the span lies. */105 sysarg_t cnt; /**< Width of the span. */103 ipcarg_t col; /**< Leftmost column of the span. */ 104 ipcarg_t row; /**< Row where the span lies. */ 105 ipcarg_t cnt; /**< Width of the span. */ 106 106 } fb_pending; 107 107 … … 116 116 static void curs_hide_sync(void) 117 117 { 118 async_req_1_0(fb_info.phone, FB_CURSOR_VISIBILITY, false);119 } 120 121 static void curs_goto( sysarg_t x, sysarg_t y)118 ipc_call_sync_1_0(fb_info.phone, FB_CURSOR_VISIBILITY, false); 119 } 120 121 static void curs_goto(ipcarg_t x, ipcarg_t y) 122 122 { 123 123 async_msg_2(fb_info.phone, FB_CURSOR_GOTO, x, y); … … 131 131 static void screen_yield(void) 132 132 { 133 async_req_0_0(fb_info.phone, FB_SCREEN_YIELD);133 ipc_call_sync_0_0(fb_info.phone, FB_SCREEN_YIELD); 134 134 } 135 135 136 136 static void screen_reclaim(void) 137 137 { 138 async_req_0_0(fb_info.phone, FB_SCREEN_RECLAIM);138 ipc_call_sync_0_0(fb_info.phone, FB_SCREEN_RECLAIM); 139 139 } 140 140 141 141 static void kbd_yield(void) 142 142 { 143 async_req_0_0(kbd_phone, KBD_YIELD);143 ipc_call_sync_0_0(kbd_phone, KBD_YIELD); 144 144 } 145 145 146 146 static void kbd_reclaim(void) 147 147 { 148 async_req_0_0(kbd_phone, KBD_RECLAIM);148 ipc_call_sync_0_0(kbd_phone, KBD_RECLAIM); 149 149 } 150 150 … … 180 180 } 181 181 182 static int ccap_fb_to_con( sysarg_t ccap_fb, sysarg_t *ccap_con)182 static int ccap_fb_to_con(ipcarg_t ccap_fb, ipcarg_t *ccap_con) 183 183 { 184 184 switch (ccap_fb) { … … 203 203 204 204 /** Send an area of screenbuffer to the FB driver. */ 205 static void fb_update_area(console_t *cons, sysarg_t x0, sysarg_t y0, sysarg_t width, sysarg_t height)205 static void fb_update_area(console_t *cons, ipcarg_t x0, ipcarg_t y0, ipcarg_t width, ipcarg_t height) 206 206 { 207 207 if (interbuffer) { 208 sysarg_t x;209 sysarg_t y;208 ipcarg_t x; 209 ipcarg_t y; 210 210 211 211 for (y = 0; y < height; y++) { … … 237 237 * 238 238 */ 239 static void cell_mark_changed( sysarg_t col, sysarg_t row)239 static void cell_mark_changed(ipcarg_t col, ipcarg_t row) 240 240 { 241 241 if (fb_pending.cnt != 0) { … … 255 255 256 256 /** Print a character to the active VC with buffering. */ 257 static void fb_putchar(wchar_t c, sysarg_t col, sysarg_t row)257 static void fb_putchar(wchar_t c, ipcarg_t col, ipcarg_t row) 258 258 { 259 259 async_msg_3(fb_info.phone, FB_PUTCHAR, c, col, row); … … 352 352 curs_visibility(false); 353 353 354 sysarg_t x;355 sysarg_t y;354 ipcarg_t x; 355 ipcarg_t y; 356 356 int rc = 0; 357 357 … … 408 408 console_event_t ev; 409 409 410 switch (IPC_GET_ IMETHOD(call)) {410 switch (IPC_GET_METHOD(call)) { 411 411 case IPC_M_PHONE_HUNGUP: 412 412 /* TODO: Handle hangup */ … … 437 437 retval = ENOENT; 438 438 } 439 async_answer_0(callid, retval);439 ipc_answer_0(callid, retval); 440 440 } 441 441 } … … 451 451 int retval; 452 452 453 switch (IPC_GET_ IMETHOD(call)) {453 switch (IPC_GET_METHOD(call)) { 454 454 case IPC_M_PHONE_HUNGUP: 455 455 /* TODO: Handle hangup */ … … 472 472 } 473 473 474 async_answer_0(callid, retval);474 ipc_answer_0(callid, retval); 475 475 } 476 476 } … … 483 483 484 484 if (rc != EOK) { 485 async_answer_0(rid, rc);485 ipc_answer_0(rid, rc); 486 486 return; 487 487 } … … 498 498 499 499 gcons_notify_char(cons->index); 500 async_answer_1(rid, EOK, size);500 ipc_answer_1(rid, EOK, size); 501 501 502 502 free(buf); … … 508 508 size_t size; 509 509 if (!async_data_read_receive(&callid, &size)) { 510 async_answer_0(callid, EINVAL);511 async_answer_0(rid, EINVAL);510 ipc_answer_0(callid, EINVAL); 511 ipc_answer_0(rid, EINVAL); 512 512 return; 513 513 } … … 515 515 char *buf = (char *) malloc(size); 516 516 if (buf == NULL) { 517 async_answer_0(callid, ENOMEM);518 async_answer_0(rid, ENOMEM);517 ipc_answer_0(callid, ENOMEM); 518 ipc_answer_0(rid, ENOMEM); 519 519 return; 520 520 } … … 534 534 if (pos == size) { 535 535 (void) async_data_read_finalize(callid, buf, size); 536 async_answer_1(rid, EOK, size);536 ipc_answer_1(rid, EOK, size); 537 537 free(buf); 538 538 } else { … … 552 552 recheck: 553 553 if (keybuffer_pop(&cons->keybuffer, &ev)) { 554 async_answer_4(rid, EOK, ev.type, ev.key, ev.mods, ev.c);554 ipc_answer_4(rid, EOK, ev.type, ev.key, ev.mods, ev.c); 555 555 } else { 556 556 fibril_condvar_wait(&input_cv, &input_mutex); … … 571 571 continue; 572 572 573 if (consoles[i].dev map_handle == (devmap_handle_t) IPC_GET_ARG1(*icall)) {573 if (consoles[i].dev_handle == (dev_handle_t) IPC_GET_ARG1(*icall)) { 574 574 cons = &consoles[i]; 575 575 break; … … 578 578 579 579 if (cons == NULL) { 580 async_answer_0(iid, ENOENT);580 ipc_answer_0(iid, ENOENT); 581 581 return; 582 582 } … … 584 584 ipc_callid_t callid; 585 585 ipc_call_t call; 586 sysarg_t arg1;587 sysarg_t arg2;588 sysarg_t arg3;586 ipcarg_t arg1; 587 ipcarg_t arg2; 588 ipcarg_t arg3; 589 589 590 590 int rc; … … 597 597 598 598 /* Accept the connection */ 599 async_answer_0(iid, EOK);599 ipc_answer_0(iid, EOK); 600 600 601 601 while (true) { … … 608 608 arg3 = 0; 609 609 610 switch (IPC_GET_ IMETHOD(call)) {610 switch (IPC_GET_METHOD(call)) { 611 611 case IPC_M_PHONE_HUNGUP: 612 612 cons->refcount--; … … 657 657 rc = ccap_fb_to_con(fb_info.color_cap, &arg1); 658 658 if (rc != EOK) { 659 async_answer_0(callid, rc);659 ipc_answer_0(callid, rc); 660 660 continue; 661 661 } … … 701 701 break; 702 702 } 703 async_answer_3(callid, EOK, arg1, arg2, arg3);703 ipc_answer_3(callid, EOK, arg1, arg2, arg3); 704 704 } 705 705 } … … 726 726 727 727 /* NB: The callback connection is slotted for removal */ 728 i f (async_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, keyboard_events)729 728 ipcarg_t phonehash; 729 if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) { 730 730 printf(NAME ": Failed to create callback from input device\n"); 731 731 return false; 732 732 } 733 734 async_new_connection(phonehash, 0, NULL, keyboard_events); 733 735 734 736 /* Connect to mouse device */ … … 747 749 } 748 750 749 if (async_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, mouse_events) 750 != 0) { 751 if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) { 751 752 printf(NAME ": Failed to create callback from mouse device\n"); 752 753 mouse_phone = -1; … … 754 755 } 755 756 757 async_new_connection(phonehash, 0, NULL, mouse_events); 756 758 skip_mouse: 757 759 758 760 /* Connect to framebuffer driver */ 759 fb_info.phone = service_connect_blocking(SERVICE_VIDEO, 0, 0);761 fb_info.phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VIDEO, 0, 0); 760 762 if (fb_info.phone < 0) { 761 763 printf(NAME ": Failed to connect to video service\n"); … … 802 804 if (screenbuffer_init(&consoles[i].scr, 803 805 fb_info.cols, fb_info.rows) == NULL) { 804 printf(NAME ": Unable to allocate screen buffer % zu\n", i);806 printf(NAME ": Unable to allocate screen buffer %u\n", i); 805 807 return false; 806 808 } … … 811 813 812 814 char vc[DEVMAP_NAME_MAXLEN + 1]; 813 snprintf(vc, DEVMAP_NAME_MAXLEN, "%s/vc% zu", NAMESPACE, i);815 snprintf(vc, DEVMAP_NAME_MAXLEN, "%s/vc%u", NAMESPACE, i); 814 816 815 if (devmap_device_register(vc, &consoles[i].devmap_handle) != EOK) { 817 if (devmap_device_register(vc, &consoles[i].dev_handle) != EOK) { 818 devmap_hangup_phone(DEVMAP_DRIVER); 816 819 printf(NAME ": Unable to register device %s\n", vc); 817 820 return false; … … 833 836 834 837 /* Receive kernel notifications */ 835 async_set_interrupt_received(interrupt_received);836 838 if (event_subscribe(EVENT_KCONSOLE, 0) != EOK) 837 839 printf(NAME ": Error registering kconsole notifications\n"); 840 841 async_set_interrupt_received(interrupt_received); 838 842 839 843 return true;
Note:
See TracChangeset
for help on using the changeset viewer.