From e779036fe278eb8396ae095fc6a9cf04c85de3bd Mon Sep 17 00:00:00 2001
From: helge <helgewurst@web.de>
Date: 摹曛, 04 11月 2021 22:12:27 +0800
Subject: [PATCH] introduce weak connectivity and error events

---
 examples/test-LwIP-netconn/scpi_server.c |   27 ++++++++++++++++++++++++---
 examples/test-LwIP-netconn/scpi_server.h |    6 ++++++
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/examples/test-LwIP-netconn/scpi_server.c b/examples/test-LwIP-netconn/scpi_server.c
index df1ebbf..95d5ac7 100644
--- a/examples/test-LwIP-netconn/scpi_server.c
+++ b/examples/test-LwIP-netconn/scpi_server.c
@@ -113,11 +113,10 @@
     iprintf("**ERROR: %ld, \"%s\"\r\n", (int32_t) err, SCPI_ErrorTranslate(err));
     if (err != 0) {
         /* New error */
-        /* Beep */
-        /* Error LED ON */
+        SCPI_Event_ErrorIndicatorOn(context, err);
     } else {
         /* No more errors in the queue */
-        /* Error LED OFF */
+        SCPI_Event_ErrorIndicatorOff(context, err);
     }
     return 0;
 }
@@ -248,6 +247,7 @@
             netconn_delete(newconn);
         } else {
             /* connection established */
+            SCPI_Event_DeviceConnected(newconn);
             iprintf("***Connection established %s\r\n", inet_ntoa(newconn->pcb.ip->remote_ip));
             user_data->io = newconn;
         }
@@ -275,6 +275,7 @@
 
 static void closeIo(user_data_t * user_data) {
     /* connection closed */
+	SCPI_Event_DeviceDisconnected(user_data->io);
     netconn_close(user_data->io);
     netconn_delete(user_data->io);
     user_data->io = NULL;
@@ -423,3 +424,23 @@
     xReturned = xTaskCreate(scpi_server_thread, "SCPI", DEFAULT_THREAD_STACKSIZE, NULL, SCPI_THREAD_PRIO, &xHandle);
     LWIP_ASSERT("scpi_server_init failed", xReturned == pdPASS);
 }
+
+/* Called by processIoListen() for additional reporting. Override on demand. */
+void __attribute__((weak)) SCPI_Event_DeviceConnected(struct netconn * conn) {
+    /* Remote or Eth LED ON */
+}
+
+/* Called by closeIO() for additional reporting. Override on demand. */
+void __attribute__((weak)) SCPI_Event_DeviceDisconnected(struct netconn * conn) {
+    /* Remote or Eth LED OFF */
+}
+
+/* Called by SCPI_Error() for reporting. Override on demand. */
+void __attribute__((weak)) SCPI_Event_ErrorIndicatorOn(scpi_t * context, int_fast16_t err) {
+    /* New error : Beep, Error LED ON */
+}
+
+/* Called by SCPI_Error() for reporting. Override on demand. */
+void __attribute__((weak)) SCPI_Event_ErrorIndicatorOff(scpi_t * context, int_fast16_t err) {
+    /* No more errors in the queue : Error LED OFF */
+}
diff --git a/examples/test-LwIP-netconn/scpi_server.h b/examples/test-LwIP-netconn/scpi_server.h
index 1c04dda..50e677c 100644
--- a/examples/test-LwIP-netconn/scpi_server.h
+++ b/examples/test-LwIP-netconn/scpi_server.h
@@ -42,6 +42,12 @@
 void SCPI_AddError(int16_t err);
 void SCPI_RequestControl(void);
 
+// optional event handlers
+void SCPI_Event_DeviceConnected(struct netconn * conn);
+void SCPI_Event_DeviceDisconnected(struct netconn * conn);
+void SCPI_Event_ErrorIndicatorOn(scpi_t * context, int_fast16_t err);
+void SCPI_Event_ErrorIndicatorOff(scpi_t * context, int_fast16_t err);
+
 #ifdef __cplusplus
 }
 #endif

--
Gitblit v1.9.1