Prototype
InitFloat10_F32 (r, mant10, exp10)
Description
Write a float on a buffer location.
buffer[r] = mant10 * pow(10, exp10);
Return
Nothing
Code Example
The following code example uses the InitFloat10_F32 function.
The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* InitFloat10_F32
*
* get r, mant10, exp10
* set buffer in memory
* get buffer at r
* if params used
* return result buffer on 32 bits
* else
* return 0x00 (buffer pas ok) or 0x01 (buffer ok)
*
* example VMExecuteCmd:
* cmd: |r |mant10 |exp10
* 0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0xFB 0xFF 0xFF
* rsp: 0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x00 0x00 0x00 0xbf
*/
#include "SMK900.evi"
#define SENSORCODE 0x01
function exec_aircmd(){
local rxLen;
local useParams;
local r,mant10,exp10;
local i;
local result;
rxLen=GetAirBuf(0, 0, 20);
if(rxLen>=6){ // 1 byte for paketID + 5 bytes of payload (5 bytes for params)
useParams=true;
r=GetBuffer_16(1);
mant10=GetBuffer_16(3);
exp10=GetBuffer_S8(5);
/*for(i=4;i<rxLen;i++){
SetBuffer(i-4,GetBuffer_S8(i),1);
}*/
}else{
useParams=false;
r=0;
mant10=-5;
exp10=-1;
}
InitFloat10_F32(r,mant10,exp10);
if(useParams){
SetBuffer_16(0,GetBuffer_16(r));
SetBuffer_16(2,GetBuffer_16(r+2));
Send(4);
}else{
if(GetBuffer_16(2)==0xBF00&&GetBuffer_16(0)==0x0000){
result = 1;
}else{
result = 0;
}
SetBuffer(0,result,1);
Send(1);
}
}
function main()
{
local execType;
execType = GetExecType();
if(execType==MESHEXECTYPE_AIRCMD_bm){
exec_aircmd();
}
}