안녕하세요.

혹시 터치이벤트를 강제로 발생 시키는것에 대해 아시는분 안계실까요?

안드로이드 vnc소스를 가지고 샘플을 만들었는데요.
(ndk)

소스를 보면

1. init_touch()
50. injectTouchEvent(int down, int x, int y);
99. cleanup_touch()

1번 후에 50번 작업을 계속 던지는데 아무런 작동도 하지 않거든요...

루팅해서 각 /dev/input/아래 있는것들은 권한오류 없이 정상으로 열렸구요.

write했을 경우에도 아무런 에러가 없습니다.

근데 아무런 현상이 안나오고 있습니다.

도움 주실분 안계실까요?

읽어 주셔서 감사합니다.
-------------------------------------------------------------------
static char TOUCH_DEVICE[256] = "/dev/input/event1";

static int init_touch()
{
    struct input_absinfo info;
    if((touchfd = open(TOUCH_DEVICE, O_RDWR)) == -1)
    {
        sprintf(gMsg, "cannot open touch device ( %s )", strerror(errno));
        LOGI("cannot open touch device ( %s )\n", strerror(errno));
        return -1;
    }
    // Get the Range of X and Y
    if(ioctl(touchfd, EVIOCGABS(ABS_X), &info)) {
        sprintf(gMsg, "cannot get ABS_X info, %s", strerror(errno));
        LOGI("cannot get ABS_X info, %s\n", strerror(errno));
        return -2;
    }
    xmin = info.minimum;
    xmax = info.maximum;
    if(ioctl(touchfd, EVIOCGABS(ABS_Y), &info)) {
        sprintf(gMsg, "cannot get ABS_Y, %s", strerror(errno));
        LOGI("cannot get ABS_Y, %s\n", strerror(errno));
        return -3;
    }
    ymin = info.minimum;
    ymax = info.maximum;

    LOGI("xmin:%d, xmax:%d, ymin:%d, ymax:%d", xmin, xmax, ymin, ymax);
    //xmin : 0, xmax : 599, ymin : 0, ymax : 1023

    return 1;
}

static void cleanup_touch()
{
    if(touchfd != -1)
    {
        close(touchfd);
        touchfd = -1;
    }
}

void injectTouchEvent(int down, int x, int y)
{
    struct input_event ev;
   
    // Calculate the final x and y
    //x = xmin + (x * (xmax - xmin)) / (scrinfo.xres);
    //y = ymin + (y * (ymax - ymin)) / (scrinfo.yres);
   
    //LOGI("down:%d, x:%d, y:%d", down, x, y);
   
    memset(&ev, 0, sizeof(ev));

    // Then send a BTN_TOUCH
    gettimeofday(&ev.time,0);
    ev.type = EV_KEY;
    ev.code = BTN_TOUCH;
    ev.value = down;
    if(write(touchfd, &ev, sizeof(ev)) < 0)
    {
        sprintf(gMsg, "write event failed, %s(injectTouchEvent)", strerror(errno));
        LOGI("write event failed, %s(injectTouchEvent)\n", strerror(errno));
    }

    // Then send the X
    gettimeofday(&ev.time,0);
    ev.type = EV_ABS;
    ev.code = ABS_X;
    ev.value = x;
    if(write(touchfd, &ev, sizeof(ev)) < 0)
    {
        sprintf(gMsg, "write event failed, %s(injectTouchEvent)", strerror(errno));
        LOGI("write event failed, %s(injectTouchEvent)\n", strerror(errno));
    }

    // Then send the Y
    gettimeofday(&ev.time,0);
    ev.type = EV_ABS;
    ev.code = ABS_Y;
    ev.value = y;
    if(write(touchfd, &ev, sizeof(ev)) < 0)
    {
        sprintf(gMsg, "write event failed, %s(injectTouchEvent)", strerror(errno));
        LOGI("write event failed, %s(injectTouchEvent)\n", strerror(errno));
    }

    // Finally send the SYN
    gettimeofday(&ev.time,0);
    ev.type = EV_SYN;
    ev.code = 0;
    ev.value = 0;
    if(write(touchfd, &ev, sizeof(ev)) < 0)
    {
        sprintf(gMsg, "write event failed, %s(injectTouchEvent)", strerror(errno));
        LOGI("write event failed, %s(injectTouchEvent)\n", strerror(errno));
    }

}