From 8fd8939ee8304d4422d4b7473bd64474481bc0da Mon Sep 17 00:00:00 2001 From: gstellenberg Date: Tue, 26 May 2009 21:05:55 -0500 Subject: [PATCH] Added private Shutdown() method to PRDevice to disable all drivers and switch rules before Close(). --- src/PRDevice.cpp | 26 ++++++++++++++++++++++++++ src/PRDevice.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/PRDevice.cpp b/src/PRDevice.cpp index e433cc6..fb5fe48 100644 --- a/src/PRDevice.cpp +++ b/src/PRDevice.cpp @@ -37,6 +37,7 @@ PRDevice::PRDevice(PRMachineType machineType) : machineType(machineType) PRDevice::~PRDevice() { + Shutdown(); Close(); } @@ -99,6 +100,31 @@ void PRDevice::Reset() // TODO: Assign defaults based on machineType. Some may have already been done above. } +void PRDevice::Shutdown() +{ + int i; + PRDriverState driverState; + PRSwitchRule switchRule; + + // Deactivate all drivers + for (i = 0; i < maxDrivers; i++) + { + // Get each driver's current state just in case polarity was changed from the default. + DriverGetState(i, &driverState); + driverState.state = false; + DriverUpdateState(&driverState); + } + + // Deactivate all switch rules + switchRule.notifyHost = false; + for (i = kPRSwitchPhysicalFirst; i < kPRSwitchPhysicalLast; i++) + { + SwitchUpdateRule(i, kPREventTypeSwitchOpenDebounced, &switchRule, NULL, 0); + SwitchUpdateRule(i, kPREventTypeSwitchClosedDebounced, &switchRule, NULL, 0); + SwitchUpdateRule(i, kPREventTypeSwitchOpenNondebounced, &switchRule, NULL, 0); + SwitchUpdateRule(i, kPREventTypeSwitchClosedNondebounced, &switchRule, NULL, 0); + } +} int PRDevice::GetEvents(PREvent *events, int maxEvents) { diff --git a/src/PRDevice.h b/src/PRDevice.h index 1b6b3d6..3292be1 100644 --- a/src/PRDevice.h +++ b/src/PRDevice.h @@ -121,6 +121,7 @@ protected: // Local Device State + void Shutdown(); void Reset(); PRMachineType machineType; PRDriverGlobalConfig driverGlobalConfig;