int rate=48000;
int dir=0;
- if(n_selected_output_device<0 || n_selected_output_device>=n_output_devices) {
- n_selected_output_device=-1;
+fprintf(stderr,"audio_open_input: %d\n",n_selected_input_device);
+ if(n_selected_input_device<0 || n_selected_input_device>=n_input_devices) {
+ n_selected_input_device=-1;
return -1;
}
GdkWindow *gdk_window = gtk_widget_get_window(window);
gdk_window_set_cursor(gdk_window,cursor_arrow);
+ // start the receiver
+ SetChannelState(CHANNEL_RX0,1,1);
+
//update_timer_id=gdk_threads_add_timeout(1000/updates_per_second, update, NULL);
update_timer_id=gdk_threads_add_timeout_full(G_PRIORITY_HIGH_IDLE,1000/updates_per_second, update, NULL, NULL);
audio_close_input();
if(audio_open_input()==0) {
local_microphone=1;
+ } else {
+ local_microphone=0;
}
}
}
bitspersample=((buffer[12]&0xFF)<<8)+(buffer[13]&0xFF);
samplesperframe=((buffer[14]&0xFF)<<8)+(buffer[15]&0xFF);
-//fprintf(stderr,"samples per frame %d\n",samplesperframe);
-
//if(!isTransmitting()) {
b=16;
int i;
b=4;
int i,j,s;
for(i=0;i<MIC_SAMPLES;i++) {
- micsample = (int)((signed char) buffer[b++]) << 8;
- micsample |= (int)((unsigned char)buffer[b++] & 0xFF);
#ifdef FREEDV
if(mode==modeFREEDV && isTransmitting()) {
+ micsample = (int)((signed char) buffer[b++]) << 8;
+ micsample |= (int)((unsigned char)buffer[b++] & 0xFF);
if(freedv_samples==0) { // 48K to 8K
int modem_samples=mod_sample_freedv(micsample);
if(modem_samples!=0) {
for(j=0;j<freedv_resample;j++) { // 8K to 48K
micsample=mod_out[s];
micsampledouble=(double)micsample/32767.0; // 16 bit sample 2^16-1
- micinputbuffer[micsamples*2]=micsampledouble*(mic_gain*1.0);
- micinputbuffer[(micsamples*2)+1]=micsampledouble*(mic_gain*1.0);
+ micinputbuffer[micsamples*2]=micsampledouble;
+ micinputbuffer[(micsamples*2)+1]=micsampledouble;
micsamples++;
if(micsamples==BUFFER_SIZE) {
full_tx_buffer();
}
} else {
#endif
- micsampledouble = (double)micsample/32767.0; // 16 bit sample
+ //micsampledouble = (double)micsample/32767.0; // 16 bit sample
+ micsampledouble = (1.0 / 2147483648.0) * (double)(buffer[b++] << 24 | buffer[b++] << 16);
if(mode==modeCWL || mode==modeCWU || tune || !isTransmitting()) {
micinputbuffer[micsamples*2]=0.0;
micinputbuffer[(micsamples*2)+1]=0.0;
} else {
- micinputbuffer[micsamples*2]=micsampledouble*(mic_gain*1.0);
- micinputbuffer[(micsamples*2)+1]=micsampledouble*(mic_gain*1.0);
+ micinputbuffer[micsamples*2]=micsampledouble;
+ micinputbuffer[(micsamples*2)+1]=micsampledouble;
}
micsamples++;
int error;
fexchange0(CHANNEL_RX0, iqinputbuffer, audiooutputbuffer, &error);
+if(error!=0) {
+fprintf(stderr,"full_rx_buffer: fexchange0: error=%d\n",error);
+}
switch(mode) {
#ifdef PSK
case modePSK:
for(j=0;j<freedv_resample;j++) { // 8K to 48K
leftmicsample=mod_out[s];
leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1
- micinputbuffer[micsamples*2]=leftmicsampledouble*mic_gain;
- micinputbuffer[(micsamples*2)+1]=leftmicsampledouble*mic_gain;
+ micinputbuffer[micsamples*2]=leftmicsampledouble;
+ micinputbuffer[(micsamples*2)+1]=leftmicsampledouble;
micsamples++;
if(micsamples==BUFFER_SIZE) {
full_tx_buffer();
micinputbuffer[micsamples*2]=0.0;
micinputbuffer[(micsamples*2)+1]=0.0;
} else {
- micinputbuffer[micsamples*2]=leftmicsampledouble*mic_gain;
- micinputbuffer[(micsamples*2)+1]=rightmicsampledouble*mic_gain;
+ micinputbuffer[micsamples*2]=leftmicsampledouble;
+ micinputbuffer[(micsamples*2)+1]=rightmicsampledouble;
}
micsamples++;
for(j=0;j<freedv_divisor;j++) {
mic_sample=mod_out[s];
mic_sample_double=(double)mic_sample/32767.0f; // 16 bit sample 2^16-1
- micinputbuffer[samples*2]=mic_sample_double*(mic_gain*1);
- micinputbuffer[(samples*2)+1]=mic_sample_double*(mic_gain*1);
+ micinputbuffer[samples*2]=mic_sample_double;
+ micinputbuffer[(samples*2)+1]=mic_sample_double;
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
samples++;
micinputbuffer[samples*2]=0.0;
micinputbuffer[(samples*2)+1]=0.0;
} else {
- micinputbuffer[samples*2]=mic_sample_double*(mic_gain*1);
- micinputbuffer[(samples*2)+1]=mic_sample_double*(mic_gain*1);
+ micinputbuffer[samples*2]=mic_sample_double;
+ micinputbuffer[(samples*2)+1]=mic_sample_double;
}
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
int demod_samples;
for(j=0;j<output_buffer_size;j++) {
if(freedv_samples==0) {
- left_rx_sample=(short)(audiooutputbuffer[j*2]*32767.0*volume);
- right_rx_sample=(short)(audiooutputbuffer[(j*2)+1]*32767.0*volume);
+ left_rx_sample=(short)(audiooutputbuffer[j*2]*32767.0);
+ right_rx_sample=(short)(audiooutputbuffer[(j*2)+1]*32767.0);
demod_samples=demod_sample_freedv(left_rx_sample);
if(demod_samples!=0) {
int s;
for(s=0;s<demod_samples;s++) {
for(t=0;t<6;t++) { // 8k to 48k
if(freedv_sync) {
- left_rx_sample=right_rx_sample=(short)((double)speech_out[s]*volume);
+ left_rx_sample=right_rx_sample=(short)((double)speech_out[s]);
} else {
left_rx_sample=right_rx_sample=0;
}
int j;
for(j=0;j<output_buffer_size;j++) {
- left_rx_sample=(short)(audiooutputbuffer[j*2]*32767.0*volume);
- right_rx_sample=(short)(audiooutputbuffer[(j*2)+1]*32767.0*volume);
+ left_rx_sample=(short)(audiooutputbuffer[j*2]*32767.0);
+ right_rx_sample=(short)(audiooutputbuffer[(j*2)+1]*32767.0);
#ifdef PSK
if(mode==modePSK) {
if(psk_samples==0) {
for(j=0;j<freedv_divisor;j++) { // 8K to 48K
leftmicsample=mod_out[s];
leftmicsampledouble=(double)leftmicsample/32767.0; // 16 bit sample 2^16-1
- micinputbuffer[samples*2]=leftmicsampledouble*(mic_gain*1);
- micinputbuffer[(samples*2)+1]=leftmicsampledouble*(mic_gain*1);
+ micinputbuffer[samples*2]=leftmicsampledouble;
+ micinputbuffer[(samples*2)+1]=leftmicsampledouble;
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
samples++;
micinputbuffer[samples*2]=0.0;
micinputbuffer[(samples*2)+1]=0.0;
} else {
- micinputbuffer[samples*2]=leftmicsampledouble*(mic_gain*1);
- micinputbuffer[(samples*2)+1]=leftmicsampledouble*(mic_gain*1);
+ micinputbuffer[samples*2]=leftmicsampledouble;
+ micinputbuffer[(samples*2)+1]=leftmicsampledouble;
}
iqinputbuffer[samples*2]=0.0;
iqinputbuffer[(samples*2)+1]=0.0;
char version[32];
if(!f) {
fprintf(stderr,"can't open %s\n",filename);
- exit(1);
+ return;
}
sprintf(version,"%0.2f", PROPERTY_VERSION);
static void afgain_value_changed_cb(GtkWidget *widget, gpointer data) {
volume=gtk_range_get_value(GTK_RANGE(af_gain_scale))/100.0;
+ SetRXAPanelGain1 (CHANNEL_RX0, volume);
}
void set_af_gain(double value) {
volume=value;
+ SetRXAPanelGain1 (CHANNEL_RX0, volume);
if(display_sliders) {
gtk_range_set_value (GTK_RANGE(af_gain_scale),volume*100.0);
} else {
static void micgain_value_changed_cb(GtkWidget *widget, gpointer data) {
mic_gain=gtk_range_get_value(GTK_RANGE(widget))/100.0;
+ SetTXAPanelGain1(CHANNEL_TX,mic_gain);
}
void set_mic_gain(double value) {
mic_gain=value;
+ SetTXAPanelGain1(CHANNEL_TX,mic_gain);
if(display_sliders) {
gtk_range_set_value (GTK_RANGE(mic_gain_scale),mic_gain*100.0);
} else {
}
void setRXMode(int rx,int m) {
-fprintf(stderr,"SetRXAMode: rx=%d mode=%d\n",rx,m);
SetRXAMode(rx, m);
}
void setTXMode(int tx,int m) {
-fprintf(stderr,"SetTXAMode: tx=%d mode=%d\n",tx,m);
SetTXAMode(tx, m);
}
void setMode(int m) {
-fprintf(stderr,"setMode: mode=%d m=%d\n",mode,m);
int local_mode=m;
#ifdef FREEDV
if(mode!=modeFREEDV && m==modeFREEDV) {
show_waterfall();
}
#endif
-fprintf(stderr,"setMode: %d mode=%d\n",receiver,mode);
setRXMode(receiver,local_mode);
-fprintf(stderr,"setMode: %d mode=%d\n",CHANNEL_TX,mode);
setTXMode(CHANNEL_TX,local_mode);
mode=m;
}
}
void setFilter(int low,int high) {
-fprintf(stderr,"setFilter: %d %d\n",low,high);
if(mode==modeCWL) {
filterLow=-cw_keyer_sidetone_frequency-low;
filterHigh=-cw_keyer_sidetone_frequency+high;
filterHigh=high;
}
-fprintf(stderr,"setFilter: filterLow=%d filterHigh=%d\n",filterLow,filterHigh);
double fl=filterLow+ddsOffset;
double fh=filterHigh+ddsOffset;
-fprintf(stderr,"setFilter: fl=%f fh=%f\n",fl,fh);
RXANBPSetFreqs(receiver,(double)filterLow,(double)filterHigh);
SetRXABandpassFreqs(receiver, fl,fh);
SetRXASNBAOutputBandwidth(receiver, (double)filterLow, (double)filterHigh);
SetTXAPostGenToneFreq(tx, 0.0);
SetTXAPostGenRun(tx, 0);
- SetChannelState(tx,1,0);
+ //SetChannelState(tx,1,0);
}
void wdsp_init(int rx,int pixels,int protocol) {
dspRate,
outputRate,
0, // receive
- 1, // run
+ 0, // run
0.010, 0.025, 0.0, 0.010, 0);
micDspRate,
micOutputRate,
1, // transmit
- 1, // run
+ 0, // run
0.010, 0.025, 0.0, 0.010, 0);
while (gtk_events_pending ())