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)); }
// byte[] javax.darjeeling.io.ProgramFlash.read(int) void javax_darjeeling_io_ProgramFlash_byte____read_int() { // Pop arguments. /*uint32_t index = */dj_exec_stackPopInt(); /*ref_t obj = */dj_exec_stackPopRef(); // Allocate byte array. dj_int_array * arr = dj_int_array_create(T_BYTE, PROGFLASH_BLOCKSIZE); // Read data from 'program flash'. // TODO implement ... // Return data. dj_exec_stackPushRef(VOIDP_TO_REF(arr)); }
// byte[] javax.darjeeling.io.ProgramFlash.read(int) void javax_darjeeling_io_ProgramFlash_byte____read_int() { // Pop arguments. // TODO: use when this gets implemented, but for now discard the index to avoid compiler warning // uint32_t index = dj_exec_stackPopInt(); dj_exec_stackPopInt(); // ignore the 'this' argument dj_exec_stackPopRef(); // Allocate byte array. dj_int_array * arr = dj_int_array_create(T_BYTE, PROGFLASH_BLOCKSIZE); // Read data from 'program flash'. // TODO implement ... // Return data. dj_exec_stackPushRef(VOIDP_TO_REF(arr)); }
// byte[] javax.radio.Radio._readBytes() void javax_radio_Radio_byte____readBytes() { int length = tossim_peekMessageLength(); dj_int_array * arr = dj_int_array_create(T_BYTE, length); if (arr==NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_OutOfMemoryError); return; } void * data = tossim_popMessageBuffer(); if (data==NULL) { dj_exec_createAndThrow(BASE_CDEF_java_lang_VirtualMachineError); return; } memcpy(arr->data.bytes, data, length); dj_exec_stackPushRef(VOIDP_TO_REF(arr)); //avoid deadlocks }
dj_object * dj_jstring_create(dj_vm *vm, int length) { dj_object * jstring; // create java String object uint8_t runtime_id = dj_vm_getSysLibClassRuntimeId(vm, BASE_CDEF_java_lang_String); dj_di_pointer classDef = dj_vm_getRuntimeClassDefinition(vm, runtime_id); jstring = dj_object_create(runtime_id, dj_di_classDefinition_getNrRefs(classDef), dj_di_classDefinition_getOffsetOfFirstReference(classDef)); // throw OutOfMemoryError if dj_object_create returns NULL if (jstring == NULL) return NULL; // add the string pointer to the safe memory pool to avoid it becoming invalid in case dj_int_array_create triggers a GC dj_mem_addSafePointer((void**)&jstring); // create charArray dj_int_array * charArray = dj_int_array_create(T_CHAR, length); // throw OutOfMemoryError if (charArray == NULL) { dj_mem_free(jstring); return NULL; } else { BASE_STRUCT_java_lang_String * stringObject = (BASE_STRUCT_java_lang_String*)jstring; stringObject->offset = 0; stringObject->count = length; stringObject->value = VOIDP_TO_REF(charArray); } // Remove the string object pointer from the safe memory pool. dj_mem_removeSafePointer((void**)&jstring); return jstring; }