From: John Melton - G0ORX/N6LYT Date: Fri, 26 Aug 2016 15:53:51 +0000 (+0000) Subject: fixed tx antenna selection bug X-Git-Url: https://git.rkrishnan.org/pf/frontends/...?a=commitdiff_plain;h=77e4ae357ef83e53b44cb62d515b845128f27d1c;p=pihpsdr.git fixed tx antenna selection bug --- diff --git a/band.c b/band.c index eaf0183..5a727df 100644 --- a/band.c +++ b/band.c @@ -186,30 +186,30 @@ BANDSTACK bandstackGEN={3,1,bandstack_entriesGEN}; BANDSTACK bandstackWWV={5,1,bandstack_entriesWWV}; BAND bands[BANDS] = - {{"160",&bandstack160,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"80",&bandstack80,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"60",&bandstack60,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"40",&bandstack40,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"30",&bandstack30,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"20",&bandstack20,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"18",&bandstack18,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"15",&bandstack15,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"12",&bandstack12,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"10",&bandstack10,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"50",&bandstack50,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {{"160",&bandstack160,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"80",&bandstack80,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"60",&bandstack60,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"40",&bandstack40,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"30",&bandstack30,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"20",&bandstack20,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"18",&bandstack18,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"15",&bandstack15,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"12",&bandstack12,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"10",&bandstack10,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"50",&bandstack50,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, #ifdef LIMESDR - {"70",&bandstack70,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"144",&bandstack144,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"220",&bandstack144,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"430",&bandstack430,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"902",&bandstack430,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"1240",&bandstack1240,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"2300",&bandstack2300,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"3400",&bandstack3400,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, - {"AIR",&bandstackAIR,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,30}, + {"70",&bandstack70,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"144",&bandstack144,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"220",&bandstack144,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"430",&bandstack430,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"902",&bandstack430,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"1240",&bandstack1240,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"2300",&bandstack2300,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"3400",&bandstack3400,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, + {"AIR",&bandstackAIR,0,0,0,0,0,ALEX_ATTENUATION_0dB,30}, #endif - {"GEN",&bandstackGEN,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}, - {"WWV",&bandstackWWV,0,0,0,ALEX_RX_ANTENNA_NONE,ALEX_TX_ANTENNA_1,ALEX_ATTENUATION_0dB,0}}; + {"GEN",&bandstackGEN,0,0,0,0,0,ALEX_ATTENUATION_0dB,0}, + {"WWV",&bandstackWWV,0,0,0,0,0,ALEX_ATTENUATION_0dB,0}}; #define NUM_BAND_LIMITS 22 @@ -420,6 +420,9 @@ void bandRestoreState() { value=getProperty(name); if(value) bands[b].alexTxAntenna=atoi(value); +// fix bug so props file does not have to be deleted + if(bands[b].alexTxAntenna>2) bands[b].alexTxAntenna=0; + sprintf(name,"band.%d.alexAttenuation",b); value=getProperty(name); if(value) bands[b].alexAttenuation=atoi(value); diff --git a/gpio.c b/gpio.c index 0bf2b9a..46ed278 100644 --- a/gpio.c +++ b/gpio.c @@ -27,6 +27,7 @@ #include "toolbar.h" #include "main.h" #include "property.h" +#include "vfo.h" #include "wdsp.h" #ifdef PSK #include "psk.h" @@ -82,6 +83,7 @@ static volatile int afFunction; static volatile int rfEncoderPos; static volatile int rfFunction; static volatile int agcEncoderPos; +static volatile int agcFunction; static volatile int function_state; static volatile int band_state; static volatile int bandstack_state; @@ -122,6 +124,12 @@ static void afFunctionAlert(int gpio, int level, uint32_t tick) { afFunction=(level==0); } +static void agcFunctionAlert(int gpio, int level, uint32_t tick) { + if(level==0) { + agcFunction=agcFunction==0?1:0; + } +} + static void rfFunctionAlert(int gpio, int level, uint32_t tick) { rfFunction=(level==0); } @@ -497,6 +505,11 @@ fprintf(stderr,"encoder_init\n"); rfEncoderPos=0; } + gpioSetMode(AGC_FUNCTION, PI_INPUT); + gpioSetPullUpDown(AGC_FUNCTION,PI_PUD_UP); + gpioSetAlertFunc(AGC_FUNCTION, agcFunctionAlert); + agcFunction=0; + if(ENABLE_AGC_ENCODER) { gpioSetMode(AGC_ENCODER_A, PI_INPUT); gpioSetMode(AGC_ENCODER_B, PI_INPUT); @@ -664,6 +677,10 @@ int agc_encoder_get_pos() { return pos; } +int agc_function_get_state() { + return agcFunction; +} + int rf_function_get_state() { return rfFunction; } @@ -713,13 +730,6 @@ static int vfo_encoder_changed(void *data) { #ifdef PSK if(mode==modePSK) { psk_set_frequency(psk_get_frequency()-(pos*10)); - } else { -#endif - //RIT - rit-=pos; - if(rit>1000) rit=1000; - if(rit<-1000) rit=-1000; -#ifdef PSK } #endif } else { @@ -794,24 +804,31 @@ static int rf_encoder_changed(void *data) { static int agc_encoder_changed(void *data) { int pos=*(int*)data; if(pos!=0) { - if(function) { - int att=attenuation; - att+=pos; - if(att<0) { - att=0; - } else if (att>31) { - att=31; - } - set_attenuation_value((double)att); + if(agcFunction) { + rit-=pos; + if(rit>1000) rit=1000; + if(rit<-1000) rit=-1000; + vfo_update(NULL); } else { - double gain=agc_gain; - gain+=(double)pos; - if(gain<-20.0) { - gain=-20.0; - } else if(gain>120.0) { - gain=120.0; + if(function) { + int att=attenuation; + att+=pos; + if(att<0) { + att=0; + } else if (att>31) { + att=31; + } + set_attenuation_value((double)att); + } else { + double gain=agc_gain; + gain+=(double)pos; + if(gain<-20.0) { + gain=-20.0; + } else if(gain>120.0) { + gain=120.0; + } + set_agc_gain(gain); } - set_agc_gain(gain); } } return 0; diff --git a/new_protocol.c b/new_protocol.c index 316dc45..0f61f51 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -369,6 +369,11 @@ else HPF <= 6'b000010; // 20MHz long filters=0x00000000; + + if(isTransmitting()) { + filters=0x08000000; + } + // set HPF if(ddsFrequency<1800000L) { filters|=ALEX_BYPASS_HPF; @@ -419,16 +424,18 @@ else LPF <= 7'b0001000; // < 2.4MHz so use 160m LPF^M 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; + default: + // invalid value - set to 0 + band->alexRxAntenna=0; + break; } if(isTransmitting()) { @@ -442,6 +449,12 @@ else LPF <= 7'b0001000; // < 2.4MHz so use 160m LPF^M case 2: // ANT 3 filters|=ALEX_TX_ANTENNA_3; break; + default: + // invalid value - set to 0 + filters|=ALEX_TX_ANTENNA_1; + band->alexRxAntenna=0; + break; + } } else { switch(band->alexRxAntenna) { @@ -472,17 +485,10 @@ else LPF <= 7'b0001000; // < 2.4MHz so use 160m LPF^M } } - //filters|=alex_attenuation; - - //if(isTransmitting() || mode==modeCWU || mode==modeCWL) { - if(isTransmitting()) { - filters|=0x08000000; - } - - buffer[1432]=filters>>24; - buffer[1433]=filters>>16; - buffer[1434]=filters>>8; - buffer[1435]=filters; + buffer[1432]=(filters>>24)&0xFF; + buffer[1433]=(filters>>16)&0xFF; + buffer[1434]=(filters>>8)&0xFF; + buffer[1435]=filters&0xFF; //buffer[1442]=attenuation; buffer[1443]=attenuation; @@ -554,7 +560,10 @@ static void new_protocol_transmit_specific() { if(mic_ptt_tip_bias_ring) { buffer[50]|=0x08; } - buffer[51]=0x7F; // Line in gain + + // 0..30 + int g=(int)(30.0*mic_gain); + buffer[51]=g&0xFF; // Line in gain if(sendto(data_socket,buffer,sizeof(buffer),0,(struct sockaddr*)&transmitter_addr,transmitter_addr_length)<0) { fprintf(stderr,"sendto socket failed for tx specific\n"); diff --git a/old_protocol.c b/old_protocol.c index a4c6189..9ca7ce5 100644 --- a/old_protocol.c +++ b/old_protocol.c @@ -767,24 +767,28 @@ void ozy_send_buffer() { } */ - switch(band->alexRxAntenna) { - case 0: // ANT 1 - break; - case 1: // ANT 2 - break; - case 2: // ANT 3 - break; - case 3: // EXT 1 - //output_buffer[C3]|=0xA0; - output_buffer[C3]|=0xC0; - break; - case 4: // EXT 2 - //output_buffer[C3]|=0xC0; - output_buffer[C3]|=0xA0; - break; - case 5: // XVTR - output_buffer[C3]|=0xE0; - break; + switch(band->alexRxAntenna) { + case 0: // ANT 1 + break; + case 1: // ANT 2 + break; + case 2: // ANT 3 + break; + case 3: // EXT 1 + //output_buffer[C3]|=0xA0; + output_buffer[C3]|=0xC0; + break; + case 4: // EXT 2 + //output_buffer[C3]|=0xC0; + output_buffer[C3]|=0xA0; + break; + case 5: // XVTR + output_buffer[C3]|=0xE0; + break; + default: + // invalid - set to 0 + band->alexRxAntenna=0; + break; } @@ -801,6 +805,10 @@ void ozy_send_buffer() { case 2: // ANT 3 output_buffer[C4]|=0x02; break; + default: + // invalid - set to 0 + band->alexRxAntenna=0; + break; } } else { switch(band->alexRxAntenna) { diff --git a/panadapter.c b/panadapter.c index 8c9608d..33f08b8 100644 --- a/panadapter.c +++ b/panadapter.c @@ -319,12 +319,12 @@ void panadapter_update(float *data,int tx) { GetRXAAGCHangLevel(CHANNEL_RX0, &hang); GetRXAAGCThresh(CHANNEL_RX0, &thresh, 4096.0, (double)sample_rate); - double knee_y=thresh+(double)get_attenuation()-20.0; + double knee_y=thresh+(double)get_attenuation(); knee_y = floor((panadapter_high - knee_y) * (double) display_height / (panadapter_high - panadapter_low)); - double hang_y=hang+(double)get_attenuation()-20.0; + double hang_y=hang+(double)get_attenuation(); hang_y = floor((panadapter_high - hang_y) * (double) display_height / (panadapter_high - panadapter_low)); @@ -368,26 +368,26 @@ void panadapter_update(float *data,int tx) { if(tx && protocol==NEW_PROTOCOL) { int offset=1200; - s1=(double)samples[0+offset]+(double)get_attenuation()-20.0; + s1=(double)samples[0+offset]+(double)get_attenuation(); s1 = floor((panadapter_high - s1) * (double) display_height / (panadapter_high - panadapter_low)); cairo_move_to(cr, 0.0, s1); for(i=1;i