SOLARIS_GTK4_DAQ/SOLARISDAQ.cpp

158 lines
5.7 KiB
C++
Raw Normal View History

#include <thread>
#include <mutex>
2023-01-23 14:44:27 -05:00
#include <gtk/gtk.h>
#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
}
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");
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
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
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);
}
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);
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);
//=================== clear memory
delete digi;
delete influx;
printf("============= GoodBye! ============\n");
2023-01-23 14:44:27 -05:00
return status;
}