Example #1
0
void sim_mode_cb(GtkWidget *widget, gpointer data) {
  BAND* band;
  BANDSTACK_ENTRY *entry;

fprintf(stderr,"sim_mode_cb\n");
  band=band_get_current_band();
  entry=bandstack_entry_get_current();
  if(function) {
    entry->mode--;
    if(entry->mode<0) {
      entry->mode=MODES-1;
    }
  } else {
    entry->mode++;
    if(entry->mode>=MODES) {
      entry->mode=0;
    }
  }
  setMode(entry->mode);

  FILTER* band_filters=filters[entry->mode];
  FILTER* band_filter=&band_filters[entry->filter];
  setFilter(band_filter->low,band_filter->high);

  vfo_update(NULL);
}
Example #2
0
void sim_filter_cb(GtkWidget *widget, gpointer data) {
  BAND* band;
  BANDSTACK_ENTRY *entry;

fprintf(stderr,"sim_filter_cb\n");
  band=band_get_current_band();
  entry=bandstack_entry_get_current();
  // note order of filter reversed (largest first)
  if(function) {
    entry->filter++;
    if(entry->filter>=FILTERS) {
      entry->filter=0;
    }
  } else {
    entry->filter--;
    if(entry->filter<0) {
      entry->filter=FILTERS-1;
    }
  }

  FILTER* band_filters=filters[entry->mode];
  FILTER* band_filter=&band_filters[entry->filter];
  setFilter(band_filter->low,band_filter->high);

  vfo_update(NULL);

}
Example #3
0
File: vfo.c Project: g0orx/pihpsdr
void vfo_move_to(int hz) {
  if(!locked) {
    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();

#ifdef LIMESDR
    if(protocol==LIMESDR_PROTOCOL) {
      setFrequency((entry->frequencyA+ddsOffset-hz)/step*step);
    } else {
#endif
      if(ctun) {
        setFrequency((entry->frequencyA+hz)/step*step);
      } else {
        long f=(entry->frequencyA+ddsOffset+hz)/step*step;
        if(mode==modeCWL) {
          f+=cw_keyer_sidetone_frequency;
        } else if(mode==modeCWU) {
          f-=cw_keyer_sidetone_frequency;
        }
        setFrequency(f);
      }
#ifdef LIMESDR
    }
#endif
    vfo_update(NULL);
  }
}
Example #4
0
static void band_select_cb(GtkWidget *widget, gpointer data) {
  GtkWidget *label;
  int b=(int)data;
  BANDSTACK_ENTRY *entry;
  if(b==band_get_current()) {
    entry=bandstack_entry_next();
  } else {
    BAND* band=band_set_current(b);
    entry=bandstack_entry_get_current();
    gtk_widget_override_background_color(last_band, GTK_STATE_NORMAL, &white);
    last_band=widget;
    gtk_widget_override_background_color(last_band, GTK_STATE_NORMAL, &gray);
  }
  setMode(entry->mode);
  FILTER* band_filters=filters[entry->mode];
  FILTER* band_filter=&band_filters[entry->filter];
  setFilter(band_filter->low,band_filter->high);
  setFrequency(entry->frequencyA);

  BAND *band=band_get_current_band();
  set_alex_rx_antenna(band->alexRxAntenna);
  set_alex_tx_antenna(band->alexTxAntenna);
  set_alex_attenuation(band->alexAttenuation);

  vfo_update(NULL);

  setFrequency(entry->frequencyA);
}
Example #5
0
File: vfo.c Project: frohro/pihpsdr
void vfo_step(int steps) {
  if(!locked) {
    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
    //entry->frequencyA=entry->frequencyA+(steps*step);
    //setFrequency(entry->frequencyA);
    setFrequency(entry->frequencyA+(steps*step));
    vfo_update(NULL);
  }
}
Example #6
0
static void cw_keyer_sidetone_frequency_value_changed_cb(GtkWidget *widget, gpointer data) {
  cw_keyer_sidetone_frequency=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget));
  if(mode==modeCWL || mode==modeCWU) {
    BANDSTACK_ENTRY *entry=bandstack_entry_get_current();
    FILTER* band_filters=filters[entry->mode];
    FILTER* band_filter=&band_filters[entry->filter];
    setFilter(band_filter->low,band_filter->high);
  }
  cw_changed();
}
Example #7
0
File: gpio.c Project: g0orx/pihpsdr
static int vfo_encoder_changed(void *data) {
  if(!locked) {
    int pos=*(int*)data;

    // VFO
    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
    setFrequency(entry->frequencyA+ddsOffset+(pos*step));
    vfo_update(NULL);
  }
  free(data);
  return 0;
}
Example #8
0
int ptt_update(void *data) {
  BANDSTACK_ENTRY *entry;
  entry=bandstack_entry_get_current();
  int ptt=(int)data;
  if((entry->mode==modeCWL || entry->mode==modeCWU) && cw_keyer_internal==1) {
    //if(ptt!=getMox()) {
    //  mox_cb(NULL,NULL);
    //}
  } else {
    mox_cb(NULL,NULL);
  }
  return 0;
}
Example #9
0
static void filter_select_cb(GtkWidget *widget, gpointer data) {
  int f=(int)data;
  BANDSTACK_ENTRY *entry;
  entry=bandstack_entry_get_current();
  entry->filter=f;
  FILTER* band_filters=filters[entry->mode];
  FILTER* band_filter=&band_filters[entry->filter];
  setFilter(band_filter->low,band_filter->high);
  gtk_widget_override_background_color(last_filter, GTK_STATE_NORMAL, &white);
  last_filter=widget;
  gtk_widget_override_background_color(last_filter, GTK_STATE_NORMAL, &gray);
  vfo_update(NULL);
}
Example #10
0
File: vfo.c Project: frohro/pihpsdr
void vfo_move_to(int hz) {
  if(!locked) {
    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
    //entry->frequencyA=(entry->frequencyA+hz)/step*step;
    //setFrequency(entry->frequencyA);
#ifdef LIMESDR
    if(protocol==LIMESDR_PROTOCOL)
      setFrequency((entry->frequencyA+ddsOffset-hz)/step*step);
    else
#endif
      setFrequency((entry->frequencyA+ddsOffset+hz)/step*step);
    vfo_update(NULL);
  }
}
Example #11
0
void sim_band_cb(GtkWidget *widget, gpointer data) {
  BAND* band;
  BANDSTACK_ENTRY *entry;
fprintf(stderr,"sim_band_cb\n");
  int b=band_get_current();
  if(function) {
    b--;
    if(b<0) {
      b=BANDS-1;
    }
#ifdef LIMESDR
    if(protocol!=LIMESDR_PROTOCOL) {
      if(b==band3400) {
        b=band6;
      }
    }
#endif
  } else {
    b++;
    if(b>=BANDS) {
      b=0;
    }
#ifdef LIMESDR
    if(protocol!=LIMESDR_PROTOCOL) {
      if(b==band70) { 
        b=bandGen;
      }
    }
#endif
  }
  band=band_set_current(b);
  entry=bandstack_entry_get_current();

  setFrequency(entry->frequencyA);
  setMode(entry->mode);
  FILTER* band_filters=filters[entry->mode];
  FILTER* band_filter=&band_filters[entry->filter];
  setFilter(band_filter->low,band_filter->high);

  band=band_get_current_band();
  set_alex_rx_antenna(band->alexRxAntenna);
  set_alex_tx_antenna(band->alexTxAntenna);
  set_alex_attenuation(band->alexAttenuation);
  vfo_update(NULL);
}
Example #12
0
File: vfo.c Project: g0orx/pihpsdr
GtkWidget* vfo_init(int width,int height,GtkWidget *parent) {

fprintf(stderr,"vfo_init: width=%d height=%d\n", width, height);
  parent_window=parent;
  my_width=width;
  my_height=height;

  vfo = gtk_drawing_area_new ();
  gtk_widget_set_size_request (vfo, width, height);

  /* Signals used to handle the backing surface */
  g_signal_connect (vfo, "draw",
            G_CALLBACK (vfo_draw_cb), NULL);
  g_signal_connect (vfo,"configure-event",
            G_CALLBACK (vfo_configure_event_cb), NULL);

  /* Event signals */
  g_signal_connect (vfo, "button-press-event",
            G_CALLBACK (vfo_press_event_cb), NULL);
  g_signal_connect(vfo,"scroll_event",
            G_CALLBACK(vfo_scroll_event_cb),NULL);
  gtk_widget_set_events (vfo, gtk_widget_get_events (vfo)
                     | GDK_BUTTON_PRESS_MASK
                     | GDK_SCROLL_MASK);

fprintf(stderr,"vfo_init: set Frequency,Mode,Filter\n");
  BAND *band=band_get_current_band();
  BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
  setFrequency(entry->frequencyA);
  setMode(entry->mode);
  FILTER* band_filters=filters[entry->mode];
  FILTER* band_filter=&band_filters[entry->filter];
  setFilter(band_filter->low,band_filter->high);

  set_alex_rx_antenna(band->alexRxAntenna);
  set_alex_tx_antenna(band->alexTxAntenna);
  set_alex_attenuation(band->alexAttenuation);

  return vfo;
}
Example #13
0
static void filter_cb(GtkWidget *widget, gpointer data) {
  BANDSTACK_ENTRY *entry=bandstack_entry_get_current();
  FILTER* band_filters=filters[entry->mode];
  GtkWidget *dialog=gtk_dialog_new_with_buttons("Mode",GTK_WINDOW(parent_window),GTK_DIALOG_DESTROY_WITH_PARENT,NULL,NULL);
  GtkWidget *content=gtk_dialog_get_content_area(GTK_DIALOG(dialog));
  GtkWidget *grid=gtk_grid_new();
  gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE);
  gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE);

  GtkWidget *b;
  int i;
  for(i=0;i<FILTERS;i++) {
    FILTER* band_filter=&band_filters[i];
    GtkWidget *b=gtk_button_new_with_label(band_filters[i].title);
    //gtk_widget_override_font(b, pango_font_description_from_string("Arial 20"));
    if(i==entry->filter) {
      gtk_widget_override_background_color(b, GTK_STATE_NORMAL, &gray);
      last_filter=b;
    } else {
      gtk_widget_override_background_color(b, GTK_STATE_NORMAL, &white);
    }
    gtk_widget_show(b);
    gtk_grid_attach(GTK_GRID(grid),b,i%5,i/5,1,1);
    g_signal_connect(b,"pressed",G_CALLBACK(filter_select_cb),(gpointer *)i);
  }
  gtk_container_add(GTK_CONTAINER(content),grid);
  GtkWidget *close_button=gtk_dialog_add_button(GTK_DIALOG(dialog),"Close",GTK_RESPONSE_OK);
  //gtk_widget_override_font(close_button, pango_font_description_from_string("Arial 20"));
  gtk_widget_show_all(dialog);

  g_signal_connect_swapped (dialog,
                           "response",
                           G_CALLBACK (gtk_widget_destroy),
                           dialog);

  int result=gtk_dialog_run(GTK_DIALOG(dialog));

}
Example #14
0
File: vfo.c Project: frohro/pihpsdr
int vfo_update(void *data) {
    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
    FILTER* band_filters=filters[entry->mode];
    FILTER* band_filter=&band_filters[entry->filter];
    if(vfo_surface) {
        cairo_t *cr;
        cr = cairo_create (vfo_surface);
        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_paint (cr);

        cairo_select_font_face(cr, "Arial",
            CAIRO_FONT_SLANT_NORMAL,
            CAIRO_FONT_WEIGHT_BOLD);
        //cairo_set_font_size(cr, 36);
        cairo_set_font_size(cr, 28);

        if(isTransmitting()) {
            cairo_set_source_rgb(cr, 1, 0, 0);
        } else {
            cairo_set_source_rgb(cr, 0, 1, 0);
        }

        long long f=entry->frequencyA+ddsOffset;

        char sf[32];
        //sprintf(sf,"%0lld.%06lld MHz",entry->frequencyA/(long long)1000000,entry->frequencyA%(long long)1000000);
        sprintf(sf,"%0lld.%06lld MHz",f/(long long)1000000,f%(long long)1000000);
        cairo_move_to(cr, 5, 30);  
        cairo_show_text(cr, sf);

        cairo_set_font_size(cr, 12);

        cairo_move_to(cr, (my_width/2)+40, 30);  
        //cairo_show_text(cr, getFrequencyInfo(entry->frequencyA));
        cairo_show_text(cr, getFrequencyInfo(f));

        sprintf(sf,"Step %dHz",step);
        cairo_move_to(cr, (my_width/2)+40, 15);  
        cairo_show_text(cr, sf);

        if(locked) {
            cairo_set_source_rgb(cr, 1, 0, 0);
            cairo_move_to(cr, 10, 50);  
            cairo_show_text(cr, "Locked");
        }

        if(function) {
            cairo_set_source_rgb(cr, 1, 0.5, 0);
            cairo_move_to(cr, 70, 50);  
            cairo_show_text(cr, "Function");
        }

        cairo_set_source_rgb(cr, 1, 1, 0);
        cairo_move_to(cr, 130, 50);  
        cairo_show_text(cr, mode_string[entry->mode]);

        cairo_move_to(cr, 190, 50);  
        cairo_show_text(cr, band_filter->title);

        cairo_move_to(cr, 250, 50);  
        if(nr) {
          cairo_show_text(cr, "NR");
        }
        if(nr2) {
          cairo_show_text(cr, "NR2");
        }
        if(nb) {
          cairo_show_text(cr, "NB");
        }
        if(nb2) {
          cairo_show_text(cr, "NB2");
        }
        if(anf) {
          cairo_show_text(cr, "ANF");
        }
        if(snb) {
          cairo_show_text(cr, "SNB");
        }

        cairo_move_to(cr, 310, 50);  
        switch(agc) {
          case AGC_OFF:
            cairo_show_text(cr, "AGC OFF");
            break;
          case AGC_LONG:
            cairo_show_text(cr, "AGC LONG");
            break;
          case AGC_SLOW:
            cairo_show_text(cr, "AGC SLOW");
            break;
          case AGC_MEDIUM:
            cairo_show_text(cr, "AGC MEDIUM");
            break;
          case AGC_FAST:
            cairo_show_text(cr, "AGC FAST");
            break;
        }

        cairo_destroy (cr);
        gtk_widget_queue_draw (vfo);
    } else {
fprintf(stderr,"vfo_update: no surface!\n");
    }
    return 0;
}
Example #15
0
File: vfo.c Project: g0orx/pihpsdr
int vfo_update(void *data) {
    BANDSTACK_ENTRY* entry=bandstack_entry_get_current();
    FILTER* band_filters=filters[entry->mode];
    FILTER* band_filter=&band_filters[entry->filter];
    if(vfo_surface) {
        cairo_t *cr;
        cr = cairo_create (vfo_surface);
        cairo_set_source_rgb (cr, 0, 0, 0);
        cairo_paint (cr);

        cairo_select_font_face(cr, "FreeMono",
            CAIRO_FONT_SLANT_NORMAL,
            CAIRO_FONT_WEIGHT_BOLD);

        char version[16];
        char text[128];
        if(radio->protocol==ORIGINAL_PROTOCOL) {
            sprintf(version,"%d.%d",
                radio->software_version/10,
                radio->software_version%10);
        } else {
            sprintf(version,"%d.%d.%d",
                radio->software_version/100,
                (radio->software_version%100)/10,
                radio->software_version%10);
        }

        switch(radio->protocol) {
            case ORIGINAL_PROTOCOL:
            case NEW_PROTOCOL:
              sprintf(text,"%s %s %s",
                    radio->name,
                    version,
                    inet_ntoa(radio->info.network.address.sin_addr));
              break;
#ifdef LIMESDR
            case LIMESDR_PROTOCOL:
              sprintf(text,"%s\n",
                    radio->name);
              break;
#endif
        }
        cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
        cairo_set_font_size(cr, 10);
        cairo_move_to(cr, 5, 15);  
        cairo_show_text(cr, text);

        long long f=entry->frequencyA+ddsOffset;
        char sf[32];
        sprintf(sf,"%0lld.%06lld MHz",f/(long long)1000000,f%(long long)1000000);
        cairo_set_font_size(cr, 28);
        if(isTransmitting()) {
            cairo_set_source_rgb(cr, 1, 0, 0);
        } else {
            cairo_set_source_rgb(cr, 0, 1, 0);
        }
        cairo_move_to(cr, 5, 38);  
        cairo_show_text(cr, sf);

        cairo_set_font_size(cr, 12);

        if(rit==0) {
            cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
        } else {
            cairo_set_source_rgb(cr, 0, 1, 0);
        }
        sprintf(sf,"RIT: %d Hz",rit);
        cairo_move_to(cr, (my_width/4)*3, 38);  
        cairo_show_text(cr, sf);

        cairo_set_source_rgb(cr, 0, 1, 0);

        int s=0;
        while(steps[s]!=step && steps[s]!=0) {
          s++;
        }
        sprintf(sf,"Step %s",step_labels[s]);
        cairo_move_to(cr, my_width/2, 15);  
        cairo_show_text(cr, sf);

        cairo_move_to(cr, (my_width/4)*3, 15);  
        cairo_show_text(cr, getFrequencyInfo(f));

        if(locked) {
            cairo_set_source_rgb(cr, 1, 0, 0);
            cairo_move_to(cr, 10, 50);  
            cairo_show_text(cr, "Locked");
        }

        if(function) {
            cairo_set_source_rgb(cr, 1, 0.5, 0);
            cairo_move_to(cr, 70, 50);  
            cairo_show_text(cr, "Function");
        }

        cairo_set_source_rgb(cr, 1, 1, 0);
        cairo_move_to(cr, 130, 50);  
        cairo_show_text(cr, mode_string[entry->mode]);

        cairo_move_to(cr, 190, 50);  
        cairo_show_text(cr, band_filter->title);

        cairo_move_to(cr, 250, 50);  
        if(nr) {
          cairo_show_text(cr, "NR");
        }
        if(nr2) {
          cairo_show_text(cr, "NR2");
        }
        if(nb) {
          cairo_show_text(cr, "NB");
        }
        if(nb2) {
          cairo_show_text(cr, "NB2");
        }
        if(anf) {
          cairo_show_text(cr, "ANF");
        }
        if(snb) {
          cairo_show_text(cr, "SNB");
        }

        cairo_move_to(cr, 310, 50);  
        switch(agc) {
          case AGC_OFF:
            cairo_show_text(cr, "AGC OFF");
            break;
          case AGC_LONG:
            cairo_show_text(cr, "AGC LONG");
            break;
          case AGC_SLOW:
            cairo_show_text(cr, "AGC SLOW");
            break;
          case AGC_MEDIUM:
            cairo_show_text(cr, "AGC MEDIUM");
            break;
          case AGC_FAST:
            cairo_show_text(cr, "AGC FAST");
            break;
        }

        cairo_destroy (cr);
        gtk_widget_queue_draw (vfo);
    } else {
fprintf(stderr,"vfo_update: no surface!\n");
    }
    return 0;
}