SubBuffer_32

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

Prototype

SubBuffer_32 (r1, r2)

Description

Subtract the values of two int32 stored in the buffer.

buffer[r1] -= buffer[r2];

Return
Nothing

Code Example

The following code example uses the SubBuffer_32 function.

The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* SubBuffer_32
*
* get buffer indexes r1 and r2
* set buffer in memory
* sub buffer[r2] to buffer[r1]
* if params used 
* 	return result of sub 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 0x00 0xff 0xff 0xfe
*/


#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);
	}
	
	SubBuffer_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)==0x1111&&GetBuffer_16(idx1)==0x1111){
			result = 1;
		}else{
			result = 0;
		}
		SetBuffer(0,result,1);
		Send(5);	
	}
}

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: 52
Go to Top