Prototype
ShiftLeftBuffer_I64 (r, shLeft)
Description
r «= arithShLeft (assumes int64); note that shLeft CAN be <0 in which case it shifts r right
buffer[r] <<= r2;
Return
Nothing
Code Example
The following code example uses the ShiftLeftBuffer_I64 function.
The SMK900.evi file used for this example can be downloaded at the bottom of this page.
/* Example Code
* ShiftLeftBuffer_I64
*
* get buffer index r and shLeft
* set buffer in memory
* shiftLeft buffer[r1] by shLeft
* if params used
* return result of shiftLeft on 64 bits
* else
* return 0x00 (shift not ok) or 0x01 (shift ok) on 8 bits
*
* example VMExecuteCmd:
* cmd: |r |shLeft |buffer
* 0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0x04 0x00 0x12 0x34 0x56 0x78 0x12 0x34 0x56 0x78
* rsp: 0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x20 0x41 0x63 0x85
* cmd: |r |shLeft |buffer
* 0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0xfc 0xff 0x21 0x43 0x65 0x87 0x21 0x43 0x65 0x87
* rsp: 0xfb 0x0c 0x00 0x2d 0x00 0xe1 0x1e 0x32 0x54 0x76 0x18 0x32 0x54 0x76 0xf8
*/
#include "SMK900.evi"
#define SENSORCODE 0x01
function exec_aircmd(){
local rxLen;
local useParams;
local idx,shift;
local i;
local result;
rxLen=GetAirBuf(0, 0, 20);
if(rxLen>=13){ // 1 byte for paketID + 12 bytes of payload (4 bytes for buffer indexes and minimum 8 bytes for buffer)
useParams=true;
idx=GetBuffer_16(1);
shift=GetBuffer_16(3);
for(i=5;i<rxLen;i++){
SetBuffer(i-5,GetBuffer_S8(i),1);
}
}else{
useParams=false;
idx=0;
shift=-4;
SetBuffer_16(0,0x4321);
SetBuffer_16(2,0x8765);
SetBuffer_16(4,0x4321);
SetBuffer_16(6,0x8765);
}
ShiftLeftBuffer_I64(idx,shift);
if(useParams){
SetBuffer_16(0,GetBuffer_16(idx));
SetBuffer_16(2,GetBuffer_16(idx+2));
SetBuffer_16(4,GetBuffer_16(idx+4));
SetBuffer_16(6,GetBuffer_16(idx+6));
Send(8);
}else{
if(GetBuffer_16(idx+6)==0xf876&&GetBuffer_16(idx+4)==0x5432&&
GetBuffer_16(idx+2)==0x1876&&GetBuffer_16(idx)==0x5432){
result = 1;
}else{
result = 0;
}
SetBuffer(0,result,1);
Send(1);
}
}
function main()
{
local execType;
execType = GetExecType();
if(execType==MESHEXECTYPE_AIRCMD_bm){
exec_aircmd();
}
}