String cmd = "get t1.
val"
sendCommand (cmd.c_str());
return recvRetNumber(number);
//function yang harus dipenuhi:
//recvRetNumber(uint32_t *number);
//sendCommand
/* example return: 70 30 30 33 FF FF FF in hex, p003\xFF\xFF\xFF in str
the first byte p (is a text) q(is a number) note: IN A NUMBER, there isn't any
difference between float and int,
example, float 7.0 will be translated to 70, but to be consider, it also depends on
comma point setting in hmi file
for multiple message we can cut the string using "ÿÿÿ" (or "\xFF\xFF\xFF"), then
see the first byte is it "q" or "p" to determine type
*/
void sendCommand(const char* cmd);
void sendCommand(const char* cmd)
{
while (nexSerial.available())
{
nexSerial.read();
}
nexSerial.print(cmd);
nexSerial.write(0xFF);
nexSerial.write(0xFF);
nexSerial.write(0xFF);
}
bool recvRetNumber(uint32_t *number, uint32_t timeout){
bool ret = false;
uint8_t temp[8] = {0};
if (!number){
goto __return;
}
nexSerial.setTimeout(timeout);
if (sizeof(temp) != nexSerial.readBytes((char *)temp, sizeof(temp))){
goto __return;
}
if (temp[0] == NEX_RET_NUMBER_HEAD
&& temp[5] == 0xFF
&& temp[6] == 0xFF
&& temp[7] == 0xFF
){
*number = ((uint32_t)temp[4] << 24) | ((uint32_t)temp[3] << 16) | (temp[2]
<< 8) | (temp[1]);
ret = true;
}
__return:
if (ret) {
dbSerialPrint("recvRetNumber :");
dbSerialPrintln(*number);
}
else{
dbSerialPrintln("recvRetNumber err");
}
return ret;
}