X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fhandler_coke.c;h=2b7d0f8e8d1ee1b60283b8799e6ab4fb0162280c;hb=37e89ab2180f91b703461eb898edb9904ba6d74f;hp=b9a9cf3271bbbd6e0a30e8441d7eee1ef165855b;hpb=6d657891a5410b7d93cc90f376a3ef27b72b20f6;p=tpg%2Fopendispense2.git diff --git a/src/server/handler_coke.c b/src/server/handler_coke.c index b9a9cf3..2b7d0f8 100644 --- a/src/server/handler_coke.c +++ b/src/server/handler_coke.c @@ -48,11 +48,14 @@ tHandler gCoke_Handler = { Coke_CanDispense, Coke_DoDispense }; +// - Config const char *gsCoke_ModbusAddress = "130.95.13.73"; + int giCoke_ModbusPort = 502; +bool gbCoke_DummyMode = false; +// - State modbus_t *gCoke_Modbus; time_t gtCoke_LastDispenseTime; time_t gtCoke_LastReconnectTime; - int gbCoke_DummyMode = 1; int giCoke_NextCokeSlot = 0; // == CODE === @@ -60,11 +63,7 @@ int Coke_InitHandler() { // Configuable dummy/blank mode (all dispenses succeed) // TODO: Find a better way of handling missing/invalid options - if( Config_GetValueCount("coke_dummy_mode") > 0 ) - { - gbCoke_DummyMode = Config_GetValue_Bool("coke_dummy_mode", 0); - if(gbCoke_DummyMode == -1) gbCoke_DummyMode = 0; - } + Config_GetValue_Bool("coke_dummy_mode", &gbCoke_DummyMode); // Open modbus if( !gbCoke_DummyMode ) @@ -121,12 +120,16 @@ int Coke_DoDispense(int UNUSED(User), int Item) int Coke_int_ConnectToPLC(void) { // Ratelimit - if( time(NULL) - gtCoke_LastReconnectTime < COKE_RECONNECT_RATELIMIT ) + time_t elapsed = time(NULL) - gtCoke_LastReconnectTime; + if( elapsed < COKE_RECONNECT_RATELIMIT ) { + Debug_Notice("Not reconnecting, only %llis have pased, %i limit", (long long)elapsed, COKE_RECONNECT_RATELIMIT); + errno = EAGAIN; return -1; + } if( !gCoke_Modbus ) { - gCoke_Modbus = modbus_new_tcp(gsCoke_ModbusAddress, 502); + gCoke_Modbus = modbus_new_tcp(gsCoke_ModbusAddress, giCoke_ModbusPort); if( !gCoke_Modbus ) { perror("coke - modbus_new_tcp"); @@ -138,7 +141,7 @@ int Coke_int_ConnectToPLC(void) // Preven resource leaks modbus_close(gCoke_Modbus); } - Debug_Notice("Connecting to coke PLC machine on '%s'\n", gsCoke_ModbusAddress); + Debug_Notice("Connecting to coke PLC machine on '%s':%i", gsCoke_ModbusAddress, giCoke_ModbusPort); if( modbus_connect(gCoke_Modbus) ) {