From: DL1YCF <dl1ycf@darc.de>
Date: Sat, 4 Jan 2020 11:32:26 +0000 (+0100)
Subject: Support for HermesLite V1/V2 discrimination
X-Git-Url: https://git.rkrishnan.org/%5B/htmlfontify-example.html?a=commitdiff_plain;h=ba5128d69abb35624d0fdaaa6c2a242e8a4cb6ef;p=pihpsdr.git

Support for HermesLite V1/V2 discrimination
---

diff --git a/discovered.h b/discovered.h
index 79e08fd..c6bca2c 100644
--- a/discovered.h
+++ b/discovered.h
@@ -30,28 +30,29 @@
 
 // ANAN 7000DLE and 8000DLE uses 10 as the device type in old protocol
 // Newer STEMlab hpsdr emulators use 100 instead of 1
-#define DEVICE_METIS          0
-#define DEVICE_HERMES         1
-#define DEVICE_GRIFFIN        2
-#define DEVICE_ANGELIA        4
-#define DEVICE_ORION          5
-#define DEVICE_HERMES_LITE    6
-#define DEVICE_HERMES_LITE2   7
-#define DEVICE_ORION2        10 
-#define DEVICE_STEMLAB      100
+// HermesLite V2 uses V1 board ID and software version >= 40
+#define DEVICE_METIS           0
+#define DEVICE_HERMES          1
+#define DEVICE_GRIFFIN         2
+#define DEVICE_ANGELIA         4
+#define DEVICE_ORION           5
+#define DEVICE_HERMES_LITE     6
+#define DEVICE_HERMES_LITE2 1006
+#define DEVICE_ORION2         10 
+#define DEVICE_STEMLAB       100
 
 #ifdef USBOZY
 #define DEVICE_OZY 7
 #endif
 
-#define NEW_DEVICE_ATLAS        0
-#define NEW_DEVICE_HERMES       1
-#define NEW_DEVICE_HERMES2      2
-#define NEW_DEVICE_ANGELIA      3
-#define NEW_DEVICE_ORION        4
-#define NEW_DEVICE_ORION2       5
-#define NEW_DEVICE_HERMES_LITE  6
-#define NEW_DEVICE_HERMES_LITE2 7
+#define NEW_DEVICE_ATLAS           0
+#define NEW_DEVICE_HERMES          1
+#define NEW_DEVICE_HERMES2         2
+#define NEW_DEVICE_ANGELIA         3
+#define NEW_DEVICE_ORION           4
+#define NEW_DEVICE_ORION2          5
+#define NEW_DEVICE_HERMES_LITE     6
+#define NEW_DEVICE_HERMES_LITE2 1006
 
 #ifdef SOAPYSDR
 #define SOAPYSDR_USB_DEVICE 0
diff --git a/hpsdrsim.c b/hpsdrsim.c
index ad26a3e..c8dc5d1 100644
--- a/hpsdrsim.c
+++ b/hpsdrsim.c
@@ -762,6 +762,10 @@ int main(int argc, char *argv[])
 				  buffer[20]=2;
 				  buffer[21]=1;
 				  buffer[22]=3;
+				  // HERMES_LITE2 is a HermesLite with a new software version
+				  if (NEWDEVICE == NEW_DEVICE_HERMES_LITE2) {
+				    buffer[11]=NEW_DEVICE_HERMES_LITE;
+				  }
 				  sendto(sock_udp, buffer, 60, 0, (struct sockaddr *)&addr_from, sizeof(addr_from));
 				  break;
 				}
diff --git a/hpsdrsim.h b/hpsdrsim.h
index f7c16e8..1c602ca 100644
--- a/hpsdrsim.h
+++ b/hpsdrsim.h
@@ -22,7 +22,7 @@
 #define DEVICE_ANGELIA         4
 #define DEVICE_ORION           5
 #define DEVICE_HERMES_LITE     6
-#define DEVICE_HERMES_LITE2    7
+#define DEVICE_HERMES_LITE2 1006
 #define DEVICE_ORION2         10
 #define DEVICE_C25           100
 
@@ -33,7 +33,7 @@
 #define NEW_DEVICE_ORION        4
 #define NEW_DEVICE_ORION2       5
 #define NEW_DEVICE_HERMES_LITE  6
-#define NEW_DEVICE_HERMES_LITE2 7
+#define NEW_DEVICE_HERMES_LITE2 1006
 
 EXTERN int OLDDEVICE;
 EXTERN int NEWDEVICE;
diff --git a/new_discovery.c b/new_discovery.c
index ac0e55a..4d7a497 100644
--- a/new_discovery.c
+++ b/new_discovery.c
@@ -217,6 +217,8 @@ gpointer new_discover_receive_thread(gpointer data) {
                 if(devices<MAX_DEVICES) {
                     discovered[devices].protocol=NEW_PROTOCOL;
                     discovered[devices].device=buffer[11]&0xFF;
+                    discovered[devices].software_version=buffer[13]&0xFF;
+                    discovered[devices].status=status;
                     switch(discovered[devices].device) {
 			case NEW_DEVICE_ATLAS:
                             strcpy(discovered[devices].name,"Atlas");
@@ -249,12 +251,12 @@ gpointer new_discover_receive_thread(gpointer data) {
                             frequency_max=61440000.0;
                             break;
 			case NEW_DEVICE_HERMES_LITE:
-                            strcpy(discovered[devices].name,"Hermes Lite");
-                            frequency_min=0.0;
-                            frequency_max=30720000.0;
-                            break;
-			case NEW_DEVICE_HERMES_LITE2:
-                            strcpy(discovered[devices].name,"Hermes Lite 2");
+			    if (discovered[devices].software_version < 40) {
+                              strcpy(discovered[devices].name,"Hermes Lite V1");
+			    } else {
+                              strcpy(discovered[devices].name,"Hermes Lite V2");
+			      discovered[devices].device = NEW_DEVICE_HERMES_LITE2;
+			    }
                             frequency_min=0.0;
                             frequency_max=30720000.0;
                             break;
@@ -264,11 +266,9 @@ gpointer new_discover_receive_thread(gpointer data) {
                             frequency_max=30720000.0;
                             break;
                     }
-                    discovered[devices].software_version=buffer[13]&0xFF;
                     for(i=0;i<6;i++) {
                         discovered[devices].info.network.mac_address[i]=buffer[i+5];
                     }
-                    discovered[devices].status=status;
                     memcpy((void*)&discovered[devices].info.network.address,(void*)&addr,sizeof(addr));
                     discovered[devices].info.network.address_length=sizeof(addr);
                     memcpy((void*)&discovered[devices].info.network.interface_address,(void*)&interface_addr,sizeof(interface_addr));