From 79f47875d2bd4212ca4388539930a357790ea393 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Fri, 15 Jul 2022 11:15:10 +0200
Subject: [PATCH] added getSubscribedTopics + examples

---
 examples/sPSN_PlotTopics/sPSN_PlotTopics.ino | 61 ++++++++++++++++++++
 keywords.txt                                 |  5 +-
 src/DidacticNet.cpp                          | 10 +++-
 src/DidacticNet.h                            |  4 ++
 4 files changed, 78 insertions(+), 2 deletions(-)
 create mode 100644 examples/sPSN_PlotTopics/sPSN_PlotTopics.ino

diff --git a/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino b/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino
new file mode 100644
index 0000000..1a6f395
--- /dev/null
+++ b/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino
@@ -0,0 +1,61 @@
+/**
+ *file:  sPSN_PlotTopics
+ *author:  letsgoING -> info@letsgoing.de
+ *
+ *description:
+ * Dieses Programm abboniert Beispiel-Topics und gibt diese auf dem SerialMonitor aus.
+ *
+ * parameter:
+ *  MAX_LEN_PAYLOAD = 20 Zeichen (didacticNet.h)
+ *  MAX_LEN_TOPICS = 10 Zeichen (didacticNet.h)
+ * 
+ *date:  15.07.2022
+ */
+#include <Arduino.h>
+#include "SoftwareSerial.h"
+#include "DidacticNet.h"
+
+#define SERIAL_BAUD 2400 //lege Geschwindigkeit für serielle Schnittstellen fest
+
+SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
+
+DidacticPSNetClient psnClient;  //Erzeuge PubSub-Client-Instanz
+
+
+//Callback-Funktion - in diesem Beispiel nicht verwendet
+void newData(char* topic, char* payload) {  
+}
+
+
+void setup() {
+  
+  Serial.begin(SERIAL_BAUD);    //Starte Serielle Schnittstelle (zum PC)
+  sSerial.begin(SERIAL_BAUD);   //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
+
+  psnClient.begin(sSerial, newData); //Starte PubSub Client an SoftwareSerial Schnittstelle
+
+  //Beliebige Beispiel-Topics abbonieren -> zusätzliche Topics hinzufügen
+  psnClient.subscribe("temp1");
+  psnClient.subscribe("temp2");
+  psnClient.subscribe("light1");
+  psnClient.subscribe("poti");
+
+  //lese Anzahl der abbonierten Topics aus
+  int countTopics =  psnClient.getMaxNrTopics();
+  Serial.print("Anzahl Topics: ");
+  Serial.println(countTopics);
+
+  //Gebe alle Topics nacheinander aus
+  for(int i = 0; i < countTopics; i++){
+    char topic[MAX_LEN_TOPICS];
+    psnClient.getSubscribedTopic(topic, i);
+    
+    Serial.print("Topic ");
+    Serial.print(i);
+    Serial.print(": ");
+    Serial.println(topic);
+  }
+}
+
+void loop() {
+}
diff --git a/keywords.txt b/keywords.txt
index 542b41d..c9c8452 100644
--- a/keywords.txt
+++ b/keywords.txt
@@ -27,6 +27,9 @@ publishOnChange	KEYWORD2
 subscribe	KEYWORD2
 unsubscribe	KEYWORD2
 
+getMaxNrTopic	KEYWORD2
+getSubscribedTopic	KEYWORD2
+
 timeElapsed	KEYWORD2
 readSerialData	KEYWORD2
 
@@ -53,4 +56,4 @@ DN_ASCII_NL	LITERAL1
 DN_PUBLISH_SUCCESSULL	LITERAL1
 DN_ERROR_NO_ERROR	LITERAL1
 DN_ERROR_TOPIC_LEN	LITERAL1
-DN_ERROR_PAYLOAD_LEN	LITERAL1
\ No newline at end of file
+DN_ERROR_PAYLOAD_LEN	LITERAL1
diff --git a/src/DidacticNet.cpp b/src/DidacticNet.cpp
index 380c12a..a61796c 100644
--- a/src/DidacticNet.cpp
+++ b/src/DidacticNet.cpp
@@ -268,7 +268,6 @@ int DidacticPSNetClient::subscribe(char* topic, int topicLength){
 	return error;
 }
 
-
 bool DidacticPSNetClient::unsubscribe(char* topic){
   return unsubscribe(topic, strlen(topic));
 }
@@ -331,6 +330,15 @@ int DidacticPSNetClient::getFreeTopicNr() {
   return -1;
 }
 
+int DidacticPSNetClient::getSubscribedTopic(char* topic, int number){
+  strcpy(topic, _topic[number]);
+  return 1;
+}
+
+int DidacticPSNetClient::getMaxNrTopics(){
+  return getFreeTopicNr();
+}
+
 
 //**************************************************************************
 //Broker
diff --git a/src/DidacticNet.h b/src/DidacticNet.h
index 498e953..fe9321d 100644
--- a/src/DidacticNet.h
+++ b/src/DidacticNet.h
@@ -173,6 +173,10 @@ class DidacticPSNetClient : public  DidacticPSNet
 	DidacticPSNetClient();
 	~DidacticPSNetClient();
 
+	int getMaxNrTopics();
+	int getSubscribedTopic(char*, int);
+	
+
 	int publish(char*, char*);
 	int publish(char*, int, char*, int);
 	int publish(char*, int);
-- 
GitLab