Select Git revision
main_server.py
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
DidacticNetPSN.h 2.89 KiB
/**************************************************************************
@file DidacticNet.h
@author anian buehler @ letsgoING
**************************************************************************/
#ifndef _DIDACTICNET_PSN_
#define _DIDACTICNET_PSN_
#include "Arduino.h"
#include "Config.h"
#include "DidacticNetTransmit.h"
#include "Detector.h"
class DidacticNetPSNClient : public DidacticNetTransmit
{
private:
EdgeDetector eDetector;
ChangeDetector cDetector;
PSNET_CALLBACK_SIGNATURE;
char _topic[PS_MAX_NR_TOPICS_CLIENT][PS_MAX_LEN_TOPICS + 1] = {{0}};
char _payload[PS_MAX_NR_TOPICS_CLIENT][PS_MAX_LEN_PAYLOAD + 1] = {{0}};
char _bufferTopic[PS_MAX_LEN_TOPICS + 1] = {0};
char _bufferPayload[PS_MAX_LEN_TOPICS + 1] = {0};
bool _clientMode = PS_CLIENT_MODE_ADVANCED;
bool _newMessageAvailable = false;
int _newMessageTopicNr = 0;
char _currentTopic[PS_MAX_LEN_TOPICS + 1] = {0};
char _currentPayload[PS_MAX_LEN_PAYLOAD + 1] = {0};
bool savePayload(char *, int);
bool getMessageFilter(char);
bool handleData();
int getTopicNr(char *);
int getFreeTopicNr();
int edgeDetected(bool);
bool valueChanged(int, int);
DidacticNetPSNClient &setCallback(PSNET_CALLBACK_SIGNATURE);
public:
DidacticNetPSNClient();
~DidacticNetPSNClient();
void begin(Stream &_port);
void begin(Stream &_port, PSNET_CALLBACK_SIGNATURE);
DidacticNetPSNClient setCallback();
bool available();
int readLatestTopicNr();
void readTopic(char *);
void readTopic(int, char *);
void readPayload(char *);
void readPayload(int, char *);
void readPayload(char *, char *);
bool readBooleanPayload();
int readIntegerPayload();
int getMaxNrTopics();
int getSubscribedTopic(char *, int);
int publish(char *, char *);
int publish(char *, int, char *, int);
int publish(char *, int);
int publish(char *, bool); int publishOnChange(char *, bool);
int publishOnChange(char *, int, int);
int subscribe(char *);
int subscribe(char *, int);
bool unsubscribe(char *);
bool unsubscribe(char *, int);
};
class DidacticNetPSNBroker : public DidacticNetTransmit
{
private:
Stream *_verbosePort;
char _topic[PS_MAX_NR_TOPICS_BROKER][PS_MAX_LEN_TOPICS + 1] = {{0}};
char _data[PS_MAX_NR_TOPICS_BROKER][PS_MAX_LEN_PAYLOAD + 1] = {{0}};
char _bufferTopic[PS_MAX_LEN_TOPICS + 1] = {0};
char _bufferPayload[PS_MAX_LEN_TOPICS + 1] = {0};
bool _isVerbose = false;
bool savePayload(char *, int);
bool getMessageFilter(char);
void writeDataToTopic(int, char *, char *);
bool handleData();
int getTopicNr(char *);
int getFreeTopicNr();
bool update(char *, int, char *, int);
bool printVerbose(char *);
public:
DidacticNetPSNBroker();
~DidacticNetPSNBroker();
void setVerbose(Stream &_port);
void setNoneVerbose();
};
#endif