From: John Melton g0orx/n6lyt Date: Fri, 22 Apr 2016 16:02:05 +0000 (+0000) Subject: update new protocol to support OC outputs and antenna selection X-Git-Url: https://git.rkrishnan.org/specifications/vdrive/sub?a=commitdiff_plain;h=fb08950b1212150ace11c06234320b2286c3ad55;p=pihpsdr.git update new protocol to support OC outputs and antenna selection --- diff --git a/menu.c b/menu.c index 4d18ee3..bf1d1a7 100644 --- a/menu.c +++ b/menu.c @@ -342,6 +342,7 @@ static void rx_ant_cb(GtkWidget *widget, gpointer data) { int ant=((int)data)&0xF; BAND *band=band_get_band(b); band->alexRxAntenna=ant; + set_alex_rx_antenna(ant); } static void tx_ant_cb(GtkWidget *widget, gpointer data) { @@ -349,6 +350,7 @@ static void tx_ant_cb(GtkWidget *widget, gpointer data) { int ant=((int)data)&0xF; BAND *band=band_get_band(b); band->alexTxAntenna=ant; + set_alex_tx_antenna(ant); } static void switch_page_cb(GtkNotebook *notebook, diff --git a/new_protocol.c b/new_protocol.c index dab0506..cc43408 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -40,6 +40,7 @@ #include #include "alex.h" +#include "band.h" #include "new_protocol.h" #include "channel.h" #include "discovered.h" @@ -197,6 +198,7 @@ fprintf(stderr,"new_protocol_general: receiver=%d\n", receiver); static void new_protocol_high_priority(int run,int tx,int drive) { unsigned char buffer[1444]; + BAND *band=band_get_current_band(); //fprintf(stderr,"new_protocol_high_priority: run=%d tx=%d drive=%d tx_ant=0x%08x rx_ant=0x%08x\n", run, tx, drive, alex_tx_antenna, alex_rx_antenna); memset(buffer, 0, sizeof(buffer)); @@ -225,6 +227,24 @@ static void new_protocol_high_priority(int run,int tx,int drive) { buffer[345]=drive; + + if(isTransmitting()) { + buffer[1401]=band->OCtx; + if(tune) { + if(OCmemory_tune_time!=0) { + struct timeval te; + gettimeofday(&te,NULL); + long long now=te.tv_sec*1000LL+te.tv_usec/1000; + if(tune_timeout>now) { + buffer[1401]|=OCtune; + } + } else { + buffer[1401]|=OCtune; + } + } + } else { + buffer[1401]=band->OCrx; + } // alex HPF filters /* if (frequency < 1800000) HPF <= 6'b100000; // bypass @@ -235,6 +255,8 @@ else if (frequency < 20000000) HPF <= 6'b000001; // 13MHz HPF else HPF <= 6'b000010; // 20MHz HPF */ + + long filters=0x00000000; // set HPF if(ddsFrequency<1800000L) { @@ -277,9 +299,69 @@ else LPF <= 7'b0001000; // < 2.4MHz so use 160m LPF^M filters|=ALEX_160_LPF; } - filters|=alex_rx_antenna; - filters|=alex_tx_antenna; - filters|=alex_attenuation; + + switch(band->alexRxAntenna) { + case 0: // ANT 1 + break; + case 1: // ANT 2 + break; + case 2: // ANT 3 + break; + case 3: // EXT 1 + //filters|=ALEX_RX_ANTENNA_EXT1; + filters|=ALEX_RX_ANTENNA_EXT2; + break; + case 4: // EXT 2 + //filters|=ALEX_RX_ANTENNA_EXT2; + filters|=ALEX_RX_ANTENNA_EXT1; + break; + case 5: // XVTR + filters|=ALEX_RX_ANTENNA_XVTR; + break; + } + + if(isTransmitting()) { + switch(band->alexTxAntenna) { + case 0: // ANT 1 + filters|=ALEX_TX_ANTENNA_1; + break; + case 1: // ANT 2 + filters|=ALEX_TX_ANTENNA_2; + break; + case 2: // ANT 3 + filters|=ALEX_TX_ANTENNA_3; + break; + } + } else { + switch(band->alexRxAntenna) { + case 0: // ANT 1 + filters|=ALEX_TX_ANTENNA_1; + break; + case 1: // ANT 2 + filters|=ALEX_TX_ANTENNA_2; + break; + case 2: // ANT 3 + filters|=ALEX_TX_ANTENNA_3; + break; + case 3: // EXT 1 + case 4: // EXT 2 + case 5: // XVTR + switch(band->alexTxAntenna) { + case 0: // ANT 1 + filters|=ALEX_TX_ANTENNA_1; + break; + case 1: // ANT 2 + filters|=ALEX_TX_ANTENNA_2; + break; + case 2: // ANT 3 + filters|=ALEX_TX_ANTENNA_3; + break; + } + break; + } + } + + //filters|=alex_attenuation; if(tx) { filters|=0x08000000; @@ -524,6 +606,8 @@ void* new_protocol_thread(void* arg) { */ double micoutputbuffer[BUFFER_SIZE*4*2]; + double gain; + int isample; int qsample; long tx_iq_sequence; @@ -721,17 +805,12 @@ fprintf(stderr,"outputsamples=%d\n", outputsamples); b=4; for(i=0;i<720;i++) { - if(byte_swap) { - micsample = (int)((unsigned char)buffer[b++] & 0xFF); - micsample |= (int)((signed char) buffer[b++]) << 8; - } else { - micsample = (int)((signed char) buffer[b++]) << 8; - micsample |= (int)((unsigned char)buffer[b++] & 0xFF); - } + micsample = (int)((signed char) buffer[b++]) << 8; + micsample |= (int)((unsigned char)buffer[b++] & 0xFF); micsamplefloat = (float)micsample/32767.0F; // 16 bit sample micinputbuffer[micsamples*2]=(double)(micsamplefloat*mic_gain); - micinputbuffer[(micsamples*2)+1]=0.0; + micinputbuffer[(micsamples*2)+1]=(double)(micsamplefloat*mic_gain); micsamples++; @@ -739,7 +818,6 @@ fprintf(stderr,"outputsamples=%d\n", outputsamples); int error; if(tune==1) { - //float tunefrequency = (float)((filterLow + filterHigh - filterLow) / 2); float tunefrequency = (float)((filterHigh - filterLow) / 2); phase=sineWave(micinputbuffer, BUFFER_SIZE, phase, tunefrequency); } @@ -749,9 +827,20 @@ fprintf(stderr,"outputsamples=%d\n", outputsamples); fprintf(stderr,"fexchange0 returned error: %d for transmitter\n", error); } + if(d->device!=DEVICE_METIS || atlas_penelope) { + if(tune) { + gain=8388607.0*255.0/(double)tune_drive; + } else { + gain=8388607.0*255.0/(double)drive; + } + } else { + gain=65535.0; + } + + for(j=0;j>16; iqbuffer[iqindex++]=isample>>8; diff --git a/old_protocol.c b/old_protocol.c index ae06510..d5ede39 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -612,10 +612,12 @@ void ozy_send_buffer() { case 2: // ANT 3 break; case 3: // EXT 1 - output_buffer[C3]|=0xA0; + //output_buffer[C3]|=0xA0; + output_buffer[C3]|=0xC0; break; case 4: // EXT 2 - output_buffer[C3]|=0xC0; + //output_buffer[C3]|=0xC0; + output_buffer[C3]|=0xA0; break; case 5: // XVTR output_buffer[C3]|=0xE0; diff --git a/pihpsdr b/pihpsdr index f0d26e4..2da4728 100755 Binary files a/pihpsdr and b/pihpsdr differ diff --git a/radio.c b/radio.c index 3e1d2c3..6a0a0b8 100644 --- a/radio.c +++ b/radio.c @@ -116,14 +116,12 @@ int locked=0; int step=100; -int byte_swap=0; - int lt2208Dither = 0; int lt2208Random = 0; int attenuation = 0; // 0dB -unsigned long alex_rx_antenna=0; -unsigned long alex_tx_antenna=0; -unsigned long alex_attenuation=0; +//unsigned long alex_rx_antenna=0; +//unsigned long alex_tx_antenna=0; +//unsigned long alex_attenuation=0; int cw_keys_reversed=0; // 0=disabled 1=enabled int cw_keyer_speed=12; // 1-60 WPM @@ -266,29 +264,32 @@ fprintf(stderr,"setTuneDrive: protocol=%d\n", protocol); } void set_attenuation(int value) { - attenuation=value; + //attenuation=value; + if(protocol==NEW_PROTOCOL) { + schedule_high_priority(8); + } } int get_attenuation() { return attenuation; } -void set_alex_rx_antenna(unsigned long v) { - alex_rx_antenna=v; +void set_alex_rx_antenna(int v) { + //alex_rx_antenna=v; if(protocol==NEW_PROTOCOL) { schedule_high_priority(1); } } -void set_alex_tx_antenna(unsigned long v) { - alex_tx_antenna=v; +void set_alex_tx_antenna(int v) { + //alex_tx_antenna=v; if(protocol==NEW_PROTOCOL) { schedule_high_priority(2); } } -void set_alex_attenuation(unsigned long v) { - alex_attenuation=v; +void set_alex_attenuation(int v) { + //alex_attenuation=v; if(protocol==NEW_PROTOCOL) { schedule_high_priority(0); } @@ -386,8 +387,6 @@ void radioRestoreState() { if(value) agc_gain=atof(value); value=getProperty("step"); if(value) step=atoi(value); - value=getProperty("byte_swap"); - if(value) byte_swap=atoi(value); value=getProperty("cw_keys_reversed"); if(value) cw_keys_reversed=atoi(value); value=getProperty("cw_keyer_speed"); @@ -511,8 +510,6 @@ void radioSaveState() { setProperty("agc_gain",value); sprintf(value,"%d",step); setProperty("step",value); - sprintf(value,"%d",byte_swap); - setProperty("byte_swap",value); sprintf(value,"%d",cw_keys_reversed); setProperty("cw_keys_reversed",value); sprintf(value,"%d",cw_keyer_speed); diff --git a/radio.h b/radio.h index 02ade6f..ab23048 100644 --- a/radio.h +++ b/radio.h @@ -130,8 +130,6 @@ int locked; extern int step; -extern int byte_swap; - extern int lt2208Dither; extern int lt2208Random; extern int attenuation; @@ -197,9 +195,9 @@ void setTuneDrive(double d); void set_attenuation(int value); int get_attenuation(); -void set_alex_rx_antenna(unsigned long v); -void set_alex_tx_antenna(unsigned long v); -void set_alex_attenuation(unsigned long v); +void set_alex_rx_antenna(int v); +void set_alex_tx_antenna(int v); +void set_alex_attenuation(int v); extern int isTransmitting(); diff --git a/release/pihpsdr.tar b/release/pihpsdr.tar index 12ef828..88501af 100644 Binary files a/release/pihpsdr.tar and b/release/pihpsdr.tar differ diff --git a/release/pihpsdr/pihpsdr b/release/pihpsdr/pihpsdr index f0d26e4..2da4728 100755 Binary files a/release/pihpsdr/pihpsdr and b/release/pihpsdr/pihpsdr differ diff --git a/sliders.c b/sliders.c index 7f70828..3ed778c 100644 --- a/sliders.c +++ b/sliders.c @@ -82,9 +82,7 @@ fprintf(stderr,"scale_timeout_cb\n"); static void attenuation_value_changed_cb(GtkWidget *widget, gpointer data) { attenuation=gtk_range_get_value(GTK_RANGE(attenuation_scale)); - if(protocol==NEW_PROTOCOL) { - // need to schedule something - } + set_attenuation(attenuation); } void set_attenuation_value(double value) { @@ -117,9 +115,7 @@ void set_attenuation_value(double value) { scale_timer=g_timeout_add(2000,scale_timeout_cb,NULL); } } - if(protocol==NEW_PROTOCOL) { - // need to schedule something - } + set_attenuation(attenuation); } static void agcgain_value_changed_cb(GtkWidget *widget, gpointer data) {