if(a->mode==PRESSED) {
vfo[active_receiver->id].ctun=!vfo[active_receiver->id].ctun;
if(!vfo[active_receiver->id].ctun) {
- vfo[active_receiver->id].offset=0;
+ // when deactivating CTUN, keep frequency
+ setFrequency(vfo[active_receiver->id].ctun_frequency);
+ } else {
+ // when activating CTUN, continue with current frequency
+ vfo[active_receiver->id].ctun_frequency=vfo[active_receiver->id].frequency;
}
- vfo[active_receiver->id].ctun_frequency=vfo[active_receiver->id].frequency;
+ // in either case, start with zero offset after toggling CTUN
+ vfo[active_receiver->id].offset=0;
set_offset(receiver[active_receiver->id],vfo[active_receiver->id].offset);
g_idle_add(ext_vfo_update, NULL);
}
int v=active_receiver->id;
vfo[v].band=get_band_from_frequency(f);
- switch(protocol) {
- case NEW_PROTOCOL:
- case ORIGINAL_PROTOCOL:
-#ifdef SOAPYSDR
- case SOAPYSDR_PROTOCOL:
-#endif
- if(vfo[v].ctun) {
- long long minf=vfo[v].frequency-(long long)(active_receiver->sample_rate/2);
- long long maxf=vfo[v].frequency+(long long)(active_receiver->sample_rate/2);
- if(f<minf) f=minf;
- if(f>maxf) f=maxf;
- vfo[v].ctun_frequency=f;
- vfo[v].offset=f-vfo[v].frequency;
- set_offset(active_receiver,vfo[v].offset);
- return;
- } else {
- vfo[v].frequency=f;
- }
- break;
+ if(vfo[v].ctun) {
+ //
+ // If new frequency is within "window", change the CTUN frequency and
+ // update the offset. If it is outside, deactivate CTUN and fall
+ // through
+ //
+ long long minf=vfo[v].frequency-(long long)(active_receiver->sample_rate/2);
+ long long maxf=vfo[v].frequency+(long long)(active_receiver->sample_rate/2);
+ if(f > minf && f < maxf) {
+ vfo[v].ctun_frequency=f;
+ vfo[v].offset=f-vfo[v].frequency;
+ set_offset(active_receiver,vfo[v].offset);
+ return;
+ }
+ vfo[v].ctun=0;
+ vfo[v].ctun_frequency=0;
+ vfo[v].offset=0;
+ set_offset(active_receiver,vfo[v].offset);
}
+ vfo[v].frequency=f;
switch(protocol) {
case NEW_PROTOCOL:
//
// Store current frequency, mode, and filter in slot #index
//
- mem[index].frequency = vfo[id].frequency;
+ if (vfo[id].ctun) {
+ mem[index].frequency = vfo[id].ctun_frequency;
+ } else {
+ mem[index].frequency = vfo[id].frequency;
+ }
mem[index].mode = vfo[id].mode;
mem[index].filter=vfo[id].filter;