@ -10,9 +10,8 @@
# endif
# endif
# include <stdio.h>
# include <stdio.h>
# include <list>
# include <list>
# include <sys/time.h>
# include "gui.h"
# include "gui.h"
# include "modbus srv .h"
# include "modbus .h"
# include "guivalues.h"
# include "guivalues.h"
# include "json.h"
# include "json.h"
# include "mbsconfig.h"
# include "mbsconfig.h"
@ -20,28 +19,17 @@
extern GtkBuilder * _builder_ ; // work around for threads
extern GtkBuilder * _builder_ ; // work around for threads
extern void addvar_displaywithvalues ( gpointer data , GuiValue * v ) ;
extern void addvar_displaywithvalues ( gpointer data , GuiValue * v ) ;
extern int gnome_dblclick_timeout ;
int gui_double_click = 0 ;
struct timeval doubleclick_time ;
/// @brief function is too slow i need <400ms .... :( but we will resit the value jzst in case...
/// @param data
/// @return
gboolean cb_timeout_doubleclick ( gpointer data ) {
gui_double_click = 0 ;
return FALSE ;
} ;
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// call back functions
// call back functions
//
//
gboolean cb_window_delete_event ( GtkWidget * widget , GdkEvent * event , gpointer data ) {
// GtkBuilder *builder = (GtkBuilder *) data;
gboolean cb_window_delete_event ( GtkWidget * widget , gpointer data ) {
cb_menu_save ( widget , data ) ;
cb_menu_save ( widget , data ) ;
return FALSE ;
return FALSE ;
}
}
@ -56,9 +44,9 @@ void cb_window_show (GtkWidget *widget, gpointer data) {
void cb_menu_new ( GtkWidget * widget , gpointer data ) {
void cb_menu_new ( GtkWidget * widget , gpointer data ) {
// GtkBuilder *builder = (GtkBuilder *) data;
// GtkBuilder *builder = (GtkBuilder *) data;
modbus srv . EnableAll ( 0 ) ;
modbus . EnableAll ( 0 ) ;
MBData_EnableAll ( 0 ) ;
MBData_EnableAll ( 0 ) ;
modbus srv . RequestsClear ( ) ;
modbus . RequestsClear ( ) ;
MBData_ReqReset ( ) ;
MBData_ReqReset ( ) ;
Value_DelAll ( ) ;
Value_DelAll ( ) ;
} ;
} ;
@ -104,91 +92,6 @@ void cb_menu_open (GtkWidget *widget, gpointer data) {
} ;
} ;
void cb_menu_openbulk ( GtkWidget * widget , gpointer data ) {
GtkBuilder * builder = ( GtkBuilder * ) data ;
GtkWindow * window = GTK_WINDOW ( gtk_builder_get_object ( builder , " testmodbus-server " ) ) ;
GtkWidget * dialog ;
GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN ;
GtkFileFilter * filter ;
gint res ;
printf ( " %s:%d %s \n " , __FILE__ , __LINE__ , __FUNCTION__ ) ;
dialog = gtk_file_chooser_dialog_new ( " Open Bulk File " ,
window ,
action ,
" _Cancel " ,
GTK_RESPONSE_CANCEL ,
" _Open " ,
GTK_RESPONSE_ACCEPT ,
NULL ) ;
filter = gtk_file_filter_new ( ) ;
gtk_file_filter_add_pattern ( filter , " *.csv " ) ;
gtk_file_filter_set_name ( filter , " CSV File " ) ;
gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER ( dialog ) , filter ) ;
filter = gtk_file_filter_new ( ) ;
gtk_file_filter_add_pattern ( filter , " *.* " ) ;
gtk_file_filter_set_name ( filter , " All Files " ) ;
gtk_file_chooser_add_filter ( GTK_FILE_CHOOSER ( dialog ) , filter ) ;
res = gtk_dialog_run ( GTK_DIALOG ( dialog ) ) ;
if ( res = = GTK_RESPONSE_ACCEPT ) {
char * filename ;
GtkFileChooser * chooser = GTK_FILE_CHOOSER ( dialog ) ;
filename = gtk_file_chooser_get_filename ( chooser ) ;
load_bulkfile ( filename ) ;
g_free ( filename ) ;
}
gtk_widget_destroy ( dialog ) ;
} ;
gboolean cb_vars_btnrelease ( GtkWidget * widget , gpointer user_data ) {
//
// selfhandling double click :) seem to work
if ( gui_double_click = = 1 & & get_cycletime ( & doubleclick_time ) < gnome_dblclick_timeout ) {
GuiValue v ;
GtkTreeIter iter ;
GtkTreeModel * model ;
GtkWidget * vars = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( _builder_ ) , " vars_tv " ) ) ;
gchar * v_name ;
gchar * v_fc ;
gchar * v_reg ;
gchar * v_type ;
gchar * v_sim ;
gchar * v_value ;
GtkTreeSelection * sel ;
sel = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vars ) ) ;
if ( sel & & gtk_tree_selection_get_selected ( GTK_TREE_SELECTION ( sel ) , & model , & iter ) ) {
gtk_tree_model_get ( model , & iter ,
VALDATA_COL_NAME , & v_name ,
VALDATA_COL_FC , & v_fc ,
VALDATA_COL_REGSTART , & v_reg ,
VALDATA_COL_TYPE , & v_type ,
VALDATA_COL_SIM , & v_sim ,
VALDATA_COL_VALUE , & v_value ,
- 1 ) ;
v . name = v_name ;
v . reg = atoi ( v_reg ) ;
v . fc = atoi ( v_fc ) ;
v . type = v_type ;
v . sim = v_sim ;
v . value = v_value ;
addvar_displaywithvalues ( _builder_ , & v ) ;
}
}
else {
gui_double_click = 1 ;
gettimeofday ( & doubleclick_time , NULL ) ;
g_timeout_add ( gnome_dblclick_timeout , cb_timeout_doubleclick , _builder_ ) ;
}
return FALSE ;
} ;
void cb_menu_save ( GtkWidget * widget , gpointer data ) {
void cb_menu_save ( GtkWidget * widget , gpointer data ) {
// GtkBuilder *builder = (GtkBuilder *) data;
// GtkBuilder *builder = (GtkBuilder *) data;
@ -274,21 +177,21 @@ void cb_btn_start (GtkWidget *widget, gpointer data) {
int port = atoi ( gtk_entry_get_text ( GTK_ENTRY ( portentry ) ) ) ;
int port = atoi ( gtk_entry_get_text ( GTK_ENTRY ( portentry ) ) ) ;
if ( modbus srv . isRunning ( ) ) {
if ( modbus . isRunning ( ) ) {
printf ( " Stop Server \n " ) ;
printf ( " Stop Server \n " ) ;
modbus srv . Stop ( ) ;
modbus . Stop ( ) ;
gtk_widget_set_sensitive ( portentry , TRUE ) ;
gtk_widget_set_sensitive ( portentry , TRUE ) ;
gtk_button_set_label ( GTK_BUTTON ( widget ) , _ ( " Start " ) ) ;
gtk_button_set_label ( GTK_BUTTON ( widget ) , _ ( " Start " ) ) ;
}
}
else {
else {
printf ( " Start Server (port: %d) \n " , port ) ;
printf ( " Start Server (port: %d) \n " , port ) ;
if ( modbus srv . Start ( port ) ) {
if ( modbus . Start ( port ) ) {
gtk_button_set_label ( GTK_BUTTON ( widget ) , _ ( " Stop " ) ) ;
gtk_button_set_label ( GTK_BUTTON ( widget ) , _ ( " Stop " ) ) ;
gtk_widget_set_sensitive ( portentry , FALSE ) ;
gtk_widget_set_sensitive ( portentry , FALSE ) ;
}
}
usleep ( 250000 ) ;
usleep ( 250000 ) ;
if ( modbus srv . isRunning ( ) = = 0 ) {
if ( modbus . isRunning ( ) = = 0 ) {
modbus srv . Stop ( ) ;
modbus . Stop ( ) ;
displayerror ( " modbus server could not been started. \n See console output for errors. " ) ;
displayerror ( " modbus server could not been started. \n See console output for errors. " ) ;
gtk_widget_set_sensitive ( portentry , TRUE ) ;
gtk_widget_set_sensitive ( portentry , TRUE ) ;
gtk_button_set_label ( GTK_BUTTON ( widget ) , _ ( " Start " ) ) ;
gtk_button_set_label ( GTK_BUTTON ( widget ) , _ ( " Start " ) ) ;
@ -353,8 +256,9 @@ void addvar_displaywithvalues (gpointer data, GuiValue *v) {
vn . value = gtk_entry_get_text ( GTK_ENTRY ( value ) ) ; // load the from the entry
vn . value = gtk_entry_get_text ( GTK_ENTRY ( value ) ) ; // load the from the entry
if ( Value_SetValue ( vn . value , vn . type , vn . fc , & regstowrite , regvals ) ) {
if ( Value_SetValue ( vn . value , vn . type , vn . fc , & regstowrite , regvals ) ) {
modbus srv . SetRegValue ( vn . fc , vn . reg , regstowrite , ( uint16_t * ) regvals ) ;
modbus . SetRegValue ( vn . fc , vn . reg , regstowrite , ( uint16_t * ) regvals ) ;
}
}
}
}
}
}
gtk_widget_hide ( GTK_WIDGET ( dlg ) ) ;
gtk_widget_hide ( GTK_WIDGET ( dlg ) ) ;
@ -431,21 +335,23 @@ gboolean cb_thread_network_data_add (gpointer data) {
struct modbus_data * mbdata = ( struct modbus_data * ) data ;
struct modbus_data * mbdata = ( struct modbus_data * ) data ;
std : : string text ;
std : : string text ;
char timetext [ 255 ] ;
char timetext [ 255 ] ;
GtkTextTag * tag_datetime ;
GtkTextTag * tag_data ;
GtkTextTag * tag_info ;
GtkTextTag * tag_modbus ;
time_t _tm = time ( NULL ) ;
time_t _tm = time ( NULL ) ;
struct tm * curtime = localtime ( & _tm ) ;
struct tm * curtime = localtime ( & _tm ) ;
static int _once = 0 ;
static int _once = 0 ;
if ( _once = = 0 ) {
if ( _once = = 0 ) {
_once = 1 ;
_once = 1 ;
gtk_text_buffer_create_tag ( textbuffer , " Date_Time " ,
tag_datetime = gtk_text_buffer_create_tag ( textbuffer , " Date_Time " ,
" foreground " , " blue " , " style " , PANGO_WEIGHT_BOLD , " family " , " Monospace " , NULL ) ;
" foreground " , " blue " , " style " , PANGO_WEIGHT_BOLD , " family " , " Monospace " , NULL ) ;
gtk_text_buffer_create_tag ( textbuffer , " Data " ,
tag_data = gtk_text_buffer_create_tag ( textbuffer , " Data " ,
" foreground " , " black " , " style " , PANGO_WEIGHT_NORMAL , " family " , " Monospace " , NULL ) ;
" foreground " , " black " , " style " , PANGO_WEIGHT_NORMAL , " family " , " Monospace " , NULL ) ;
gtk_text_buffer_create_tag ( textbuffer , " Info " ,
tag_info = gtk_text_buffer_create_tag ( textbuffer , " Info " ,
" foreground " , " green " , " style " , PANGO_WEIGHT_THIN , " family " , " Sans " , NULL ) ;
" foreground " , " green " , " style " , PANGO_WEIGHT_THIN , " family " , " Sans " , NULL ) ;
gtk_text_buffer_create_tag ( textbuffer , " Error " ,
tag_modbus = gtk_text_buffer_create_tag ( textbuffer , " Modbus " ,
" foreground " , " red " , " style " , PANGO_WEIGHT_BOLD , " family " , " Sans " , NULL ) ;
gtk_text_buffer_create_tag ( textbuffer , " Modbus " ,
" foreground " , " black " , " style " , PANGO_WEIGHT_NORMAL , " family " , " Sans " , NULL ) ;
" foreground " , " black " , " style " , PANGO_WEIGHT_NORMAL , " family " , " Sans " , NULL ) ;
}
}
strftime ( timetext , 255 , " %H:%M:%S " , curtime ) ;
strftime ( timetext , 255 , " %H:%M:%S " , curtime ) ;
@ -454,7 +360,7 @@ gboolean cb_thread_network_data_add (gpointer data) {
// build hex dump
// build hex dump
//
//
text = " " ;
text = " " ;
for ( size_ t i = 0 ; i < mbdata - > bufferlen ; i + + ) {
for ( in t i = 0 ; i < mbdata - > bufferlen ; i + + ) {
unsigned char c = mbdata - > buffer [ i ] ;
unsigned char c = mbdata - > buffer [ i ] ;
char hexnum [ ] = " 0123456789ABCDEF " ;
char hexnum [ ] = " 0123456789ABCDEF " ;
@ -462,12 +368,11 @@ gboolean cb_thread_network_data_add (gpointer data) {
else if ( i % 32 = = 0 ) text + = " \n " ;
else if ( i % 32 = = 0 ) text + = " \n " ;
else if ( i % 4 = = 0 & & i > 0 ) text + = " : " ;
else if ( i % 4 = = 0 & & i > 0 ) text + = " : " ;
else if ( i % 2 = = 0 & & i > 0 ) text + = " : " ;
else if ( i % 2 = = 0 & & i > 0 ) text + = " : " ;
// else text += " ";
text + = hexnum [ c / 16 ] ;
text + = hexnum [ c / 16 ] ;
text + = hexnum [ c % 16 ] ;
text + = hexnum [ c % 16 ] ;
}
}
text + = " \n " ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Data " , NULL ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Data " , NULL ) ;
@ -495,33 +400,23 @@ gboolean cb_thread_network_data_add (gpointer data) {
}
}
else {
else {
text = text + " Registers: " + std : : to_string ( mbdata - > regstart ) ;
text = text + " Registers: " + std : : to_string ( mbdata - > regstart ) ;
text = text + " Cnt : " + std : : to_string ( mbdata - > regcnt ) ;
text = text + " Bytes : " + std : : to_string ( mbdata - > regcnt ) ;
}
}
}
}
text = text + " Bytecnt: " + std : : to_string ( mbdata - > bytecnt ) + " \n " ;
text = text + " \n " ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Modbus " , NULL ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Modbus " , NULL ) ;
//
//
// number of bytes
text = std : : to_string ( mbdata - > bufferlen ) + " Bytes " ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Info " , NULL ) ;
//
//
// Hostname
text = " " ;
text = mbdata - > hostname ;
text + = mbdata - > hostname ;
if ( mbdata - > direction = = 0 ) text = text + " RECV " ;
else text = text + " SEND " ;
text = text + std : : to_string ( mbdata - > bufferlen ) + " Bytes " ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_get_start_iter ( textbuffer , & start ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Info " , NULL ) ;
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , text . c_str ( ) , - 1 , " Info " , NULL ) ;
//
// direction or error
if ( mbdata - > direction = = 0 )
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , ( const char * ) " RECV " , - 1 , " Info " , NULL ) ;
else if ( mbdata - > direction = = 1 )
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , ( const char * ) " SEND " , - 1 , " Info " , NULL ) ;
else
gtk_text_buffer_insert_with_tags_by_name ( textbuffer , & start , ( const char * ) " ** ERROR ** " , - 1 , " Error " , NULL ) ;
//
//
// add date
// add date
@ -553,7 +448,9 @@ gboolean cb_thread_network_text_add (gpointer data) {
char timetext [ 255 ] ;
char timetext [ 255 ] ;
GtkWidget * textview = GTK_WIDGET ( gtk_builder_get_object ( _builder_ , " network_text " ) ) ;
GtkWidget * textview = GTK_WIDGET ( gtk_builder_get_object ( _builder_ , " network_text " ) ) ;
GtkTextBuffer * textbuffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( textview ) ) ;
GtkTextBuffer * textbuffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( textview ) ) ;
GtkTextIter start ;
GtkTextIter start , end ;
GtkTextTag * tag_datetime ;
GtkTextTag * tag_info ;
char * textprm = ( char * ) data ;
char * textprm = ( char * ) data ;
time_t _tm = time ( NULL ) ;
time_t _tm = time ( NULL ) ;
struct tm * curtime = localtime ( & _tm ) ;
struct tm * curtime = localtime ( & _tm ) ;
@ -561,14 +458,17 @@ gboolean cb_thread_network_text_add (gpointer data) {
if ( _once = = 0 ) {
if ( _once = = 0 ) {
_once = 1 ;
_once = 1 ;
gtk_text_buffer_create_tag ( textbuffer , " Date_Time " ,
tag_datetime = gtk_text_buffer_create_tag ( textbuffer , " Date_Time " ,
" foreground " , " blue " , " style " , PANGO_WEIGHT_BOLD , " family " , " Monospace " , NULL ) ;
" foreground " , " blue " , " style " , PANGO_WEIGHT_BOLD , " family " , " Monospace " , NULL ) ;
gtk_text_buffer_create_tag ( textbuffer , " Connection " ,
tag_info = gtk_text_buffer_create_tag ( textbuffer , " Connection " ,
" foreground " , " red " , " style " , PANGO_WEIGHT_BOLD , " family " , " Sans " , NULL ) ;
" foreground " , " red " , " style " , PANGO_WEIGHT_BOLD , " family " , " Sans " , NULL ) ;
}
}
strftime ( timetext , 255 , " %H:%M:%S " , curtime ) ;
strftime ( timetext , 255 , " %H:%M:%S " , curtime ) ;
//
// build hex dump
//
//
//
//
//
text = " " ;
text = " " ;
@ -601,7 +501,10 @@ gboolean cb_thread_status (gpointer data) {
void cb_networkdata_show ( GtkWidget * widget , gpointer data ) {
void cb_networkdata_show ( GtkWidget * widget , gpointer data ) {
GtkWidget * textview = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( data ) , " network_text " ) ) ;
GtkWidget * textview = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( data ) , " network_text " ) ) ;
gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( textview ) ) ;
GtkTextBuffer * textbuffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( textview ) ) ;
printf ( " *************************** \n " ) ;
} ;
} ;
void cb_addvar_close ( GtkWidget * widget , gpointer data ) {
void cb_addvar_close ( GtkWidget * widget , gpointer data ) {
@ -626,7 +529,6 @@ void displayerror (string error) {
gtk_widget_destroy ( dialog ) ;
gtk_widget_destroy ( dialog ) ;
}
}
void cb_addvar_addedit ( GtkWidget * widget , gpointer data ) {
void cb_addvar_addedit ( GtkWidget * widget , gpointer data ) {
GtkBuilder * builder = ( GtkBuilder * ) data ;
GtkBuilder * builder = ( GtkBuilder * ) data ;
GtkWidget * dlg = GTK_WIDGET ( gtk_builder_get_object ( builder , " addvar " ) ) ;
GtkWidget * dlg = GTK_WIDGET ( gtk_builder_get_object ( builder , " addvar " ) ) ;
@ -659,7 +561,7 @@ void cb_menu_about(GtkWidget *widget, gpointer data) {
GtkWidget * dlg = GTK_WIDGET ( gtk_builder_get_object ( builder , " dlgabout " ) ) ;
GtkWidget * dlg = GTK_WIDGET ( gtk_builder_get_object ( builder , " dlgabout " ) ) ;
GtkWidget * label = GTK_WIDGET ( gtk_builder_get_object ( builder , " dlgabout_version " ) ) ;
GtkWidget * label = GTK_WIDGET ( gtk_builder_get_object ( builder , " dlgabout_version " ) ) ;
gtk_label_set_text ( GTK_LABEL ( label ) , VERSION ) ;
gtk_label_set_text ( GTK_LABEL ( label ) , VERSION ) ;
g tk_dialog_run( GTK_DIALOG ( dlg ) ) ;
g int result = g tk_dialog_run( GTK_DIALOG ( dlg ) ) ;
gtk_widget_hide ( GTK_WIDGET ( dlg ) ) ;
gtk_widget_hide ( GTK_WIDGET ( dlg ) ) ;
return ;
return ;
@ -673,19 +575,19 @@ void cb_about_btnclose(GtkWidget *widget, gpointer data) {
}
}
void cb_btn_enableall ( GtkWidget * widget , gpointer data ) {
void cb_btn_enableall ( GtkWidget * widget , gpointer data ) {
modbus srv . EnableAll ( 1 ) ;
modbus . EnableAll ( 1 ) ;
MBData_EnableAll ( 1 ) ;
MBData_EnableAll ( 1 ) ;
} ;
} ;
void cb_btn_disableall ( GtkWidget * widget , gpointer data ) {
void cb_btn_disableall ( GtkWidget * widget , gpointer data ) {
modbus srv . EnableAll ( 0 ) ;
modbus . EnableAll ( 0 ) ;
MBData_EnableAll ( 0 ) ;
MBData_EnableAll ( 0 ) ;
} ;
} ;
void cb_btn_clearreq ( GtkWidget * widget , gpointer data ) {
void cb_btn_clearreq ( GtkWidget * widget , gpointer data ) {
modbus srv . RequestsClear ( ) ;
modbus . RequestsClear ( ) ;
MBData_ReqReset ( ) ;
MBData_ReqReset ( ) ;
} ;
} ;
@ -718,7 +620,7 @@ void cb_btn_enablevalues (GtkWidget *widget, gpointer data) {
break ;
break ;
}
}
modbus srv . Enable ( atoi ( v_fc ) , atoi ( v_reg ) , Value_GetSize ( v_type ) , 1 ) ;
modbus . Enable ( atoi ( v_fc ) , atoi ( v_reg ) , Value_GetSize ( v_type ) , 1 ) ;
MBData_Enable ( atoi ( v_fc ) , atoi ( v_reg ) , Value_GetSize ( v_type ) , 1 ) ;
MBData_Enable ( atoi ( v_fc ) , atoi ( v_reg ) , Value_GetSize ( v_type ) , 1 ) ;
if ( v_name ! = NULL ) free ( v_name ) ;
if ( v_name ! = NULL ) free ( v_name ) ;
@ -816,10 +718,12 @@ void load_file(std::string fn) {
GtkWidget * guiautovalue = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( _builder_ ) , " conf_autoaddvalues " ) ) ;
GtkWidget * guiautovalue = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( _builder_ ) , " conf_autoaddvalues " ) ) ;
GtkWidget * guiport = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( _builder_ ) , " port_entry " ) ) ;
GtkWidget * guiport = GTK_WIDGET ( gtk_builder_get_object ( GTK_BUILDER ( _builder_ ) , " port_entry " ) ) ;
GuiValue g ;
GuiValue g ;
int autoadd = 0 ;
modbussrv . EnableAll ( 0 ) ;
modbus . EnableAll ( 0 ) ;
MBData_EnableAll ( 0 ) ;
MBData_EnableAll ( 0 ) ;
modbus srv . RequestsClear ( ) ;
modbus . RequestsClear ( ) ;
MBData_ReqReset ( ) ;
MBData_ReqReset ( ) ;
Value_DelAll ( ) ;
Value_DelAll ( ) ;
std : : string confdata ;
std : : string confdata ;
@ -855,88 +759,15 @@ void load_file(std::string fn) {
for ( i = 0 ; json . GetObjectIdx ( " values " , i , & value ) ; i + + ) {
for ( i = 0 ; json . GetObjectIdx ( " values " , i , & value ) ; i + + ) {
uint16_t regvals [ 4 ] ;
int regstowrite = 1 ;
value . GetValue ( " name " , & g . name ) ;
value . GetValue ( " name " , & g . name ) ;
value . GetValue ( " type " , & g . type ) ;
value . GetValue ( " type " , & g . type ) ;
value . GetValue ( " sim " , & g . sim ) ;
value . GetValue ( " sim " , & g . sim ) ;
value . GetValue ( " value " , & g . value ) ;
value . GetValue ( " value " , & g . value ) ;
value . GetValue Int ( " fc " , & g. fc ) ;
value . GetValue ( " fc " , & temp) ; g. fc = atoi ( temp . c_str ( ) ) ;
value . GetValue Int ( " reg " , & g. reg ) ;
value . GetValue ( " reg " , & temp) ; g. reg = atoi ( temp . c_str ( ) ) ;
Value_Add ( & g ) ;
Value_Add ( & g ) ;
if ( Value_SetValue ( g . value , g . type , g . fc , & regstowrite , regvals ) ) {
modbussrv . SetRegValue ( g . fc , g . reg , regstowrite , ( uint16_t * ) regvals ) ;
}
}
}
} ;
} ;
void load_bulkfile ( std : : string fn ) {
GuiValue g ;
FILE * f ;
char buffer [ FILEBUFFER ] ;
char * pos , * next ;
JSONParse json ;
JSONParse value ;
std : : string temp ;
uint16_t regvals [ 4 ] ;
int regstowrite = 1 ;
printf ( " %s \n " , __FUNCTION__ ) ;
f = fopen ( fn . c_str ( ) , " r " ) ;
if ( f ! = NULL ) {
while ( ! feof ( f ) ) {
// NAME,TYPE,FC,REG,VALUE
fgets ( buffer , FILEBUFFER , f ) ;
// name
pos = buffer ;
if ( ( next = strchr ( pos , ' , ' ) ) = = NULL ) {
printf ( " load bulk: could not find ',' \n " ) ;
continue ;
}
* next = 0 ;
g . name = pos ;
// type
pos = next + 1 ;
if ( ( next = strchr ( pos , ' , ' ) ) = = NULL ) continue ;
* next = 0 ;
g . type = pos ;
// fc
pos = next + 1 ;
if ( ( next = strchr ( pos , ' , ' ) ) = = NULL ) continue ;
* next = 0 ;
g . fc = atoi ( pos ) ;
// reg
pos = next + 1 ;
if ( ( next = strchr ( pos , ' , ' ) ) = = NULL ) continue ;
* next = 0 ;
g . reg = atoi ( pos ) ;
// value
pos = next + 1 ;
g . value = pos ;
printf ( " %s -> %s \n " , pos , g . value . c_str ( ) ) ;
g . sim = " NONE " ;
Value_Add ( & g ) ;
printf ( " %s -> %s \n " , pos , g . value . c_str ( ) ) ;
regstowrite = 1 ;
if ( Value_SetValue ( g . value , g . type , g . fc , & regstowrite , regvals ) ) {
modbussrv . SetRegValue ( g . fc , g . reg , regstowrite , ( uint16_t * ) regvals ) ;
printf ( " %s add %s type:%s with value %s \n " , __FUNCTION__ , g . name . c_str ( ) , g . type . c_str ( ) , g . value . c_str ( ) ) ;
}
else printf ( " %s add %s without value \n " , __FUNCTION__ , g . name . c_str ( ) ) ;
}
fclose ( f ) ;
}
else printf ( " error on open bulk: %s \n " , strerror ( errno ) ) ;
} ;