/**
 * Sends a native event a given Isolate.
 *
 * @param event A event to queued
 * @param isolateId ID of the target Isolate
 */
KNIEXPORT KNI_RETURNTYPE_VOID
Java_com_sun_midp_events_EventQueue_sendNativeEventToIsolate(void) {
    MidpEvent event;
    jint isolateId;
    int noExceptions = 0;

    MIDP_EVENT_INITIALIZE(event);

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

    KNI_GetParameterAsObject(1, eventObj);

    isolateId = KNI_GetParameterAsInt(2);

    cacheEventFieldIDs(eventObj, classObj);    

    event.type = KNI_GetIntField(eventObj, typeFieldID);
      
    event.intParam1 = KNI_GetIntField(eventObj, intParam1FieldID);
    event.intParam2 = KNI_GetIntField(eventObj, intParam2FieldID);
    event.intParam3 = KNI_GetIntField(eventObj, intParam3FieldID);
    event.intParam4 = KNI_GetIntField(eventObj, intParam4FieldID);
    event.intParam5 = KNI_GetIntField(eventObj, intParam5FieldID);

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

        noExceptions = 1;
    } while (0);

    KNI_EndHandles();

    if (noExceptions) {
        StoreMIDPEventInVmThread(event, isolateId);
    } else {
        freeMIDPEventFields(event);
    }

    KNI_ReturnVoid();
}
/**
 * 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);
    }
}
Example #3
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;
}