/** * 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); } }
/** * 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; }