// void java.lang.Object.notifyAll() void java_lang_Object_void_notifyAll() { // Don't pop, just peek the object reference off the runtime stack, // because it's cleared by the VM's frame management. dj_object * object = (dj_object*)REF_TO_VOIDP(dj_exec_stackPeekRef()); dj_vm_notify(dj_exec_getVM(), object, false); }
void javax_virtualsense_network_Packet_javax_virtualsense_network_Packet_createPacket_byte__(){ uint8_t i = 0; dj_object* ret = NULL; dj_int_array * byteArray = REF_TO_VOIDP(dj_exec_stackPopRef()); // create an object or allocate the chunk as is ? //heap_chunk * chk = (heap_chunk *)byteArray; PRINTF("array size is %d\n", byteArray->array.length); // resolve runtime class dj_global_id refClass = dj_vm_resolveRuntimeClass(dj_exec_getVM(), byteArray->data.bytes[4]); if(refClass.infusion != NULL){ ret = (dj_object*)dj_mem_alloc((byteArray->array.length - sizeof(heap_chunk)), byteArray->data.bytes[4]); heap_chunk * chk = getChunk(ret); PRINTF("BEFORE W Created object id %d s %d\n", chk->id, chk->size); memcpy((char*)ret, (char*)(byteArray->data.bytes+sizeof(heap_chunk)), byteArray->array.length- sizeof(heap_chunk)); chk = getChunk(ret); PRINTF("Created object id %d s %d\n", chk->id, chk->size); for(i = 0; i < byteArray->array.length; i++) PRINTF("%x-", byteArray->data.bytes[i]); PRINTF("\n"); }else { PRINTF("Packet not created\n"); } dj_exec_stackPushRef(VOIDP_TO_REF(ret)); // crete a new object from array }
void java_lang_Object_int_hashCode() { // Don't pop, just peek the object reference off the runtime stack, // because it's cleared by the VM's frame management. dj_object * object = (dj_object*)REF_TO_VOIDP(dj_exec_stackPeekRef()); dj_exec_stackPushInt((int32_t)(intptr_t)object); // NR 20130125 added casts here to get rid of warnings. I suppose losing the upper 32 bits on a 64 bit system here won't matter since we the function produces a hash. }
void javax_wukong_wkpf_WKPF_void_createWuObject_short_byte_javax_wukong_wkpf_VirtualWuObject() { dj_object *java_instance_reference = REF_TO_VOIDP(dj_exec_stackPopRef()); uint8_t port_number = (uint8_t)dj_exec_stackPopShort(); uint16_t wuclass_id = (uint16_t)dj_exec_stackPopShort(); DEBUG_LOG(DBG_WKPF, "WKPF: Creating wuobject for virtual wuclass with id %x at port %x (ref: %p)\n", wuclass_id, port_number, java_instance_reference); wkpf_error_code = wkpf_create_wuobject(wuclass_id, port_number, java_instance_reference, false); }
// void java.lang.Object.wait() void java_lang_Object_void_wait() { // Don't pop, just peek the object reference off the runtime stack, // because it's cleared by the VM's frame management. dj_object * object = (dj_object*)REF_TO_VOIDP(dj_exec_stackPeekRef()); dj_thread * thread = dj_exec_getCurrentThread(); dj_thread_wait(thread, object, 0); dj_exec_breakExecution(); }
void javax_wukong_wkpf_WKPF_void_setPropertyBoolean_javax_wukong_wkpf_VirtualWuObject_byte_boolean() { bool value = (int16_t)dj_exec_stackPopShort(); uint8_t property_number = (uint8_t)dj_exec_stackPopShort(); dj_object *java_instance_reference = REF_TO_VOIDP(dj_exec_stackPopRef()); wuobject_t *wuobject; wkpf_error_code = wkpf_get_wuobject_by_java_instance_reference(java_instance_reference, &wuobject); if (wkpf_error_code == WKPF_OK) { wkpf_error_code = wkpf_internal_write_property_boolean(wuobject, property_number, value); } }
// void java.lang.Object.notify() void java_lang_Object_void_notify() { // Don't pop, just peek the object reference off the runtime stack, // because it's cleared by the VM's frame management. dj_object * object = (dj_object*)REF_TO_VOIDP(dj_exec_stackPeekRef()); // make sure the thread owns the lock // TODO implement this check dj_vm_notify(dj_exec_getVM(), object, false); }
// void javax.darjeeling.io.ProgramFlash.write(int, byte[]) void javax_darjeeling_io_ProgramFlash_void__write_int_byte__() { // Pop arguments. /*dj_int_array arr = */REF_TO_VOIDP(dj_exec_stackPopRef()); /*uint32_t index = */dj_exec_stackPopInt(); /*ref_t obj = */dj_exec_stackPopRef(); // Write data to 'program flash'. // TODO implement ... }
void javax_wukong_wkpf_WKPF_void_registerWuClass_short_byte__() { dj_int_array *byteArrayProperties = REF_TO_VOIDP(dj_exec_stackPopRef()); // check null if (byteArrayProperties==nullref){ dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); } uint16_t wuclass_id = (uint16_t)dj_exec_stackPopShort(); DEBUG_LOG(DBG_WKPF, "WKPF: Registering virtual wuclass with id %x\n", wuclass_id); wkpf_error_code = wkpf_register_virtual_wuclass(wuclass_id, NULL, byteArrayProperties->array.length, (uint8_t *)byteArrayProperties->data.bytes); }
// void javax.darjeeling.Darjeeling.printBytesAsString(byte[]) void javax_darjeeling_Darjeeling_void_printBytesAsString_byte__() { dj_int_array* byteStr = REF_TO_VOIDP(dj_exec_stackPopRef()); // check null if (byteStr==nullref) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); } //nesc_printf(byteStr->data.bytes); if (nesc_printf(byteStr->data.bytes)==0) blockThreadForPrintf(); }
// void javax.darjeeling.Darjeeling.printBytesAsString(byte[]) void javax_darjeeling_Darjeeling_void_printBytesAsString_byte__() { dj_int_array* byteStr = REF_TO_VOIDP(dj_exec_stackPopRef()); char* str = byteStr->data.bytes; #ifdef IS_COOJA DARJEELING_PRINTF("\n(Node %d) ---> %s", node_id, str); ASSEMBLY_DEBUG("(Node %d) ---> %s", node_id, str); #else printf("%s", str); #endif }
dj_object * dj_jstring_createFromStr(dj_vm *vm, char * str) { uint16_t i; BASE_STRUCT_java_lang_String * jstring = (BASE_STRUCT_java_lang_String*)dj_jstring_create(vm, strlen(str)); dj_int_array * charArray = REF_TO_VOIDP(jstring->value); // Copy ASCII from program space to the array for (i = 0; i < strlen(str); i++) charArray->data.bytes[i] = str[i]; return (dj_object *)jstring; }
void javax_wukong_wkpf_WKPF_short_getPropertyShort_javax_wukong_wkpf_VirtualWuObject_byte() { uint8_t property_number = (uint8_t)dj_exec_stackPopShort(); dj_object *java_instance_reference = REF_TO_VOIDP(dj_exec_stackPopRef()); wuobject_t *wuobject; wkpf_error_code = wkpf_get_wuobject_by_java_instance_reference(java_instance_reference, &wuobject); if (wkpf_error_code == WKPF_OK) { int16_t value; wkpf_error_code = wkpf_internal_read_property_int16(wuobject, property_number, &value); dj_exec_stackPushShort(value); } }
// void javax.ostfriesentee.Ostfriesentee._print(byte[]) void javax_ostfriesentee_Ostfriesentee_void__print_byte__() { // Get byte array dj_int_array * byteArray = (dj_int_array*)REF_TO_VOIDP(dj_exec_stackPopRef()); if (byteArray == NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); return; } write(1, byteArray->data.bytes, byteArray->array.length); }
// void javax.ostfriesentee.Ostfriesentee._print(java.lang.String) void javax_ostfriesentee_Ostfriesentee_void__print_java_lang_String() { // Pop string object from the stack. BASE_STRUCT_java_lang_String * stringObject = (BASE_STRUCT_java_lang_String*)REF_TO_VOIDP(dj_exec_stackPopRef()); if (stringObject == NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); return; } // Get byte array dj_int_array * byteArray = (dj_int_array*)REF_TO_VOIDP(stringObject->value); if (byteArray == NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); return; } write(1, byteArray->data.bytes, stringObject->count); }
// void javax.darjeeling.Darjeeling.print(byte[]) void javax_darjeeling_Darjeeling_void_print_byte__() { int i; dj_int_array * byteArray = REF_TO_VOIDP(dj_exec_stackPopRef()); // check null if (byteArray==nullref) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); } char temp[byteArray->array.length]; for (i = 0; i < byteArray->array.length; i ++) { temp[i] = byteArray->data.bytes[i]; } if (nesc_printf(temp)==0) blockThreadForPrintf(); }
void javax_darjeeling_Darjeeling_void__print_java_lang_String() { // Pop string object from the stack. BASE_STRUCT_java_lang_String * stringObject = (BASE_STRUCT_java_lang_String*)REF_TO_VOIDP(dj_exec_stackPopRef()); if (stringObject == NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); return; } // Get byte array dj_int_array * byteArray = (dj_int_array*)REF_TO_VOIDP(stringObject->value); if (byteArray == NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_NullPointerException); return; } for (int i=0; i<byteArray->array.length; i++) printf("%c", byteArray->data.bytes[i]); }
javax_virtualsense_network_Packet_byte___toByteArray(){ uint8_t i = 0; dj_object *obj = REF_TO_VOIDP(dj_exec_stackPopRef()); heap_chunk * chk = getChunk(obj); dj_int_array * ret; uint16_t length = chk->size; PRINTF("obj id is %d and array size is %d \n", chk->id, chk->size); ret = dj_int_array_create(T_BYTE, length); // data.bytes conatains | chunk struct | chk->size -sizeof(heap_chunk) bytes | memcpy(ret->data.bytes, (char*)chk, length); for(i = 0; i < ret->array.length; i++) PRINTF("%x-", ret->data.bytes[i]); PRINTF("\n"); dj_exec_stackPushRef(VOIDP_TO_REF(ret)); }
dj_object * dj_jstring_createFromGlobalId(dj_vm *vm, dj_global_id stringId) { uint16_t i; // get pointer to the ASCII string in program memory and the string length dj_di_pointer stringBytes = dj_di_stringtable_getElementBytes(stringId.infusion->stringTable, stringId.entity_id); uint16_t stringLength = dj_di_stringtable_getElementLength(stringId.infusion->stringTable, stringId.entity_id); BASE_STRUCT_java_lang_String * jstring = (BASE_STRUCT_java_lang_String*)dj_jstring_create(vm, stringLength); dj_int_array * charArray = REF_TO_VOIDP(jstring->value); // Copy ASCII from program space to the array for (i = 0; i < stringLength; i++) charArray->data.bytes[i] = dj_di_getU8(stringBytes++); return (dj_object *)jstring; }
// void javax.radio.Radio._broadcast(byte[]) void javax_radio_Radio_void__broadcast_byte__() { dj_thread * currentThread = dj_exec_getCurrentThread(); // get byte array to send dj_int_array * arr = REF_TO_VOIDP(dj_exec_stackPopRef()); if (tossim_send((char*)arr->data.bytes, 0xffff, arr->array.length)==0) { // block the current thread for IO dj_vm* vm = dj_exec_getVM(); DEBUG_LOG(DBG_DARJEELING, DARJEELING, "broadcast stops\t\tthread[%p]\n", currentThread); currentThread->status = THREADSTATUS_BLOCKED_FOR_IO; _global_radio_sendThreadId = currentThread->id; dj_exec_breakExecution(); } }
// boolean javax.radio.Radio._send(short, byte[]) void javax_radio_Radio_boolean__send_short_byte__() { dj_thread * currentThread = dj_exec_getCurrentThread(); // get byte array to send dj_int_array * arr = REF_TO_VOIDP(dj_exec_stackPopRef()); int16_t id = dj_exec_stackPopShort(); if (tossim_send((char*)arr->data.bytes, id, arr->array.length)==0) { // block the current thread for IO DEBUG_LOG(DBG_DARJEELING, DARJEELING, "send stops thread[%p]\n", currentThread); currentThread->status = THREADSTATUS_BLOCKED_FOR_IO; _global_radio_sendThreadId = currentThread->id; dj_exec_breakExecution(); } dj_exec_stackPushShort(tossim_wasAcked()); }
void java_lang_Object_java_lang_String_toString() { // Don't pop, just peek the object reference off the runtime stack, // because it's cleared by the VM's frame management. dj_object * obj = REF_TO_VOIDP(dj_exec_stackPeekRef()); // Get class definition runtime_id_t classRuntimeId = dj_mem_getChunkId(obj); dj_global_id classGlobalId = dj_vm_getRuntimeClass(dj_exec_getVM(), classRuntimeId); // Get class name dj_di_pointer classDefinition = dj_global_id_getClassDefinition(classGlobalId); dj_local_id classNameLocalId = dj_di_classDefinition_getClassName(classDefinition); dj_global_id classNameGlobalId = dj_global_id_resolve(classGlobalId.infusion, classNameLocalId); dj_object * string = dj_jstring_createFromGlobalId(dj_exec_getVM(), classNameGlobalId); if (string==NULL) dj_exec_createAndThrow(BASE_CDEF_java_lang_OutOfMemoryError); else dj_exec_stackPushRef(VOIDP_TO_REF(string)); }
// void javax.darjeeling.Darjeeling.printBytesAsString(byte[]) void javax_darjeeling_Darjeeling_void_printBytesAsString_byte__() { dj_int_array* byteStr = REF_TO_VOIDP(dj_exec_stackPopRef()); printf("%s", byteStr->data.bytes); }
void javax_wukong_wkpf_WKPF_void_loadComponentToWuObjectAddrMap_java_lang_Object__() { dj_ref_array *map = REF_TO_VOIDP(dj_exec_stackPopRef()); wkpf_error_code = wkpf_load_component_to_wuobject_map(map); }
// void javax.darjeeling.Darjeeling.printBytesAsString(byte[]) void javax_darjeeling_Darjeeling_void_printBytesAsString_byte__() { dj_int_array* byteStr = REF_TO_VOIDP(dj_exec_stackPopRef()); char* str = byteStr->data.bytes; tossim_printf(str); }
void javax_wukong_wkpf_WKPF_void_loadLinkDefinitions_byte__() { dj_int_array *links = REF_TO_VOIDP(dj_exec_stackPopRef()); wkpf_error_code = wkpf_load_links(links); }