Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 73f56e4 in mainline for uspace/srv/console/console.c


Ignore:
Timestamp:
2009-12-30T14:17:46Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master
Children:
26b50cb
Parents:
bb2dbf8 (diff), 9f51afc (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mouse driver.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/console/console.c

    rbb2dbf8 r73f56e4  
    3737#include <ipc/kbd.h>
    3838#include <io/keycode.h>
     39#include <ipc/mouse.h>
    3940#include <ipc/fb.h>
    4041#include <ipc/services.h>
     
    6465/** Phone to the keyboard driver. */
    6566static int kbd_phone;
     67
     68/** Phone to the mouse driver. */
     69static int mouse_phone;
    6670
    6771/** Information about framebuffer */
     
    426430}
    427431
     432/** Handler for mouse events */
     433static void mouse_events(ipc_callid_t iid, ipc_call_t *icall)
     434{
     435        int button, press;
     436        int dx, dy;
     437        int newcon;
     438
     439        /* Ignore parameters, the connection is already opened */
     440        while (true) {
     441
     442                ipc_call_t call;
     443                ipc_callid_t callid = async_get_call(&call);
     444
     445                int retval;
     446
     447                switch (IPC_GET_METHOD(call)) {
     448                case IPC_M_PHONE_HUNGUP:
     449                        /* TODO: Handle hangup */
     450                        return;
     451                case MEVENT_BUTTON:
     452                        button = IPC_GET_ARG1(call);
     453                        press = IPC_GET_ARG2(call);
     454                        if (button == 1) {
     455                                newcon = gcons_mouse_btn(press);
     456                                if (newcon != -1)
     457                                        change_console(&consoles[newcon]);
     458                        }
     459                        retval = 0;
     460                        break;
     461                case MEVENT_MOVE:
     462                        dx = IPC_GET_ARG1(call);
     463                        dy = IPC_GET_ARG2(call);
     464                        gcons_mouse_move(dx, dy);
     465                        retval = 0;
     466                        break;
     467                default:
     468                        retval = ENOENT;
     469                }
     470
     471                ipc_answer_0(callid, retval);
     472        }
     473}
     474
    428475static void cons_write(console_t *cons, ipc_callid_t rid, ipc_call_t *request)
    429476{
     
    675722                return false;
    676723        }
    677        
     724
    678725        kbd_phone = fd_phone(input_fd);
    679726        if (kbd_phone < 0) {
     
    681728                return false;
    682729        }
    683        
     730
    684731        /* NB: The callback connection is slotted for removal */
    685732        ipcarg_t phonehash;
     
    688735                return false;
    689736        }
    690        
     737
    691738        async_new_connection(phonehash, 0, NULL, keyboard_events);
     739
     740        /* Connect to mouse device */
     741        mouse_phone = -1;
     742        int mouse_fd = open("/dev/hid_in/mouse", O_RDONLY);
     743
     744        if (mouse_fd < 0) {
     745                printf(NAME ": Notice - failed opening %s\n", "/dev/hid_in/mouse");
     746                goto skip_mouse;
     747        }
     748
     749        mouse_phone = fd_phone(mouse_fd);
     750        if (mouse_phone < 0) {
     751                printf(NAME ": Failed to connect to mouse device\n");
     752                goto skip_mouse;
     753        }
     754
     755        if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
     756                printf(NAME ": Failed to create callback from mouse device\n");
     757                mouse_phone = -1;
     758                goto skip_mouse;
     759        }
     760
     761        async_new_connection(phonehash, 0, NULL, mouse_events);
     762skip_mouse:
    692763
    693764        /* Connect to framebuffer driver */
     
    697768                return -1;
    698769        }
    699        
     770
    700771        /* Register driver */
    701772        int rc = devmap_driver_register(NAME, client_connection);
Note: See TracChangeset for help on using the changeset viewer.