There was a problem with your SQL connection - Please contact the administrator
Prototype
Math1Var_F32 (r, funcId)
Description
Math on a float variable.
r = operation(r);
Return
Nothing
Code Example
The following code example uses the Math1Var_F32 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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | /* Example Code * Math1Var_F32 * * get buffer indexes r and funcId * set buffer in memory * operate * if params used * return result of funcId on 32 bits * else * return 0x00 (operation not ok) or 0x01 (operation ok) on 8 bits * * example VMExecuteCmd: * cmd: |r |funcId|buffer * 0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0x04 0x00 0x00 0x00 0x3f * rsp: 0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x00 0x00 0x80 0xbf */ #include "SMK900.evi" #define SENSORCODE 0x01 function exec_aircmd(){ local rxLen; local useParams; local r,funcId,val0,val1; local i; local result; rxLen=GetAirBuf(0, 0, 20); if (rxLen>=8){ // 1 byte for paketID + 7 bytes of payload (3 bytes for params and 4 bytes for buffer) useParams= true ; r=GetBuffer_16(1); funcId=GetBuffer_U8(3); for (i=4;i<rxLen;i++){ SetBuffer(i-4,GetBuffer_S8(i),1); } } else { useParams= false ; r=0; funcId=0; // inv val0=0x0000; // 0.5 val1=0x3f00; //SetBuffer_16(0,valTest&0xFFFF); //SetBuffer_16(2,(valTest>>16)&0xFFFF); SetBuffer_16(0,val0); SetBuffer_16(2,val1); } Math1Var_F32(r,funcId); if (useParams){ SetBuffer_16(0,GetBuffer_16(r)); SetBuffer_16(2,GetBuffer_16(r+2)); Send(4); } else { result = 0; if (GetBuffer_16(2)==0xbF00&&GetBuffer_16(0)==0x0000){ //inv(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=1; Math1Var_F32(r,funcId); // sqrt if (GetBuffer_16(2)==0x3F35&&GetBuffer_16(0)==0x04F3){ //sqrt(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=2; Math1Var_F32(r,funcId); // sqrtrount if (GetBuffer_16(2)==0x3F35&&GetBuffer_16(0)==0x04F3){ //sqrtrount(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=3; Math1Var_F32(r,funcId); // ln if (GetBuffer_16(2)==0xBF31&&GetBuffer_16(0)==0x7218){ //ln(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=4; Math1Var_F32(r,funcId); // log2 if (GetBuffer_16(2)==0xBF80&&GetBuffer_16(0)==0x0000){ //log2(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=5; Math1Var_F32(r,funcId); // log10 if (GetBuffer_16(2)==0xBE9A&&GetBuffer_16(0)==0x209B){ //log10(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=6; Math1Var_F32(r,funcId); // exp if (GetBuffer_16(2)==0x3FD3&&GetBuffer_16(0)==0x094C){ //exp(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=7; Math1Var_F32(r,funcId); // exp2 if (GetBuffer_16(2)==0x3FB5&&GetBuffer_16(0)==0x04F3){ //exp2(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=8; Math1Var_F32(r,funcId); // exp10 if (GetBuffer_16(2)==0x404A&&GetBuffer_16(0)==0x62C2){ //exp10(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=9; Math1Var_F32(r,funcId); // sin if (GetBuffer_16(2)==0x3EF5&&GetBuffer_16(0)==0x7745){ //sin(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=10; Math1Var_F32(r,funcId); // cos if (GetBuffer_16(2)==0x3F60&&GetBuffer_16(0)==0xA941){ //cos(0.5) SetBuffer_16(0,val0); SetBuffer_16(2,val1); funcId=11; Math1Var_F32(r,funcId); // tan if (GetBuffer_16(2)==0x3F0B&&GetBuffer_16(0)==0xDA7B){ //tan(0.5) result = 1; SetBuffer(0,result,1); Send(1); } } } } } } } } } } } } if (result==0){ SetBuffer(0,result,1); SetBuffer(1,funcId,1); Send(2); } } } function main() { local execType; execType = GetExecType(); if (execType==MESHEXECTYPE_AIRCMD_bm){ exec_aircmd(); } } |