Skip to content
Snippets Groups Projects
Verified Commit 84a4fe6d authored by Anian Bühler's avatar Anian Bühler
Browse files

handleNetwork return true/false added

parent 61e4487a
Branches
No related tags found
No related merge requests found
...@@ -53,6 +53,12 @@ bool DidacticPSNet::handleNetwork(){ ...@@ -53,6 +53,12 @@ bool DidacticPSNet::handleNetwork(){
while(micros() < delayStartTime + CSMA_CHECK_DELAY_US); while(micros() < delayStartTime + CSMA_CHECK_DELAY_US);
//delayMicroseconds(CSMA_CHECK_DELAY_US); //removed: blocking SoftSerial-interrupts //delayMicroseconds(CSMA_CHECK_DELAY_US); //removed: blocking SoftSerial-interrupts
if(!checkData()){ if(!checkData()){
sendData();
_dataToSend = false;
//_waitingTime = millis()+ random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
_waitingTimeSend = millis() + _intervalTime;//random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
return true;
/*
if(!sendData()){ if(!sendData()){
return false; return false;
} }
...@@ -60,18 +66,19 @@ bool DidacticPSNet::handleNetwork(){ ...@@ -60,18 +66,19 @@ bool DidacticPSNet::handleNetwork(){
_dataToSend = false; _dataToSend = false;
//_waitingTime = millis()+ random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS); //_waitingTime = millis()+ random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
_waitingTimeSend = millis() + _intervalTime;//random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS); _waitingTimeSend = millis() + _intervalTime;//random(CSMA_MID_DELAY_MS, CSMA_MAX_DELAY_MS);
} return true;
}*/
} }
} }
//} //}
return true; return false;
} }
bool DidacticPSNet::isDataToSend(){ bool DidacticPSNet::isDataToSend(){
return _dataToSend; return _dataToSend;
} }
bool DidacticPSNet::sendData(){ void DidacticPSNet::sendData(){
int counter = 0; int counter = 0;
bool messageSent = false; bool messageSent = false;
while(!messageSent){ while(!messageSent){
...@@ -87,7 +94,7 @@ bool DidacticPSNet::sendData(){ ...@@ -87,7 +94,7 @@ bool DidacticPSNet::sendData(){
_port->write(_sendBufferMessage[counter]); _port->write(_sendBufferMessage[counter]);
counter++; counter++;
} }
return true; return;
} }
int DidacticPSNet::extractData(int startCounter, int maxLength, char* buffer, char limiter){ int DidacticPSNet::extractData(int startCounter, int maxLength, char* buffer, char limiter){
...@@ -240,7 +247,7 @@ int DidacticPSNetClient::subscribe(char* topic, int topicLength){ ...@@ -240,7 +247,7 @@ int DidacticPSNetClient::subscribe(char* topic, int topicLength){
_sendBufferMessage[1] = MSG_SUBSCRIBE; _sendBufferMessage[1] = MSG_SUBSCRIBE;
_sendBufferMessage[2+topicLength] = MSG_DELIMITER; _sendBufferMessage[2+topicLength] = MSG_DELIMITER;
int topicNumber = getTopicNr(topic); int topicNumber = getTopicOrWildcardNr(topic);
if(topicNumber < 0){ if(topicNumber < 0){
topicNumber = getFreeTopicNr(); topicNumber = getFreeTopicNr();
...@@ -296,7 +303,7 @@ bool DidacticPSNetClient::handleData(){ ...@@ -296,7 +303,7 @@ bool DidacticPSNetClient::handleData(){
int payloadLength = 0; int payloadLength = 0;
topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_SEPARATOR); topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_SEPARATOR);
if(topicLength > 0){ if(topicLength > 0){
currentTopicNr = getTopicNr(_bufferTopic); currentTopicNr = getTopicOrWildcardNr(_bufferTopic);
payloadLength = extractData(topicLength+3, MAX_LEN_PAYLOAD, _bufferPayload, MSG_DELIMITER); payloadLength = extractData(topicLength+3, MAX_LEN_PAYLOAD, _bufferPayload, MSG_DELIMITER);
if( currentTopicNr >= 0){ if( currentTopicNr >= 0){
savePayload( _bufferPayload, currentTopicNr); savePayload( _bufferPayload, currentTopicNr);
...@@ -312,7 +319,7 @@ bool DidacticPSNetClient::handleData(){ ...@@ -312,7 +319,7 @@ bool DidacticPSNetClient::handleData(){
return true; return true;
} }
int DidacticPSNetClient::getTopicNr(char* topic){ int DidacticPSNetClient::getTopicOrWildcardNr(char* topic){
for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) { for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) {
if (strcmp(_topic[i], topic) == 0 || _topic[i][0] == MSG_TOPIC_MULTI) { //TODO: check ... or equal MSG_TOPIC_MULTI if (strcmp(_topic[i], topic) == 0 || _topic[i][0] == MSG_TOPIC_MULTI) { //TODO: check ... or equal MSG_TOPIC_MULTI
return i; return i;
...@@ -321,6 +328,15 @@ int DidacticPSNetClient::getTopicNr(char* topic){ ...@@ -321,6 +328,15 @@ int DidacticPSNetClient::getTopicNr(char* topic){
return -1; return -1;
} }
int DidacticPSNetClient::getTopicNr(char* topic){
for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) {
if (strcmp(_topic[i], topic) == 0 ) {
return i;
}
}
return -1;
}
int DidacticPSNetClient::getFreeTopicNr() { int DidacticPSNetClient::getFreeTopicNr() {
for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) { for (int i = 0; i < MAX_NR_TOPICS_CLIENT; i++) {
if (strcmp(_topic[i], "") == 0) { if (strcmp(_topic[i], "") == 0) {
...@@ -376,7 +392,7 @@ bool DidacticPSNetBroker::handleData(){ ...@@ -376,7 +392,7 @@ bool DidacticPSNetBroker::handleData(){
if(_readBufferMessage[1] == MSG_PUBLISH){ if(_readBufferMessage[1] == MSG_PUBLISH){
topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_SEPARATOR); topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_SEPARATOR);
if(topicLength > 0){ if(topicLength > 0){
currentTopicNr = getTopicNr(_bufferTopic); currentTopicNr = getTopicOrWildcardNr(_bufferTopic);
dataLength = extractData(topicLength+3, MAX_LEN_PAYLOAD, _bufferPayload, MSG_DELIMITER); dataLength = extractData(topicLength+3, MAX_LEN_PAYLOAD, _bufferPayload, MSG_DELIMITER);
if( currentTopicNr >= 0){ if( currentTopicNr >= 0){
writeDataToTopic(currentTopicNr, _bufferTopic, _bufferPayload); writeDataToTopic(currentTopicNr, _bufferTopic, _bufferPayload);
...@@ -387,7 +403,7 @@ bool DidacticPSNetBroker::handleData(){ ...@@ -387,7 +403,7 @@ bool DidacticPSNetBroker::handleData(){
else if(_readBufferMessage[1] == MSG_SUBSCRIBE){ else if(_readBufferMessage[1] == MSG_SUBSCRIBE){
topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_DELIMITER); topicLength = extractData(2, MAX_LEN_TOPICS, _bufferTopic, MSG_DELIMITER);
if(topicLength > 0){ if(topicLength > 0){
currentTopicNr = getTopicNr(_bufferTopic); currentTopicNr = getTopicOrWildcardNr(_bufferTopic);
if(currentTopicNr >= 0){ if(currentTopicNr >= 0){
update(_topic[currentTopicNr], strlen(_topic[currentTopicNr]), _data[currentTopicNr], strlen(_data[currentTopicNr])); update(_topic[currentTopicNr], strlen(_topic[currentTopicNr]), _data[currentTopicNr], strlen(_data[currentTopicNr]));
} }
...@@ -423,7 +439,7 @@ bool DidacticPSNetBroker::update(char* topic, int topicLength, char* data , int ...@@ -423,7 +439,7 @@ bool DidacticPSNetBroker::update(char* topic, int topicLength, char* data , int
return true; return true;
} }
int DidacticPSNetBroker::getTopicNr(char* topic){ int DidacticPSNetBroker::getTopicOrWildcardNr(char* topic){
for (int i = 0; i < MAX_NR_TOPICS_BROKER; i++) { for (int i = 0; i < MAX_NR_TOPICS_BROKER; i++) {
if (strcmp(_topic[i], topic) == 0) { if (strcmp(_topic[i], topic) == 0) {
return i; return i;
......
...@@ -129,10 +129,10 @@ class DidacticPSNet ...@@ -129,10 +129,10 @@ class DidacticPSNet
int checkData(); int checkData();
bool recieveData(); bool recieveData();
bool sendData(); void sendData();
int extractData(int, int, char*, char); int extractData(int, int, char*, char);
void writeDataToTopic(char*, char*); void writeDataToTopic(char*, char*);
virtual int getTopicNr(char*)=0; virtual int getTopicOrWildcardNr(char*)=0;
virtual int getFreeTopicNr()=0; virtual int getFreeTopicNr()=0;
virtual bool getMessageFilter(char)=0; virtual bool getMessageFilter(char)=0;
virtual bool savePayload(char*, int)=0; virtual bool savePayload(char*, int)=0;
...@@ -164,6 +164,7 @@ class DidacticPSNetClient : public DidacticPSNet ...@@ -164,6 +164,7 @@ class DidacticPSNetClient : public DidacticPSNet
bool savePayload(char*, int); bool savePayload(char*, int);
bool getMessageFilter(char); bool getMessageFilter(char);
bool handleData(); bool handleData();
int getTopicOrWildcardNr(char*);
int getTopicNr(char*); int getTopicNr(char*);
int getFreeTopicNr(); int getFreeTopicNr();
...@@ -201,7 +202,7 @@ class DidacticPSNetBroker: public DidacticPSNet ...@@ -201,7 +202,7 @@ class DidacticPSNetBroker: public DidacticPSNet
bool getMessageFilter(char); bool getMessageFilter(char);
void writeDataToTopic(int, char*, char*); void writeDataToTopic(int, char*, char*);
bool handleData(); bool handleData();
int getTopicNr(char*); int getTopicOrWildcardNr(char*);
int getFreeTopicNr(); int getFreeTopicNr();
public: public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment