Changeset a2a3763 in mainline for uspace/srv/hid/console/console.c
- Timestamp:
- 2011-05-28T22:57:36Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5da18c7, bd7acda
- Parents:
- 3ef91c88
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/hid/console/console.c
r3ef91c88 ra2a3763 57 57 #include <io/style.h> 58 58 #include <io/screenbuffer.h> 59 #include <inttypes.h> 59 60 60 61 #include "console.h" … … 67 68 /** Interval for checking for new keyboard (1/4s). */ 68 69 #define HOTPLUG_WATCH_INTERVAL (1000 * 250) 70 71 /* Kernel defines 32 but does not export it. */ 72 #define MAX_IPC_OUTGOING_PHONES 128 73 /** To allow proper phone closing. */ 74 static ipc_callid_t driver_phones[MAX_IPC_OUTGOING_PHONES] = { 0 }; 69 75 70 76 /** Phone to the keyboard driver. */ … … 90 96 contents and related settings. */ 91 97 } console_t; 98 99 92 100 93 101 /** Array of data for virtual consoles */ … … 401 409 } 402 410 411 static void close_driver_phone(ipc_callid_t hash) 412 { 413 int i; 414 for (i = 0; i < MAX_IPC_OUTGOING_PHONES; i++) { 415 if (driver_phones[i] == hash) { 416 printf("Device %" PRIxn " gone.\n", hash); 417 driver_phones[i] = 0; 418 async_hangup(i); 419 return; 420 } 421 } 422 } 423 403 424 /** Handler for keyboard */ 404 425 static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall) … … 415 436 case IPC_M_PHONE_HUNGUP: 416 437 /* TODO: Handle hangup */ 438 close_driver_phone(iid); 417 439 return; 418 440 case KBD_EVENT: … … 458 480 case IPC_M_PHONE_HUNGUP: 459 481 /* TODO: Handle hangup */ 482 close_driver_phone(iid); 460 483 return; 461 484 case MEVENT_BUTTON: … … 715 738 } 716 739 740 static int async_connect_to_me_hack(int phone, sysarg_t arg1, sysarg_t arg2, 741 sysarg_t arg3, async_client_conn_t client_receiver, ipc_callid_t *hash) 742 { 743 sysarg_t task_hash; 744 sysarg_t phone_hash; 745 int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, arg1, arg2, arg3, 746 NULL, NULL, NULL, &task_hash, &phone_hash); 747 if (rc != EOK) 748 return rc; 749 750 if (client_receiver != NULL) 751 async_new_connection(task_hash, phone_hash, phone_hash, NULL, 752 client_receiver); 753 754 if (hash != NULL) { 755 *hash = phone_hash; 756 } 757 758 return EOK; 759 } 760 717 761 static int connect_keyboard_or_mouse(const char *devname, 718 762 async_client_conn_t handler, const char *path) … … 729 773 } 730 774 731 int rc = async_connect_to_me(phone, SERVICE_CONSOLE, 0, 0, handler); 775 ipc_callid_t hash; 776 int rc = async_connect_to_me_hack(phone, SERVICE_CONSOLE, 0, phone, 777 handler, &hash); 732 778 if (rc != EOK) { 733 779 printf(NAME ": " \ … … 737 783 } 738 784 739 printf(NAME ": found %s \"%s\".\n", devname, path); 785 driver_phones[phone] = hash; 786 787 printf(NAME ": found %s \"%s\" (%" PRIxn ").\n", devname, path, hash); 740 788 741 789 return phone;
Note:
See TracChangeset
for help on using the changeset viewer.