Prototype
AddBuffer_32 (r1, r2)
Description
Add the values of two int32 stored in the buffer.
buffer[r1] += buffer[r2];
Return
Nothing
Code Example
The following code example uses the AddBuffer_32 function to add the value of two int32 stored in a buffer at indexes r1 and r2.
The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Test Code
* AddBuffer_32
*
* get buffer indexes r1 and r2
* set buffer in memory
* add buffer[r2] to buffer[r1]
* if params used
* return result of add on 32 bits
* else
* return 0x00 (add not ok) or 0x01 (add ok) on 8 bits
*
* example VMExecuteCmd:
* cmd: |r1 |r2 |buffer
* 0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0x01 0x00 0x01 0x01 0x02 0x02 0x03 0x03 0x04 0x04 0x05
* rsp: 0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x02 0x03 0x04 0x05
*/
#include "SMK900.evi"
#define SENSORCODE 0x01
function exec_aircmd(){
local rxLen;
local useParams;
local idx1,idx2;
local i;
local result;
rxLen=GetAirBuf(0, 0, 20);
if(rxLen>=9){ // 1 byte for paketID + 8 bytes of payload (4 bytes for buffer indexes and minimum 4 bytes for buffer)
useParams=true;
idx1=GetBuffer_16(1);
idx2=GetBuffer_16(3);
for(i=5;i<rxLen;i++){
SetBuffer(i-5,GetBuffer_S8(i),1);
}
}else{
useParams=false;
idx1=0;
idx2=4;
SetBuffer_16(0,0x5678);
SetBuffer_16(2,0x1234);
SetBuffer_16(4,0x4567);
SetBuffer_16(6,0x0123);
}
AddBuffer_32(idx1,idx2);
if(useParams){
SetBuffer_16(0,GetBuffer_16(idx1));
SetBuffer_16(2,GetBuffer_16(idx1+2));
Send(4);
}else{
if(GetBuffer_16(idx1+2)==0x1357&&GetBuffer_16(idx1)==0x9bdf){
result = 1;
}else{
result = 0;
}
SetBuffer(0,result,1);
Send(1);
}
}
function main()
{
local execType;
execType = GetExecType();
if(execType==MESHEXECTYPE_AIRCMD_bm){
exec_aircmd();
}
}