///////////////////////////////////////////////////////////////////////////////// // // main.cc is part of TestModbus-Server. // ///////////////////////////////////////////////////////////////////////////////// #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 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"); 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; };