aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Emulations/Emulators
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-12-19 18:01:01 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-12-19 18:01:01 +0200
commit1208554e06da8aec1b074932df488769572ffcfb (patch)
tree9858ededeb8badda5fc8b3052ef9745e419f35fd /Software/Visual_Studio/Tango.Emulations/Emulators
parent690604e6167bfa4fea0ab02f8b24a68142e8b546 (diff)
downloadTango-1208554e06da8aec1b074932df488769572ffcfb.tar.gz
Tango-1208554e06da8aec1b074932df488769572ffcfb.zip
Implemented auto thread loading.
Implemented advanced settings for technician. Implemented thread loading on emulator. Removed PowerUpSelectedRML from settings. Now using LoadedRml settings for ThreadLoading and PowerUp.
Diffstat (limited to 'Software/Visual_Studio/Tango.Emulations/Emulators')
-rw-r--r--Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs64
1 files changed, 63 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
index e4b081e9e..7537e4676 100644
--- a/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
+++ b/Software/Visual_Studio/Tango.Emulations/Emulators/MachineEmulator.cs
@@ -33,6 +33,7 @@ using System.Diagnostics;
using Tango.Core.ExtensionMethods;
using Tango.PMR.MachineStatus;
using Tango.PMR.Power;
+using Tango.PMR.ThreadLoading;
namespace Tango.Emulations.Emulators
{
@@ -51,6 +52,7 @@ namespace Tango.Emulations.Emulators
}
private const int MAX_CHUNK_LENGTH = 4000;
+ private static Random _rnd = new Random();
private StartDiagnosticsRequest _diagnosticsRequest;
private bool _cancelJob;
private List<PMR.Hardware.HardwareMotorType> _motorJoggingRequestTypes;
@@ -76,6 +78,8 @@ namespace Tango.Emulations.Emulators
private FileUploadRequest _lastFileUploadRequest;
private bool _isAfterReset;
private bool _abortPowerDown;
+ private bool _isThreadLoadingStarted;
+ private String _threadLoadingToken;
#region Properties
@@ -405,6 +409,12 @@ namespace Tango.Emulations.Emulators
case MessageType.AbortPowerDownRequest:
HandleAbortPowerDownRequest(MessageFactory.ParseTangoMessageFromContainer<AbortPowerDownRequest>(container));
break;
+ case MessageType.StartThreadLoadingRequest:
+ HandleStartThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer<StartThreadLoadingRequest>(container));
+ break;
+ case MessageType.ContinueThreadLoadingRequest:
+ HandleContinueThreadLoadingRequest(MessageFactory.ParseTangoMessageFromContainer<ContinueThreadLoadingRequest>(container));
+ break;
}
}
@@ -1383,7 +1393,7 @@ namespace Tango.Emulations.Emulators
{
ProgressPercentage = 100,
Message = "Machine is turned off",
- State = PowerDownState.Completed
+ State = PowerDownState.PowerOffCompleted
}, request.Container.Token, true);
});
}
@@ -1395,6 +1405,38 @@ namespace Tango.Emulations.Emulators
await Transporter.SendResponse<AbortPowerDownResponse>(new AbortPowerDownResponse(), request.Container.Token);
}
+ private async void HandleStartThreadLoadingRequest(TangoMessage<StartThreadLoadingRequest> request)
+ {
+ _isThreadLoadingStarted = true;
+ _threadLoadingToken = request.Container.Token;
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse(), request.Container.Token);
+ }
+
+ private async void HandleContinueThreadLoadingRequest(TangoMessage<ContinueThreadLoadingRequest> request)
+ {
+ if (_threadLoadingToken != null)
+ {
+ await Transporter.SendResponse<ContinueThreadLoadingResponse>(new ContinueThreadLoadingResponse(), request.Container.Token);
+
+ await Task.Delay(1000);
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Finalizing }, _threadLoadingToken);
+ await Task.Delay(8000);
+
+ if (_rnd.Next(0, 100) > 50)
+ {
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Completed }, _threadLoadingToken);
+ }
+ else
+ {
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.FinalizationError, ErrorReason = "Emulator random error." }, _threadLoadingToken);
+ }
+ }
+ else
+ {
+ await Transporter.SendResponse<ContinueThreadLoadingResponse>(new ContinueThreadLoadingResponse(), request.Container.Token, null, ErrorCode.GeneralError, "StartThreadLoadingRequest was never sent.");
+ }
+ }
+
#endregion
#region Public Methods
@@ -1410,6 +1452,26 @@ namespace Tango.Emulations.Emulators
return response.Message.Index;
}
+ public async void StartThreadLoading()
+ {
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.ReadyForLoading }, _threadLoadingToken);
+ }
+
+ public async void FinalizeThreadLoading()
+ {
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Finalizing }, _threadLoadingToken);
+ await Task.Delay(3000);
+
+ if (_rnd.Next(0, 100) > 50)
+ {
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.Completed }, _threadLoadingToken);
+ }
+ else
+ {
+ await Transporter.SendResponse<StartThreadLoadingResponse>(new StartThreadLoadingResponse() { State = ThreadLoadingState.FinalizationError, ErrorReason = "Emulator random error." }, _threadLoadingToken);
+ }
+ }
+
#endregion
}
}