Skip to content

Commit

Permalink
reset signal integrators just once after sending status to multiple p…
Browse files Browse the repository at this point in the history
…laces
  • Loading branch information
ka9q committed Apr 6, 2024
1 parent 048db3b commit e74086d
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 4 deletions.
6 changes: 4 additions & 2 deletions radio.c
Expand Up @@ -521,15 +521,17 @@ int downconvert(struct channel *chan){
send_radio_status((struct sockaddr *)&chan->status.dest_socket,&Frontend,chan);
chan->status.output_timer = chan->status.output_interval; // Reload
FREE(chan->status.command);
reset_radio_status(chan); // After both are sent
} else if(chan->status.global_timer != 0 && --chan->status.global_timer <= 0){
// Delayed status request, used mainly by all-channel polls to avoid big bursts
send_radio_status((struct sockaddr *)&Metadata_socket,&Frontend,chan); // Send status in response
chan->status.global_timer = 0; // to make sure
}
if(!chan->output.silent && chan->status.output_interval != 0 && chan->status.output_timer-- <= 0){
reset_radio_status(chan); // After both are sent
} else if(!chan->output.silent && chan->status.output_interval != 0 && chan->status.output_timer-- <= 0){
// Send status on output channel
send_radio_status((struct sockaddr *)&chan->status.dest_socket,&Frontend,chan);
chan->status.output_timer = chan->status.output_interval; // Reload
reset_radio_status(chan); // After both are sent
}
pthread_mutex_unlock(&chan->status.lock);
if(restart_needed)
Expand Down
1 change: 1 addition & 0 deletions radio.h
Expand Up @@ -297,6 +297,7 @@ void *demod_spectrum(void *);

int send_output(struct channel * restrict ,const float * restrict,int,bool);
int send_radio_status(struct sockaddr const *,struct frontend const *, struct channel *);
int reset_radio_status(struct channel *chan);
bool decode_radio_commands(struct channel *chan,uint8_t const *buffer,int length);
int decode_radio_status(struct frontend *frontend,struct channel *channel,uint8_t const *buffer,int length);

Expand Down
7 changes: 5 additions & 2 deletions radio_status.c
Expand Up @@ -89,6 +89,7 @@ void *radio_status(void *arg){
} else {
decode_radio_commands(chan,buffer+1,length-1);
send_radio_status((struct sockaddr *)&Metadata_socket,&Frontend,chan); // Send status in response
reset_radio_status(chan);
chan->status.global_timer = 0; // Just sent one
start_demod(chan);
if(Verbose)
Expand All @@ -104,15 +105,17 @@ void *radio_status(void *arg){

int send_radio_status(struct sockaddr const *sock,struct frontend const *frontend,struct channel *chan){
uint8_t packet[PKTSIZE];

chan->status.packets_out++;
int const len = encode_radio_status(frontend,chan,packet,sizeof(packet));
sendto(Output_fd,packet,len,0,sock,sizeof(struct sockaddr));
return 0;
}
int reset_radio_status(struct channel *chan){
// Reset integrators
chan->sig.bb_energy = 0;
chan->output.energy = 0;
chan->output.sum_gain_sq = 0;
chan->status.blocks_since_poll = 0;
sendto(Output_fd,packet,len,0,sock,sizeof(struct sockaddr));
return 0;
}

Expand Down

0 comments on commit e74086d

Please sign in to comment.