Math2Var_I64

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

Prototype

Math2Var_I64 (r1, r2, funcId)

Description

Math on two int64 variables.

r1 = operation(r1, r2);

Return
Nothing

Code Example

The following code example uses the Math2Var_I64 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* Math2Var_I64
* Calculator for atan2: https://planetcalc.com/7954/
*
*
* get buffer indexes r1, r2 and funcId
* set buffer in memory
* operate 
* return 0x00 (operation not ok) or 0x01 (operation ok) on 8 bits
*/


#include "SMK900.evi"

#define SENSORCODE 0x01
	
function exec_aircmd(){
	local rxLen;
	local useParams;
	local r1,r2,funcId,val0,val1,val2,val3,val4,val5,val6,val7;
	local i;
	local result;

	rxLen=GetAirBuf(0, 0, 20);
	
	/*if(rxLen>=22){ // 1 byte for paketID + 21 bytes of payload (5 bytes for params and 16 bytes for buffer)
		useParams=true;
		r1=GetBuffer_16(1);
		r2=GetBuffer_16(3);
		funcId=GetBuffer_U8(5);
		for(i=6;i<rxLen;i++){
			SetBuffer(i-6,GetBuffer_S8(i),1);
		}
	}else{*/
		useParams=false;
		r1=0;
		r2=8;
		funcId=0; 		// add
		val0=0xFFFF; 	// -1
		val1=0xFFFF;
		val2=0xFFFF;
		val3=0xFFFF;
		val4=0x000A; 	// 10
		val5=0x0000;
		val6=0x0000;
		val7=0x0000;
		SetBuffer_16(0,val0);
		SetBuffer_16(2,val1);
		SetBuffer_16(4,val2);
		SetBuffer_16(6,val3);
		SetBuffer_16(8,val4);
		SetBuffer_16(10,val5);
		SetBuffer_16(12,val6);
		SetBuffer_16(14,val7);
	/*}*/
	
	Math2Var_I64(r1,r2,funcId);

	/*if(useParams){
		SetBuffer_16(0,GetBuffer_16(r1));
		SetBuffer_16(2,GetBuffer_16(r1+2));
		Send(4);	
	}else{*/
		result = 0;
		if(GetBuffer_16(6)==0x0000&&GetBuffer_16(4)==0x0000&&GetBuffer_16(2)==0x0000&&GetBuffer_16(0)==0x0009){ //add(-1,10)
			SetBuffer_16(0,val0);SetBuffer_16(2,val1);SetBuffer_16(4,val2);SetBuffer_16(6,val3);
			SetBuffer_16(8,val4);SetBuffer_16(10,val5);SetBuffer_16(12,val6);SetBuffer_16(14,val7);
			funcId=1;
			Math2Var_I64(0,8,funcId); 	// substract
			if(GetBuffer_16(6)==0xFFFF&&GetBuffer_16(4)==0xFFFF&&GetBuffer_16(2)==0xFFFF&&GetBuffer_16(0)==0xFFF5){ //substract(-1,10)
				SetBuffer_16(0,val0);SetBuffer_16(2,val1);SetBuffer_16(4,val2);SetBuffer_16(6,val3);
				SetBuffer_16(8,val4);SetBuffer_16(10,val5);SetBuffer_16(12,val6);SetBuffer_16(14,val7);
				funcId=2;
				Math2Var_I64(0,8,funcId); 	// multiply
				if(GetBuffer_16(6)==0xFFFF&&GetBuffer_16(4)==0xFFFF&&GetBuffer_16(2)==0xFFFF&&GetBuffer_16(0)==0xFFF6){ //multiply(-1,10)
					SetBuffer_16(0,0xFFEC);SetBuffer_16(2,0xFFFF);SetBuffer_16(4,0xFFFF);SetBuffer_16(6,0xFFFF);
					SetBuffer_16(8,val4);SetBuffer_16(10,val5);SetBuffer_16(12,val6);SetBuffer_16(14,val7);
					funcId=3;
					Math2Var_I64(0,8,funcId); 	// divide
					if(GetBuffer_16(6)==0xFFFF&&GetBuffer_16(4)==0xFFFF&&GetBuffer_16(2)==0xFFFF&&GetBuffer_16(0)==0xFFFE){ //divide(-20,10)
						SetBuffer_16(0,val4);SetBuffer_16(2,val5);SetBuffer_16(4,val6);SetBuffer_16(6,val7);
						SetBuffer_16(8,0xFFFD);SetBuffer_16(10,0xFFFF);SetBuffer_16(12,0xFFFF);SetBuffer_16(14,0xFFFF);
						funcId=4;
						Math2Var_I64(0,8,funcId); 	// modulo
						if(GetBuffer_16(6)==0x0000&&GetBuffer_16(4)==0x0000&&GetBuffer_16(2)==0x0000&&GetBuffer_16(0)==0x0001){ //modulo(10,-3)
							SetBuffer_16(0,val0);SetBuffer_16(2,val1);SetBuffer_16(4,val2);SetBuffer_16(6,val3);
							SetBuffer_16(8,0x0002);SetBuffer_16(10,0x0000);SetBuffer_16(12,0x0000);SetBuffer_16(14,0x0000);
							funcId=5;
							Math2Var_I64(0,8,funcId); 	// shiftleft
							if(GetBuffer_16(6)==0xFFFF&&GetBuffer_16(4)==0xFFFF&&GetBuffer_16(2)==0xFFFF&&GetBuffer_16(0)==0xFFFC){ //shiftleft(-1,2)
								SetBuffer_16(0,0xFFEC);SetBuffer_16(2,0xFFFF);SetBuffer_16(4,0xFFFF);SetBuffer_16(6,0xFFFF);
								SetBuffer_16(8,val4);SetBuffer_16(10,val5);SetBuffer_16(12,val6);SetBuffer_16(14,val7);
								funcId=6;
								Math2Var_I64(0,8,funcId); 	// atan2
								if(GetBuffer_16(6)==0xFFFF&&GetBuffer_16(4)==0xFFFF&&GetBuffer_16(2)==0xFFFF&&GetBuffer_16(0)==0xFFFF){ //atan2(-20,10)
									result = 1;
									/*
									SetBuffer(0,result,1);
									Send(1);
									*/
									SetBuffer(8,result,1);
									Send(9);
									
								}
							}
						}
					}
				}
			}
		/*}*/
		if(result==0){
			/*
			SetBuffer(0,result,1);
			SetBuffer(1,funcId,1);
			Send(2);
			*/
			SetBuffer(8,result,1);
			SetBuffer(9,funcId,1);
			Send(10);
			
		}
	}
}

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: 66
Go to Top