///////////////////////////////////////////////////////////////////////////////// // // main.cc is part of TestModbus-Server. // ///////////////////////////////////////////////////////////////////////////////// #include #include #include #include "config.h" #include "mbsconfig.h" #include "gui.h" #include "modbussrv.h" ////////////////////////////////////////////////////////////////////////////////////////////////// // // global variables // #define BUILDER_FILE "testmodbus-server.ui" Config config; ModbusSrv modbussrv; GtkBuilder *_builder_ = NULL; // work around for the thread situation uint16_t modbusdata[4][0x10000]; // needed for work with the gui will by synced by the modbus call back functions int gnome_dblclick_timeout = 250; gboolean modbus_callback(gpointer data); int main (int argc, char **argv) { GtkBuilder *builder; GObject *window; #ifdef BUILD_WINDOWS char buffer[16]; setvbuf (stdout, buffer, _IONBF, 16); #endif printf ("TestModbus-Server - %s\n", VERSION); printf (" https://steffen.gulpe.de/modbus-tcpip\n"); printf (" written by Steffen Pohle \n"); // // read out some gnome defined values GSettings *settings; GError *error = NULL; // from the google KI :) // Das Schema (Schema) für die Mauseinstellungen erstellen // In neueren GNOME-Versionen ist das Schema: 'org.gnome.desktop.peripherals.mouse' // In älteren Versionen könnte es 'org.gnome.settings-daemon.peripherals.mouse' sein settings = g_settings_new("org.gnome.desktop.peripherals.mouse"); if (settings == NULL) { fprintf(stderr, "Fehler beim Laden des GSettings-Schemas.\n"); return 1; } gnome_dblclick_timeout = g_settings_get_int(settings, "double-click"); printf("Die aktuelle Doppelklickzeit beträgt: %d ms\n", gnome_dblclick_timeout); g_object_unref(settings); gtk_init (&argc, &argv); _builder_ = builder = gtk_builder_new (); gtk_builder_add_from_file (builder, BUILDER_FILE, NULL); gtk_builder_connect_signals(builder, builder); // // #if defined _WIN32 || defined _WIN64 || defined __CYGWIN__ // #else // #endif // modbussrv.SetCallback(&modbus_callback); window = gtk_builder_get_object (builder, "testmodbus-server"); gtk_widget_show_all (GTK_WIDGET(window)); if (argc == 2) { printf ("Load File:%s\n", argv[1]); config.SetFilename(argv[1]); load_file(config.GetFilename()); } else { printf ("Load File:default.modbus\n"); config.SetFilename("default.modbus"); load_file(config.GetFilename()); } gtk_main (); return 0; } gboolean modbus_callback(gpointer data) { struct modbus_callback_data *mdata = (struct modbus_callback_data *) data; MBData_ChangeRegs(mdata->fc, mdata->regstart, mdata->count, mdata->r); Values_ChangeRegs(mdata->fc, mdata->regstart, mdata->count, mdata->r); if (mdata->r) free (mdata->r); free (mdata); return FALSE; };