There was a problem with your SQL connection - Please contact the administrator
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | /* 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(); } } |