LinInterpol_I16

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

Prototype

LinInterpol_I16(rStart, rEnd, val)

Description

Linear interpolation. The array of points (4 bytes for each point, two int16, x and y) is determined by the positions rStart and rEnd (inclusive).

The x coords must be monotonically increasing and x1. . . xn must never be the same values.

val is the input value.

Return
Interpolation result.

Code Example

The following code example uses the LinInterpol_I16 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* LinInterpol_I16
*
* get buffer indexes r1, r2 and idx
* set buffer in memory
* interpol value at idx
* if params used 
* 	return result of interpol 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] 0x00 0x00 0x04 0x00 0x02 0x00 0x01 0x00 0xFF 0xFF 0x05 0x00 0xFB 0xFF
* rsp: 	0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0xfe 0xff
*/

#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>=15){ // 1 byte for paketID + 14 bytes of payload (6 bytes for indexes and minimum 8 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=4;
		idx=2;
		
		SetBuffer_16(0,0x0001);
		SetBuffer_16(2,0xFFFF);
		SetBuffer_16(4,0x0005);
		SetBuffer_16(6,0xFFFB);
	}
	
	result = LinInterpol_I16(r1,r2,idx);

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