InitFloat10_F32

You are here:
Estimated reading time: 1 min
Go back to the VM operations list

Prototype

InitFloat10_F32 (r, mant10, exp10)

Description

Write a float on a buffer location.
buffer[r] = mant10 * pow(10, exp10);

Return
Nothing

Code Example

The following code example uses the InitFloat10_F32 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* InitFloat10_F32
*
* get r, mant10, exp10
* set buffer in memory
* get buffer at r
* if params used 
* 	return result buffer on 32 bits
* else
*	return 0x00 (buffer pas ok) or 0x01 (buffer ok)
*
* example VMExecuteCmd:
* cmd: 															   |r        |mant10   |exp10
*		0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0xFB 0xFF 0xFF
* rsp: 	0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x00 0x00 0x00 0xbf
*/

#include "SMK900.evi"

#define SENSORCODE 0x01

function exec_aircmd(){
	local rxLen;
	local useParams;
	local r,mant10,exp10;
	local i;
	local result;

	rxLen=GetAirBuf(0, 0, 20);
	
	if(rxLen>=6){ // 1 byte for paketID + 5 bytes of payload (5 bytes for params)
		useParams=true;
		r=GetBuffer_16(1);
		mant10=GetBuffer_16(3);
		exp10=GetBuffer_S8(5);
		/*for(i=4;i<rxLen;i++){
			SetBuffer(i-4,GetBuffer_S8(i),1);
		}*/
	}else{
		useParams=false;
		r=0;
		mant10=-5;
		exp10=-1;
	}
	
	InitFloat10_F32(r,mant10,exp10);

	if(useParams){
		SetBuffer_16(0,GetBuffer_16(r));
		SetBuffer_16(2,GetBuffer_16(r+2));
		Send(4);
	}else{
		if(GetBuffer_16(2)==0xBF00&&GetBuffer_16(0)==0x0000){
			result = 1;
		}else{
			result = 0;
		}
		SetBuffer(0,result,1);
		Send(1);
	}
}

function main() 
{
	local execType;
	
	execType = GetExecType();
	if(execType==MESHEXECTYPE_AIRCMD_bm){
		exec_aircmd();
	}
}

Go back to the VM operations list

Attachments

Was this article helpful?
Dislike 0
Views: 75
Go to Top