From 52832edf55447260979e616948fc614099b45252 Mon Sep 17 00:00:00 2001
From: John Melton G0ORX <john.d.melton@googlemail.com>
Date: Sun, 6 Oct 2019 13:27:13 +0100
Subject: [PATCH] More changes for SoapySDR transmit

---
 i2c.c            |  4 ++--
 radio.c          | 11 +++++++++--
 soapy_protocol.c |  8 ++++----
 transmitter.c    |  1 +
 4 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/i2c.c b/i2c.c
index 89417fb..9b297c8 100644
--- a/i2c.c
+++ b/i2c.c
@@ -127,7 +127,7 @@ void i2c_interrupt() {
     flags=read_word_data(ADDRESS_1,0x0E);
     if(flags) {
       ints=read_word_data(ADDRESS_1,0x10);
-g_print("i1c_interrupt: flags=%04X ints=%04X\n",flags,ints);
+//g_print("i2c_interrupt: flags=%04X ints=%04X\n",flags,ints);
       if(ints) {
         int i=-1;
         switch(ints) {
@@ -180,7 +180,7 @@ g_print("i1c_interrupt: flags=%04X ints=%04X\n",flags,ints);
             i=SW17;
             break;
         }
-g_print("i1c_interrupt: sw=%d action=%d\n",i,sw_action[i]);
+//g_print("i1c_interrupt: sw=%d action=%d\n",i,sw_action[i]);
         switch(sw_action[i]) {
           case TUNE:
             {
diff --git a/radio.c b/radio.c
index 84acffd..81dbe64 100644
--- a/radio.c
+++ b/radio.c
@@ -885,7 +885,9 @@ void start_radio() {
   if(protocol==SOAPYSDR_PROTOCOL) {
     RECEIVER *rx=receiver[0];
     soapy_protocol_create_receiver(rx);
-
+    if(transmitter!=NULL) {
+      soapy_protocol_create_transmitter(transmitter);
+    }
 
     soapy_protocol_set_rx_antenna(rx,adc[0].antenna);
     for(int i=0;i<radio->info.soapy.rx_gains;i++) {
@@ -1062,7 +1064,12 @@ void setMox(int state) {
 #ifdef SOAPYSDR
     case SOAPYSDR_PROTOCOL:
       if(transmitter!=NULL) {
-        soapy_protocol_set_tx_frequency(transmitter);
+        if(mox) {
+          soapy_protocol_set_tx_frequency(transmitter);
+          soapy_protocol_start_transmitter(transmitter);
+        } else {
+          soapy_protocol_stop_transmitter(transmitter);
+        }
       }
       break;
 #endif
diff --git a/soapy_protocol.c b/soapy_protocol.c
index 8895311..1104bb8 100644
--- a/soapy_protocol.c
+++ b/soapy_protocol.c
@@ -163,12 +163,12 @@ void soapy_protocol_create_transmitter(TRANSMITTER *tx) {
   soapy_tx_sample_rate=tx->iq_output_rate;
 
 fprintf(stderr,"soapy_protocol_create_transmitter: setting samplerate=%f\n",(double)soapy_tx_sample_rate);
-  rc=SoapySDRDevice_setSampleRate(soapy_device,SOAPY_SDR_TX,8,(double)soapy_tx_sample_rate);
+  rc=SoapySDRDevice_setSampleRate(soapy_device,SOAPY_SDR_TX,tx->dac,(double)soapy_tx_sample_rate);
   if(rc!=0) {
     fprintf(stderr,"soapy_protocol_configure_transmitter: SoapySDRDevice_setSampleRate(%f) failed: %s\n",(double)soapy_tx_sample_rate,SoapySDR_errToStr(rc));
   }
 
-  size_t channel=0;
+  size_t channel=tx->dac;
 fprintf(stderr,"soapy_protocol_create_transmitter: SoapySDRDevice_setupStream: channel=%ld\n",channel);
 #if defined(SOAPY_SDR_API_VERSION) && (SOAPY_SDR_API_VERSION < 0x00080000)
   rc=SoapySDRDevice_setupStream(soapy_device,&tx_stream,SOAPY_SDR_TX,SOAPY_SDR_CF32,&channel,1,NULL);
@@ -428,7 +428,7 @@ void soapy_protocol_set_tx_frequency(TRANSMITTER *tx) {
       f=(double)(vfo[v].frequency-vfo[v].lo_tx);
     }
 g_print("soapy_protocol_set_tx_frequency: %f\n",f);
-    rc=SoapySDRDevice_setFrequency(soapy_device,SOAPY_SDR_TX,active_receiver->adc,f,NULL);
+    rc=SoapySDRDevice_setFrequency(soapy_device,SOAPY_SDR_TX,tx->dac,f,NULL);
     if(rc!=0) {
       fprintf(stderr,"soapy_protocol: SoapySDRDevice_setFrequency(TX) failed: %s\n",SoapySDR_errToStr(rc));
     }
@@ -450,7 +450,7 @@ void soapy_protocol_set_tx_antenna(TRANSMITTER *tx,int ant) {
   int rc;
   if(soapy_device!=NULL) {
 //    fprintf(stderr,"soapy_protocol: set_tx_antenna: %s\n",radio->info.soapy.tx_antenna[ant]);
-    rc=SoapySDRDevice_setAntenna(soapy_device,SOAPY_SDR_TX,active_receiver->adc,radio->info.soapy.tx_antenna[ant]);
+    rc=SoapySDRDevice_setAntenna(soapy_device,SOAPY_SDR_TX,tx->dac,radio->info.soapy.tx_antenna[ant]);
     if(rc!=0) {
       fprintf(stderr,"soapy_protocol: SoapySDRDevice_setAntenna TX failed: %s\n",SoapySDR_errToStr(rc));
     }
diff --git a/transmitter.c b/transmitter.c
index 00b5cb0..ed212f2 100644
--- a/transmitter.c
+++ b/transmitter.c
@@ -549,6 +549,7 @@ TRANSMITTER *create_transmitter(int id, int buffer_size, int fft_size, int fps,
 
   TRANSMITTER *tx=malloc(sizeof(TRANSMITTER));
   tx->id=id;
+  tx->dac=0;
   tx->buffer_size=buffer_size;
   tx->fft_size=fft_size;
   tx->fps=fps;
-- 
2.45.2