From 1e9e842263c852c2779a583f52ccfad55e52fae8 Mon Sep 17 00:00:00 2001
From: c vw <dl1ycf@darc.de>
Date: Thu, 13 Jan 2022 18:57:43 +0100
Subject: [PATCH] Some more HermesLite2 simulation

---
 hpsdrsim.c | 26 +++++++++++++++-----------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/hpsdrsim.c b/hpsdrsim.c
index 517b603..71f3553 100644
--- a/hpsdrsim.c
+++ b/hpsdrsim.c
@@ -138,6 +138,8 @@ static int		alex_apollo=-1;
 static int		hl2_q5=-1;
 static int		hl2_tune=-1;
 static int		hl2_pa=-1;
+static int		hl2_tx_latency=1;
+static int		hl2_ptt_hang=-1;
 static int		c25_ext_board_i2c_data=-1;
 static int		rx_adc[7]={-1,-1,-1,-1,-1,-1,-1};
 static int		cw_hang = -1;
@@ -1212,6 +1214,11 @@ void process_ep2(uint8_t *frame)
 	    chk_data(frame[2] & 0x40, anan7kps,  "Anan7k PureSignal flag");
 	    chk_data(frame[3] << 8 | frame[4], envgain, "Firmware EnvGain");
 	    break;
+        case 46:
+	case 47:
+	    chk_data(frame[3] & 0x1f, hl2_ptt_hang, "HL2 PTT HANG");
+	    chk_data(frame[4] & 0x7f, hl2_tx_latency,"HL2 TX LATENCY");
+	    break;
         default:
             //
             // The HermesLite2 has an extended address range so we just
@@ -1222,7 +1229,7 @@ void process_ep2(uint8_t *frame)
             rc=frame[0] >> 1;
             if (hl2addr[rc].c1 != frame[1] || hl2addr[rc].c2 != frame[2] ||
                 hl2addr[rc].c3 != frame[3] || hl2addr[rc].c4 != frame[4]) {
-              printf("ADDR=0x%2x C1=0x%2x C2=0x%2x C3=0x%2x C4=0x%2x\n",
+              printf("        HL2 AHL2 DDR=0x%2x C1=0x%2x C2=0x%2x C3=0x%2x C4=0x%2x\n",
                 rc, frame[1], frame[2], frame[3], frame[4]);
               hl2addr[rc].c1=frame[1];
               hl2addr[rc].c2=frame[2];
@@ -1313,22 +1320,19 @@ void *handler_ep6(void *arg)
 
 		    switch (header_offset) {
 			case 0:
-			    // do not set PTT and CW in C0
-			    // do not set ADC overflow in C1
                             if (OLDDEVICE == DEVICE_HERMES_LITE2) {
+			      *(pointer+4) = 0;
 			      // C2/C3 is TX FIFO count
-			      tx_fifo_count=txptr - rxptr;
-			      if (tx_fifo_count < 0) tx_fifo_count += OLDRTXLEN;
-			      *(pointer+5) = (tx_fifo_count >> 8) & 0x7F;
-			      *(pointer+6) = tx_fifo_count & 0xFF;
+			      *(pointer+5) = 0;
+			      *(pointer+6) = 0;
                             }
 			    header_offset=8;
 			    break;
 			case 8:
                             if (OLDDEVICE == DEVICE_HERMES_LITE2) {
 			      // HL2: temperature
-			      *(pointer+4)=0;
-			      *(pointer+5) = tx_fifo_count & 0x7F;  // pseudo random number
+			      *(pointer+4) =  3;
+			      *(pointer+5) =112;  // 3*256 + 112 = 880 ==> 20.0 degrees centigrade
                             } else {
 			      // AIN5: Exciter power
 			      *(pointer+4)=0;		// about 500 mW
@@ -1341,8 +1345,8 @@ void *handler_ep6(void *arg)
 			    header_offset=16;
 			    break;
 			case 16:
-			    // AIN2: Reverse power
-			    // AIN3:
+			    // AIN2: Reverse power; stays at zero
+			    // AIN3: stays at zero (PA current for HL2)
 			    header_offset=24;
 			    break;
 			case 24:
-- 
2.45.2