Ignore:
Timestamp:
Dec 1, 2009, 10:51:51 PM (15 years ago)
Author:
Rick van der Zwet
Message:

Bit hacky, but uinput did not do the trick. Using the X11Test does the trick

File:
1 edited

Legend:

Unmodified
Added
Removed
  • liacs/mss/project/uinput.c

    r16 r17  
    6666        &event.xbutton.state);
    6767       
    68         //printf("Mouse Coordinates: %d %d\n", event.xbutton.x, event.xbutton.y);
     68        printf("Mouse Coordinates: %d %d\n", event.xbutton.x, event.xbutton.y);
    6969        XCloseDisplay( dsp );
    7070        xy_current.x = event.xbutton.x;
     
    9090    device.id.version=UINPUT_VERSION;
    9191
    92     for (i=0; i < ABS_MAX; i++) {
    93         device.absmax[i] = -1;
    94         device.absmin[i] = -1;
    95         device.absfuzz[i] = -1;
    96         device.absflat[i] = -1;
    97     }
     92    //for (i=0; i < ABS_MAX; i++) {
     93    //    device.absmax[i] = -1;
     94    //    device.absmin[i] = -1;
     95    //    device.absfuzz[i] = -1;
     96    //    device.absflat[i] = -1;
     97    //}
    9898
    9999    if (write(fd,&device,sizeof(device)) != sizeof(device))
     
    109109     * Also, mouse buttons have to send sync events.
    110110     */
    111     ioctl(fd, UI_SET_EVBIT, EV_KEY);
     111    //ioctl(fd, UI_SET_EVBIT, EV_KEY);
    112112    ioctl(fd, UI_SET_EVBIT, EV_REL);
    113113    ioctl(fd, UI_SET_EVBIT, EV_SYN);
     
    115115    ioctl(fd, UI_SET_RELBIT, REL_X);
    116116    ioctl(fd, UI_SET_RELBIT, REL_Y);
    117     ioctl(fd, UI_SET_RELBIT, REL_WHEEL);
     117    //ioctl(fd, UI_SET_RELBIT, REL_WHEEL);
    118118
    119119    ioctl(fd, UI_SET_KEYBIT, BTN_LEFT);
    120     ioctl(fd, UI_SET_KEYBIT, BTN_RIGHT);
    121     ioctl(fd, UI_SET_KEYBIT, BTN_MIDDLE);
     120    //ioctl(fd, UI_SET_KEYBIT, BTN_RIGHT);
     121    //ioctl(fd, UI_SET_KEYBIT, BTN_MIDDLE);
    122122
    123     for (i=0; i < 256; i++) {
    124             ioctl(fd, UI_SET_KEYBIT, i);
    125     }
     123    //for (i=0; i < 256; i++) {
     124        //    ioctl(fd, UI_SET_KEYBIT, i);
     125    //}
    126126
    127127    ioctl(fd, UI_DEV_CREATE, NULL);
     
    130130
    131131int set_pointer(const struct coords xy_target) {
    132     struct coords xy_current, xy_diff;
     132    struct coords xy_diff, xy_prev;
     133    struct coords xy_current = { -1 , -1 }; // Bogus inital value
     134    char c;
    133135    // Force pointer to absolute location on the screen
    134136    while ( 1 ) {
    135         xy_current = get_coords();
    136         xy_diff.x = -(xy_current.x - xy_target.x);
    137         xy_diff.y = -(xy_current.y - xy_target.y);
     137        //XXX: Screen pointer get updated really slow
     138        xy_prev.x = xy_current.x;
     139        xy_prev.y = xy_current.y;
     140        while ( 1 ) {
     141            xy_current = get_coords();
     142            // Found ourself an update
     143            printf("old->new coordinates %ix%i -> %ix%i\n",
     144                xy_prev.x,xy_prev.y,
     145                xy_current.x,xy_current.y);
     146            if (xy_prev.x != xy_current.x || xy_prev.y != xy_current.y) {
     147                //ex_program(1);
     148                break;
     149            }
     150            usleep(200000);
     151        }
     152
     153        xy_diff.x = (xy_target.x - xy_current.x);
     154        xy_diff.y = (xy_target.y - xy_current.y);
    138155        if (xy_diff.x == 0 && xy_diff.y == 0) {
     156            printf("Location %ix%i\n", xy_current.x, xy_current.y);
    139157            break;
    140158        } else {
     
    146164            send_event(fd, EV_REL, REL_Y, xy_diff.y);
    147165            send_event(fd, EV_SYN, SYN_REPORT, 0);
    148             // Wait some small period of time to get it populated (and the screen get updated
    149             usleep(2000000);
    150             break;
     166            // Wait some small period of time to get it populated (and the screen get updated)
     167            usleep(200000);
    151168        }
    152169    }
     
    155172int
    156173main() {
    157     struct coords xy_target = { 500,500 };
     174    struct coords xy_target = { 200,200 };
    158175    init_pointer();
    159176        set_pointer(xy_target);
    160     xy_target.x = 700;
    161     xy_target.y = 700;
     177    xy_target.x = 500;
     178    xy_target.y = 500;
    162179        set_pointer(xy_target);
    163180    close_pointer();
Note: See TracChangeset for help on using the changeset viewer.