ConvertFloatToI32

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

Prototype

ConvertFloatToI32 (r, exp10)

Description

Inplace cast of float to an int32. A scaling of 1/10^exp10 is applied to the produced value

Return
Nothing

Code Example

The following code example uses the ConvertFloatToI32 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.

/* Test
* ConvertFloatToI32
* tools Converter: https://www.h-schmidt.net/FloatConverter/IEEE754.html
*
* get buffer index r and exp10
* set buffer in memory
* convert buffer[r] from Float to I32
* if params used 
* 	return result of convert on 32 bits
* else
*	return 0x00 (conv pas ok) or 0x01 (conv ok)
*
* example VMExecuteCmd:
* cmd: 															   |r        |exp10    |buffer
*		0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0xff 0xff 0x00 0x00 0x80 0xbf
* rsp: 	0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0xf6 0xff 0xff 0xff
*/

#include "SMK900.evi"

#define SENSORCODE 0x01

function exec_aircmd(){
	local rxLen;
	local useParams;
	local idx,exp;
	local i;
	local result;

	rxLen=GetAirBuf(0, 0, 20);
	
	if(rxLen>=9){ // 1 byte for paketID + 8 bytes of payload (4 bytes for index + exp10 and minimum 4 bytes for buffer)
		useParams=true;
		idx=GetBuffer_16(1);
		exp=GetBuffer_16(3);
		for(i=5;i<rxLen;i++){
			SetBuffer(i-5,GetBuffer_S8(i),1);
		}
	}else{
		useParams=false;
		idx=0;
		exp=-1;
		
		SetBuffer_16(0,0x0000);
		SetBuffer_16(2,0xbf80);
	
	}
	
	ConvertFloatToI32(idx,exp);

	if(useParams){
		SetBuffer_16(0,GetBuffer_16(idx));
		SetBuffer_16(2,GetBuffer_16(idx+2));
		Send(4);
	}else{
		if(GetBuffer_16(idx+2)==0xffff&&GetBuffer_16(idx)==0xfff6){
			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: 63
Go to Top