Lookup_I16

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

Prototype

Lookup_I16 (rStart, rEnd, index)

Description

Perform a lookup in a table of int16. The first element of the table is located at rStart, while the last is located at rEnd inclusively.

Return
The result of the lookup

Code Example

The following code example uses the Lookup_I16 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* Lookup_I16
*
* get buffer indexes r1, r2 and idx
* set buffer in memory
* lookup value at idx
* if params used 
* 	return result of lookup on 16 bits
* else
*	return 0x00 (lookup pas ok) or 0x01 (lookup ok)
*
* example VMExecuteCmd:
* cmd: 															   |r1       |r2       |idx      |buffer
*		0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x02 0x00 0x08 0x00 0x02 0x00 0x99 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
* rsp: 	0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x33 0x22
*/

#include "SMK900.evi"

#define SENSORCODE 0x01

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

	rxLen=GetAirBuf(0, 0, 20);
	
	if(rxLen>=11){ // 1 byte for paketID + 10 bytes of payload (6 bytes for indexes and minimum 4 bytes for buffer)
		useParams=true;
		r1=GetBuffer_16(1);
		r2=GetBuffer_16(3);
		idx=GetBuffer_16(5);
		for(i=7;i<rxLen;i++){
			SetBuffer(i-7,GetBuffer_S8(i),1);
		}
	}else{
		useParams=false;
		r1=0;
		r2=2;
		idx=1;
		
		SetBuffer_16(0,0x5566);
		SetBuffer_16(2,0x3344);
		SetBuffer_16(4,0x1122);
	}
	
	result = Lookup_I16(r1,r2,idx);

	if(useParams){
		SetBuffer_16(0,result);
		Send(2);
	}else{
		if(result==0x3344){
			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: 78
Go to Top