diff --git a/src/arch/Lights/LightsDriver.cpp b/src/arch/Lights/LightsDriver.cpp index 0d48c59cad..6708e3a0dd 100644 --- a/src/arch/Lights/LightsDriver.cpp +++ b/src/arch/Lights/LightsDriver.cpp @@ -30,6 +30,15 @@ void LightsDriver::Create( const RString &sDrivers, vector &Add } } +void LightsDriver::reset() +{ + LightsState state; + ZERO( state.m_bCabinetLights ); + ZERO( state.m_bGameButtonLights ); + ZERO( state.m_bCoinCounter ); + Set( &state ); +} + /* * (c) 2002-2005 Glenn Maynard * All rights reserved. diff --git a/src/arch/Lights/LightsDriver.h b/src/arch/Lights/LightsDriver.h index b785fd3676..6340ad7259 100644 --- a/src/arch/Lights/LightsDriver.h +++ b/src/arch/Lights/LightsDriver.h @@ -16,6 +16,9 @@ public: virtual ~LightsDriver() {}; virtual void Set( const LightsState *ls ) = 0; + + // Reset all lights to off + void reset(); }; #define REGISTER_LIGHTS_DRIVER_CLASS2( name, x ) \ diff --git a/src/arch/Lights/LightsDriver_Export.cpp b/src/arch/Lights/LightsDriver_Export.cpp index 9d0e3a4dee..4bc52d244a 100644 --- a/src/arch/Lights/LightsDriver_Export.cpp +++ b/src/arch/Lights/LightsDriver_Export.cpp @@ -11,6 +11,11 @@ LightsDriver_Export::LightsDriver_Export() memset( &m_State, 0, sizeof(m_State) ); } +LightsDriver_Export::~LightsDriver_Export() +{ + LightsDriver::reset(); +} + void LightsDriver_Export::Set( const LightsState *ls ) { m_Lock.Lock(); diff --git a/src/arch/Lights/LightsDriver_Export.h b/src/arch/Lights/LightsDriver_Export.h index 555a4e132a..51428201c9 100644 --- a/src/arch/Lights/LightsDriver_Export.h +++ b/src/arch/Lights/LightsDriver_Export.h @@ -10,6 +10,7 @@ class LightsDriver_Export: public LightsDriver { public: LightsDriver_Export(); + virtual ~LightsDriver_Export(); virtual void Set( const LightsState *ls ); // Get the current lights state. This can be called from a thread. diff --git a/src/arch/Lights/LightsDriver_LinuxParallel.cpp b/src/arch/Lights/LightsDriver_LinuxParallel.cpp index ff036e9d2d..e0584128c9 100644 --- a/src/arch/Lights/LightsDriver_LinuxParallel.cpp +++ b/src/arch/Lights/LightsDriver_LinuxParallel.cpp @@ -24,6 +24,7 @@ LightsDriver_LinuxParallel::LightsDriver_LinuxParallel() LightsDriver_LinuxParallel::~LightsDriver_LinuxParallel() { + LightsDriver::reset(); // Reset all bits to zero and free the port's permissions outb( 0, PORT_ADDRESS ); ioperm( PORT_ADDRESS, 1, 0 ); diff --git a/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp b/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp index bf2536bb3f..6c65ccf321 100644 --- a/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp +++ b/src/arch/Lights/LightsDriver_Linux_PIUIO.cpp @@ -32,6 +32,7 @@ LightsDriver_Linux_PIUIO::LightsDriver_Linux_PIUIO() LightsDriver_Linux_PIUIO::~LightsDriver_Linux_PIUIO() { + LightsDriver::reset(); if( fd >= 0 ) close(fd); } diff --git a/src/arch/Lights/LightsDriver_SextetStream.cpp b/src/arch/Lights/LightsDriver_SextetStream.cpp index 862590d156..40f79cc574 100644 --- a/src/arch/Lights/LightsDriver_SextetStream.cpp +++ b/src/arch/Lights/LightsDriver_SextetStream.cpp @@ -210,6 +210,7 @@ LightsDriver_SextetStream::LightsDriver_SextetStream() LightsDriver_SextetStream::~LightsDriver_SextetStream() { + LightsDriver::reset(); if(IMPL != NULL) { delete IMPL; diff --git a/src/arch/Lights/LightsDriver_SystemMessage.cpp b/src/arch/Lights/LightsDriver_SystemMessage.cpp index c514604248..9aeae29c6f 100644 --- a/src/arch/Lights/LightsDriver_SystemMessage.cpp +++ b/src/arch/Lights/LightsDriver_SystemMessage.cpp @@ -12,6 +12,7 @@ LightsDriver_SystemMessage::LightsDriver_SystemMessage() LightsDriver_SystemMessage::~LightsDriver_SystemMessage() { + LightsDriver::reset(); } void LightsDriver_SystemMessage::Set( const LightsState *ls ) diff --git a/src/arch/Lights/LightsDriver_Win32Parallel.cpp b/src/arch/Lights/LightsDriver_Win32Parallel.cpp index 93e52b15d4..3272160672 100644 --- a/src/arch/Lights/LightsDriver_Win32Parallel.cpp +++ b/src/arch/Lights/LightsDriver_Win32Parallel.cpp @@ -57,6 +57,7 @@ LightsDriver_Win32Parallel::LightsDriver_Win32Parallel() LightsDriver_Win32Parallel::~LightsDriver_Win32Parallel() { + LightsDriver::reset(); FreeLibrary( hDLL ); }