BugFix: Termination by ctl + C

Update: API mode is configurable

Signed-off-by: tomoaki <tomoaki@tomy-tech.com>
This commit is contained in:
tomoaki
2016-09-25 17:06:05 +09:00
parent 2537dd76dd
commit e3dd9fa01a
10 changed files with 60 additions and 38 deletions

View File

@@ -24,7 +24,6 @@
#include "SensorNetwork.h"
#include "MQTTSNGWProcess.h"
#include "Threading.h"
using namespace std;
using namespace MQTTSNGW;
@@ -111,17 +110,27 @@ int SensorNetwork::initialize(void)
{
char param[MQTTSNGW_PARAM_MAX];
uint16_t baudrate = 9600;
uint8_t apimode = 2;
if (theProcess->getParam("XBee Baudrate", param) == 0)
if (theProcess->getParam("ApiMode", param) == 0)
{
apimode = (uint8_t)atoi(param);
}
setApiMode(apimode);
_description = "API mode ";
sprintf(param, "%d", apimode);
_description += param;
if (theProcess->getParam("Baudrate", param) == 0)
{
baudrate = (uint16_t)atoi(param);
}
_description = "Baudrate ";
_description += ", Baudrate ";
sprintf(param ,"%d", baudrate);
_description += param;
theProcess->getParam("SerialDevice", param);
_description = "SerialDevice ";
_description += ", SerialDevice ";
_description += param;
return XBee::open(param, baudrate);
@@ -132,6 +141,11 @@ const char* SensorNetwork::getDescription(void)
return _description.c_str();
}
SensorNetAddress* SensorNetwork::getSenderAddress(void)
{
return &_clientAddr;
}
/*===========================================
Class XBee
============================================*/
@@ -140,6 +154,7 @@ XBee::XBee(){
_respCd = 0;
_dataLen = 0;
_frameId = 0;
_apiMode = 2;
}
XBee::~XBee(){
@@ -340,7 +355,7 @@ int XBee::send(const uint8_t* payload, uint8_t pLen, SensorNetAddress* addr){
void XBee::send(uint8_t c)
{
if(c == START_BYTE || c == ESCAPE || c == XON || c == XOFF){
if(_apiMode == 2 && (c == START_BYTE || c == ESCAPE || c == XON || c == XOFF)){
_serialPort->send(ESCAPE);
_serialPort->send(c ^ 0x20);
}else{
@@ -352,7 +367,7 @@ int XBee::recv(uint8_t* buf)
{
if (_serialPort->recv(buf) )
{
if ( *buf == ESCAPE)
if ( *buf == ESCAPE && _apiMode == 2 )
{
_serialPort->recv(buf);
*buf = 0x20 ^ *buf;
@@ -362,6 +377,11 @@ int XBee::recv(uint8_t* buf)
return -1;
}
void XBee::setApiMode(uint8_t mode)
{
_apiMode = mode;
}
/*=========================================
Class SerialPort
=========================================*/