From: John Melton - G0ORX/N6LYT Date: Fri, 19 Aug 2016 09:35:06 +0000 (+0000) Subject: update new protocol for new gain settings X-Git-Url: https://git.rkrishnan.org/vdrive/%22file:/FOOURL?a=commitdiff_plain;h=d3570b9862fa6c301189a161f4d6fd041f1a550f;p=pihpsdr.git update new protocol for new gain settings --- diff --git a/audio.c b/audio.c index 1bca582..fef9049 100644 --- a/audio.c +++ b/audio.c @@ -86,7 +86,9 @@ void audio_write(short left_sample,short right_sample) { audio_buffer[audio_offset++]=right_sample; if(audio_offset==AUDIO_BUFFER_SIZE) { +//fprintf(stderr,"pa_simple_write..."); result=pa_simple_write(stream, audio_buffer, (size_t)AUDIO_BUFFER_SIZE, &error); +//fprintf(stderr,"%d\n",result); if(result< 0) { fprintf(stderr, __FILE__": pa_simple_write() failed: %s\n", pa_strerror(error)); //_exit(1); @@ -95,30 +97,3 @@ void audio_write(short left_sample,short right_sample) { } } -/* -void audio_write(double* buffer,int samples) { - int i; - int result; - int error; - - for(i=0;i>8; - audio_buffer[audio_offset++]=left_sample; - audio_buffer[audio_offset++]=right_sample>>8; - audio_buffer[audio_offset++]=right_sample; - - if(audio_offset==AUDIO_BUFFER_SIZE) { - result=pa_simple_write(stream, audio_buffer, (size_t)AUDIO_BUFFER_SIZE, &error); - if(result< 0) { - fprintf(stderr, __FILE__": pa_simple_write() failed: %s\n", pa_strerror(error)); - //_exit(1); - } - audio_offset=0; - } - } - -} -*/ diff --git a/new_protocol.c b/new_protocol.c index b828ed6..3c134cc 100644 --- a/new_protocol.c +++ b/new_protocol.c @@ -135,8 +135,8 @@ static int outputsamples=BUFFER_SIZE; static double iqinputbuffer[BUFFER_SIZE*2]; static double audiooutputbuffer[BUFFER_SIZE*2]; -static short leftaudiosample; -static short rightaudiosample; +static int leftaudiosample; +static int rightaudiosample; static long audiosequence; static unsigned char audiobuffer[1444]; static int audioindex; @@ -145,6 +145,10 @@ static int audioindex; static int freedv_samples=0; static int freedv_resample=6; // convert from 48000 to 8000 #endif +#ifdef PSK +static int psk_samples=0; +static int psk_resample=6; // convert from 48000 to 8000 +#endif static void new_protocol_high_priority(int run,int tx,int drive); static void* new_protocol_thread(void* arg); @@ -615,8 +619,8 @@ void* new_protocol_thread(void* arg) { int b; int leftsample; int rightsample; - float leftsamplefloat; - float rightsamplefloat; + double leftsampledouble; + double rightsampledouble; int previous_ptt; int previous_dot; @@ -624,7 +628,7 @@ void* new_protocol_thread(void* arg) { int micsample; - float micsamplefloat; + double micsampledouble; int micsamples; @@ -718,13 +722,11 @@ fprintf(stderr,"outputsamples=%d\n", outputsamples); rightsample += (int)((unsigned char)buffer[b++]) << 8; rightsample += (int)((unsigned char)buffer[b++]); - leftsamplefloat=(float)leftsample/8388607.0; // for 24 bits - rightsamplefloat=(float)rightsample/8388607.0; // for 24 bits + leftsampledouble=(double)leftsample/8388607.0; // for 24 bits + rightsampledouble=(double)rightsample/8388607.0; // for 24 bits - //leftinputbuffer[samples]=leftsamplefloat; - //rightinputbuffer[samples]=rightsamplefloat; - iqinputbuffer[samples*2]=(double)leftsamplefloat; - iqinputbuffer[(samples*2)+1]=(double)rightsamplefloat; + iqinputbuffer[samples*2]=leftsampledouble; + iqinputbuffer[(samples*2)+1]=rightsampledouble; samples++; if(samples==BUFFER_SIZE) { @@ -794,9 +796,9 @@ if(dash!=previous_dash) { for(s=0;s>8; - audiobuffer[audioindex++]=leftaudiosample; - audiobuffer[audioindex++]=rightaudiosample>>8; - audiobuffer[audioindex++]=rightaudiosample; - if(audioindex>=sizeof(audiobuffer)) { - // insert the sequence - audiobuffer[0]=audiosequence>>24; - audiobuffer[1]=audiosequence>>16; - audiobuffer[2]=audiosequence>>8; - audiobuffer[3]=audiosequence; - // send the buffer - if(sendto(data_socket,audiobuffer,sizeof(audiobuffer),0,(struct sockaddr*)&audio_addr,audio_addr_length)<0) { - fprintf(stderr,"sendto socket failed for audio\n"); - exit(1); - } - audioindex=4; - audiosequence++; + audiobuffer[audioindex++]=leftaudiosample>>8; + audiobuffer[audioindex++]=leftaudiosample; + audiobuffer[audioindex++]=rightaudiosample>>8; + audiobuffer[audioindex++]=rightaudiosample; + if(audioindex>=sizeof(audiobuffer)) { + // insert the sequence + audiobuffer[0]=audiosequence>>24; + audiobuffer[1]=audiosequence>>16; + audiobuffer[2]=audiosequence>>8; + audiobuffer[3]=audiosequence; + // send the buffer + if(sendto(data_socket,audiobuffer,sizeof(audiobuffer),0,(struct sockaddr*)&audio_addr,audio_addr_length)<0) { + fprintf(stderr,"sendto socket failed for audio\n"); + exit(1); } + audioindex=4; + audiosequence++; } } } } - } else { + } +} #endif - for(j=0;j>8; - audiobuffer[audioindex++]=leftaudiosample; - audiobuffer[audioindex++]=rightaudiosample>>8; - audiobuffer[audioindex++]=rightaudiosample; - - if(audioindex>=sizeof(audiobuffer)) { - // insert the sequence - audiobuffer[0]=audiosequence>>24; - audiobuffer[1]=audiosequence>>16; - audiobuffer[2]=audiosequence>>8; - audiobuffer[3]=audiosequence; - // send the buffer - if(sendto(data_socket,audiobuffer,sizeof(audiobuffer),0,(struct sockaddr*)&audio_addr,audio_addr_length)<0) { - fprintf(stderr,"sendto socket failed for audio\n"); - exit(1); - } - audioindex=4; - audiosequence++; + audiobuffer[audioindex++]=leftaudiosample>>8; + audiobuffer[audioindex++]=leftaudiosample; + audiobuffer[audioindex++]=rightaudiosample>>8; + audiobuffer[audioindex++]=rightaudiosample; + + if(audioindex>=sizeof(audiobuffer)) { + // insert the sequence + audiobuffer[0]=audiosequence>>24; + audiobuffer[1]=audiosequence>>16; + audiobuffer[2]=audiosequence>>8; + audiobuffer[3]=audiosequence; + // send the buffer + if(sendto(data_socket,audiobuffer,sizeof(audiobuffer),0,(struct sockaddr*)&audio_addr,audio_addr_length)<0) { + fprintf(stderr,"sendto socket failed for audio\n"); + exit(1); } + audioindex=4; + audiosequence++; } + } +} + +static void full_rx_buffer() { + int j; + int error; + + fexchange0(CHANNEL_RX0, iqinputbuffer, audiooutputbuffer, &error); +#ifdef PSK + if(mode!=modePSK) { +#endif + Spectrum0(1, CHANNEL_RX0, 0, 0, iqinputbuffer); +#ifdef PSK + } +#endif + #ifdef FREEDV + if(mode==modeFREEDV) { + process_freedv_rx_buffer(); + return; } #endif + process_rx_buffer(); } static void full_tx_buffer() { long isample; long qsample; - double gain; + double gain=8388607.0*scale;; int j; int error; - if(tune==1) { - double tunefrequency = (double)(filterLow+((filterHigh - filterLow) / 2)); - sineWave(micinputbuffer, BUFFER_SIZE, phase, tunefrequency); - phase=cosineWave(micinputbuffer, BUFFER_SIZE, phase, tunefrequency); - } - fexchange0(CHANNEL_TX, micinputbuffer, micoutputbuffer, &error); - if(error!=0) { - fprintf(stderr,"fexchange0 returned error: %d for transmitter\n", error); + Spectrum0(1, CHANNEL_TX, 0, 0, micoutputbuffer); + +#ifdef FREEDV + if(mode==modeFREEDV) { + gain=32767.0*freedv_scale; } +#endif - if(d->device!=DEVICE_METIS || atlas_penelope) { + if(d->device==DEVICE_METIS && atlas_penelope) { if(tune) { - gain=8388607.0*255.0/(double)tune_drive; + gain=8388607.0*(double)tune_drive; } else { - gain=8388607.0*255.0/(double)drive; + gain=8388607.0*(double)drive; } - } else { - gain=8388607.0; } for(j=0;j