This commit is contained in:
Copilot 2026-06-15 15:06:51 -07:00 committed by GitHub
commit 0c420da791
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -38,6 +38,8 @@ namespace PepperDash.Essentials.Core
ComPort Port; ComPort Port;
ComPort.ComPortSpec Spec; ComPort.ComPortSpec Spec;
private readonly object _deactivateLock = new object();
private bool _isDeactivated;
/// <summary> /// <summary>
/// Constructor /// Constructor
@ -59,6 +61,8 @@ namespace PepperDash.Essentials.Core
RegisterAndConfigureComPort(); RegisterAndConfigureComPort();
}); });
CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironment_ProgramStatusEventHandler;
} }
/// <summary> /// <summary>
@ -81,6 +85,7 @@ namespace PepperDash.Essentials.Core
//IsConnected = new BoolFeedback(CommonBoolCue.IsConnected, () => true); //IsConnected = new BoolFeedback(CommonBoolCue.IsConnected, () => true);
RegisterAndConfigureComPort(); RegisterAndConfigureComPort();
CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironment_ProgramStatusEventHandler;
} }
private void RegisterAndConfigureComPort() private void RegisterAndConfigureComPort()
@ -114,14 +119,6 @@ namespace PepperDash.Essentials.Core
Port.SerialDataReceived += Port_SerialDataReceived; Port.SerialDataReceived += Port_SerialDataReceived;
} }
/// <summary>
/// Destructor
/// </summary>
~ComPortController()
{
Port.SerialDataReceived -= Port_SerialDataReceived;
}
void Port_SerialDataReceived(ComPort ReceivingComPort, ComPortSerialDataEventArgs args) void Port_SerialDataReceived(ComPort ReceivingComPort, ComPortSerialDataEventArgs args)
{ {
OnDataReceived(args.SerialData); OnDataReceived(args.SerialData);
@ -150,12 +147,34 @@ namespace PepperDash.Essentials.Core
if (!eventSubscribed) Debug.LogMessage(LogEventLevel.Warning, this, "Received data but no handler is registered"); if (!eventSubscribed) Debug.LogMessage(LogEventLevel.Warning, this, "Received data but no handler is registered");
} }
void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType)
{
if (programEventType == eProgramStatusEventType.Stopping)
{
Deactivate();
}
}
/// <summary> /// <summary>
/// Deactivate method /// Deactivate method
/// </summary> /// </summary>
/// <inheritdoc /> /// <inheritdoc />
public override bool Deactivate() public override bool Deactivate()
{ {
lock (_deactivateLock)
{
if (_isDeactivated)
return true;
_isDeactivated = true;
}
CrestronEnvironment.ProgramStatusEventHandler -= CrestronEnvironment_ProgramStatusEventHandler;
if (Port == null)
return true;
Port.SerialDataReceived -= Port_SerialDataReceived;
return Port.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success; return Port.UnRegister() == eDeviceRegistrationUnRegistrationResponse.Success;
} }