/** * An entry point of a thread devoted to run java */ void JavaTask(void) { static unsigned long binaryBuffer[BINARY_BUFFER_MAX_LEN/sizeof(long)]; midp_jc_event_union *event; javacall_bool res = JAVACALL_OK; javacall_bool JavaTaskIsGoOn = JAVACALL_TRUE; long timeTowaitInMillisec = -1; int binaryBufferMaxLen = BINARY_BUFFER_MAX_LEN; int outEventLen; REPORT_CRIT(LC_CORE,"JavaTask() >>\n"); /* Outer Event Loop */ while (JavaTaskIsGoOn) { if (midpInitializeMemory(-1) != 0) { REPORT_CRIT(LC_CORE,"JavaTask() >> midpInitializeMemory() Not enough memory.\n"); break; } REPORT_INFO(LC_CORE,"JavaTask() >> memory initialized.\n"); res = javacall_event_receive(timeTowaitInMillisec, (unsigned char *)binaryBuffer, binaryBufferMaxLen, &outEventLen); if (!JAVACALL_SUCCEEDED(res)) { REPORT_ERROR(LC_CORE,"JavaTask() >> Error javacall_event_receive()\n"); continue; } event = (midp_jc_event_union *) binaryBuffer; switch (event->eventType) { case MIDP_JC_EVENT_START_ARBITRARY_ARG: REPORT_INFO(LC_CORE,"JavaTask() MIDP_JC_EVENT_START_ARBITRARY_ARG>> \n"); javacall_lifecycle_state_changed(JAVACALL_LIFECYCLE_MIDLET_STARTED, JAVACALL_OK); JavaTaskImpl(event->data.startMidletArbitraryArgEvent.argc, event->data.startMidletArbitraryArgEvent.argv); JavaTaskIsGoOn = JAVACALL_FALSE; break; case MIDP_JC_EVENT_END: REPORT_INFO(LC_CORE,"JavaTask() >> MIDP_JC_EVENT_END\n"); JavaTaskIsGoOn = JAVACALL_FALSE; break; default: REPORT_ERROR(LC_CORE,"Unknown event.\n"); break; } /* end of switch */ midpFinalizeMemory(); } /* end of while 'JavaTaskIsGoOn' */ REPORT_CRIT(LC_CORE,"JavaTask() <<\n"); } /* end of JavaTask */
/** * Helper function to read memory parameters and initialize memory * * @return JAVACALL_OK if memory successfully initialized */ static javacall_result initialize_memory_slavemode(void) { int main_memory_chunk_size; /* Get java heap memory size */ main_memory_chunk_size = getInternalPropertyInt("MAIN_MEMORY_CHUNK_SIZE"); if (0 == main_memory_chunk_size){ REPORT_ERROR(LC_AMS, "javanotify_start(): Missing MAIN_MEMORY_CHUNK_SIZE property." "System will exit!\n"); main_memory_chunk_size = DEFAULT_MEMORY_CHUNK_SIZE; return JAVACALL_FAIL; } /* Initialize midp memory pool */ if (midpInitializeMemory(main_memory_chunk_size) != 0) { REPORT_ERROR(LC_AMS, "javanotify_start(): Cannot initialize MIDP memory\n"); return JAVACALL_OUT_OF_MEMORY; } return JAVACALL_OK; }
/** * An entry point of a thread devoted to run java */ void JavaTask(void) { midp_jc_event_union event; javacall_bool res = JAVACALL_OK; javacall_bool JavaTaskIsGoOn = JAVACALL_TRUE; long timeTowaitInMillisec = -1; int outEventLen; int main_memory_chunk_size; /* Get java heap memory size */ main_memory_chunk_size = getInternalPropertyInt("MAIN_MEMORY_CHUNK_SIZE"); if (main_memory_chunk_size == 0) { main_memory_chunk_size = -1; } /* Outer Event Loop */ while (JavaTaskIsGoOn) { if (midpInitializeMemory(main_memory_chunk_size) != 0) { REPORT_CRIT(LC_CORE,"JavaTask() >> midpInitializeMemory() Not enough memory.\n"); break; } REPORT_INFO(LC_CORE,"JavaTask() >> memory initialized.\n"); #if !ENABLE_CDC res = javacall_event_receive(timeTowaitInMillisec, (unsigned char *)&event, sizeof(midp_jc_event_union), &outEventLen); #else res = javacall_event_receive_cvm(MIDP_EVENT_QUEUE_ID, (unsigned char *)&event, sizeof(midp_jc_event_union), &outEventLen); #endif if (!JAVACALL_SUCCEEDED(res)) { REPORT_ERROR(LC_CORE,"JavaTask() >> Error javacall_event_receive()\n"); continue; } switch (event.eventType) { case MIDP_JC_EVENT_START_ARBITRARY_ARG: REPORT_INFO(LC_CORE, "JavaTask() MIDP_JC_EVENT_START_ARBITRARY_ARG >>\n"); javacall_lifecycle_state_changed(JAVACALL_LIFECYCLE_MIDLET_STARTED, JAVACALL_OK, NULL); JavaTaskImpl(event.data.startMidletArbitraryArgEvent.argc, event.data.startMidletArbitraryArgEvent.argv); JavaTaskIsGoOn = JAVACALL_FALSE; break; case MIDP_JC_EVENT_SET_VM_ARGS: REPORT_INFO(LC_CORE, "JavaTask() MIDP_JC_EVENT_SET_VM_ARGS >>\n"); midpHandleSetVmArgs(event.data.startMidletArbitraryArgEvent.argc, event.data.startMidletArbitraryArgEvent.argv); break; case MIDP_JC_EVENT_SET_HEAP_SIZE: REPORT_INFO(LC_CORE, "JavaTask() MIDP_JC_EVENT_SET_HEAP_SIZE >>\n"); midpHandleSetHeapSize(event.data.heap_size); break; case MIDP_JC_EVENT_LIST_MIDLETS: REPORT_INFO(LC_CORE, "JavaTask() MIDP_JC_EVENT_LIST_MIDLETS >>\n"); midpHandleListMIDlets(); JavaTaskIsGoOn = JAVACALL_FALSE; break; case MIDP_JC_EVENT_LIST_STORAGE_NAMES: REPORT_INFO(LC_CORE, "JavaTask() MIDP_JC_EVENT_LIST_STORAGE_NAMES >>\n"); midpHandleListStorageNames(); JavaTaskIsGoOn = JAVACALL_FALSE; break; case MIDP_JC_EVENT_REMOVE_MIDLET: REPORT_INFO(LC_CORE, "JavaTask() MIDP_JC_EVENT_REMOVE_MIDLET >>\n"); midpHandleRemoveMIDlet(event.data.removeMidletEvent); JavaTaskIsGoOn = JAVACALL_FALSE; break; case MIDP_JC_EVENT_END: REPORT_INFO(LC_CORE,"JavaTask() >> MIDP_JC_EVENT_END\n"); JavaTaskIsGoOn = JAVACALL_FALSE; break; default: REPORT_ERROR(LC_CORE,"Unknown event.\n"); break; } /* end of switch */ midpFinalizeMemory(); } /* end of while 'JavaTaskIsGoOn' */ } /* end of JavaTask */