You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
testmodbus-server/server.cc

105 lines
2.9 KiB

/////////////////////////////////////////////////////////////////////////////////
//
// main.cc is part of TestModbus-Server.
//
/////////////////////////////////////////////////////////////////////////////////
#include <gio/gio.h>
#include <stdio.h>
#include <glib.h>
#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 <steffen@gulpe.de>\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;
};