// 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
}
Esempio n. 12
0
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));

}
Esempio n. 19
0
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;
}
Esempio n. 20
0
// 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();
	}

}
Esempio n. 21
0
// 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);    
}