From 6b38df8f8ab2f7064aa6bd61692a10005a944e6f Mon Sep 17 00:00:00 2001
From: Mark Tearle <mark@tearle.com>
Date: Sun, 15 Mar 2015 17:36:30 +0800
Subject: [PATCH] Add config_modbus_port option to allow Modbus port to be set
 (for virtualcoke)

---
 dispsrv.conf              | 2 ++
 items.cfg                 | 2 +-
 src/server/handler_coke.c | 3 ++-
 src/server/main.c         | 5 ++++-
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/dispsrv.conf b/dispsrv.conf
index ae1d954..c9aa947 100644
--- a/dispsrv.conf
+++ b/dispsrv.conf
@@ -9,6 +9,8 @@ items_file items.cfg
 # PLC - coke brain
 #coke_modbus_address 130.95.13.73
 coke_modbus_address 0.0.0.0
+# 502 is default modbus port, virtualcoke uses 1502
+coke_modbus_port 502
 
 # Zero price items, defaults to off
 test_mode no
diff --git a/items.cfg b/items.cfg
index df3305a..785439d 100644
--- a/items.cfg
+++ b/items.cfg
@@ -5,7 +5,7 @@
 # Type	ID	Price	Description
 
 # Drinks
-coke	0	200	Blue Powerade
+coke	0	200	X Blue Powerade
 coke	1	200	Mother Energy Drink
 coke	2	75	Solo
 coke	3	75	Lemonade
diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c
index b9a9cf3..34b9d2e 100644
--- a/src/server/handler_coke.c
+++ b/src/server/handler_coke.c
@@ -49,6 +49,7 @@ tHandler	gCoke_Handler = {
 	Coke_DoDispense
 };
 const char	*gsCoke_ModbusAddress = "130.95.13.73";
+ int		gsCoke_ModbusPort = 502;
 modbus_t	*gCoke_Modbus;
 time_t	gtCoke_LastDispenseTime;
 time_t	gtCoke_LastReconnectTime;
@@ -126,7 +127,7 @@ int Coke_int_ConnectToPLC(void)
 
 	if( !gCoke_Modbus )
 	{
-		gCoke_Modbus = modbus_new_tcp(gsCoke_ModbusAddress, 502);
+		gCoke_Modbus = modbus_new_tcp(gsCoke_ModbusAddress, gsCoke_ModbusPort);
 		if( !gCoke_Modbus )
 		{
 			perror("coke - modbus_new_tcp");
diff --git a/src/server/main.c b/src/server/main.c
index cbebee2..2cc3bc3 100644
--- a/src/server/main.c
+++ b/src/server/main.c
@@ -31,6 +31,7 @@ extern int	gbServer_RunInBackground;
 extern int	giServer_Port;
 extern const char	*gsItemListFile;
 extern const char	*gsCoke_ModbusAddress;
+extern int	gsCoke_ModbusPort;
 extern const char	*gsDoor_SerialPort;
 extern bool	gbSyslogEnabled;
 
@@ -126,13 +127,15 @@ int main(int argc, char *argv[])
 	gbServer_RunInBackground = Config_GetValue_Bool("daemonise", 0);
 	gsCokebankPath       = Config_GetValue("cokebank_database", 0);
 	gsDoor_SerialPort    = Config_GetValue("door_serial_port", 0);
-	gsCoke_ModbusAddress = Config_GetValue("coke_modbus_address", 0);
 	giServer_Port        = Config_GetValue_Int("server_port", 0);
 	gsItemListFile       = Config_GetValue("items_file", 0);
 
 	gbNoCostMode         = (Config_GetValue_Bool("test_mode", 0) == 1);
 	gbSyslogEnabled      = (Config_GetValue_Bool("disable_syslog", 0) == 0);
 
+	gsCoke_ModbusAddress = Config_GetValue("coke_modbus_address", 0);
+	gsCoke_ModbusPort    = Config_GetValue_Int("coke_modbus_port", 0);
+
 	signal(SIGINT, sigint_handler);
 	signal(SIGTERM, sigint_handler);
 	
-- 
GitLab