cdc_natives.c
来自「This is a resource based on j2me embedde」· C语言 代码 · 共 751 行 · 第 1/2 页
C
751 行
len = 0; /* IMPL_NOTE: throw out of memory */ } else { KNI_GetStringRegion(stringObj, 0, len, data); } } write(controlPipe[1], &len, sizeof(int)); if (len > 0) { write(controlPipe[1], data, len * sizeof(jchar)); midpFree(data); }}/** * Blocks the Java event thread until an event has been queued and returns * that event and the number of events still in the queue. * * @param event An empty event to be filled in if there is a queued * event. * * @return number of events waiting in the native queue */KNIEXPORT KNI_RETURNTYPE_INTKNIDECL(com_sun_midp_events_NativeEventMonitor_waitForNativeEvent) { fd_set read_fds; fd_set write_fds; fd_set except_fds; int num_fds = 0, num_ready; /* IMPL_NOTE jlong sec, usec; */ /* IMPL_NOTE struct timeval timeout; */#ifdef DIRECTFB int keyboard_has_event = 0;#else int keyboardFd = fbapp_get_keyboard_fd();#endif /* defined(DIRECTFB) */ int done = 0; do { FD_ZERO(&read_fds); FD_ZERO(&write_fds); FD_ZERO(&except_fds); FD_SET(controlPipe[0], &read_fds); if (num_fds <= controlPipe[0]) { num_fds = controlPipe[0] + 1; }#ifndef DIRECTFB keyboardFd = fbapp_get_keyboard_fd(); if (keyboardFd >= 0) { FD_SET(keyboardFd, &read_fds); if (num_fds <= keyboardFd) { num_fds = keyboardFd + 1; } } CVMD_gcSafeExec(_ee, { num_ready= select(num_fds+1, &read_fds, &write_fds, &except_fds, NULL); });#else /* We should get events from two different sources: * from controlPipe and from DirectFB's event queue (keyboard events). * At first we check for keyboard events. If this queue is empty * we wait 0.2s for pipe's events. */ if (!directfbapp_event_is_waiting()) { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 200000; /* wait 0.2 sec */ /* When the timeout expires num_ready will contain 0 */ CVMD_gcSafeExec(_ee, { num_ready= select(num_fds+1, &read_fds, &write_fds, &except_fds, &timeout); }); } else { keyboard_has_event = 1; num_ready = 0; }#endif /* !defined(DIRECTFB) */ KNI_StartHandles(3); KNI_DeclareHandle(eventObj); /* IMPL_NOTE KNI_DeclareHandle(stringObj); */ KNI_DeclareHandle(classObj); KNI_GetParameterAsObject(1, eventObj); cacheEventFieldIDs(KNIPASSARGS eventObj, classObj); if (num_ready >= 0) {#ifdef DIRECTFB /* check if a keyboard event was received while we was waiting in the select */ if (keyboard_has_event || directfbapp_event_is_waiting()) { keyboard_has_event = 0;#else if (FD_ISSET(keyboardFd, &read_fds)) {#endif /* defined(DIRECTFB) */ newSignal.waitingFor = 0; newSignal.pResult = NULL; MIDP_EVENT_INITIALIZE(newMidpEvent); handleKey(&newSignal, &newMidpEvent); /* Need to set the event DISPLAY (intParam4) to forground. See midpStoreEventAndSignalForeground() in midpEventUtil.c. */ newMidpEvent.DISPLAY = gForegroundDisplayId; if (newSignal.waitingFor == UI_SIGNAL || newSignal.waitingFor == AMS_SIGNAL) { KNI_SetIntField(eventObj, typeFieldID, newMidpEvent.type); KNI_SetIntField(eventObj, intParam1FieldID, newMidpEvent.intParam1); KNI_SetIntField(eventObj, intParam2FieldID, newMidpEvent.intParam2); KNI_SetIntField(eventObj, intParam3FieldID, newMidpEvent.intParam3); KNI_SetIntField(eventObj, intParam4FieldID, newMidpEvent.intParam4);#ifdef CVM_DEBUG printf("Got key%s: %d\n", (newMidpEvent.ACTION == KEYMAP_STATE_PRESSED) ? "down" : "up", newMidpEvent.CHR);#endif done = 1; } } else if (FD_ISSET(controlPipe[0], &read_fds)) { readControlIntField(eventObj, typeFieldID); readControlIntField(eventObj, intParam1FieldID); readControlIntField(eventObj, intParam2FieldID); readControlIntField(eventObj, intParam3FieldID); readControlIntField(eventObj, intParam4FieldID); readControlStringField(KNIPASSARGS eventObj, stringParam1FieldID); readControlStringField(KNIPASSARGS eventObj, stringParam2FieldID); readControlStringField(KNIPASSARGS eventObj, stringParam3FieldID); readControlStringField(KNIPASSARGS eventObj, stringParam4FieldID); readControlStringField(KNIPASSARGS eventObj, stringParam5FieldID); readControlStringField(KNIPASSARGS eventObj, stringParam6FieldID); done = 1; } } KNI_EndHandles(); } while (!done); KNI_ReturnInt(0);}#ifdef ENABLE_DEBUGstatic const char * const eventNames[] = { "???_EVENT", /* 0 */ "KEY_EVENT", /* 1 */ "PEN_EVENT", /* 2 */ "COMMAND_EVENT", /* 3 */ "REPAINT_EVENT", /* 4 */ "SCREEN_CHANGE_EVENT", /* 5 */ "INVALIDATE_EVENT", /* 6 */ "ITEM_EVENT", /* 7 */ "PEER_CHANGED_EVENT", /* 8 */ "CALL_SERIALLY_EVENT", /* 9 */ "FOREGROUND_NOTIFY_EVENT", /* 10 */ "ACTIVATE_MIDLET_EVENT", /* 11 */ "PAUSE_MIDLET_EVENT", /* 12 */ "DESTROY_MIDLET_EVENT", /* 13 */ "SHUTDOWN_EVENT", /* 14 */ "ACTIVATE_ALL_EVENT", /* 15 */ "PAUSE_ALL_EVENT", /* 16 */ "MIDLET_CREATED_NOTIFICATION", /* 17 */ "MIDLET_ACTIVE_NOTIFICATION", /* 18 */ "MIDLET_PAUSED_NOTIFICATION", /* 19 */ "MIDLET_DESTROYED_NOTIFICATION", /* 20 */ "FOREGROUND_REQUEST_EVENT", /* 21 */ "BACKGROUND_REQUEST_EVENT", /* 22 */ "SELECT_FOREGROUND_EVENT", /* 23 */ "PREEMPT_EVENT", /* 24 */ "MIDLET_START_ERROR_EVENT", /* 25 */ "EXECUTE_MIDLET_EVENT", /* 26 */ "MIDLET_DESTROY_REQUEST_EVENT", /* 27 */ "FOREGROUND_TRANSFER_EVENT", /* 28 */ "EVENT_QUEUE_SHUTDOWN", /* 29 */ "FATAL_ERROR_NOTIFICATION", /* 30 */ "MM_EOM_EVENT", /* 31 */ "MM_SAT_EVENT", /* 32 */ "MM_TONEEOM_EVENT", /* 33 */ "FC_DISKS_CHANGED_EVENT", /* 34 */ "TEST_EVENT", /* 35 */ "MIDLET_RESUME_REQUEST", /* 36 */ "NATIVE_MIDLET_EXECUTE_REQUEST", /* 37 */ "NATIVE_MIDLET_RESUME_REQUEST", /* 38 */ "???_EVENT", "NATIVE_MIDLET_PAUSE_REQUEST", /* 40 */ "NATIVE_MIDLET_DESTROY_REQUEST", /* 41 */ "NATIVE_SET_FOREGROUND_REQUEST", /* 42 */ "SET_FOREGROUND_BY_NAME_REQUEST" /* 43 */};static const int numEvents = sizeof(eventNames) / sizeof(eventNames[0]);static const char* getEventNameBasic(int eventId){ if (eventId >= numEvents) { return "<illegal event id>"; } else { return eventNames[eventId]; }}static const char* getEventName(KNIDECLARGS jobject objectHandle, jfieldID fieldID){ int eventId = KNI_GetIntField(objectHandle, fieldID); return getEventNameBasic(eventId);}#elsestatic const char* getEventNameBasic(int eventId){ return "";}static const char* getEventName(KNIDECLARGS jobject objectHandle, jfieldID fieldID){ return "";}#endif/** * Sends a native event a given Isolate. * * @param event A event to queued * @param isolateId ID of the target Isolate */KNIEXPORT KNI_RETURNTYPE_VOIDKNIDECL(com_sun_midp_events_EventQueue_sendNativeEventToIsolate) { KNI_StartHandles(3); KNI_DeclareHandle(eventObj); KNI_DeclareHandle(stringObj); KNI_DeclareHandle(classObj); KNI_GetParameterAsObject(1, eventObj); cacheEventFieldIDs(KNIPASSARGS eventObj, classObj);#ifdef CVM_DEBUG /* IMPL_NOTE: Remove the printf. Or we should make it as a trace */ printf("sendNativeEventToIsolate====: "); printf("(type=%s) ", getEventName(KNIPASSARGS eventObj, typeFieldID));#endif sendControlIntField(eventObj, typeFieldID); sendControlIntField(eventObj, intParam1FieldID); sendControlIntField(eventObj, intParam2FieldID); sendControlIntField(eventObj, intParam3FieldID); sendControlIntField(eventObj, intParam4FieldID);#ifdef CVM_DEBUG printf("\n");#endif sendControlStringField(KNIPASSARGS eventObj, stringObj, stringParam1FieldID); sendControlStringField(KNIPASSARGS eventObj, stringObj, stringParam2FieldID); sendControlStringField(KNIPASSARGS eventObj, stringObj, stringParam3FieldID); sendControlStringField(KNIPASSARGS eventObj, stringObj, stringParam4FieldID); sendControlStringField(KNIPASSARGS eventObj, stringObj, stringParam5FieldID); sendControlStringField(KNIPASSARGS eventObj, stringObj, stringParam6FieldID); KNI_EndHandles(); KNI_ReturnVoid();}#ifdef CVM_DEBUGvoid dummy_called() {}#define DUMMY(x) void x() {printf("dummy: %s\n", #x); dummy_called();}#else#define DUMMY(x) void x() {}#endifDUMMY(platformRequest)DUMMY(handleFatalError)DUMMY(NotifySocketStatusChanged)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_open0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_read0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_write0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_available0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_close0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_finalize)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_getIpNumber0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_getHost0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_getPort0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_getSockOpt0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_setSockOpt0)DUMMY(CNIcom_sun_midp_io_j2me_socket_Protocol_shutdownOutput0)DUMMY(CNIcom_sun_midp_io_NetworkConnectionBase_initializeInternal)DUMMY(CNIcom_sun_midp_events_EventQueue_handleFatalError)DUMMY(CNIcom_sun_midp_events_NativeEventMonitor_readNativeEvent)KNIEXPORT KNI_RETURNTYPE_VOIDKNIDECL(com_sun_midp_events_EventQueue_resetNativeEventQueue) { (void) _arguments; (void) _p_mb; KNI_ReturnVoid();}KNIEXPORT KNI_RETURNTYPE_INTKNIDECL(com_sun_midp_events_EventQueue_getNativeEventQueueHandle) { (void) _p_mb; KNI_ReturnInt(0);}DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_checkInByMidlet0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_add0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_getMIDlet0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_getEntry0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_addAlarm0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_del0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_checkInByName0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_checkInByHandle0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_list0)DUMMY(CNIcom_sun_midp_io_j2me_push_PushRegistryImpl_delAllForSuite0)DUMMY(CNIcom_sun_midp_crypto_MD5_nativeUpdate)DUMMY(CNIcom_sun_midp_crypto_MD5_nativeFinal)DUMMY(CNIcom_sun_midp_crypto_MD2_nativeUpdate)DUMMY(CNIcom_sun_midp_crypto_MD2_nativeFinal)DUMMY(CNIcom_sun_midp_crypto_SHA_nativeUpdate)DUMMY(CNIcom_sun_midp_crypto_SHA_nativeFinal)DUMMY(CNIcom_sun_midp_main_MIDletSuiteVerifier_getJarHash)DUMMY(CNIcom_sun_midp_main_MIDletSuiteVerifier_checkJarHash)DUMMY(CNIcom_sun_midp_main_MIDletSuiteVerifier_useClassVerifier)DUMMY(CNIcom_sun_midp_main_MIDletAppImageGenerator_removeAppImage)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_getHandler)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_getMaxByteLength)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_getByteLength)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_byteToChar)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_charToByte)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_sizeOfByteInUnicode)DUMMY(CNIcom_sun_cdc_i18n_j2me_Conv_sizeOfUnicodeInByte)/* IMPL_NOTE removedDUMMY(lockStorage)DUMMY(lock_storage)DUMMY(unlockStorage)DUMMY(unlock_storage)DUMMY(findStorageLock)DUMMY(find_storage_lock)DUMMY(removeAllStorageLock)DUMMY(removeStorageLock)DUMMY(remove_storage_lock)DUMMY(pushdeletesuite)*/DUMMY(midpStoreEventAndSignalForeground)int getCurrentIsolateId() {return 0;}int midpGetAmsIsolateId() {return 0;}/* IMPL_NOTE - removed duplicate * DUMMY(midp_getCurrentThreadId) */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?