예제 #1
0
int main(int argc, char *argv[])
{
    char dev_path[64];
    int fd;
    int x=0;
    int y=0;
    int z=0;
    struct input_event event;
    char buf[64];
    char class_path[256];
    int ret;
    
    INIT_CMD_PIPE();

	if(sensor_get_class_path(class_path,argv[4]) < 0) {
		db_error("can't get the sensor class path\n");
        goto err;	
	}

	ret=sprintf(buf,"%d",1);
	if(0!=set_sysfs_input_attr(class_path,"enable",buf,ret)){
	  	db_warn("can't set sensor enable!!! (%s)\n", strerror(errno));
	}
	  
    fd=open_input_device(argv[4]);
    if (fd== -1) {
            db_error("can't open %s(%s)\n",argv[4], strerror(errno));
            goto err;
    }
    /*
    strncpy(dev_path, "/dev/input/event2", 64);

        fd= open(dev_path, O_RDONLY);
        if (fd== -1) {
            db_error("can't open %s(%s)\n", dev_path, strerror(errno));
            goto err;
        }
    */    
        while(1){
        	ret = read(fd, &event, sizeof(event));
        	if(ret==-1){
        		db_error("can't read %s(%s)\n", dev_path, strerror(errno));
        		goto err;
        		}
       if (event.type == EV_ABS) {

			  	switch (event.code) {
		 	   	case ABS_X:
				    x =event.value;
             	  //db_msg("senser data is: x=%d\n",x);
                         break;
				case ABS_Y:
					y =event.value;
                  // db_msg("senser date is: y=%d\n",y);
					break;				
				case ABS_Z:
					z =event.value;
                 //   db_msg("senser date is:z=%d\n",z);
					break;		
					}
				sprintf(buf,"(%d,%d,%d)",x,y,z);
			  //db_msg("senser data is:x=%d,y=%d,z=%d\n",x,y,z);
				SEND_CMD_PIPE_OK_EX(buf);
                }
        	
       sleep(1);

    }
     close(fd);
err:
    SEND_CMD_PIPE_FAIL();
    EXIT_CMD_PIPE();
    return 0;
}
예제 #2
0
int main(int argc, char *argv[])
{
    char dev_path[64];
    FILE *fp;
    char evt_path[32];
    int fd;
    int version;
    unsigned short id[4];
    char name[32];
    unsigned long bit[EV_MAX][NBITS(KEY_MAX)];
    int i, j, k;
    int abs[5];
    struct input_event evt[64];
    int rd;
    char buf[64];
    char pre_key[64];

    INIT_CMD_PIPE();

    strncpy(dev_path, "/sys/class/input/event0/device/name", 64);
    for (i = 0; i < 5; i++) {
        dev_path[22] = '0' + i;
        if (access(dev_path, F_OK)) {
            db_error("can't access %s(%s)\n", dev_path, strerror(errno));
            goto err;
        }

        fp = fopen(dev_path, "r");
        if (fp == NULL) {
            db_error("can't open %s(%s)\n", dev_path, strerror(errno));
            goto err;
        }

        if (fgets(evt_path, 32, fp) == NULL) {
            db_error("can't read %s(%s)\n", dev_path, strerror(errno));
            goto err;
        }

        if (match_ir(evt_path) == 0) {
            fclose(fp);
            break;
        }
        fclose(fp);
    }

    if (i == 5) {
        db_error("NO!!! ir input found\n");
        goto err;
    }

    strncpy(evt_path, "/dev/input/event0", 32);
    evt_path[16] = '0' + i;
    if ((fd = open(evt_path, O_RDONLY)) < 0) {
        db_error("can't open %s(%s)\n", evt_path, strerror(errno));
        goto err;
    }

    if (ioctl(fd, EVIOCGVERSION, &version)) {
        db_error("can't get version\n");
        goto err;
    }
    db_debug("Input driver version is %d.%d.%d\n", 
            version >> 16, (version >> 8) & 0xff, version & 0xff);

    ioctl(fd, EVIOCGID, id);
    db_debug("Input device ID: bus 0x%x vendor 0x%x product 0x%x version 0x%x\n",
            id[ID_BUS], id[ID_VENDOR], id[ID_PRODUCT], id[ID_VERSION]);

    ioctl(fd, EVIOCGNAME(sizeof(name)), name);
    db_debug("Input device name: \"%s\"\n", name);

    memset(bit, 0, sizeof(bit));
    ioctl(fd, EVIOCGBIT(0, sizeof(bit[0])), bit[0]);
    db_dump("Supported events:\n");

    for (i = 0; i < EV_MAX; i++) {
        if (test_bit(i, bit[0])) {
            db_dump("    Event type %d (%s)\n", i, events[i] ? events[i] : "?");
            if (!i)
                continue;

            ioctl(fd, EVIOCGBIT(i, sizeof(bit[0])), bit[i]);
            for (j = 0; j < KEY_MAX; j++) {
                if (test_bit(j, bit[i])) {
                    db_dump("        Event code %d (%s)\n", j, names[i] ? (names[i][j] ? names[i][j] : "?") : "?");
                    if (i == EV_ABS) {
                        ioctl(fd, EVIOCGABS(j), abs);
                        for (k = 0; k < 5; k++) {
                            if ((k < 3) || abs[k])
                                printf("%s %6d\n", absval[k], abs[k]);
                        }
                    }
                }
            }
        }
    }

    memset(pre_key, 0, sizeof(pre_key));
    while (1) {
        rd = read(fd, evt, sizeof(struct input_event) * 64);

        if (rd < (int)sizeof(struct input_event)) {
            db_error("error in reading\n");
            goto err;
        }

        for (i = 0; i < rd / sizeof(struct input_event); i++) {
            if (evt[i].type == EV_SYN) {
                ;
            }
            else if (evt[i].type == EV_MSC && (evt[i].code == MSC_RAW || evt[i].code == MSC_SCAN)) {
                db_debug("%s, %s(%d, %02x)\n", 
                        events[evt[i].type] ? events[evt[i].type] : "?", 
                        names[evt[i].type] ? (names[evt[i].type][evt[i].code] ? names[evt[i].type][evt[i].code] : "?") : "?", 
                        evt[i].code, 
                        evt[i].value);
                if (evt[i].value)
                    continue;

                if (pre_key[0]) {
                    snprintf(buf, sizeof(buf), "%s, %s", 
                            names[evt[i].type] ? (names[evt[i].type][evt[i].code] ? names[evt[i].type][evt[i].code] : "?") : "?", 
                            pre_key);
                }
                else {
                    snprintf(buf, sizeof(buf), "%s", 
                            names[evt[i].type] ? (names[evt[i].type][evt[i].code] ? names[evt[i].type][evt[i].code] : "?") : "?");
                }
                snprintf(pre_key, sizeof(pre_key), "%s", buf);
                SEND_CMD_PIPE_OK_EX(buf);
            }
            else {
                db_debug("%s, %s(%d, %02x)\n", 
                        events[evt[i].type] ? events[evt[i].type] : "?", 
                        names[evt[i].type] ? (names[evt[i].type][evt[i].code] ? names[evt[i].type][evt[i].code] : "?") : "?", 
                        evt[i].code, 
                        evt[i].value);
                if (evt[i].value)
                    continue;

                if (pre_key[0]) {
                    snprintf(buf, sizeof(buf), "%s, %s", 
                            names[evt[i].type] ? (names[evt[i].type][evt[i].code] ? names[evt[i].type][evt[i].code] : "?") : "?", 
                            pre_key);
                }
                else {
                    snprintf(buf, sizeof(buf), "%s", 
                            names[evt[i].type] ? (names[evt[i].type][evt[i].code] ? names[evt[i].type][evt[i].code] : "?") : "?");
                }
                snprintf(pre_key, sizeof(pre_key), "%s", buf);
                SEND_CMD_PIPE_OK_EX(buf);
            }
        }
    }

err:
    SEND_CMD_PIPE_FAIL();
    EXIT_CMD_PIPE();
    return 0;
}