2023-01-24 12:53:59 -05:00
|
|
|
#include <thread>
|
|
|
|
#include <mutex>
|
|
|
|
|
2023-01-23 14:44:27 -05:00
|
|
|
#include <gtk/gtk.h>
|
2023-01-24 12:53:59 -05:00
|
|
|
#include "ClassDigitizer2Gen.h"
|
|
|
|
#include "influxdb.h"
|
|
|
|
|
|
|
|
std::mutex digiMTX;
|
|
|
|
Digitizer2Gen * digi = NULL; // new Digitizer2Gen();
|
|
|
|
unsigned short nDigi = 0;
|
|
|
|
InfluxDB * influx = NULL; // new InfluxDB("https://fsunuc.physics.fsu.edu/influx/", false);
|
|
|
|
|
|
|
|
GtkTextBuffer * logBuffer = NULL;
|
|
|
|
GtkWidget * notebook = NULL;
|
|
|
|
GtkWidget * bnOpenDigis = NULL;
|
|
|
|
|
|
|
|
static void OpenDigitizers(){
|
|
|
|
|
|
|
|
digi = new Digitizer2Gen();
|
|
|
|
digi->OpenDigitizer("dig2://192.168.0.100/");
|
|
|
|
//digi->Reset();
|
|
|
|
|
|
|
|
if( digi->IsConnected() ){
|
|
|
|
gtk_text_buffer_set_text(logBuffer, ("A digitizer " + digi->ReadValue("/par/SerialNum") + " is opened.").c_str(), -1);
|
|
|
|
|
|
|
|
GtkWidget * box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); // 2nd arg is the spacing
|
|
|
|
gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
|
|
|
|
gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
|
|
|
|
gtk_box_set_homogeneous(GTK_BOX (box), true);
|
|
|
|
|
|
|
|
gtk_notebook_append_page( GTK_NOTEBOOK(notebook), box, gtk_label_new( ("Digi-" + digi->ReadValue("/par/SerialNum") ).c_str() ) ) ;
|
|
|
|
|
|
|
|
GtkWidget * v1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); gtk_box_append( GTK_BOX(box), v1);
|
|
|
|
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("IP: " + digi->ReadValue("/par/IPAddress")).c_str()));
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("Model name: " + digi->ReadValue("/par/ModelName")).c_str()));
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("Firmware version: " + digi->ReadValue("/par/cupver")).c_str()));
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("DPPType: " + digi->ReadValue("/par/FwType")).c_str()));
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("DPP version: " + digi->ReadValue("/par/FPGA_FwVer")).c_str()));
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("ADC bits: " + digi->ReadValue("/par/ADC_Nbit")).c_str()));
|
|
|
|
gtk_box_append(GTK_BOX(v1), gtk_label_new( ("ADC rate: " + digi->ReadValue("/par/ADC_SamplRate") + " Msps, ch2ns: " + std::to_string(digi->GetCh2ns()) + " ns").c_str()));
|
|
|
|
|
|
|
|
unsigned short nCh = digi->GetNChannels();
|
|
|
|
|
|
|
|
nDigi ++;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void CloseDigitizers(){
|
|
|
|
|
|
|
|
if( digi != NULL){
|
|
|
|
digi->CloseDigitizer();
|
|
|
|
delete digi;
|
|
|
|
digi = NULL;
|
|
|
|
gtk_notebook_remove_page(GTK_NOTEBOOK(notebook), nDigi);
|
|
|
|
}else{
|
|
|
|
gtk_text_buffer_set_text(logBuffer, "No digitizer is opened.", -1);
|
|
|
|
}
|
2023-01-23 14:44:27 -05:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2023-01-24 12:53:59 -05:00
|
|
|
static void ProgramSetting(){
|
|
|
|
|
|
|
|
GtkWidget * window = gtk_window_new();
|
|
|
|
gtk_window_set_title( GTK_WINDOW(window), "Program Setting");
|
|
|
|
gtk_window_set_default_size( GTK_WINDOW(window), 600, 500); // w, h
|
|
|
|
|
|
|
|
gtk_widget_show(window);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void MainWindow (GtkApplication *app){
|
2023-01-23 14:44:27 -05:00
|
|
|
|
|
|
|
GtkWidget * window = gtk_application_window_new(app);
|
|
|
|
gtk_window_set_title( GTK_WINDOW(window), "SOLARIS DAQ");
|
2023-01-24 12:53:59 -05:00
|
|
|
gtk_window_set_default_size( GTK_WINDOW(window), 600, 600); // w, h
|
|
|
|
|
|
|
|
//=========== Tabs
|
|
|
|
notebook = gtk_notebook_new();
|
|
|
|
gtk_window_set_child( GTK_WINDOW(window), notebook);
|
|
|
|
|
|
|
|
//=========== Main Tab
|
|
|
|
GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); // 2nd arg is the spacing
|
|
|
|
//gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
|
|
|
|
//gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
|
|
|
|
//gtk_box_set_homogeneous(GTK_BOX (box), true);
|
|
|
|
gtk_notebook_append_page( GTK_NOTEBOOK(notebook), box, gtk_label_new("Main"));
|
|
|
|
|
|
|
|
{
|
|
|
|
GtkWidget * box2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
|
|
|
|
gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
|
|
|
|
gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
|
|
|
|
gtk_box_set_homogeneous(GTK_BOX (box2), true);
|
|
|
|
gtk_box_append( GTK_BOX(box), box2);
|
|
|
|
|
|
|
|
|
|
|
|
GtkWidget * bnProgramSettings = gtk_button_new_with_label("Program Settings");
|
|
|
|
g_signal_connect( bnProgramSettings, "clicked", G_CALLBACK(ProgramSetting), NULL);
|
|
|
|
gtk_box_append( GTK_BOX(box2), bnProgramSettings);
|
2023-01-23 14:44:27 -05:00
|
|
|
|
2023-01-24 12:53:59 -05:00
|
|
|
GtkWidget * bnOpenDigis = gtk_button_new_with_label("Open Digitizers");
|
|
|
|
g_signal_connect( bnOpenDigis, "clicked", G_CALLBACK(OpenDigitizers), NULL);
|
|
|
|
gtk_box_append( GTK_BOX(box2), bnOpenDigis);
|
2023-01-23 14:44:27 -05:00
|
|
|
|
2023-01-24 12:53:59 -05:00
|
|
|
GtkWidget * bnCloseDigis = gtk_button_new_with_label("Close Digitizers");
|
|
|
|
g_signal_connect( bnCloseDigis, "clicked", G_CALLBACK(CloseDigitizers), NULL);
|
|
|
|
gtk_box_append( GTK_BOX(box2), bnCloseDigis);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
GtkWidget * box3 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
|
|
|
|
gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
|
|
|
|
gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
|
|
|
|
gtk_box_set_homogeneous(GTK_BOX (box3), true);
|
|
|
|
gtk_box_append( GTK_BOX(box), box3);
|
|
|
|
|
|
|
|
GtkWidget * bnStart = gtk_button_new_with_label("Start Run");
|
|
|
|
//g_signal_connect( bnStart, "clicked", G_CALLBACK(OpenDigitizers), NULL);
|
|
|
|
gtk_box_append( GTK_BOX(box3), bnStart);
|
|
|
|
|
|
|
|
GtkWidget * bnEnd = gtk_button_new_with_label("End Run");
|
|
|
|
//g_signal_connect( bnEnd, "clicked", G_CALLBACK(OpenDigitizers), NULL);
|
|
|
|
gtk_box_append( GTK_BOX(box3), bnEnd);
|
|
|
|
|
2023-01-26 17:05:13 -05:00
|
|
|
GtkWidget * spinRunNum = gtk_spin_button_new(gtk_adjustment_new(0, 0, 1000, 1, 10, 0), 1, 0);
|
|
|
|
gtk_box_append( GTK_BOX(box3), spinRunNum);
|
2023-01-24 12:53:59 -05:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
GtkWidget * logBox = gtk_scrolled_window_new ();
|
|
|
|
gtk_box_append( GTK_BOX(box), logBox);
|
|
|
|
|
|
|
|
GtkWidget * logTextView = gtk_text_view_new();
|
|
|
|
logBuffer = gtk_text_view_get_buffer( GTK_TEXT_VIEW(logTextView));
|
|
|
|
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (logTextView), GTK_WRAP_WORD_CHAR);
|
|
|
|
gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (logBox), logTextView);
|
2023-01-23 14:44:27 -05:00
|
|
|
|
|
|
|
gtk_widget_show(window);
|
|
|
|
}
|
|
|
|
|
|
|
|
int main (int argc, char **argv){
|
|
|
|
|
|
|
|
GtkApplication * app = gtk_application_new("example.example", G_APPLICATION_FLAGS_NONE);
|
2023-01-24 12:53:59 -05:00
|
|
|
g_signal_connect( app, "activate", G_CALLBACK(MainWindow), NULL);
|
2023-01-23 14:44:27 -05:00
|
|
|
int status = g_application_run( G_APPLICATION(app), argc, argv);
|
|
|
|
g_object_unref( app);
|
|
|
|
|
2023-01-24 12:53:59 -05:00
|
|
|
//=================== clear memory
|
|
|
|
delete digi;
|
|
|
|
delete influx;
|
|
|
|
printf("============= GoodBye! ============\n");
|
|
|
|
|
2023-01-23 14:44:27 -05:00
|
|
|
return status;
|
|
|
|
}
|