diff --git a/src/Config.h b/src/Config.h index 40485d76042a666d3dbb51d3d1965bb224c1817a..8a6af35af61ac53dc3711bc107bb1477d2bfb0a7 100644 --- a/src/Config.h +++ b/src/Config.h @@ -3,28 +3,30 @@ @author anian buehler @ letsgoING **************************************************************************/ -// APPLICATION +// NETWORK #define DN_MSG_PRELIMITER '<' #define DN_MSG_DELIMITER '>' #define DN_MSG_SEPARATOR '|' -#define DN_NETWORK_ADDRESS_BROADCAST 0 - -#define DN_APPLICATION_PUBSUB 1 -#define DN_APPLICATION_PEERTOPEER 2 - // NEW FRAME -// -// < APP ADD-R SERV TOPIC1-n | DATA1-n > /PSN +// IMMER BEIDE ADDRESSEN!!!! +// < APP ADD-R ADD_S SERV TOPIC1-n | DATA1-n > /PSN // < APP ADD-R ADD-S APP DATA1-n > /P2P // Address 1 byte 0-F // Applications 0-9 -> 1 PSN / 2 P2P / tbd -#define DN_APPLICATION_LEN_OVERHEAD 6 +#define DNN_LEN_OVERHEAD 6 + +#define DNN_POS_APPL 1 +#define DNN_POS_ADD_REC 2 +#define DNN_POS_ADD_SND 3 +#define DNN_POS_PS_SERVIS 4 + +#define DNN_ADDRESS_BROADCAST '0' -#define DN_APPLICATION_POS_APPL 1 -#define DN_APPLICATION_POS_ADD_REC 2 -#define DN_APPLICATION_POS_ADD_SND 3 -#define DN_APPLICATION_POS_PS_SERV 3 +// APPLICATIONS +#define DNN_APP_NONE 0 +#define DNN_APP_PUBSUB 1 +#define DNN_APP_PEERTOPEER 2 // PUBSUB APPLICATION //************************/ diff --git a/src/DidacticNet.h b/src/DidacticNet.h index 72b05a0c29290d2db0f4f57a0bcc23590d4cf71b..277f7f1b5ce65861afdf96fe998476d0947458fc 100644 --- a/src/DidacticNet.h +++ b/src/DidacticNet.h @@ -13,7 +13,7 @@ // NEW FRAME // -// < APP ADD-R SERV TOPIC1-n | DATA1-n > /PSN +// < APP ADD-R ADD-S SERV TOPIC1-n | DATA1-n > /PSN // < APP ADD-R ADD-S APP DATA1-n > /P2P // Address 1 byte 0-F // Applications 0-9 -> 1 PSN / 2 P2P / tbd diff --git a/src/DidacticNetNetwork.cpp b/src/DidacticNetNetwork.cpp index 90dcfcdbaab514ee7fb9639219d9292576aa00f6..e4ca38dcda99079392cea2a738b0a51990c62a1f 100644 --- a/src/DidacticNetNetwork.cpp +++ b/src/DidacticNetNetwork.cpp @@ -7,7 +7,7 @@ void DidacticNetNetwork::handleRawData(char *_rawData) { - if ((_rawData[DN_APPLICATION_POS_ADD_REC] == _networkAddress || _rawData[DN_APPLICATION_POS_ADD_REC] == DN_NETWORK_ADDRESS_BROADCAST) && _rawData[DN_APPLICATION_POS_APPL] == _networkApplication) + if ((_rawData[DNN_POS_ADD_REC] == _networkAddress || _rawData[DNN_POS_ADD_REC] == DNN_ADDRESS_BROADCAST) && _rawData[DNN_POS_APPL] == _networkApplication) { handleData(_rawData); } @@ -17,10 +17,20 @@ void DidacticNetNetwork::setNetworkAddress(char networkAddress) { _networkAddress = networkAddress; } + +void DidacticNetNetwork::setNetworkAddress(int networkAddress) +{ + char networkAddressBuffer; + itoa(networkAddress, networkAddressBuffer, 10); + + setNetworkAddress(networkAddressBuffer); +} + char DidacticNetNetwork::getNetworkAddress() { return _networkAddress; } + void DidacticNetNetwork::setNetworkApplication(int networkApplication) { _networkApplication = networkApplication; @@ -33,11 +43,18 @@ int DidacticNetNetwork::getNetworkApplication() bool DidacticNetNetwork::setTelegram(char *data, char addressReceiver) { - _sendBufferMessage[0] = DN_MSG_PRELIMITER; - _sendBufferMessage[DN_APPLICATION_POS_APPL] = getNetworkApplication(); - _sendBufferMessage[DN_APPLICATION_POS_ADD_REC] = addressReceiver; - strcpy(&_sendBufferMessage[DN_APPLICATION_POS_ADD_REC + 1], data); - _sendBufferMessage[DN_APPLICATION_POS_ADD_REC + 1 + strlen(data)] = DN_MSG_DELIMITER; + if (strlen(data) + DNN_LEN_OVERHEAD <= DNT_MAX_LEN_TELEGRAM) + { + _sendBufferMessage[0] = DN_MSG_PRELIMITER; + _sendBufferMessage[DNN_POS_APPL] = _networkApplication; + _sendBufferMessage[DNN_POS_ADD_REC] = addressReceiver; + _sendBufferMessage[DNN_POS_ADD_SND] = _networkAddress; + strcpy(&_sendBufferMessage[DNN_POS_ADD_SND + 1], data); + _sendBufferMessage[DNN_POS_ADD_SND + 1 + strlen(data)] = DN_MSG_DELIMITER; + + _dataToSend = true; + return true; + } - _dataToSend = true; + return false; } diff --git a/src/DidacticNetNetwork.h b/src/DidacticNetNetwork.h index b668b3aeb0e8ccb30204aa81525aeee906a4d36f..5ef0f36b08c52eb7cdc41796a57368d519751127 100644 --- a/src/DidacticNetNetwork.h +++ b/src/DidacticNetNetwork.h @@ -16,8 +16,8 @@ class DidacticNetNetwork : public DidacticNetTransmit { protected: - char _networkAddress = '0'; - int _networkApplication = 0; + char _networkAddress = DNN_ADDRESS_BROADCAST; // ADDR in HEX 0-F + int _networkApplication = DNN_APP_NONE; void handleRawData(char *); void setNetworkApplication(int); @@ -26,6 +26,7 @@ protected: public: void setNetworkAddress(char); + void setNetworkAddress(int); char getNetworkAddress(); int getNetworkApplication(); diff --git a/src/DidacticNetPSN.cpp b/src/DidacticNetPSN.cpp index ffea782ca75bfbba69636806f51f75e5d649e2a2..63140104be2d11206cb9b95897a7546d407e4be0 100644 --- a/src/DidacticNetPSN.cpp +++ b/src/DidacticNetPSN.cpp @@ -10,6 +10,12 @@ //************************************************************************** // CLIENT //************************************************************************** +DidacticNetPSNClient::DidacticNetPSNClient() +{ + _intervalTime = PS_INTERVAL_CLIENT; + setNetworkApplication(DNN_APP_PUBSUB); +} + DidacticNetPSNClient::~DidacticNetPSNClient() {} // NEW easy interface for non advanced users @@ -100,11 +106,6 @@ int DidacticNetPSNClient::readPayloadParseInt() } // ########################################## -DidacticNetPSNClient::DidacticNetPSNClient() -{ - _intervalTime = PS_INTERVAL_CLIENT; -} - int DidacticNetPSNClient::publish(char *topic, char *payload) { return publish(topic, strlen(topic), payload, strlen(payload)); @@ -138,6 +139,11 @@ int DidacticNetPSNClient::publish(char *topic, int topicLength, char *payload, i publishBuffer[1 + topicLength + 1 + i] = payload[i]; } + // DEBUG + Serial.print("DBG: publish: "); + Serial.println(publishBuffer); + //! DEBUG + setTelegram(publishBuffer, _brokerAddress); return error; @@ -229,6 +235,12 @@ int DidacticNetPSNClient::subscribe(char *topic, int topicLength) subscribeBuffer[1 + topicLength + 1] = '\0'; } + // DEBUG + Serial.print("DBG: subscribe: "); + Serial.println(subscribeBuffer); + Serial.print("DBG: subscribe: "); + //! DEBUG + setTelegram(subscribeBuffer, _brokerAddress); while (_dataToSend) @@ -339,6 +351,7 @@ int DidacticNetPSNClient::getMaxNrTopics() DidacticNetPSNBroker::DidacticNetPSNBroker() { _intervalTime = PS_INTERVAL_BROKER; + setNetworkApplication(DNN_APP_PUBSUB); } DidacticNetPSNBroker::~DidacticNetPSNBroker() {} @@ -402,17 +415,16 @@ bool DidacticNetPSNBroker::handleData(char *bufferedMessage) // change to handle bool DidacticNetPSNBroker::update(char *topic, int topicLength, char *data, int dataLength) { - _sendBufferMessage[0] = DN_MSG_PRELIMITER; - _sendBufferMessage[1] = PS_MSG_UPDATE; - _sendBufferMessage[2 + topicLength] = DN_MSG_SEPARATOR; - _sendBufferMessage[2 + topicLength + 1 + dataLength] = DN_MSG_DELIMITER; - _sendBufferMessage[2 + topicLength + 1 + dataLength + 1] = '\0'; + char updateBuffer[DNT_MAX_LEN_TELEGRAM] = {0}; + updateBuffer[0] = PS_MSG_UPDATE; + updateBuffer[1 + topicLength] = DN_MSG_SEPARATOR; + updateBuffer[1 + topicLength + 1 + dataLength] = '\0'; if (topicLength <= PS_MAX_LEN_TOPICS) { for (int i = 0; i < topicLength; i++) { - _sendBufferMessage[2 + i] = topic[i]; + _sendBufferMessage[1 + i] = topic[i]; } } else @@ -424,7 +436,7 @@ bool DidacticNetPSNBroker::update(char *topic, int topicLength, char *data, int { for (int i = 0; i < dataLength; i++) { - _sendBufferMessage[2 + topicLength + 1 + i] = data[i]; + _sendBufferMessage[1 + topicLength + 1 + i] = data[i]; } } else @@ -432,6 +444,8 @@ bool DidacticNetPSNBroker::update(char *topic, int topicLength, char *data, int _dataToSend = false; return false; } + + setTelegram(updateBuffer, DNN_ADDRESS_BROADCAST); // Broadcast on update _dataToSend = true; return true; }