/**
 * Reset an event queue.
 *
 * @param queueId ID of the queue to reset
 */
static void resetEventQueue(jint queueId) {
    MidpEvent event;

    if (NULL == gsEventQueues) {
        return;
    }

    gsEventQueues[queueId].isMonitorBlocked = KNI_FALSE;

    while (getPendingMIDPEvent(&event, queueId) != -1) {
        freeMIDPEventFields(event);
    }
}
示例#2
0
/**
 * Reset an event queue.
 *
 * @param handle handle of the event queue.
 */
static void resetEventQueue(int handle) {
    MidpEvent event;

    if (NULL == pEventQueues) {
        return;
    }

    pEventQueues[handle].isMonitorBlocked = KNI_FALSE;

    while (getPendingMIDPEvent(&event, handle) != -1) {
        freeMIDPEventFields(event);
    }
}
/**
 * Reads a native event without blocking. Must be called from a KNI method.
 *
 * @param event The parameter is on the java stack,
 *              An empty event to be filled in if there is a queued
 *              event.
 * @param queueId queue ID
 * @return -1 for no event read or the number of events still pending after
 * this event
 */
static int readNativeEventCommon(jint queueId) {
    MidpEvent event;
    int eventsPending;

    eventsPending = getPendingMIDPEvent(&event, queueId);
    if (eventsPending == -1) {
        return eventsPending;
    }

    KNI_StartHandles(3);
    KNI_DeclareHandle(eventObj);
    KNI_DeclareHandle(stringObj);
    KNI_DeclareHandle(classObj);

    KNI_GetParameterAsObject(1, eventObj);

    cacheEventFieldIDs(eventObj, classObj);    

    KNI_SetIntField(eventObj, typeFieldID, event.type);

    KNI_SetIntField(eventObj, intParam1FieldID, event.intParam1);
    KNI_SetIntField(eventObj, intParam2FieldID, event.intParam2);
    KNI_SetIntField(eventObj, intParam3FieldID, event.intParam3);
    KNI_SetIntField(eventObj, intParam4FieldID, event.intParam4);
    KNI_SetIntField(eventObj, intParam5FieldID, event.intParam5);

    SET_STRING_EVENT_FIELD(event.stringParam1, stringObj, eventObj,
                           stringParam1FieldID);
    SET_STRING_EVENT_FIELD(event.stringParam2, stringObj, eventObj,
                           stringParam2FieldID);
    SET_STRING_EVENT_FIELD(event.stringParam3, stringObj, eventObj,
                           stringParam3FieldID);
    SET_STRING_EVENT_FIELD(event.stringParam4, stringObj, eventObj,
                           stringParam4FieldID);
    SET_STRING_EVENT_FIELD(event.stringParam5, stringObj, eventObj,
                           stringParam5FieldID);
    SET_STRING_EVENT_FIELD(event.stringParam6, stringObj, eventObj,
                           stringParam6FieldID);

    freeMIDPEventFields(event);

    KNI_EndHandles();

    return eventsPending;
}