¿Cómo simular el multitáctil con GSEvent en un dispositivo con jailbreak?

Quiero simular un evento multitáctil en un dispositivo con jailbreak, probé elGSEvent, No podía conocer cada campo de las estructuras, así que asumí que cada pathInfo significaba la información de un dedo, pero sin ningún efecto, ¿podría alguien ayudarme? Muchas gracias.

typedef struct touch {
    int identity;
    int x;
    int y;
    GSHandInfoType type;
} touch;

static void sendTouches(touch touches[])
{

    if (touches_count<1) {
        return;
    }

    uint8_t touchEvent[sizeof(GSEventRecord) + sizeof(GSHandInfo) + sizeof(GSPathInfo)*touches_count];

    // structure of touch GSEvent
    struct GSTouchEvent {
        GSEventRecord record;
        GSHandInfo    handInfo;
    } * event = (struct GSTouchEvent*) &touchEvent;
    bzero(touchEvent, sizeof(touchEvent));

    // set up GSEvent
    event->record.type = kGSEventHand;
    event->record.subtype = kGSEventSubTypeUnknown;
    event->record.windowLocation = CGPointMake(touches[0].x, touches[0].y);
    event->record.timestamp = GSCurrentEventTimestamp();
    event->record.infoSize = sizeof(GSHandInfo) + sizeof(GSPathInfo);
    event->handInfo.type = touches[0].type;
    event->handInfo.x52 = touches_count;
    event->handInfo.pathInfosCount = touches_count;

    for (int i=0; i<touches_count; i++) {
        bzero(&event->handInfo.pathInfos[i], sizeof(GSPathInfo));
        event->handInfo.pathInfos[i].pathIndex     = 1;
        event->handInfo.pathInfos[i].pathIdentity  = 2;
        event->handInfo.pathInfos[i].pathProximity = (touches[i].x == kGSHandInfoTypeTouchDown || touches[i].x == kGSHandInfoTypeTouchDragged || touches[i].x == kGSHandInfoTypeTouchMoved) ? 0x03 : 0x00;;
        event->handInfo.pathInfos[i].pathLocation  = CGPointMake(touches[i].x, touches[i].y);
    }

    mach_port_t port = (mach_port_t)getFrontMostAppPort();
    GSSendEvent((GSEventRecord *)event, port);

}

int test()
{
    // simulate two fingers touch from  the center to two sides of the screen.

    struct touch touchesDown[2] = [{0, 140, 200, kGSHandInfoTypeTouchDown},
                                   {1, 160, 200, kGSHandInfoTypeTouchDown}];

    struct touch touchesMove[2] = [{0, 40, 200, kGSHandInfoTypeTouchDragged},
                                   {1, 300, 200, kGSHandInfoTypeTouchDragged}];

    struct touch touchesUp[2] = [{0, 40, 200, kGSHandInfoTypeTouchUp},
                                 {1, 300, 200, kGSHandInfoTypeTouchUp}];

    sendTouches(touchesDown);
    usleep(20000);
    sendTouches(touchesMove);
    usleep(20000);
    sendTouches(touchesUp);
}

Respuestas a la pregunta(0)

Su respuesta a la pregunta