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) {
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,
#include <math.h>
#include "alex.h"
+#include "band.h"
#include "new_protocol.h"
#include "channel.h"
#include "discovered.h"
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));
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
else HPF <= 6'b000010; // 20MHz HPF
*/
+
+
long filters=0x00000000;
// set HPF
if(ddsFrequency<1800000L) {
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;
*/
double micoutputbuffer[BUFFER_SIZE*4*2];
+ double gain;
+
int isample;
int qsample;
long tx_iq_sequence;
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++;
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);
}
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<micoutputsamples;j++) {
- isample=(int)(micoutputbuffer[j*2]*8388607.0); // 24 bit
- qsample=(int)(micoutputbuffer[(j*2)+1]*8388607.0); // 24 bit
+ isample=(int)(micoutputbuffer[j*2]*gain*2); // 24 bit
+ qsample=(int)(micoutputbuffer[(j*2)+1]*gain*2); // 24 bit
iqbuffer[iqindex++]=isample>>16;
iqbuffer[iqindex++]=isample>>8;
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;
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
}
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);
}
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");
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);
extern int step;
-extern int byte_swap;
-
extern int lt2208Dither;
extern int lt2208Random;
extern int attenuation;
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();
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) {
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) {