Changeset 17 for liacs/mss/project


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

Location:
liacs/mss/project
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • liacs/mss/project/Makefile

    r15 r17  
    11CFLAGS=-g
    22
    3 CFLAGS+= -I/usr/include/opencv  -lcxcore -lcv -lhighgui -lcvaux -lml
     3CFLAGS+= -I/usr/include/opencv  -lcxcore -lcv -lhighgui -lcvaux -lml -lX11 -lXtst
    44
    55all: uinput
     
    99        ./colour-tracking 1
    1010
     11colour-tracking: xdo.o
     12
  • liacs/mss/project/colour-tracking.c

    r15 r17  
    99#include <highgui.h>
    1010#include <stdio.h>
     11#include "xdo.h"
    1112
    1213#define DEBUG 1
     
    1516#define GVALUE(x,y,step) (x*step+y*3+1)
    1617#define BVALUE(x,y,step) (x*step+y*3+0)
     18
     19/* XXX: Global variables */
     20xdo_t *xdo;
    1721
    1822/* Used for playing with bounderies, returned max value of the pair */
     
    6771    int r, g, b;
    6872    int q;
     73    int retval;
     74    char arg1[4], arg2[4];
    6975       
    7076   
     
    149155        cvCopy(output,filter, NULL);
    150156        cvCircle(target, cvPoint(xmax, ymax), 10, CV_RGB(255,0,0),4, 8, 0);
     157        xdo_mousemove(xdo,xmax,ymax);
    151158                       
    152159
     
    181188// Quick at 1.0.0, not needing in  2.0x anymore
    182189int main(int argc, char *argv[]) {
    183    return InitSystem(argc, argv);
     190   int retval;
     191   xdo = xdo_new(getenv("DISPLAY"));
     192   retval = InitSystem(argc, argv);
     193   xdo_free(xdo);
    184194}
  • 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.