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 + -
显示快捷键?