aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common
diff options
context:
space:
mode:
authorMirta <mirta@twine-s.com>2020-11-23 16:13:53 +0200
committerMirta <mirta@twine-s.com>2020-11-23 16:13:53 +0200
commit91c007adced573e09b77ab4be4a5aba623a816cc (patch)
tree250221fc2def7d59f1393be8394f766faf576656 /Software/Visual_Studio/PPC/Tango.PPC.Common
parent4e9af2b852eb3b9eecfa09e9bc76869558e183cb (diff)
parent50a3c0b857b4aa88a9e3970d69256f12b5b24eb8 (diff)
downloadTango-91c007adced573e09b77ab4be4a5aba623a816cc.tar.gz
Tango-91c007adced573e09b77ab4be4a5aba623a816cc.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.Common')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/ImageGalleryControl.xaml2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs189
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj38
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs34
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/DefaultUnifiedWriteFilterManager.cs35
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/IUnifiedWriteFilterManager.cs3
6 files changed, 269 insertions, 32 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/ImageGalleryControl.xaml b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/ImageGalleryControl.xaml
index f3b45d5b8..495335ff1 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/ImageGalleryControl.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Controls/ImageGalleryControl.xaml
@@ -88,7 +88,7 @@
</ListBox.ItemContainerStyle>
</ListBox>
- <controls:NavigationControl x:Name="navigationControl" TransitionType="Slide" TransitionDuration="00:00:0.2" SelectedIndex="{TemplateBinding SelectedIndex}">
+ <controls:NavigationControl x:Name="navigationControl" GalleryMode="True" TransitionType="Slide" TransitionDuration="00:00:0.2" SelectedIndex="{TemplateBinding SelectedIndex}">
</controls:NavigationControl>
</DockPanel>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
index ddc0f6cdb..4d2e9c1df 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/DataStore/DefaultDataStoreService.cs
@@ -17,18 +17,33 @@ using Tango.PPC.Common.ExternalBridge;
using Tango.Transport;
using Tango.Core.ExtensionMethods;
using Newtonsoft.Json.Linq;
+using Tango.BL;
+using Tango.DataStore.Editing;
+using Newtonsoft.Json;
+using Tango.Core;
namespace Tango.PPC.Common.DataStore
{
[TangoCreateWhenRegistered]
- public class DefaultDataStoreService : IDataStoreService, IExternalBridgeRequestHandler
+ public class DefaultDataStoreService : ExtendedObject, IDataStoreService, IExternalBridgeRequestHandler
{
private IDataStoreManager _manager;
+ private IMachineProvider _machineProvider;
+ private List<ListerReceiver> _listenerReceivers;
+
+ private class ListerReceiver
+ {
+ public String Token { get; set; }
+ public ExternalBridgeReceiver Receiver { get; set; }
+ }
public DefaultDataStoreService(IPPCExternalBridgeService externalBridge, IMachineProvider machineProvider)
{
externalBridge.RegisterRequestHandler(this);
+
+ _listenerReceivers = new List<ListerReceiver>();
+ _machineProvider = machineProvider;
machineProvider.MachineOperator.RegisterRequestHandler<PutDataStoreItemRequest>(OnPutDataStoreItemRequest);
machineProvider.MachineOperator.RegisterRequestHandler<GetDataStoreItemRequest>(OnGetDataStoreItemRequest);
}
@@ -53,6 +68,7 @@ namespace Tango.PPC.Common.DataStore
[ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStorePutRequest), RequestHandlerLoggingMode.LogRequestName)]
public async Task OnRemoteDataStorePutRequest(RemoteDataStorePutRequest request, String token, ExternalBridgeReceiver receiver)
{
+ ValidateCollectionAndKey(request.Collection, request.Key);
GetManager().GetCollection(request.Collection).Put(request.Key, request.Value);
await receiver.SendGenericResponse(new RemoteDataStorePutResponse(), token);
}
@@ -60,6 +76,8 @@ namespace Tango.PPC.Common.DataStore
[ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreGetRequest), RequestHandlerLoggingMode.LogRequestName)]
public async Task OnRemoteDataStoreGetRequest(RemoteDataStoreGetRequest request, String token, ExternalBridgeReceiver receiver)
{
+ ValidateCollectionAndKey(request.Collection, request.Key);
+
if (request.DefaultValue is JObject obj)
{
request.DefaultValue = DataStoreProtoObject.FromJObject(obj);
@@ -76,6 +94,8 @@ namespace Tango.PPC.Common.DataStore
[ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreGetItemRequest), RequestHandlerLoggingMode.LogRequestName)]
public async Task OnRemoteDataStoreGetItemRequest(RemoteDataStoreGetItemRequest request, String token, ExternalBridgeReceiver receiver)
{
+ ValidateCollectionAndKey(request.Collection, request.Key);
+
if (request.DefaultValue is JObject obj)
{
request.DefaultValue = DataStoreProtoObject.FromJObject(obj);
@@ -101,6 +121,7 @@ namespace Tango.PPC.Common.DataStore
[ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreDeleteRequest), RequestHandlerLoggingMode.LogRequestName)]
public async Task OnRemoteDataStoreDeleteRequest(RemoteDataStoreDeleteRequest request, String token, ExternalBridgeReceiver receiver)
{
+ throw new InvalidOperationException("Deleting from the data store is not allowed.");
GetManager().GetCollection(request.Collection).Delete(request.Key);
await receiver.SendGenericResponse(new RemoteDataStoreDeleteResponse(), token);
}
@@ -108,6 +129,7 @@ namespace Tango.PPC.Common.DataStore
[ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreDeleteAllRequest), RequestHandlerLoggingMode.LogRequestName)]
public async Task OnRemoteDataStoreDeleteAllRequest(RemoteDataStoreDeleteAllRequest request, String token, ExternalBridgeReceiver receiver)
{
+ throw new InvalidOperationException("Deleting from the data store is not allowed.");
GetManager().GetCollection(request.Collection).DeleteAll();
await receiver.SendGenericResponse(new RemoteDataStoreDeleteAllResponse(), token);
}
@@ -132,6 +154,117 @@ namespace Tango.PPC.Common.DataStore
}, token);
}
+ [ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreGetAllItemsRequest), RequestHandlerLoggingMode.LogRequestName)]
+ public async Task OnRemoteDataStoreGetAllItemsRequest(RemoteDataStoreGetAllItemsRequest request, String token, ExternalBridgeReceiver receiver)
+ {
+ List<RemoteDataStoreCollection> collections = new List<RemoteDataStoreCollection>();
+
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ var items = db.DataStoreItems.Where(x => !x.IsDeleted).ToList();
+
+ foreach (var itemsGroup in items.GroupBy(x => x.CollectionName))
+ {
+ RemoteDataStoreCollection collection = new RemoteDataStoreCollection();
+ collection.Name = itemsGroup.First().CollectionName;
+ collections.Add(collection);
+
+ foreach (var item in itemsGroup)
+ {
+ collection.Items.Add(CreateRemoteItem(item.ToDataStoreItem()));
+ }
+ }
+ }
+
+ await receiver.SendGenericResponse(new RemoteDataStoreGetAllItemsResponse()
+ {
+ Collections = collections
+ }, token);
+ }
+
+ [ExternalBridgeRequestHandlerMethod(typeof(UpdateDataStoreRequest), RequestHandlerLoggingMode.LogRequestName)]
+ public async Task OnUpdateDataStoreRequest(UpdateDataStoreRequest request, String token, ExternalBridgeReceiver receiver)
+ {
+ using (ObservablesContext db = ObservablesContext.CreateDefault())
+ {
+ var allItems = db.DataStoreItems.ToList();
+
+ foreach (var guid in request.ToDelete)
+ {
+ var item = allItems.FirstOrDefault(x => x.Guid == guid);
+ if (item != null)
+ {
+ item.IsDeleted = true;
+ item.IsSynchronized = true;
+ item.LastUpdated = DateTime.UtcNow;
+ }
+ }
+
+ foreach (var item in request.ToUpsert)
+ {
+ ValidateCollectionAndKey(item.CollectionName, item.Key);
+ }
+
+ foreach (var item in request.ToUpsert)
+ {
+ var itemDb = allItems.FirstOrDefault(x => x.CollectionName == item.CollectionName && x.Key == item.Key);
+
+ if (itemDb == null)
+ {
+ itemDb = new BL.Entities.DataStoreItem();
+ itemDb.Guid = item.Guid;
+ db.DataStoreItems.Add(itemDb);
+ }
+
+ itemDb.CollectionName = item.CollectionName;
+ itemDb.DataType = item.DataType;
+ itemDb.IsDeleted = item.IsDeleted;
+ itemDb.IsSynchronized = true;
+ itemDb.Key = item.Key;
+ itemDb.LastUpdated = item.LastUpdated;
+ itemDb.Value = item.Value;
+ }
+
+ db.SaveChanges();
+
+ if (_machineProvider.IsConnected)
+ {
+ Core.Threading.ThreadFactory.StartNew(() =>
+ {
+ foreach (var item in request.ToUpsert)
+ {
+ try
+ {
+ var response = _machineProvider.MachineOperator.SendRequest<DataStoreItemModifiedRequest, DataStoreItemModifiedResponse>(new DataStoreItemModifiedRequest()
+ {
+ Collection = item.CollectionName,
+ Key = item.Key
+ }).Result;
+ }
+ catch (Exception ex)
+ {
+ Logging.LogManager.Default.Log(ex, $"Error notifying firmware about data store item change '{item.CollectionName}.{item.Key}'.");
+ }
+ }
+ });
+ }
+ }
+
+ await receiver.SendGenericResponse(new UpdateDataStoreResponse(), token);
+ }
+
+ [ExternalBridgeRequestHandlerMethod(typeof(RemoteDataStoreStartListenRequest), RequestHandlerLoggingMode.LogRequestName)]
+ public async Task OnRemoteDataStoreStartListenRequest(RemoteDataStoreStartListenRequest request, String token, ExternalBridgeReceiver receiver)
+ {
+ _listenerReceivers.Add(new ListerReceiver() { Receiver = receiver, Token = token });
+
+ await receiver.SendGenericResponse(new RemoteDataStoreStartListenResponse()
+ {
+ ChangeType = RemoteDataStoreChangeType.None,
+ Item = null
+ }, token);
+ }
+
private RemoteDataStoreItem CreateRemoteItem(IDataStoreItem item)
{
RemoteDataStoreItem remote = new RemoteDataStoreItem();
@@ -149,8 +282,40 @@ namespace Tango.PPC.Common.DataStore
{
try
{
+ ValidateCollectionAndKey(request.Collection, request.Key);
+
GetManager().GetCollection(request.Collection).Put(request.Key, GetPMRValue(request.Item));
await transporter.SendResponse(new PutDataStoreItemResponse(), token);
+
+ try
+ {
+ if (_listenerReceivers.Count > 0)
+ {
+ var item = GetManager().GetCollection(request.Collection).GetItem(request.Key);
+ var remoteItem = CreateRemoteItem(item);
+
+ foreach (var listener in _listenerReceivers.ToList())
+ {
+ try
+ {
+ await listener.Receiver.SendGenericResponse(new RemoteDataStoreStartListenResponse()
+ {
+ ChangeType = RemoteDataStoreChangeType.Modified,
+ CollectionName = request.Collection,
+ Item = remoteItem
+ }, listener.Token);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, $"Error sending data store item notification to receiver '{listener.Receiver.Adapter.ToString()}'");
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error generating data store item notifications.");
+ }
}
catch (Exception ex)
{
@@ -173,6 +338,8 @@ namespace Tango.PPC.Common.DataStore
{
try
{
+ ValidateCollectionAndKey(request.Collection, request.Key);
+
var item = GetManager().GetCollection(request.Collection).GetItem(request.Key, GetPMRValue(request.DefaultItem));
await transporter.SendResponse(new GetDataStoreItemResponse()
{
@@ -278,9 +445,29 @@ namespace Tango.PPC.Common.DataStore
#endregion
+ private void ValidateCollectionAndKey(String collection = null, String key = null)
+ {
+ if (collection != null)
+ {
+ if (!DataStoreHelper.ValidateCollectionOrKeyName(collection))
+ {
+ throw new ArgumentException("Collection name contains invalid characters.");
+ }
+ }
+
+ if (key != null)
+ {
+ if (!DataStoreHelper.ValidateCollectionOrKeyName(key))
+ {
+ throw new ArgumentException("Item key contains invalid characters.");
+ }
+ }
+ }
+
public void OnReceiverDisconnected(ExternalBridgeReceiver receiver)
{
//Do nothing.
+ _listenerReceivers.RemoveAll(x => x.Receiver == receiver);
}
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj
index 4cb3b42dc..9d39c96d9 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Tango.PPC.Common.csproj
@@ -364,6 +364,26 @@
<EmbeddedResource Include="SafetyLevelOperations.csv" />
</ItemGroup>
<ItemGroup>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore.Editing\Tango.DataStore.Editing.csproj">
+ <Project>{ee088ff7-04d1-41fb-9d6a-cedeee7a7b9c}</Project>
+ <Name>Tango.DataStore.Editing</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore.EF\Tango.DataStore.EF.csproj">
+ <Project>{88d9906b-8fc4-4fe0-b7eb-127a0a8fcee4}</Project>
+ <Name>Tango.DataStore.EF</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore.LiteDB\Tango.DataStore.Lite.csproj">
+ <Project>{fa96bc0c-4055-475c-9dcc-70a5a9436b10}</Project>
+ <Name>Tango.DataStore.Lite</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore.Remote\Tango.DataStore.Remote.csproj">
+ <Project>{29448f3c-9b3e-4da6-8555-46a8b9a6b3aa}</Project>
+ <Name>Tango.DataStore.Remote</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\DataStore\Tango.DataStore\Tango.DataStore.csproj">
+ <Project>{e0364dfa-0721-4637-9d32-9d22aac109d6}</Project>
+ <Name>Tango.DataStore</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\Tango.AdvancedInstaller\Tango.AdvancedInstaller.csproj">
<Project>{c5df1816-34e5-4700-824c-29623a1baa22}</Project>
<Name>Tango.AdvancedInstaller</Name>
@@ -388,22 +408,6 @@
<Project>{58e8825f-0c96-449c-b320-1e82b0aa876b}</Project>
<Name>Tango.CSV</Name>
</ProjectReference>
- <ProjectReference Include="..\..\Tango.DataStore.EF\Tango.DataStore.EF.csproj">
- <Project>{88d9906b-8fc4-4fe0-b7eb-127a0a8fcee4}</Project>
- <Name>Tango.DataStore.EF</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Tango.DataStore.LiteDB\Tango.DataStore.Lite.csproj">
- <Project>{fa96bc0c-4055-475c-9dcc-70a5a9436b10}</Project>
- <Name>Tango.DataStore.Lite</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Tango.DataStore.Remote\Tango.DataStore.Remote.csproj">
- <Project>{29448f3c-9b3e-4da6-8555-46a8b9a6b3aa}</Project>
- <Name>Tango.DataStore.Remote</Name>
- </ProjectReference>
- <ProjectReference Include="..\..\Tango.DataStore\Tango.DataStore.csproj">
- <Project>{e0364dfa-0721-4637-9d32-9d22aac109d6}</Project>
- <Name>Tango.DataStore</Name>
- </ProjectReference>
<ProjectReference Include="..\..\Tango.Emulations\Tango.Emulations.csproj">
<Project>{63561e19-ff5a-414b-a5ef-e30711543e1d}</Project>
<Name>Tango.Emulations</Name>
@@ -516,7 +520,7 @@
</Target>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs
index 828bccf83..c95cdb376 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/AlternativeUnifiedWriteFilterManager.cs
@@ -4,20 +4,16 @@ using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
+using Tango.Core;
using Tango.Core.Components;
namespace Tango.PPC.Common.UWF
{
- public class AlternativeUnifiedWriteFilterManager : IUnifiedWriteFilterManager
+ public class AlternativeUnifiedWriteFilterManager : ExtendedObject, IUnifiedWriteFilterManager
{
private const string UWF_PATH = "C:\\Windows\\Sysnative\\uwfmgr.exe";
/// <summary>
- /// Gets a value indicating whether UWF if currently enabled on the system.
- /// </summary>
- public bool IsEnabled { get; private set; }
-
- /// <summary>
/// Installs and configures the service (requires restart).
/// </summary>
/// <returns></returns>
@@ -68,5 +64,31 @@ namespace Tango.PPC.Common.UWF
command.OutputEncoding = CmdCommand.OutEncoding.Unicode;
await command.Run();
}
+
+ /// <summary>
+ /// Gets a value indicating whether UWF if currently enabled on the system.
+ /// </summary>
+ /// <returns></returns>
+ public async Task<bool> IsEnabled()
+ {
+ String pattern = @"Next Session Settings[\n\r]+FILTER SETTINGS[\n\r]+\s+Filter state:\s+(OFF|ON)";
+
+ LogManager.Log($"Getting UWF status using pattern '{pattern}'...");
+ CmdCommand command = new CmdCommand(UWF_PATH, $"get-config");
+ command.OutputEncoding = CmdCommand.OutEncoding.Unicode;
+ var result = await command.Run();
+
+ Match match = Regex.Match(result.StandardOutput, pattern);
+ if (match != null && match.Success && match.Groups.Count > 1)
+ {
+ var value = match.Groups[1].Value;
+
+ LogManager.Log($"UWF pattern parsing result: '{value}'.");
+
+ return value.ToStringOrEmpty().Trim() == "ON";
+ }
+
+ return false;
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/DefaultUnifiedWriteFilterManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/DefaultUnifiedWriteFilterManager.cs
index 65cb3f466..5684f6926 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/DefaultUnifiedWriteFilterManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/DefaultUnifiedWriteFilterManager.cs
@@ -2,7 +2,9 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.RegularExpressions;
using System.Threading.Tasks;
+using Tango.Core;
using Tango.Core.Components;
namespace Tango.PPC.Common.UWF
@@ -11,7 +13,7 @@ namespace Tango.PPC.Common.UWF
/// Represents the default unified writer filter manager.
/// </summary>
/// <seealso cref="Tango.PPC.Common.UWF.IUnifiedWriteFilterManager" />
- public class DefaultUnifiedWriteFilterManager : IUnifiedWriteFilterManager
+ public class DefaultUnifiedWriteFilterManager : ExtendedObject, IUnifiedWriteFilterManager
{
private const int UWF_CAPACITY_MB = 5000;
private const string UWF_PATH = "C:\\Windows\\Sysnative\\uwfmgr.exe";
@@ -24,11 +26,6 @@ namespace Tango.PPC.Common.UWF
};
/// <summary>
- /// Gets a value indicating whether UWF if currently enabled on the system.
- /// </summary>
- public bool IsEnabled { get; }
-
- /// <summary>
/// Installs and configures the service (requires restart).
/// </summary>
public async Task Setup()
@@ -95,5 +92,31 @@ namespace Tango.PPC.Common.UWF
command.OutputEncoding = CmdCommand.OutEncoding.Unicode;
await command.Run();
}
+
+ /// <summary>
+ /// Gets a value indicating whether UWF if currently enabled on the system.
+ /// </summary>
+ /// <returns></returns>
+ public async Task<bool> IsEnabled()
+ {
+ String pattern = @"Next Session Settings[\n\r]+FILTER SETTINGS[\n\r]+\s+Filter state:\s+(OFF|ON)";
+
+ LogManager.Log($"Getting UWF status using pattern '{pattern}'...");
+ CmdCommand command = new CmdCommand(UWF_PATH, $"get-config");
+ command.OutputEncoding = CmdCommand.OutEncoding.Unicode;
+ var result = await command.Run();
+
+ Match match = Regex.Match(result.StandardOutput, pattern);
+ if (match != null && match.Success && match.Groups.Count > 1)
+ {
+ var value = match.Groups[1].Value;
+
+ LogManager.Log($"UWF pattern parsing result: '{value}'.");
+
+ return value.ToStringOrEmpty().Trim() == "ON";
+ }
+
+ return false;
+ }
}
}
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/IUnifiedWriteFilterManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/IUnifiedWriteFilterManager.cs
index 05fa1876a..b6a661ab5 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/IUnifiedWriteFilterManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/UWF/IUnifiedWriteFilterManager.cs
@@ -14,7 +14,8 @@ namespace Tango.PPC.Common.UWF
/// <summary>
/// Gets a value indicating whether UWF if currently enabled on the system.
/// </summary>
- bool IsEnabled { get; }
+ /// <returns></returns>
+ Task<bool> IsEnabled();
/// <summary>
/// Installs and configures the service (requires restart).