diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-05-08 00:32:36 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-05-08 00:32:36 +0300 |
| commit | 6999f84d21c1439d87d396fd7e7380cead4d52a2 (patch) | |
| tree | 2ac3a88e8d08e7cc3dda946868559151a61c88f9 /Software/Visual_Studio | |
| parent | 98c2921a8cf655da3962edafe91bbccc89632e6d (diff) | |
| download | Tango-6999f84d21c1439d87d396fd7e7380cead4d52a2.tar.gz Tango-6999f84d21c1439d87d396fd7e7380cead4d52a2.zip | |
Users & Roles !!
Fixed Shlomo PMR.
Diffstat (limited to 'Software/Visual_Studio')
28 files changed, 1371 insertions, 145 deletions
diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Firmware/ViewModels/FileSystemViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Firmware/ViewModels/FileSystemViewVM.cs index bb655d27b..6ad02cd49 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.Firmware/ViewModels/FileSystemViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.Firmware/ViewModels/FileSystemViewVM.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; +using Tango.BL.Enumerations; using Tango.Core.Commands; using Tango.FileSystem; using Tango.FSE.Common; @@ -160,7 +161,7 @@ namespace Tango.FSE.Firmware.ViewModels private async void MachineProvider_MachineConnected(object sender, MachineConnectedEventArgs e) { - if (e.DifferentFromPrevious) + if (e.DifferentFromPrevious && e.MachineOperator.IsConnected && AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_FirmwareFileSystemRead)) { try { diff --git a/Software/Visual_Studio/FSE/Modules/Tango.FSE.UsersAndRoles/ViewModels/MainViewVM.cs b/Software/Visual_Studio/FSE/Modules/Tango.FSE.UsersAndRoles/ViewModels/MainViewVM.cs index f06c7d033..584331991 100644 --- a/Software/Visual_Studio/FSE/Modules/Tango.FSE.UsersAndRoles/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/FSE/Modules/Tango.FSE.UsersAndRoles/ViewModels/MainViewVM.cs @@ -15,19 +15,22 @@ namespace Tango.FSE.UsersAndRoles.ViewModels { public override void OnApplicationReady() { - InvokeUI(() => + if (CurrentUser.HasPermission(Tango.BL.Enumerations.Permissions.FSE_ManageOrganizationUsersAndRoles) || CurrentUser.HasPermission(Tango.BL.Enumerations.Permissions.FSE_ManageAllOrganizationsUsersAndRoles)) { - NavigationManager.MenuItems.Add(new NavigationMenuItem(() => + InvokeUI(() => { - NavigationManager.NavigateTo<UsersAndRolesModule>(); - }) - { - Name = "Users & Roles", - Index = 10, - Description = "Manage users and their permissions on your organization", - Image = ResourceHelper.GetImageFromResources("Images/users_and_roles.png"), + NavigationManager.MenuItems.Add(new NavigationMenuItem(() => + { + NavigationManager.NavigateTo<UsersAndRolesModule>(); + }) + { + Name = "Users & Roles", + Index = 10, + Description = "Manage users and their permissions on your organization", + Image = ResourceHelper.GetImageFromResources("Images/users_and_roles.png"), + }); }); - }); + } } } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/IAuthenticationService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/IAuthenticationService.cs index 200831337..9dea71b96 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.BL/IAuthenticationService.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/IAuthenticationService.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; +using Tango.BL.Enumerations; using Tango.MachineService.Gateway; namespace Tango.FSE.BL @@ -22,5 +23,12 @@ namespace Tango.FSE.BL /// Gets the global current user. /// </summary> User CurrentUser { get; } + + /// <summary> + /// Throws an exception if the current user does not have the specified permission. + /// </summary> + /// <param name="permission">The permission.</param> + /// <param name="message">Optional message.</param> + void CheckPermission(Permissions permission, String message = null); } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/AuthenticationService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/AuthenticationService.cs index d06a382a8..a0de77af2 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/AuthenticationService.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/AuthenticationService.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Security.Authentication; using System.Text; using System.Threading.Tasks; +using Tango.BL.Enumerations; using Tango.FSE.BL.CacheEntities; using Tango.FSE.Web.Messages; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/MachinesService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/MachinesService.cs index 34aaf86b6..9dac05408 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/MachinesService.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/MachinesService.cs @@ -13,6 +13,7 @@ using Tango.Core.Threading; using Tango.FSE.BL.CacheEntities; using Z.EntityFramework.Plus; using Z.EntityFramework.Extensions; +using Tango.BL.Enumerations; namespace Tango.FSE.BL.Services { @@ -49,6 +50,8 @@ namespace Tango.FSE.BL.Services /// <returns></returns> public Task<Machine> GetMachine(String serialNumber) { + bool allowAll = CurrentUser.HasPermission(Permissions.FSE_ManageAllOrganizationsUsersAndRoles); + return DataResolver<Machine>.Builder.New() .ConfigureCascade(DataResolverNode.InMemoryCache, DataResolverNode.Online, DataResolverNode.DiskCache) .InMemoryCache((context) => @@ -60,7 +63,7 @@ namespace Tango.FSE.BL.Services using (ObservablesContext db = ObservablesContext.CreateDefault()) { var machine = new MachineBuilder(db) - .Set(x => x.OrganizationGuid == CurrentUser.OrganizationGuid && x.SerialNumber == serialNumber) + .Set(x => (allowAll || x.OrganizationGuid == CurrentUser.OrganizationGuid) && x.SerialNumber == serialNumber) .WithOrganization() .Build(); @@ -97,7 +100,7 @@ namespace Tango.FSE.BL.Services { using (var cache = DiskCache.CreateContext()) { - var cachedMachine = cache.GetCollection<CachedMachine>(MACHINES_COLLECTION).FindOne(x => x.SerialNumber == serialNumber && x.OrganizationGuid == CurrentUser.OrganizationGuid); + var cachedMachine = cache.GetCollection<CachedMachine>(MACHINES_COLLECTION).FindOne(x => x.SerialNumber == serialNumber && (allowAll || x.OrganizationGuid == CurrentUser.OrganizationGuid)); //Store in memory cache. _machinesCache.Put(serialNumber, cachedMachine); @@ -125,6 +128,8 @@ namespace Tango.FSE.BL.Services private Task<Machine> GetMachineFull(String serialNumber, bool enableLogs) { + bool allowAll = CurrentUser.HasPermission(Permissions.FSE_ManageAllOrganizationsUsersAndRoles); + return DataResolver<Machine>.Builder.New() .EnableLogs(enableLogs) .ConfigureCascade(DataResolverNode.InMemoryCache, DataResolverNode.Online, DataResolverNode.DiskCache) @@ -137,7 +142,7 @@ namespace Tango.FSE.BL.Services using (ObservablesContext db = ObservablesContext.CreateDefault()) { var machine = new MachineBuilder(db) - .Set(x => x.OrganizationGuid == CurrentUser.OrganizationGuid && x.SerialNumber == serialNumber) + .Set(x => (allowAll || x.OrganizationGuid == CurrentUser.OrganizationGuid) && x.SerialNumber == serialNumber) .WithOrganization() .WithVersion() .WithSpools() @@ -230,13 +235,15 @@ namespace Tango.FSE.BL.Services /// <returns></returns> public Task<List<Machine>> GetAllMachines() { + bool allowAll = CurrentUser.HasPermission(Permissions.FSE_ManageAllOrganizationsUsersAndRoles); + return DataResolver<List<Machine>>.Builder.New() .ConfigureCascade(DataResolverNode.InMemoryCache, DataResolverNode.Online, DataResolverNode.DiskCache) .InMemoryCache((context) => { var machines = _machinesCache .ToList() - .Where(x => x.OrganizationGuid == CurrentUser.OrganizationGuid) + .Where(x => allowAll || x.OrganizationGuid == CurrentUser.OrganizationGuid) .Select(x => x.ToObservable()) .ToList(); @@ -251,7 +258,7 @@ namespace Tango.FSE.BL.Services { using (ObservablesContext db = ObservablesContext.CreateDefault()) { - var machines = db.Machines.Where(x => x.OrganizationGuid == CurrentUser.OrganizationGuid).Include(x => x.Organization).ToList(); + var machines = db.Machines.Where(x => allowAll || x.OrganizationGuid == CurrentUser.OrganizationGuid).Include(x => x.Organization).ToList(); using (var cache = DiskCache.CreateContext()) { @@ -284,7 +291,7 @@ namespace Tango.FSE.BL.Services var collection = cache.GetCollection<CachedMachine>(MACHINES_COLLECTION); var cachedMachines = collection - .Find(x => x.OrganizationGuid == CurrentUser.OrganizationGuid) + .Find(x => allowAll || x.OrganizationGuid == CurrentUser.OrganizationGuid) .ToList(); foreach (var cachedMachine in cachedMachines) diff --git a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs index 9ee6929c8..db1527db6 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.BL/Services/OrganizationsService.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Tango.BL; using Tango.BL.Builders; using Tango.BL.Entities; +using Tango.BL.Enumerations; using Z.EntityFramework.Extensions; using Z.EntityFramework.Plus; @@ -24,7 +25,8 @@ namespace Tango.FSE.BL.Services { using (ObservablesContext db = ObservablesContext.CreateDefault()) { - return db.Organizations.ToList(); //TODO: Filter for just the users organization if he doesn't have FSE_Twine_Admin role. + bool allowAll = CurrentUser.HasPermission(Tango.BL.Enumerations.Permissions.FSE_ManageAllOrganizationsUsersAndRoles); + return db.Organizations.Where(x => allowAll || x.Guid == CurrentUser.OrganizationGuid).ToList(); } }) .BuildExecuteAsync(); @@ -85,6 +87,8 @@ namespace Tango.FSE.BL.Services { return Task.Factory.StartNew(() => { + Authentication.CheckPermission(Permissions.FSE_ManageOrganizationUsersAndRoles); + if (ConnectivityProvider.IsOnline) { using (var db = ObservablesContext.CreateDefault()) @@ -139,6 +143,8 @@ namespace Tango.FSE.BL.Services { return Task.Factory.StartNew<User>(() => { + Authentication.CheckPermission(Permissions.FSE_ManageOrganizationUsersAndRoles); + using (ObservablesContext db = ObservablesContext.CreateDefault()) { var usersRolesToAdd = user.UsersRoles; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Authentication/IAuthenticationProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Authentication/IAuthenticationProvider.cs index 5a4945540..1ad59a3fc 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/Authentication/IAuthenticationProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Authentication/IAuthenticationProvider.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; +using Tango.BL.Enumerations; using Tango.FSE.BL; using Tango.MachineService.Gateway; diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Authentication/DefaultAuthenticationProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Authentication/DefaultAuthenticationProvider.cs index 636f97a50..46ed0cc1e 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Authentication/DefaultAuthenticationProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Authentication/DefaultAuthenticationProvider.cs @@ -8,6 +8,7 @@ using System.Timers; using Tango.BL; using Tango.BL.Builders; using Tango.BL.Entities; +using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.DI; using Tango.Core.ExtensionMethods; @@ -260,5 +261,20 @@ namespace Tango.FSE.UI.Authentication _tokenRefreshTimer.Start(); } + + public void CheckPermission(Permissions permission, String message = null) + { + if (CurrentUser == null || !CurrentUser.HasPermission(permission)) + { + if (message == null) + { + throw new AuthorizationException(); + } + else + { + throw new AuthorizationException(message); + } + } + } } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Console/DefaultConsoleProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Console/DefaultConsoleProvider.cs index 730c36d45..f4a3045e6 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Console/DefaultConsoleProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Console/DefaultConsoleProvider.cs @@ -3,9 +3,12 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.BL.Enumerations; using Tango.Console.Network; using Tango.Core; using Tango.Core.DI; +using Tango.FSE.BL; +using Tango.FSE.Common.Authentication; using Tango.FSE.Common.Connection; using Tango.FSE.Common.Console; using Tango.FSE.Common.Notifications; @@ -25,6 +28,9 @@ namespace Tango.FSE.UI.Console [TangoInject] private INotificationProvider NotificationProvider { get; set; } + [TangoInject] + public IAuthenticationProvider AuthenticationProvider { get; set; } + #region Events /// <summary> @@ -67,6 +73,8 @@ namespace Tango.FSE.UI.Console /// <returns></returns> public async Task<ConsoleCommandResponse> ExecuteCommand(ConsoleCommandRequest request, TimeSpan? timeout = null) { + AuthenticationProvider.CheckPermission(Permissions.FSE_ExecuteRemoteConsoleCommands); + LogManager.Log($"Executing remote console command: '{request.Command}'..."); try diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs index 6bc667b32..9bab865a5 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/FileSystem/DefaultFileSystemProvider.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.DI; using Tango.Core.ExtensionMethods; @@ -14,6 +15,7 @@ using Tango.Core.IO; using Tango.Core.Threading; using Tango.FileSystem; using Tango.FileSystem.Network; +using Tango.FSE.Common.Authentication; using Tango.FSE.Common.Connection; using Tango.FSE.Common.FileSystem; using Tango.FSE.Common.Notifications; @@ -43,6 +45,9 @@ namespace Tango.FSE.UI.FileSystem [TangoInject] private INotificationProvider NotificationProvider { get; set; } + [TangoInject] + private IAuthenticationProvider AuthenticationProvider { get; set; } + #region Properties private bool _enableWebRTC; @@ -273,6 +278,8 @@ namespace Tango.FSE.UI.FileSystem /// <returns></returns> public Task<FileSystemHandler> Download(FileSystemItem item, String localTargetFolderOrFile, bool isSingleFile = false) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemRead); + LogManager.Log($"Downloading remote item '{item.Path}' to local path '{localTargetFolderOrFile}'..."); String operationId = String.Empty; @@ -551,6 +558,8 @@ namespace Tango.FSE.UI.FileSystem /// <exception cref="System.IO.FileNotFoundException">Could not locate the local file or directory to upload.</exception> public Task<FileSystemHandler> Upload(String localSourcePath, String remotePath) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemWrite); + String operationId = String.Empty; String destination = remotePath; bool isFolder = false; @@ -818,6 +827,8 @@ namespace Tango.FSE.UI.FileSystem /// </exception> public async Task Copy(FileSystemItem source, FileSystemItem target) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemWrite); + try { LogManager.Log($"Copying remote item '{source.Path}' to '{target.Path}'..."); @@ -861,6 +872,8 @@ namespace Tango.FSE.UI.FileSystem /// </exception> public async Task Move(FileSystemItem source, FileSystemItem target) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemWrite); + try { LogManager.Log($"Moving remote item '{source.Path}' to '{target.Path}'..."); @@ -901,6 +914,8 @@ namespace Tango.FSE.UI.FileSystem /// <exception cref="System.ArgumentException">The new name contains invalid characters.</exception> public async Task Rename(FileSystemItem source, string newName) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemWrite); + try { LogManager.Log($"Renaming remote item '{source.Path}' to '{newName}'..."); @@ -934,6 +949,8 @@ namespace Tango.FSE.UI.FileSystem /// <exception cref="System.NotSupportedException">The source file system item is not supported for deletion.</exception> public async Task Delete(FileSystemItem item) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemWrite); + try { LogManager.Log($"Deleting remote item '{item.Path}'..."); @@ -962,6 +979,8 @@ namespace Tango.FSE.UI.FileSystem /// <returns></returns> public async Task<FolderItem> CreateFolder(FileSystemItem parent, string folderName) { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemWrite); + try { LogManager.Log($"Creating new folder '{folderName}' on the remote path '{parent.Path}'..."); @@ -986,6 +1005,8 @@ namespace Tango.FSE.UI.FileSystem /// <returns></returns> public async Task<PerformDiskSpaceOptimizationResponse> PerformDiskSpaceOptimization() { + AuthenticationProvider.CheckPermission(Permissions.FSE_PPCFileSystemRead); + try { LogManager.Log("Performing disk space optimization on the remote file system."); diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Firmware/DefaultFirmwareStorageProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Firmware/DefaultFirmwareStorageProvider.cs index e8ed4badb..d0e09d568 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Firmware/DefaultFirmwareStorageProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Firmware/DefaultFirmwareStorageProvider.cs @@ -5,10 +5,12 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.DI; using Tango.Core.Threading; using Tango.FileSystem; +using Tango.FSE.Common.Authentication; using Tango.FSE.Common.Connection; using Tango.FSE.Common.FileSystem; using Tango.FSE.Common.Firmware; @@ -28,6 +30,9 @@ namespace Tango.FSE.UI.Firmware [TangoInject] private INotificationProvider NotificationProvider { get; set; } + [TangoInject] + private IAuthenticationProvider AuthenticationProvider { get; set; } + public DefaultFirmwareStorageProvider(IMachineProvider machineProvider) { _activeHandlers = new List<FileSystemHandler>(); @@ -74,6 +79,8 @@ namespace Tango.FSE.UI.Firmware public Task<FileSystemHandler> Download(FileItem item, string localTargetPath) { + AuthenticationProvider.CheckPermission(Permissions.FSE_FirmwareFileSystemRead); + LogManager.Log($"Downloading remote firmware item '{item.Path}' to local path '{localTargetPath}'..."); bool aborted = false; @@ -171,6 +178,8 @@ namespace Tango.FSE.UI.Firmware public Task<FileSystemHandler> Upload(string localSourcePath, string remoteTargetPath) { + AuthenticationProvider.CheckPermission(Permissions.FSE_FirmwareFileSystemWrite); + LogManager.Log($"Uploading file '{localSourcePath}' to remote path '{remoteTargetPath}'..."); bool aborted = false; @@ -268,6 +277,8 @@ namespace Tango.FSE.UI.Firmware public Task Delete(FileSystemItem item) { + AuthenticationProvider.CheckPermission(Permissions.FSE_FirmwareFileSystemWrite); + try { return _manager.DeleteItem(item.ToStorageItem()); @@ -280,6 +291,8 @@ namespace Tango.FSE.UI.Firmware public async Task<FolderItem> CreateFolder(FileSystemItem parent, string folderName) { + AuthenticationProvider.CheckPermission(Permissions.FSE_FirmwareFileSystemWrite); + try { String remotePath = Path.Combine(parent.Path, folderName); diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs index 7ef7f7e8b..dbfcc9157 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteDesktop/DefaultRemoteDesktopProvider.cs @@ -10,10 +10,12 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media.Imaging; +using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.DI; using Tango.Core.ExtensionMethods; using Tango.Core.Threading; +using Tango.FSE.Common.Authentication; using Tango.FSE.Common.Connection; using Tango.FSE.Common.Notifications; using Tango.FSE.Common.RemoteDesktop; @@ -54,6 +56,9 @@ namespace Tango.FSE.UI.RemoteDesktop [TangoInject] private INotificationProvider NotificationProvider { get; set; } + [TangoInject] + private IAuthenticationProvider AuthenticationProvider { get; set; } + #region Events /// <summary> @@ -197,6 +202,8 @@ namespace Tango.FSE.UI.RemoteDesktop /// <exception cref="System.InvalidOperationException">Unable to start a remote desktop session at the moment.</exception> public async Task StartSession() { + AuthenticationProvider.CheckPermission(Permissions.FSE_RemoteDesktopView); + TaskCompletionSource<bool> completionSource = new TaskCompletionSource<bool>(); if (!CanStartSession) @@ -402,6 +409,7 @@ namespace Tango.FSE.UI.RemoteDesktop public async void MouseDown(MouseButton button, Point location, Size viewSize) { if (!InSession || _frameSize == null) return; + if (!AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RemoteDesktopControl)) return; try { @@ -436,6 +444,7 @@ namespace Tango.FSE.UI.RemoteDesktop public async void MouseUp(MouseButton button, Point location, Size viewSize) { if (!InSession || _frameSize == null) return; + if (!AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RemoteDesktopControl)) return; try { @@ -469,6 +478,7 @@ namespace Tango.FSE.UI.RemoteDesktop public void MouseMove(Point location, Size viewSize) { if (!InSession || _frameSize == null) return; + if (!AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RemoteDesktopControl)) return; if (_mouseMoveThread == null) { @@ -533,6 +543,7 @@ namespace Tango.FSE.UI.RemoteDesktop public async void MouseDoubleClick(MouseButton button, Point location, Size viewSize) { if (!InSession || _frameSize == null) return; + if (!AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RemoteDesktopControl)) return; try { @@ -581,6 +592,7 @@ namespace Tango.FSE.UI.RemoteDesktop public async void KeyboardDown(Key key, bool ctrlDown, bool shitDown, bool altDown) { if (!InSession || _frameSize == null) return; + if (!AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RemoteDesktopControl)) return; if (key == Key.LeftCtrl || key == Key.LeftShift || key == Key.LeftAlt) return; @@ -620,6 +632,7 @@ namespace Tango.FSE.UI.RemoteDesktop public async void KeyboardUp(Key key, bool ctrlDown, bool shitDown, bool altDown) { if (!InSession || _frameSize == null) return; + if (!AuthenticationProvider.CurrentUser.HasPermission(Permissions.FSE_RemoteDesktopControl)) return; if (key == Key.LeftCtrl || key == Key.LeftShift || key == Key.LeftAlt) return; @@ -659,6 +672,8 @@ namespace Tango.FSE.UI.RemoteDesktop /// <param name="command">The command.</param> public async void SendCommand(RemoteDesktopCommand command) { + AuthenticationProvider.CheckPermission(Permissions.FSE_RemoteDesktopControl); + try { await _machineProvider.MachineOperator.SendGenericRequest<RemoteDesktopCommandRequest, RemoteDesktopCommandResponse>(new RemoteDesktopCommandRequest()); diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs index 870f9ca12..715fef542 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/RemoteUpgrade/DefaultRemoteUpgradeManager.cs @@ -8,6 +8,7 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Tango.BL.Entities; +using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.Components; using Tango.Core.DB; @@ -88,6 +89,8 @@ namespace Tango.FSE.UI.RemoteUpgrade /// <returns></returns> public Task<RemoteUpgradeHandler> CreateTupFile(TangoVersion tangoVersion, string serialNumber, string targetFilePath) { + AuthenticationProvider.CheckPermission(Permissions.FSE_RemoteUpgradeOffline); + Thread thread = null; RemoteUpgradeHandler handler = null; handler = new RemoteUpgradeHandler(() => @@ -390,6 +393,8 @@ namespace Tango.FSE.UI.RemoteUpgrade /// <returns></returns> public Task<RemoteUpgradeHandler> CreateTfpFile(TangoVersion tangoVersion, string targetFilePath) { + AuthenticationProvider.CheckPermission(Permissions.FSE_RemoteUpgradeOffline); + Thread thread = null; RemoteUpgradeHandler handler = null; handler = new RemoteUpgradeHandler(() => @@ -507,6 +512,8 @@ namespace Tango.FSE.UI.RemoteUpgrade /// <returns></returns> public Task<RemoteUpgradeHandler> PerformRemoteApplicationUpgrade(string tupFile, bool upgradeFirmware = true) { + AuthenticationProvider.CheckPermission(Permissions.FSE_RemoteUpgradeOnline); + Thread thread = null; RemoteUpgradeHandler handler = null; handler = new RemoteUpgradeHandler(() => @@ -621,6 +628,8 @@ namespace Tango.FSE.UI.RemoteUpgrade /// <returns></returns> public Task<RemoteUpgradeHandler> PerformRemoteFirmwareUpgrade(string tfpFile) { + AuthenticationProvider.CheckPermission(Permissions.FSE_RemoteUpgradeOnline); + Thread thread = null; RemoteUpgradeHandler handler = null; handler = new RemoteUpgradeHandler(() => diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs index a9a677368..392a64d36 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/ViewModels/LoginViewVM.cs @@ -231,7 +231,7 @@ namespace Tango.FSE.UI.ViewModels else { //TODO: Handler password change required! - Debugger.Break(); + await NavigationManager.NavigateTo(NavigationView.Home); } } catch (Exception ex) diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs b/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs index ae77dbbbf..514ce925d 100644 --- a/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs +++ b/Software/Visual_Studio/Tango.BL/Enumerations/Permissions.cs @@ -229,5 +229,11 @@ namespace Tango.BL.Enumerations [Description("Allows performing direct remote upgrade")] FSE_RemoteUpgradeOnline = 1013, + /// <summary> + /// (Allows executing command prompt commands remotely) + /// </summary> + [Description("Allows executing command prompt commands remotely")] + FSE_ExecuteRemoteConsoleCommands = 1014, + } } diff --git a/Software/Visual_Studio/Tango.Core/Commands/RelayCommand.cs b/Software/Visual_Studio/Tango.Core/Commands/RelayCommand.cs index 359574a5c..427c83749 100644 --- a/Software/Visual_Studio/Tango.Core/Commands/RelayCommand.cs +++ b/Software/Visual_Studio/Tango.Core/Commands/RelayCommand.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -47,7 +48,15 @@ namespace Tango.Core.Commands public virtual bool CanExecute(object parameter) { - return _canExecute != null ? _canExecute(parameter) : true; + try + { + return _canExecute != null ? _canExecute(parameter) : true; + } + catch (Exception ex) + { + Debug.WriteLine("Error on CanExecute RelayCommand\n" + ex); + return false; + } } public virtual void Execute(object parameter) diff --git a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs index 25b602104..761ed5644 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/IMachineOperator.cs @@ -59,6 +59,11 @@ namespace Tango.Integration.Operation MachineStatuses Status { get; } /// <summary> + /// Gets a value indicating whether the machine is connected and status is not disconnected. + /// </summary> + bool IsConnected { get; } + + /// <summary> /// Gets or sets a value indicating whether to enable liquid quantity validation before starting the job. /// The validation is done using the reported <see cref="MachineStatus"/>. /// </summary> diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs index 055b130b1..e6db7fcfc 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs @@ -294,11 +294,20 @@ namespace Tango.Integration.Operation OnStatusChanged(value); RaisePropertyChanged(nameof(IsPrinting)); RaisePropertyChanged(nameof(CanPrint)); + RaisePropertyChanged(nameof(IsConnected)); LogManager.Log("Machine operator status changed: " + _status); } } } + /// <summary> + /// Gets a value indicating whether the machine is connected and status is not disconnected. + /// </summary> + public bool IsConnected + { + get { return State == TransportComponentState.Connected && Status != MachineStatuses.Disconnected; } + } + private MachineStatus _machineStatus; /// <summary> /// Gets the machine embedded device status. diff --git a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs index e06fafb77..7137daf1d 100644 --- a/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs +++ b/Software/Visual_Studio/Tango.PMR/Common/MessageType.cs @@ -90,8 +90,8 @@ namespace Tango.PMR.Common { "Ym9ydEpvYlJlc3BvbnNlEGYSJAogU3R1Yk1pZFRhbmtQcmVzc3VyZVNlbnNv", "clJlcXVlc3QQZxIlCiFTdHViTWlkVGFua1ByZXNzdXJlU2Vuc29yUmVzcG9u", "c2UQaBIeChpTdHViRGlzcGVuc2VyRUVwcm9tUmVxdWVzdBBpEh8KG1N0dWJE", - "aXNwZW5zZXJFRXByb21SZXNwb25zZRBqEhgKFFN0dWJXSFNFRXByb21SZXF1", - "ZXN0EGsSGQoVU3R1YldIU0VFcHJvbVJlc3BvbnNlEGwSJQogRXh0ZXJuYWxC", + "aXNwZW5zZXJFRXByb21SZXNwb25zZRBqEhgKFFN0dWJXaHNFRXByb21SZXF1", + "ZXN0EGsSGQoVU3R1Yldoc0VFcHJvbVJlc3BvbnNlEGwSJQogRXh0ZXJuYWxC", "cmlkZ2VVZHBEaXNjb3ZlcnlQYWNrZXQQ6AcSHwoaRXh0ZXJuYWxCcmlkZ2VM", "b2dpblJlcXVlc3QQ6QcSIAobRXh0ZXJuYWxCcmlkZ2VMb2dpblJlc3BvbnNl", "EOoHEiAKG0V4dGVybmFsQnJpZGdlTG9nb3V0UmVxdWVzdBDrBxIhChxFeHRl", @@ -311,11 +311,11 @@ namespace Tango.PMR.Common { [pbr::OriginalName("StubMidTankPressureSensorResponse")] StubMidTankPressureSensorResponse = 104, [pbr::OriginalName("StubDispenserEEpromRequest")] StubDispenserEepromRequest = 105, [pbr::OriginalName("StubDispenserEEpromResponse")] StubDispenserEepromResponse = 106, - [pbr::OriginalName("StubWHSEEpromRequest")] StubWhseepromRequest = 107, + [pbr::OriginalName("StubWhsEEpromRequest")] StubWhsEepromRequest = 107, /// <summary> ///------------------------------------ /// </summary> - [pbr::OriginalName("StubWHSEEpromResponse")] StubWhseepromResponse = 108, + [pbr::OriginalName("StubWhsEEpromResponse")] StubWhsEepromResponse = 108, /// <summary> ///Integration /// </summary> diff --git a/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginRequest.cs b/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginRequest.cs index 945cb27ca..21e4ecd30 100644 --- a/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginRequest.cs +++ b/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginRequest.cs @@ -24,16 +24,17 @@ namespace Tango.PMR.Integration { string.Concat( "CiBFeHRlcm5hbEJyaWRnZUxvZ2luUmVxdWVzdC5wcm90bxIVVGFuZ28uUE1S", "LkludGVncmF0aW9uGh9FeHRlcm5hbEJyaWRnZUxvZ2luSW50ZW50LnByb3Rv", - "ItsBChpFeHRlcm5hbEJyaWRnZUxvZ2luUmVxdWVzdBINCgVBcHBJRBgBIAEo", + "IvABChpFeHRlcm5hbEJyaWRnZUxvZ2luUmVxdWVzdBINCgVBcHBJRBgBIAEo", "CRIQCghVc2VyR3VpZBgCIAEoCRIQCghIb3N0TmFtZRgDIAEoCRIQCghQYXNz", "d29yZBgEIAEoCRJACgZJbnRlbnQYBSABKA4yMC5UYW5nby5QTVIuSW50ZWdy", "YXRpb24uRXh0ZXJuYWxCcmlkZ2VMb2dpbkludGVudBIkChxSZXF1aXJlU2Fm", - "ZXR5TGV2ZWxPcGVyYXRpb25zGAYgASgIEhAKCFVzZXJOYW1lGAcgASgJQiEK", - "H2NvbS50d2luZS50YW5nby5wbXIuaW50ZWdyYXRpb25iBnByb3RvMw==")); + "ZXR5TGV2ZWxPcGVyYXRpb25zGAYgASgIEhAKCFVzZXJOYW1lGAcgASgJEhMK", + "C1Blcm1pc3Npb25zGAggAygJQiEKH2NvbS50d2luZS50YW5nby5wbXIuaW50", + "ZWdyYXRpb25iBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { global::Tango.PMR.Integration.ExternalBridgeLoginIntentReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.ExternalBridgeLoginRequest), global::Tango.PMR.Integration.ExternalBridgeLoginRequest.Parser, new[]{ "AppID", "UserGuid", "HostName", "Password", "Intent", "RequireSafetyLevelOperations", "UserName" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.ExternalBridgeLoginRequest), global::Tango.PMR.Integration.ExternalBridgeLoginRequest.Parser, new[]{ "AppID", "UserGuid", "HostName", "Password", "Intent", "RequireSafetyLevelOperations", "UserName", "Permissions" }, null, null, null) })); } #endregion @@ -71,6 +72,7 @@ namespace Tango.PMR.Integration { intent_ = other.intent_; requireSafetyLevelOperations_ = other.requireSafetyLevelOperations_; userName_ = other.userName_; + permissions_ = other.permissions_.Clone(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -155,6 +157,16 @@ namespace Tango.PMR.Integration { } } + /// <summary>Field number for the "Permissions" field.</summary> + public const int PermissionsFieldNumber = 8; + private static readonly pb::FieldCodec<string> _repeated_permissions_codec + = pb::FieldCodec.ForString(66); + private readonly pbc::RepeatedField<string> permissions_ = new pbc::RepeatedField<string>(); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public pbc::RepeatedField<string> Permissions { + get { return permissions_; } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { return Equals(other as ExternalBridgeLoginRequest); @@ -175,6 +187,7 @@ namespace Tango.PMR.Integration { if (Intent != other.Intent) return false; if (RequireSafetyLevelOperations != other.RequireSafetyLevelOperations) return false; if (UserName != other.UserName) return false; + if(!permissions_.Equals(other.permissions_)) return false; return true; } @@ -188,6 +201,7 @@ namespace Tango.PMR.Integration { if (Intent != 0) hash ^= Intent.GetHashCode(); if (RequireSafetyLevelOperations != false) hash ^= RequireSafetyLevelOperations.GetHashCode(); if (UserName.Length != 0) hash ^= UserName.GetHashCode(); + hash ^= permissions_.GetHashCode(); return hash; } @@ -226,6 +240,7 @@ namespace Tango.PMR.Integration { output.WriteRawTag(58); output.WriteString(UserName); } + permissions_.WriteTo(output, _repeated_permissions_codec); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -252,6 +267,7 @@ namespace Tango.PMR.Integration { if (UserName.Length != 0) { size += 1 + pb::CodedOutputStream.ComputeStringSize(UserName); } + size += permissions_.CalculateSize(_repeated_permissions_codec); return size; } @@ -281,6 +297,7 @@ namespace Tango.PMR.Integration { if (other.UserName.Length != 0) { UserName = other.UserName; } + permissions_.Add(other.permissions_); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -319,6 +336,10 @@ namespace Tango.PMR.Integration { UserName = input.ReadString(); break; } + case 66: { + permissions_.AddEntriesFrom(input, _repeated_permissions_codec); + break; + } } } } diff --git a/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginResponse.cs b/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginResponse.cs index aa573e47e..025d75aac 100644 --- a/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginResponse.cs +++ b/Software/Visual_Studio/Tango.PMR/Integration/ExternalBridgeLoginResponse.cs @@ -24,17 +24,19 @@ namespace Tango.PMR.Integration { string.Concat( "CiFFeHRlcm5hbEJyaWRnZUxvZ2luUmVzcG9uc2UucHJvdG8SFVRhbmdvLlBN", "Ui5JbnRlZ3JhdGlvbhoXRGV2aWNlSW5mb3JtYXRpb24ucHJvdG8aHEFwcGxp", - "Y2F0aW9uSW5mb3JtYXRpb24ucHJvdG8i3QEKG0V4dGVybmFsQnJpZGdlTG9n", - "aW5SZXNwb25zZRIVCg1BdXRoZW50aWNhdGVkGAEgASgIEhQKDFNlcmlhbE51", - "bWJlchgCIAEoCRJCChFEZXZpY2VJbmZvcm1hdGlvbhgDIAEoCzInLlRhbmdv", - "LlBNUi5Db25uZWN0aW9uLkRldmljZUluZm9ybWF0aW9uEk0KFkFwcGxpY2F0", - "aW9uSW5mb3JtYXRpb24YBCABKAsyLS5UYW5nby5QTVIuSW50ZWdyYXRpb24u", - "QXBwbGljYXRpb25JbmZvcm1hdGlvbkIhCh9jb20udHdpbmUudGFuZ28ucG1y", - "LmludGVncmF0aW9uYgZwcm90bzM=")); + "Y2F0aW9uSW5mb3JtYXRpb24ucHJvdG8aElVwZGF0ZVN0YXR1cy5wcm90byKS", + "AgobRXh0ZXJuYWxCcmlkZ2VMb2dpblJlc3BvbnNlEhUKDUF1dGhlbnRpY2F0", + "ZWQYASABKAgSFAoMU2VyaWFsTnVtYmVyGAIgASgJEkIKEURldmljZUluZm9y", + "bWF0aW9uGAMgASgLMicuVGFuZ28uUE1SLkNvbm5lY3Rpb24uRGV2aWNlSW5m", + "b3JtYXRpb24STQoWQXBwbGljYXRpb25JbmZvcm1hdGlvbhgEIAEoCzItLlRh", + "bmdvLlBNUi5JbnRlZ3JhdGlvbi5BcHBsaWNhdGlvbkluZm9ybWF0aW9uEjMK", + "BlN0YXR1cxgFIAEoDjIjLlRhbmdvLlBNUi5JbnRlZ3JhdGlvbi5VcGRhdGVT", + "dGF0dXNCIQofY29tLnR3aW5lLnRhbmdvLnBtci5pbnRlZ3JhdGlvbmIGcHJv", + "dG8z")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, - new pbr::FileDescriptor[] { global::Tango.PMR.Connection.DeviceInformationReflection.Descriptor, global::Tango.PMR.Integration.ApplicationInformationReflection.Descriptor, }, + new pbr::FileDescriptor[] { global::Tango.PMR.Connection.DeviceInformationReflection.Descriptor, global::Tango.PMR.Integration.ApplicationInformationReflection.Descriptor, global::Tango.PMR.Integration.UpdateStatusReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.ExternalBridgeLoginResponse), global::Tango.PMR.Integration.ExternalBridgeLoginResponse.Parser, new[]{ "Authenticated", "SerialNumber", "DeviceInformation", "ApplicationInformation" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Integration.ExternalBridgeLoginResponse), global::Tango.PMR.Integration.ExternalBridgeLoginResponse.Parser, new[]{ "Authenticated", "SerialNumber", "DeviceInformation", "ApplicationInformation", "Status" }, null, null, null) })); } #endregion @@ -69,6 +71,7 @@ namespace Tango.PMR.Integration { serialNumber_ = other.serialNumber_; DeviceInformation = other.deviceInformation_ != null ? other.DeviceInformation.Clone() : null; ApplicationInformation = other.applicationInformation_ != null ? other.ApplicationInformation.Clone() : null; + status_ = other.status_; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -120,6 +123,17 @@ namespace Tango.PMR.Integration { } } + /// <summary>Field number for the "Status" field.</summary> + public const int StatusFieldNumber = 5; + private global::Tango.PMR.Integration.UpdateStatus status_ = 0; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Tango.PMR.Integration.UpdateStatus Status { + get { return status_; } + set { + status_ = value; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { return Equals(other as ExternalBridgeLoginResponse); @@ -137,6 +151,7 @@ namespace Tango.PMR.Integration { if (SerialNumber != other.SerialNumber) return false; if (!object.Equals(DeviceInformation, other.DeviceInformation)) return false; if (!object.Equals(ApplicationInformation, other.ApplicationInformation)) return false; + if (Status != other.Status) return false; return true; } @@ -147,6 +162,7 @@ namespace Tango.PMR.Integration { if (SerialNumber.Length != 0) hash ^= SerialNumber.GetHashCode(); if (deviceInformation_ != null) hash ^= DeviceInformation.GetHashCode(); if (applicationInformation_ != null) hash ^= ApplicationInformation.GetHashCode(); + if (Status != 0) hash ^= Status.GetHashCode(); return hash; } @@ -173,6 +189,10 @@ namespace Tango.PMR.Integration { output.WriteRawTag(34); output.WriteMessage(ApplicationInformation); } + if (Status != 0) { + output.WriteRawTag(40); + output.WriteEnum((int) Status); + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -190,6 +210,9 @@ namespace Tango.PMR.Integration { if (applicationInformation_ != null) { size += 1 + pb::CodedOutputStream.ComputeMessageSize(ApplicationInformation); } + if (Status != 0) { + size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Status); + } return size; } @@ -216,6 +239,9 @@ namespace Tango.PMR.Integration { } ApplicationInformation.MergeFrom(other.ApplicationInformation); } + if (other.Status != 0) { + Status = other.Status; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -248,6 +274,10 @@ namespace Tango.PMR.Integration { input.ReadMessage(applicationInformation_); break; } + case 40: { + status_ = (global::Tango.PMR.Integration.UpdateStatus) input.ReadEnum(); + break; + } } } } diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/DispenserEEPROM.cs b/Software/Visual_Studio/Tango.PMR/Stubs/StubDispenserEEpromData.cs index 5b8b0e9ee..2be7cdb89 100644 --- a/Software/Visual_Studio/Tango.PMR/Diagnostics/DispenserEEPROM.cs +++ b/Software/Visual_Studio/Tango.PMR/Stubs/StubDispenserEEpromData.cs @@ -1,5 +1,5 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! -// source: DispenserEEprom.proto +// source: StubDispenserEEpromData.proto #pragma warning disable 1591, 0612, 3021 #region Designer generated code @@ -7,58 +7,58 @@ using pb = global::Google.Protobuf; using pbc = global::Google.Protobuf.Collections; using pbr = global::Google.Protobuf.Reflection; using scg = global::System.Collections.Generic; -namespace Tango.PMR.Diagnostics { +namespace Tango.PMR.Stubs { - /// <summary>Holder for reflection information generated from DispenserEEprom.proto</summary> - public static partial class DispenserEEpromReflection { + /// <summary>Holder for reflection information generated from StubDispenserEEpromData.proto</summary> + public static partial class StubDispenserEEpromDataReflection { #region Descriptor - /// <summary>File descriptor for DispenserEEprom.proto</summary> + /// <summary>File descriptor for StubDispenserEEpromData.proto</summary> public static pbr::FileDescriptor Descriptor { get { return descriptor; } } private static pbr::FileDescriptor descriptor; - static DispenserEEpromReflection() { + static StubDispenserEEpromDataReflection() { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( - "ChVEaXNwZW5zZXJFRXByb20ucHJvdG8SFVRhbmdvLlBNUi5EaWFnbm9zdGlj", - "cyLXBQoPRGlzcGVuc2VyRUVwcm9tEg4KBkhlYWRlchgBIAEoDRITCgtUYWJs", - "ZUxlbmd0aBgCIAEoDRIUCgxUYWJsZXZlcnNpb24YAyABKA0SFAoMRGlzcGVu", - "c2VyUF9OGAQgASgJEg4KBlBDQlNfThgFIAEoCRIVCg1QQ0JQYXJ0TnVtYmVy", - "GAYgASgJEhQKDERpc3BlbnNlclNfThgHIAEoCRIXCg9NaW5pbWFsUHJlc3N1", - "cmUYCCABKA0SFwoPTWF4aW1hbFByZXNzdXJlGAkgASgNEhEKCU1pbmltYWxN", - "VhgKIAEoDRIRCglNYXhpbWFsTVYYCyABKA0SEwoLVG90YWxDeWNsZXMYDCAB", - "KA0SEgoKQnViYmxlU2l6ZRgNIAEoDRIcChRBVkdfTmxfc3RlcFZhbHVlXzFf", - "NBgOIAEoDRIcChRBVkdfTmxfc3RlcFZhbHVlXzJfNBgPIAEoDRIcChRBVkdf", - "Tmxfc3RlcFZhbHVlXzNfNBgQIAEoDRIcChRBVkdfTmxfc3RlcFZhbHVlXzRf", - "NBgRIAEoDRISCgpTV19SZXNlcnZlGBIgASgNEhcKD1NwYXJlMV9wcmVzc3Vy", - "ZRgTIAEoBRIXCg9TcGFyZTJfcHJlc3N1cmUYFCABKAUSGwoTTW90b3JQdWxz", - "ZXNQZXJDeWNsZRgVIAEoDRINCgVDb2xvchgWIAEoDRIVCg1QcmVzc3VyZVNs", - "b3BlGBcgASgNEhYKDlByb2R1Y3Rpb25EYXRlGBggASgJEhMKC0FUU2xvY2F0", - "aW9uGBkgASgNEg4KBlNwYXJlMRgaIAEoDRIOCgZTcGFyZTIYGyABKA0SEgoK", - "QVRTQ2hhbm5lbBgcIAEoDRIRCglVbml0RW1wdHkYHSABKAgSFwoPRHJ5UnVu", - "UGFzc19GYWlsGB4gASgIEhUKDUZsb3dQYXNzX0ZhaWwYHyABKAgSEAoIQ2hl", - "Y2tTdW0YICABKAhCIQofY29tLnR3aW5lLnRhbmdvLnBtci5kaWFnbm9zdGlj", - "c2IGcHJvdG8z")); + "Ch1TdHViRGlzcGVuc2VyRUVwcm9tRGF0YS5wcm90bxIPVGFuZ28uUE1SLlN0", + "dWJzIt8FChdTdHViRGlzcGVuc2VyRUVwcm9tRGF0YRIOCgZIZWFkZXIYASAB", + "KA0SEwoLVGFibGVMZW5ndGgYAiABKA0SFAoMVGFibGV2ZXJzaW9uGAMgASgN", + "EhQKDERpc3BlbnNlclBfThgEIAEoCRIOCgZQQ0JTX04YBSABKAkSFQoNUENC", + "UGFydE51bWJlchgGIAEoCRIUCgxEaXNwZW5zZXJTX04YByABKAkSFwoPTWlu", + "aW1hbFByZXNzdXJlGAggASgNEhcKD01heGltYWxQcmVzc3VyZRgJIAEoDRIR", + "CglNaW5pbWFsTVYYCiABKA0SEQoJTWF4aW1hbE1WGAsgASgNEhMKC1RvdGFs", + "Q3ljbGVzGAwgASgNEhIKCkJ1YmJsZVNpemUYDSABKA0SHAoUQVZHX05sX3N0", + "ZXBWYWx1ZV8xXzQYDiABKA0SHAoUQVZHX05sX3N0ZXBWYWx1ZV8yXzQYDyAB", + "KA0SHAoUQVZHX05sX3N0ZXBWYWx1ZV8zXzQYECABKA0SHAoUQVZHX05sX3N0", + "ZXBWYWx1ZV80XzQYESABKA0SEgoKU1dfUmVzZXJ2ZRgSIAEoDRIXCg9TcGFy", + "ZTFfcHJlc3N1cmUYEyABKAUSFwoPU3BhcmUyX3ByZXNzdXJlGBQgASgFEhsK", + "E01vdG9yUHVsc2VzUGVyQ3ljbGUYFSABKA0SDQoFQ29sb3IYFiABKA0SFQoN", + "UHJlc3N1cmVTbG9wZRgXIAEoDRIWCg5Qcm9kdWN0aW9uRGF0ZRgYIAEoCRIT", + "CgtBVFNsb2NhdGlvbhgZIAEoDRIOCgZTcGFyZTEYGiABKA0SDgoGU3BhcmUy", + "GBsgASgNEhIKCkFUU0NoYW5uZWwYHCABKA0SEQoJVW5pdEVtcHR5GB0gASgI", + "EhcKD0RyeVJ1blBhc3NfRmFpbBgeIAEoCBIVCg1GbG93UGFzc19GYWlsGB8g", + "ASgIEhAKCENoZWNrU3VtGCAgASgNQhsKGWNvbS50d2luZS50YW5nby5wbXIu", + "c3R1YnNiBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.DispenserEEprom), global::Tango.PMR.Diagnostics.DispenserEEprom.Parser, new[]{ "Header", "TableLength", "Tableversion", "DispenserPN", "PCBSN", "PCBPartNumber", "DispenserSN", "MinimalPressure", "MaximalPressure", "MinimalMV", "MaximalMV", "TotalCycles", "BubbleSize", "AVGNlStepValue14", "AVGNlStepValue24", "AVGNlStepValue34", "AVGNlStepValue44", "SWReserve", "Spare1Pressure", "Spare2Pressure", "MotorPulsesPerCycle", "Color", "PressureSlope", "ProductionDate", "ATSlocation", "Spare1", "Spare2", "ATSChannel", "UnitEmpty", "DryRunPassFail", "FlowPassFail", "CheckSum" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Stubs.StubDispenserEEpromData), global::Tango.PMR.Stubs.StubDispenserEEpromData.Parser, new[]{ "Header", "TableLength", "Tableversion", "DispenserPN", "PCBSN", "PCBPartNumber", "DispenserSN", "MinimalPressure", "MaximalPressure", "MinimalMV", "MaximalMV", "TotalCycles", "BubbleSize", "AVGNlStepValue14", "AVGNlStepValue24", "AVGNlStepValue34", "AVGNlStepValue44", "SWReserve", "Spare1Pressure", "Spare2Pressure", "MotorPulsesPerCycle", "Color", "PressureSlope", "ProductionDate", "ATSlocation", "Spare1", "Spare2", "ATSChannel", "UnitEmpty", "DryRunPassFail", "FlowPassFail", "CheckSum" }, null, null, null) })); } #endregion } #region Messages - public sealed partial class DispenserEEprom : pb::IMessage<DispenserEEprom> { - private static readonly pb::MessageParser<DispenserEEprom> _parser = new pb::MessageParser<DispenserEEprom>(() => new DispenserEEprom()); + public sealed partial class StubDispenserEEpromData : pb::IMessage<StubDispenserEEpromData> { + private static readonly pb::MessageParser<StubDispenserEEpromData> _parser = new pb::MessageParser<StubDispenserEEpromData>(() => new StubDispenserEEpromData()); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser<DispenserEEprom> Parser { get { return _parser; } } + public static pb::MessageParser<StubDispenserEEpromData> Parser { get { return _parser; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public static pbr::MessageDescriptor Descriptor { - get { return global::Tango.PMR.Diagnostics.DispenserEEpromReflection.Descriptor.MessageTypes[0]; } + get { return global::Tango.PMR.Stubs.StubDispenserEEpromDataReflection.Descriptor.MessageTypes[0]; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -67,14 +67,14 @@ namespace Tango.PMR.Diagnostics { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEprom() { + public StubDispenserEEpromData() { OnConstruction(); } partial void OnConstruction(); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEprom(DispenserEEprom other) : this() { + public StubDispenserEEpromData(StubDispenserEEpromData other) : this() { header_ = other.header_; tableLength_ = other.tableLength_; tableversion_ = other.tableversion_; @@ -110,8 +110,8 @@ namespace Tango.PMR.Diagnostics { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEprom Clone() { - return new DispenserEEprom(this); + public StubDispenserEEpromData Clone() { + return new StubDispenserEEpromData(this); } /// <summary>Field number for the "Header" field.</summary> @@ -457,9 +457,9 @@ namespace Tango.PMR.Diagnostics { /// <summary>Field number for the "CheckSum" field.</summary> public const int CheckSumFieldNumber = 32; - private bool checkSum_; + private uint checkSum_; [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool CheckSum { + public uint CheckSum { get { return checkSum_; } set { checkSum_ = value; @@ -468,11 +468,11 @@ namespace Tango.PMR.Diagnostics { [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { - return Equals(other as DispenserEEprom); + return Equals(other as StubDispenserEEpromData); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(DispenserEEprom other) { + public bool Equals(StubDispenserEEpromData other) { if (ReferenceEquals(other, null)) { return false; } @@ -548,7 +548,7 @@ namespace Tango.PMR.Diagnostics { if (UnitEmpty != false) hash ^= UnitEmpty.GetHashCode(); if (DryRunPassFail != false) hash ^= DryRunPassFail.GetHashCode(); if (FlowPassFail != false) hash ^= FlowPassFail.GetHashCode(); - if (CheckSum != false) hash ^= CheckSum.GetHashCode(); + if (CheckSum != 0) hash ^= CheckSum.GetHashCode(); return hash; } @@ -683,9 +683,9 @@ namespace Tango.PMR.Diagnostics { output.WriteRawTag(248, 1); output.WriteBool(FlowPassFail); } - if (CheckSum != false) { + if (CheckSum != 0) { output.WriteRawTag(128, 2); - output.WriteBool(CheckSum); + output.WriteUInt32(CheckSum); } } @@ -785,14 +785,14 @@ namespace Tango.PMR.Diagnostics { if (FlowPassFail != false) { size += 2 + 1; } - if (CheckSum != false) { - size += 2 + 1; + if (CheckSum != 0) { + size += 2 + pb::CodedOutputStream.ComputeUInt32Size(CheckSum); } return size; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(DispenserEEprom other) { + public void MergeFrom(StubDispenserEEpromData other) { if (other == null) { return; } @@ -889,7 +889,7 @@ namespace Tango.PMR.Diagnostics { if (other.FlowPassFail != false) { FlowPassFail = other.FlowPassFail; } - if (other.CheckSum != false) { + if (other.CheckSum != 0) { CheckSum = other.CheckSum; } } @@ -1027,7 +1027,7 @@ namespace Tango.PMR.Diagnostics { break; } case 256: { - CheckSum = input.ReadBool(); + CheckSum = input.ReadUInt32(); break; } } diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/DispenserEEpromRequest.cs b/Software/Visual_Studio/Tango.PMR/Stubs/StubDispenserEEpromRequest.cs index a8687ca25..9c0f82c27 100644 --- a/Software/Visual_Studio/Tango.PMR/Diagnostics/DispenserEEpromRequest.cs +++ b/Software/Visual_Studio/Tango.PMR/Stubs/StubDispenserEEpromRequest.cs @@ -1,5 +1,5 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! -// source: DispenserEEpromRequest.proto +// source: StubDispenserEEpromRequest.proto #pragma warning disable 1591, 0612, 3021 #region Designer generated code @@ -7,45 +7,45 @@ using pb = global::Google.Protobuf; using pbc = global::Google.Protobuf.Collections; using pbr = global::Google.Protobuf.Reflection; using scg = global::System.Collections.Generic; -namespace Tango.PMR.Diagnostics { +namespace Tango.PMR.Stubs { - /// <summary>Holder for reflection information generated from DispenserEEpromRequest.proto</summary> - public static partial class DispenserEEpromRequestReflection { + /// <summary>Holder for reflection information generated from StubDispenserEEpromRequest.proto</summary> + public static partial class StubDispenserEEpromRequestReflection { #region Descriptor - /// <summary>File descriptor for DispenserEEpromRequest.proto</summary> + /// <summary>File descriptor for StubDispenserEEpromRequest.proto</summary> public static pbr::FileDescriptor Descriptor { get { return descriptor; } } private static pbr::FileDescriptor descriptor; - static DispenserEEpromRequestReflection() { + static StubDispenserEEpromRequestReflection() { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( - "ChxEaXNwZW5zZXJFRXByb21SZXF1ZXN0LnByb3RvEhVUYW5nby5QTVIuRGlh", - "Z25vc3RpY3MaFURpc3BlbnNlckVFcHJvbS5wcm90byKDAQoWRGlzcGVuc2Vy", - "RUVwcm9tUmVxdWVzdBITCgtEaXNwZW5zZXJJZBgBIAEoDRITCgtCdXJuUmVx", - "dWVzdBgCIAEoCBI/Cg9EaXNwZW5zZXJFRXByb20YAyABKAsyJi5UYW5nby5Q", - "TVIuRGlhZ25vc3RpY3MuRGlzcGVuc2VyRUVwcm9tQiEKH2NvbS50d2luZS50", - "YW5nby5wbXIuZGlhZ25vc3RpY3NiBnByb3RvMw==")); + "CiBTdHViRGlzcGVuc2VyRUVwcm9tUmVxdWVzdC5wcm90bxIPVGFuZ28uUE1S", + "LlN0dWJzGh1TdHViRGlzcGVuc2VyRUVwcm9tRGF0YS5wcm90byKJAQoaU3R1", + "YkRpc3BlbnNlckVFcHJvbVJlcXVlc3QSEwoLRGlzcGVuc2VySWQYASABKA0S", + "EwoLQnVyblJlcXVlc3QYAiABKAgSQQoPRGlzcGVuc2VyRUVwcm9tGAMgASgL", + "MiguVGFuZ28uUE1SLlN0dWJzLlN0dWJEaXNwZW5zZXJFRXByb21EYXRhQhsK", + "GWNvbS50d2luZS50YW5nby5wbXIuc3R1YnNiBnByb3RvMw==")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, - new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.DispenserEEpromReflection.Descriptor, }, + new pbr::FileDescriptor[] { global::Tango.PMR.Stubs.StubDispenserEEpromDataReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.DispenserEEpromRequest), global::Tango.PMR.Diagnostics.DispenserEEpromRequest.Parser, new[]{ "DispenserId", "BurnRequest", "DispenserEEprom" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Stubs.StubDispenserEEpromRequest), global::Tango.PMR.Stubs.StubDispenserEEpromRequest.Parser, new[]{ "DispenserId", "BurnRequest", "DispenserEEprom" }, null, null, null) })); } #endregion } #region Messages - public sealed partial class DispenserEEpromRequest : pb::IMessage<DispenserEEpromRequest> { - private static readonly pb::MessageParser<DispenserEEpromRequest> _parser = new pb::MessageParser<DispenserEEpromRequest>(() => new DispenserEEpromRequest()); + public sealed partial class StubDispenserEEpromRequest : pb::IMessage<StubDispenserEEpromRequest> { + private static readonly pb::MessageParser<StubDispenserEEpromRequest> _parser = new pb::MessageParser<StubDispenserEEpromRequest>(() => new StubDispenserEEpromRequest()); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser<DispenserEEpromRequest> Parser { get { return _parser; } } + public static pb::MessageParser<StubDispenserEEpromRequest> Parser { get { return _parser; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public static pbr::MessageDescriptor Descriptor { - get { return global::Tango.PMR.Diagnostics.DispenserEEpromRequestReflection.Descriptor.MessageTypes[0]; } + get { return global::Tango.PMR.Stubs.StubDispenserEEpromRequestReflection.Descriptor.MessageTypes[0]; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -54,22 +54,22 @@ namespace Tango.PMR.Diagnostics { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEpromRequest() { + public StubDispenserEEpromRequest() { OnConstruction(); } partial void OnConstruction(); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEpromRequest(DispenserEEpromRequest other) : this() { + public StubDispenserEEpromRequest(StubDispenserEEpromRequest other) : this() { dispenserId_ = other.dispenserId_; burnRequest_ = other.burnRequest_; DispenserEEprom = other.dispenserEEprom_ != null ? other.DispenserEEprom.Clone() : null; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEpromRequest Clone() { - return new DispenserEEpromRequest(this); + public StubDispenserEEpromRequest Clone() { + return new StubDispenserEEpromRequest(this); } /// <summary>Field number for the "DispenserId" field.</summary> @@ -96,9 +96,9 @@ namespace Tango.PMR.Diagnostics { /// <summary>Field number for the "DispenserEEprom" field.</summary> public const int DispenserEEpromFieldNumber = 3; - private global::Tango.PMR.Diagnostics.DispenserEEprom dispenserEEprom_; + private global::Tango.PMR.Stubs.StubDispenserEEpromData dispenserEEprom_; [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public global::Tango.PMR.Diagnostics.DispenserEEprom DispenserEEprom { + public global::Tango.PMR.Stubs.StubDispenserEEpromData DispenserEEprom { get { return dispenserEEprom_; } set { dispenserEEprom_ = value; @@ -107,11 +107,11 @@ namespace Tango.PMR.Diagnostics { [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { - return Equals(other as DispenserEEpromRequest); + return Equals(other as StubDispenserEEpromRequest); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(DispenserEEpromRequest other) { + public bool Equals(StubDispenserEEpromRequest other) { if (ReferenceEquals(other, null)) { return false; } @@ -170,7 +170,7 @@ namespace Tango.PMR.Diagnostics { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(DispenserEEpromRequest other) { + public void MergeFrom(StubDispenserEEpromRequest other) { if (other == null) { return; } @@ -182,7 +182,7 @@ namespace Tango.PMR.Diagnostics { } if (other.dispenserEEprom_ != null) { if (dispenserEEprom_ == null) { - dispenserEEprom_ = new global::Tango.PMR.Diagnostics.DispenserEEprom(); + dispenserEEprom_ = new global::Tango.PMR.Stubs.StubDispenserEEpromData(); } DispenserEEprom.MergeFrom(other.DispenserEEprom); } @@ -206,7 +206,7 @@ namespace Tango.PMR.Diagnostics { } case 26: { if (dispenserEEprom_ == null) { - dispenserEEprom_ = new global::Tango.PMR.Diagnostics.DispenserEEprom(); + dispenserEEprom_ = new global::Tango.PMR.Stubs.StubDispenserEEpromData(); } input.ReadMessage(dispenserEEprom_); break; diff --git a/Software/Visual_Studio/Tango.PMR/Diagnostics/DispenserEEpromResponse.cs b/Software/Visual_Studio/Tango.PMR/Stubs/StubDispenserEEpromResponse.cs index 32e7aec12..452a97cf4 100644 --- a/Software/Visual_Studio/Tango.PMR/Diagnostics/DispenserEEpromResponse.cs +++ b/Software/Visual_Studio/Tango.PMR/Stubs/StubDispenserEEpromResponse.cs @@ -1,5 +1,5 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! -// source: DispenserEEpromResponse.proto +// source: StubDispenserEEpromResponse.proto #pragma warning disable 1591, 0612, 3021 #region Designer generated code @@ -7,45 +7,45 @@ using pb = global::Google.Protobuf; using pbc = global::Google.Protobuf.Collections; using pbr = global::Google.Protobuf.Reflection; using scg = global::System.Collections.Generic; -namespace Tango.PMR.Diagnostics { +namespace Tango.PMR.Stubs { - /// <summary>Holder for reflection information generated from DispenserEEpromResponse.proto</summary> - public static partial class DispenserEEpromResponseReflection { + /// <summary>Holder for reflection information generated from StubDispenserEEpromResponse.proto</summary> + public static partial class StubDispenserEEpromResponseReflection { #region Descriptor - /// <summary>File descriptor for DispenserEEpromResponse.proto</summary> + /// <summary>File descriptor for StubDispenserEEpromResponse.proto</summary> public static pbr::FileDescriptor Descriptor { get { return descriptor; } } private static pbr::FileDescriptor descriptor; - static DispenserEEpromResponseReflection() { + static StubDispenserEEpromResponseReflection() { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( - "Ch1EaXNwZW5zZXJFRXByb21SZXNwb25zZS5wcm90bxIVVGFuZ28uUE1SLkRp", - "YWdub3N0aWNzGhVEaXNwZW5zZXJFRXByb20ucHJvdG8ibwoXRGlzcGVuc2Vy", - "RUVwcm9tUmVzcG9uc2USEwoLRGlzcGVuc2VySWQYASABKA0SPwoPRGlzcGVu", - "c2VyRUVwcm9tGAIgASgLMiYuVGFuZ28uUE1SLkRpYWdub3N0aWNzLkRpc3Bl", - "bnNlckVFcHJvbUIhCh9jb20udHdpbmUudGFuZ28ucG1yLmRpYWdub3N0aWNz", - "YgZwcm90bzM=")); + "CiFTdHViRGlzcGVuc2VyRUVwcm9tUmVzcG9uc2UucHJvdG8SD1RhbmdvLlBN", + "Ui5TdHVicxodU3R1YkRpc3BlbnNlckVFcHJvbURhdGEucHJvdG8idQobU3R1", + "YkRpc3BlbnNlckVFcHJvbVJlc3BvbnNlEhMKC0Rpc3BlbnNlcklkGAEgASgN", + "EkEKD0Rpc3BlbnNlckVFcHJvbRgCIAEoCzIoLlRhbmdvLlBNUi5TdHVicy5T", + "dHViRGlzcGVuc2VyRUVwcm9tRGF0YUIbChljb20udHdpbmUudGFuZ28ucG1y", + "LnN0dWJzYgZwcm90bzM=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, - new pbr::FileDescriptor[] { global::Tango.PMR.Diagnostics.DispenserEEpromReflection.Descriptor, }, + new pbr::FileDescriptor[] { global::Tango.PMR.Stubs.StubDispenserEEpromDataReflection.Descriptor, }, new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Diagnostics.DispenserEEpromResponse), global::Tango.PMR.Diagnostics.DispenserEEpromResponse.Parser, new[]{ "DispenserId", "DispenserEEprom" }, null, null, null) + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Stubs.StubDispenserEEpromResponse), global::Tango.PMR.Stubs.StubDispenserEEpromResponse.Parser, new[]{ "DispenserId", "DispenserEEprom" }, null, null, null) })); } #endregion } #region Messages - public sealed partial class DispenserEEpromResponse : pb::IMessage<DispenserEEpromResponse> { - private static readonly pb::MessageParser<DispenserEEpromResponse> _parser = new pb::MessageParser<DispenserEEpromResponse>(() => new DispenserEEpromResponse()); + public sealed partial class StubDispenserEEpromResponse : pb::IMessage<StubDispenserEEpromResponse> { + private static readonly pb::MessageParser<StubDispenserEEpromResponse> _parser = new pb::MessageParser<StubDispenserEEpromResponse>(() => new StubDispenserEEpromResponse()); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser<DispenserEEpromResponse> Parser { get { return _parser; } } + public static pb::MessageParser<StubDispenserEEpromResponse> Parser { get { return _parser; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public static pbr::MessageDescriptor Descriptor { - get { return global::Tango.PMR.Diagnostics.DispenserEEpromResponseReflection.Descriptor.MessageTypes[0]; } + get { return global::Tango.PMR.Stubs.StubDispenserEEpromResponseReflection.Descriptor.MessageTypes[0]; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] @@ -54,21 +54,21 @@ namespace Tango.PMR.Diagnostics { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEpromResponse() { + public StubDispenserEEpromResponse() { OnConstruction(); } partial void OnConstruction(); [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEpromResponse(DispenserEEpromResponse other) : this() { + public StubDispenserEEpromResponse(StubDispenserEEpromResponse other) : this() { dispenserId_ = other.dispenserId_; DispenserEEprom = other.dispenserEEprom_ != null ? other.DispenserEEprom.Clone() : null; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public DispenserEEpromResponse Clone() { - return new DispenserEEpromResponse(this); + public StubDispenserEEpromResponse Clone() { + return new StubDispenserEEpromResponse(this); } /// <summary>Field number for the "DispenserId" field.</summary> @@ -84,9 +84,9 @@ namespace Tango.PMR.Diagnostics { /// <summary>Field number for the "DispenserEEprom" field.</summary> public const int DispenserEEpromFieldNumber = 2; - private global::Tango.PMR.Diagnostics.DispenserEEprom dispenserEEprom_; + private global::Tango.PMR.Stubs.StubDispenserEEpromData dispenserEEprom_; [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public global::Tango.PMR.Diagnostics.DispenserEEprom DispenserEEprom { + public global::Tango.PMR.Stubs.StubDispenserEEpromData DispenserEEprom { get { return dispenserEEprom_; } set { dispenserEEprom_ = value; @@ -95,11 +95,11 @@ namespace Tango.PMR.Diagnostics { [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public override bool Equals(object other) { - return Equals(other as DispenserEEpromResponse); + return Equals(other as StubDispenserEEpromResponse); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(DispenserEEpromResponse other) { + public bool Equals(StubDispenserEEpromResponse other) { if (ReferenceEquals(other, null)) { return false; } @@ -149,7 +149,7 @@ namespace Tango.PMR.Diagnostics { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(DispenserEEpromResponse other) { + public void MergeFrom(StubDispenserEEpromResponse other) { if (other == null) { return; } @@ -158,7 +158,7 @@ namespace Tango.PMR.Diagnostics { } if (other.dispenserEEprom_ != null) { if (dispenserEEprom_ == null) { - dispenserEEprom_ = new global::Tango.PMR.Diagnostics.DispenserEEprom(); + dispenserEEprom_ = new global::Tango.PMR.Stubs.StubDispenserEEpromData(); } DispenserEEprom.MergeFrom(other.DispenserEEprom); } @@ -178,7 +178,7 @@ namespace Tango.PMR.Diagnostics { } case 18: { if (dispenserEEprom_ == null) { - dispenserEEprom_ = new global::Tango.PMR.Diagnostics.DispenserEEprom(); + dispenserEEprom_ = new global::Tango.PMR.Stubs.StubDispenserEEpromData(); } input.ReadMessage(dispenserEEprom_); break; diff --git a/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromData.cs b/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromData.cs new file mode 100644 index 000000000..f34cebdc9 --- /dev/null +++ b/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromData.cs @@ -0,0 +1,672 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: StubWhsEEpromData.proto +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Tango.PMR.Stubs { + + /// <summary>Holder for reflection information generated from StubWhsEEpromData.proto</summary> + public static partial class StubWhsEEpromDataReflection { + + #region Descriptor + /// <summary>File descriptor for StubWhsEEpromData.proto</summary> + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static StubWhsEEpromDataReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChdTdHViV2hzRUVwcm9tRGF0YS5wcm90bxIPVGFuZ28uUE1SLlN0dWJzIrgD", + "ChFTdHViV2hzRUVwcm9tRGF0YRIOCgZIZWFkZXIYASABKA0SEwoLVGFibGVM", + "ZW5ndGgYAiABKA0SFAoMVGFibGV2ZXJzaW9uGAMgASgNEg4KBldoc1BfThgE", + "IAEoCRIOCgZQQ0JTX04YBSABKAkSFQoNUENCUGFydE51bWJlchgGIAEoCRIO", + "CgZXaHNTX04YByABKAkSFAoMT3JpZmljZTFGbG93GAggASgBEhUKDU9yaWZp", + "Y2UxU2xvcGUYCSABKAESFAoMT3JpZmljZTJGbG93GAogASgBEhUKDU9yaWZp", + "Y2UyU2xvcGUYCyABKAESFAoMT3JpZmljZTNGbG93GAwgASgBEhUKDU9yaWZp", + "Y2UzU2xvcGUYDSABKAESGAoQT3JpZmljZVZhbHZlRmxvdxgOIAEoARIZChFP", + "cmlmaWNlVmFsdmVTbG9wZRgPIAEoARIbChNWT0NJbnN0YWxsYXRpb25EYXRl", + "GBAgASgJEh4KFkZpbHRlckluc3RhbGxhdGlvbkRhdGUYESABKAkSFgoOUHJv", + "ZHVjdGlvbkRhdGUYEiABKAkSEAoIQ2hlY2tTdW0YEyABKA1CGwoZY29tLnR3", + "aW5lLnRhbmdvLnBtci5zdHVic2IGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Stubs.StubWhsEEpromData), global::Tango.PMR.Stubs.StubWhsEEpromData.Parser, new[]{ "Header", "TableLength", "Tableversion", "WhsPN", "PCBSN", "PCBPartNumber", "WhsSN", "Orifice1Flow", "Orifice1Slope", "Orifice2Flow", "Orifice2Slope", "Orifice3Flow", "Orifice3Slope", "OrificeValveFlow", "OrificeValveSlope", "VOCInstallationDate", "FilterInstallationDate", "ProductionDate", "CheckSum" }, null, null, null) + })); + } + #endregion + + } + #region Messages + public sealed partial class StubWhsEEpromData : pb::IMessage<StubWhsEEpromData> { + private static readonly pb::MessageParser<StubWhsEEpromData> _parser = new pb::MessageParser<StubWhsEEpromData>(() => new StubWhsEEpromData()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser<StubWhsEEpromData> Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Tango.PMR.Stubs.StubWhsEEpromDataReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromData() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromData(StubWhsEEpromData other) : this() { + header_ = other.header_; + tableLength_ = other.tableLength_; + tableversion_ = other.tableversion_; + whsPN_ = other.whsPN_; + pCBSN_ = other.pCBSN_; + pCBPartNumber_ = other.pCBPartNumber_; + whsSN_ = other.whsSN_; + orifice1Flow_ = other.orifice1Flow_; + orifice1Slope_ = other.orifice1Slope_; + orifice2Flow_ = other.orifice2Flow_; + orifice2Slope_ = other.orifice2Slope_; + orifice3Flow_ = other.orifice3Flow_; + orifice3Slope_ = other.orifice3Slope_; + orificeValveFlow_ = other.orificeValveFlow_; + orificeValveSlope_ = other.orificeValveSlope_; + vOCInstallationDate_ = other.vOCInstallationDate_; + filterInstallationDate_ = other.filterInstallationDate_; + productionDate_ = other.productionDate_; + checkSum_ = other.checkSum_; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromData Clone() { + return new StubWhsEEpromData(this); + } + + /// <summary>Field number for the "Header" field.</summary> + public const int HeaderFieldNumber = 1; + private uint header_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public uint Header { + get { return header_; } + set { + header_ = value; + } + } + + /// <summary>Field number for the "TableLength" field.</summary> + public const int TableLengthFieldNumber = 2; + private uint tableLength_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public uint TableLength { + get { return tableLength_; } + set { + tableLength_ = value; + } + } + + /// <summary>Field number for the "Tableversion" field.</summary> + public const int TableversionFieldNumber = 3; + private uint tableversion_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public uint Tableversion { + get { return tableversion_; } + set { + tableversion_ = value; + } + } + + /// <summary>Field number for the "WhsP_N" field.</summary> + public const int WhsPNFieldNumber = 4; + private string whsPN_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string WhsPN { + get { return whsPN_; } + set { + whsPN_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "PCBS_N" field.</summary> + public const int PCBSNFieldNumber = 5; + private string pCBSN_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string PCBSN { + get { return pCBSN_; } + set { + pCBSN_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "PCBPartNumber" field.</summary> + public const int PCBPartNumberFieldNumber = 6; + private string pCBPartNumber_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string PCBPartNumber { + get { return pCBPartNumber_; } + set { + pCBPartNumber_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "WhsS_N" field.</summary> + public const int WhsSNFieldNumber = 7; + private string whsSN_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string WhsSN { + get { return whsSN_; } + set { + whsSN_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "Orifice1Flow" field.</summary> + public const int Orifice1FlowFieldNumber = 8; + private double orifice1Flow_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double Orifice1Flow { + get { return orifice1Flow_; } + set { + orifice1Flow_ = value; + } + } + + /// <summary>Field number for the "Orifice1Slope" field.</summary> + public const int Orifice1SlopeFieldNumber = 9; + private double orifice1Slope_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double Orifice1Slope { + get { return orifice1Slope_; } + set { + orifice1Slope_ = value; + } + } + + /// <summary>Field number for the "Orifice2Flow" field.</summary> + public const int Orifice2FlowFieldNumber = 10; + private double orifice2Flow_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double Orifice2Flow { + get { return orifice2Flow_; } + set { + orifice2Flow_ = value; + } + } + + /// <summary>Field number for the "Orifice2Slope" field.</summary> + public const int Orifice2SlopeFieldNumber = 11; + private double orifice2Slope_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double Orifice2Slope { + get { return orifice2Slope_; } + set { + orifice2Slope_ = value; + } + } + + /// <summary>Field number for the "Orifice3Flow" field.</summary> + public const int Orifice3FlowFieldNumber = 12; + private double orifice3Flow_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double Orifice3Flow { + get { return orifice3Flow_; } + set { + orifice3Flow_ = value; + } + } + + /// <summary>Field number for the "Orifice3Slope" field.</summary> + public const int Orifice3SlopeFieldNumber = 13; + private double orifice3Slope_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double Orifice3Slope { + get { return orifice3Slope_; } + set { + orifice3Slope_ = value; + } + } + + /// <summary>Field number for the "OrificeValveFlow" field.</summary> + public const int OrificeValveFlowFieldNumber = 14; + private double orificeValveFlow_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double OrificeValveFlow { + get { return orificeValveFlow_; } + set { + orificeValveFlow_ = value; + } + } + + /// <summary>Field number for the "OrificeValveSlope" field.</summary> + public const int OrificeValveSlopeFieldNumber = 15; + private double orificeValveSlope_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public double OrificeValveSlope { + get { return orificeValveSlope_; } + set { + orificeValveSlope_ = value; + } + } + + /// <summary>Field number for the "VOCInstallationDate" field.</summary> + public const int VOCInstallationDateFieldNumber = 16; + private string vOCInstallationDate_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string VOCInstallationDate { + get { return vOCInstallationDate_; } + set { + vOCInstallationDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "FilterInstallationDate" field.</summary> + public const int FilterInstallationDateFieldNumber = 17; + private string filterInstallationDate_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string FilterInstallationDate { + get { return filterInstallationDate_; } + set { + filterInstallationDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "ProductionDate" field.</summary> + public const int ProductionDateFieldNumber = 18; + private string productionDate_ = ""; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public string ProductionDate { + get { return productionDate_; } + set { + productionDate_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); + } + } + + /// <summary>Field number for the "CheckSum" field.</summary> + public const int CheckSumFieldNumber = 19; + private uint checkSum_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public uint CheckSum { + get { return checkSum_; } + set { + checkSum_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as StubWhsEEpromData); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(StubWhsEEpromData other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (Header != other.Header) return false; + if (TableLength != other.TableLength) return false; + if (Tableversion != other.Tableversion) return false; + if (WhsPN != other.WhsPN) return false; + if (PCBSN != other.PCBSN) return false; + if (PCBPartNumber != other.PCBPartNumber) return false; + if (WhsSN != other.WhsSN) return false; + if (Orifice1Flow != other.Orifice1Flow) return false; + if (Orifice1Slope != other.Orifice1Slope) return false; + if (Orifice2Flow != other.Orifice2Flow) return false; + if (Orifice2Slope != other.Orifice2Slope) return false; + if (Orifice3Flow != other.Orifice3Flow) return false; + if (Orifice3Slope != other.Orifice3Slope) return false; + if (OrificeValveFlow != other.OrificeValveFlow) return false; + if (OrificeValveSlope != other.OrificeValveSlope) return false; + if (VOCInstallationDate != other.VOCInstallationDate) return false; + if (FilterInstallationDate != other.FilterInstallationDate) return false; + if (ProductionDate != other.ProductionDate) return false; + if (CheckSum != other.CheckSum) return false; + return true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (Header != 0) hash ^= Header.GetHashCode(); + if (TableLength != 0) hash ^= TableLength.GetHashCode(); + if (Tableversion != 0) hash ^= Tableversion.GetHashCode(); + if (WhsPN.Length != 0) hash ^= WhsPN.GetHashCode(); + if (PCBSN.Length != 0) hash ^= PCBSN.GetHashCode(); + if (PCBPartNumber.Length != 0) hash ^= PCBPartNumber.GetHashCode(); + if (WhsSN.Length != 0) hash ^= WhsSN.GetHashCode(); + if (Orifice1Flow != 0D) hash ^= Orifice1Flow.GetHashCode(); + if (Orifice1Slope != 0D) hash ^= Orifice1Slope.GetHashCode(); + if (Orifice2Flow != 0D) hash ^= Orifice2Flow.GetHashCode(); + if (Orifice2Slope != 0D) hash ^= Orifice2Slope.GetHashCode(); + if (Orifice3Flow != 0D) hash ^= Orifice3Flow.GetHashCode(); + if (Orifice3Slope != 0D) hash ^= Orifice3Slope.GetHashCode(); + if (OrificeValveFlow != 0D) hash ^= OrificeValveFlow.GetHashCode(); + if (OrificeValveSlope != 0D) hash ^= OrificeValveSlope.GetHashCode(); + if (VOCInstallationDate.Length != 0) hash ^= VOCInstallationDate.GetHashCode(); + if (FilterInstallationDate.Length != 0) hash ^= FilterInstallationDate.GetHashCode(); + if (ProductionDate.Length != 0) hash ^= ProductionDate.GetHashCode(); + if (CheckSum != 0) hash ^= CheckSum.GetHashCode(); + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (Header != 0) { + output.WriteRawTag(8); + output.WriteUInt32(Header); + } + if (TableLength != 0) { + output.WriteRawTag(16); + output.WriteUInt32(TableLength); + } + if (Tableversion != 0) { + output.WriteRawTag(24); + output.WriteUInt32(Tableversion); + } + if (WhsPN.Length != 0) { + output.WriteRawTag(34); + output.WriteString(WhsPN); + } + if (PCBSN.Length != 0) { + output.WriteRawTag(42); + output.WriteString(PCBSN); + } + if (PCBPartNumber.Length != 0) { + output.WriteRawTag(50); + output.WriteString(PCBPartNumber); + } + if (WhsSN.Length != 0) { + output.WriteRawTag(58); + output.WriteString(WhsSN); + } + if (Orifice1Flow != 0D) { + output.WriteRawTag(65); + output.WriteDouble(Orifice1Flow); + } + if (Orifice1Slope != 0D) { + output.WriteRawTag(73); + output.WriteDouble(Orifice1Slope); + } + if (Orifice2Flow != 0D) { + output.WriteRawTag(81); + output.WriteDouble(Orifice2Flow); + } + if (Orifice2Slope != 0D) { + output.WriteRawTag(89); + output.WriteDouble(Orifice2Slope); + } + if (Orifice3Flow != 0D) { + output.WriteRawTag(97); + output.WriteDouble(Orifice3Flow); + } + if (Orifice3Slope != 0D) { + output.WriteRawTag(105); + output.WriteDouble(Orifice3Slope); + } + if (OrificeValveFlow != 0D) { + output.WriteRawTag(113); + output.WriteDouble(OrificeValveFlow); + } + if (OrificeValveSlope != 0D) { + output.WriteRawTag(121); + output.WriteDouble(OrificeValveSlope); + } + if (VOCInstallationDate.Length != 0) { + output.WriteRawTag(130, 1); + output.WriteString(VOCInstallationDate); + } + if (FilterInstallationDate.Length != 0) { + output.WriteRawTag(138, 1); + output.WriteString(FilterInstallationDate); + } + if (ProductionDate.Length != 0) { + output.WriteRawTag(146, 1); + output.WriteString(ProductionDate); + } + if (CheckSum != 0) { + output.WriteRawTag(152, 1); + output.WriteUInt32(CheckSum); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (Header != 0) { + size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Header); + } + if (TableLength != 0) { + size += 1 + pb::CodedOutputStream.ComputeUInt32Size(TableLength); + } + if (Tableversion != 0) { + size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Tableversion); + } + if (WhsPN.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(WhsPN); + } + if (PCBSN.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(PCBSN); + } + if (PCBPartNumber.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(PCBPartNumber); + } + if (WhsSN.Length != 0) { + size += 1 + pb::CodedOutputStream.ComputeStringSize(WhsSN); + } + if (Orifice1Flow != 0D) { + size += 1 + 8; + } + if (Orifice1Slope != 0D) { + size += 1 + 8; + } + if (Orifice2Flow != 0D) { + size += 1 + 8; + } + if (Orifice2Slope != 0D) { + size += 1 + 8; + } + if (Orifice3Flow != 0D) { + size += 1 + 8; + } + if (Orifice3Slope != 0D) { + size += 1 + 8; + } + if (OrificeValveFlow != 0D) { + size += 1 + 8; + } + if (OrificeValveSlope != 0D) { + size += 1 + 8; + } + if (VOCInstallationDate.Length != 0) { + size += 2 + pb::CodedOutputStream.ComputeStringSize(VOCInstallationDate); + } + if (FilterInstallationDate.Length != 0) { + size += 2 + pb::CodedOutputStream.ComputeStringSize(FilterInstallationDate); + } + if (ProductionDate.Length != 0) { + size += 2 + pb::CodedOutputStream.ComputeStringSize(ProductionDate); + } + if (CheckSum != 0) { + size += 2 + pb::CodedOutputStream.ComputeUInt32Size(CheckSum); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(StubWhsEEpromData other) { + if (other == null) { + return; + } + if (other.Header != 0) { + Header = other.Header; + } + if (other.TableLength != 0) { + TableLength = other.TableLength; + } + if (other.Tableversion != 0) { + Tableversion = other.Tableversion; + } + if (other.WhsPN.Length != 0) { + WhsPN = other.WhsPN; + } + if (other.PCBSN.Length != 0) { + PCBSN = other.PCBSN; + } + if (other.PCBPartNumber.Length != 0) { + PCBPartNumber = other.PCBPartNumber; + } + if (other.WhsSN.Length != 0) { + WhsSN = other.WhsSN; + } + if (other.Orifice1Flow != 0D) { + Orifice1Flow = other.Orifice1Flow; + } + if (other.Orifice1Slope != 0D) { + Orifice1Slope = other.Orifice1Slope; + } + if (other.Orifice2Flow != 0D) { + Orifice2Flow = other.Orifice2Flow; + } + if (other.Orifice2Slope != 0D) { + Orifice2Slope = other.Orifice2Slope; + } + if (other.Orifice3Flow != 0D) { + Orifice3Flow = other.Orifice3Flow; + } + if (other.Orifice3Slope != 0D) { + Orifice3Slope = other.Orifice3Slope; + } + if (other.OrificeValveFlow != 0D) { + OrificeValveFlow = other.OrificeValveFlow; + } + if (other.OrificeValveSlope != 0D) { + OrificeValveSlope = other.OrificeValveSlope; + } + if (other.VOCInstallationDate.Length != 0) { + VOCInstallationDate = other.VOCInstallationDate; + } + if (other.FilterInstallationDate.Length != 0) { + FilterInstallationDate = other.FilterInstallationDate; + } + if (other.ProductionDate.Length != 0) { + ProductionDate = other.ProductionDate; + } + if (other.CheckSum != 0) { + CheckSum = other.CheckSum; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 8: { + Header = input.ReadUInt32(); + break; + } + case 16: { + TableLength = input.ReadUInt32(); + break; + } + case 24: { + Tableversion = input.ReadUInt32(); + break; + } + case 34: { + WhsPN = input.ReadString(); + break; + } + case 42: { + PCBSN = input.ReadString(); + break; + } + case 50: { + PCBPartNumber = input.ReadString(); + break; + } + case 58: { + WhsSN = input.ReadString(); + break; + } + case 65: { + Orifice1Flow = input.ReadDouble(); + break; + } + case 73: { + Orifice1Slope = input.ReadDouble(); + break; + } + case 81: { + Orifice2Flow = input.ReadDouble(); + break; + } + case 89: { + Orifice2Slope = input.ReadDouble(); + break; + } + case 97: { + Orifice3Flow = input.ReadDouble(); + break; + } + case 105: { + Orifice3Slope = input.ReadDouble(); + break; + } + case 113: { + OrificeValveFlow = input.ReadDouble(); + break; + } + case 121: { + OrificeValveSlope = input.ReadDouble(); + break; + } + case 130: { + VOCInstallationDate = input.ReadString(); + break; + } + case 138: { + FilterInstallationDate = input.ReadString(); + break; + } + case 146: { + ProductionDate = input.ReadString(); + break; + } + case 152: { + CheckSum = input.ReadUInt32(); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromRequest.cs b/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromRequest.cs new file mode 100644 index 000000000..54c735b3f --- /dev/null +++ b/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromRequest.cs @@ -0,0 +1,195 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: StubWhsEEpromRequest.proto +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Tango.PMR.Stubs { + + /// <summary>Holder for reflection information generated from StubWhsEEpromRequest.proto</summary> + public static partial class StubWhsEEpromRequestReflection { + + #region Descriptor + /// <summary>File descriptor for StubWhsEEpromRequest.proto</summary> + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static StubWhsEEpromRequestReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChpTdHViV2hzRUVwcm9tUmVxdWVzdC5wcm90bxIPVGFuZ28uUE1SLlN0dWJz", + "GhdTdHViV2hzRUVwcm9tRGF0YS5wcm90byJiChRTdHViV2hzRUVwcm9tUmVx", + "dWVzdBITCgtCdXJuUmVxdWVzdBgBIAEoCBI1CglXaHNFRXByb20YAiABKAsy", + "Ii5UYW5nby5QTVIuU3R1YnMuU3R1Yldoc0VFcHJvbURhdGFCGwoZY29tLnR3", + "aW5lLnRhbmdvLnBtci5zdHVic2IGcHJvdG8z")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Tango.PMR.Stubs.StubWhsEEpromDataReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Stubs.StubWhsEEpromRequest), global::Tango.PMR.Stubs.StubWhsEEpromRequest.Parser, new[]{ "BurnRequest", "WhsEEprom" }, null, null, null) + })); + } + #endregion + + } + #region Messages + public sealed partial class StubWhsEEpromRequest : pb::IMessage<StubWhsEEpromRequest> { + private static readonly pb::MessageParser<StubWhsEEpromRequest> _parser = new pb::MessageParser<StubWhsEEpromRequest>(() => new StubWhsEEpromRequest()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser<StubWhsEEpromRequest> Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Tango.PMR.Stubs.StubWhsEEpromRequestReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromRequest() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromRequest(StubWhsEEpromRequest other) : this() { + burnRequest_ = other.burnRequest_; + WhsEEprom = other.whsEEprom_ != null ? other.WhsEEprom.Clone() : null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromRequest Clone() { + return new StubWhsEEpromRequest(this); + } + + /// <summary>Field number for the "BurnRequest" field.</summary> + public const int BurnRequestFieldNumber = 1; + private bool burnRequest_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool BurnRequest { + get { return burnRequest_; } + set { + burnRequest_ = value; + } + } + + /// <summary>Field number for the "WhsEEprom" field.</summary> + public const int WhsEEpromFieldNumber = 2; + private global::Tango.PMR.Stubs.StubWhsEEpromData whsEEprom_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Tango.PMR.Stubs.StubWhsEEpromData WhsEEprom { + get { return whsEEprom_; } + set { + whsEEprom_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as StubWhsEEpromRequest); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(StubWhsEEpromRequest other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (BurnRequest != other.BurnRequest) return false; + if (!object.Equals(WhsEEprom, other.WhsEEprom)) return false; + return true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (BurnRequest != false) hash ^= BurnRequest.GetHashCode(); + if (whsEEprom_ != null) hash ^= WhsEEprom.GetHashCode(); + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (BurnRequest != false) { + output.WriteRawTag(8); + output.WriteBool(BurnRequest); + } + if (whsEEprom_ != null) { + output.WriteRawTag(18); + output.WriteMessage(WhsEEprom); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (BurnRequest != false) { + size += 1 + 1; + } + if (whsEEprom_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(WhsEEprom); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(StubWhsEEpromRequest other) { + if (other == null) { + return; + } + if (other.BurnRequest != false) { + BurnRequest = other.BurnRequest; + } + if (other.whsEEprom_ != null) { + if (whsEEprom_ == null) { + whsEEprom_ = new global::Tango.PMR.Stubs.StubWhsEEpromData(); + } + WhsEEprom.MergeFrom(other.WhsEEprom); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 8: { + BurnRequest = input.ReadBool(); + break; + } + case 18: { + if (whsEEprom_ == null) { + whsEEprom_ = new global::Tango.PMR.Stubs.StubWhsEEpromData(); + } + input.ReadMessage(whsEEprom_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromResponse.cs b/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromResponse.cs new file mode 100644 index 000000000..6e67fc661 --- /dev/null +++ b/Software/Visual_Studio/Tango.PMR/Stubs/StubWhsEEpromResponse.cs @@ -0,0 +1,167 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: StubWhsEEpromResponse.proto +#pragma warning disable 1591, 0612, 3021 +#region Designer generated code + +using pb = global::Google.Protobuf; +using pbc = global::Google.Protobuf.Collections; +using pbr = global::Google.Protobuf.Reflection; +using scg = global::System.Collections.Generic; +namespace Tango.PMR.Stubs { + + /// <summary>Holder for reflection information generated from StubWhsEEpromResponse.proto</summary> + public static partial class StubWhsEEpromResponseReflection { + + #region Descriptor + /// <summary>File descriptor for StubWhsEEpromResponse.proto</summary> + public static pbr::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbr::FileDescriptor descriptor; + + static StubWhsEEpromResponseReflection() { + byte[] descriptorData = global::System.Convert.FromBase64String( + string.Concat( + "ChtTdHViV2hzRUVwcm9tUmVzcG9uc2UucHJvdG8SD1RhbmdvLlBNUi5TdHVi", + "cxoXU3R1Yldoc0VFcHJvbURhdGEucHJvdG8iTgoVU3R1Yldoc0VFcHJvbVJl", + "c3BvbnNlEjUKCVdoc0VFcHJvbRgBIAEoCzIiLlRhbmdvLlBNUi5TdHVicy5T", + "dHViV2hzRUVwcm9tRGF0YUIbChljb20udHdpbmUudGFuZ28ucG1yLnN0dWJz", + "YgZwcm90bzM=")); + descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, + new pbr::FileDescriptor[] { global::Tango.PMR.Stubs.StubWhsEEpromDataReflection.Descriptor, }, + new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] { + new pbr::GeneratedClrTypeInfo(typeof(global::Tango.PMR.Stubs.StubWhsEEpromResponse), global::Tango.PMR.Stubs.StubWhsEEpromResponse.Parser, new[]{ "WhsEEprom" }, null, null, null) + })); + } + #endregion + + } + #region Messages + public sealed partial class StubWhsEEpromResponse : pb::IMessage<StubWhsEEpromResponse> { + private static readonly pb::MessageParser<StubWhsEEpromResponse> _parser = new pb::MessageParser<StubWhsEEpromResponse>(() => new StubWhsEEpromResponse()); + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser<StubWhsEEpromResponse> Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::Tango.PMR.Stubs.StubWhsEEpromResponseReflection.Descriptor.MessageTypes[0]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromResponse() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromResponse(StubWhsEEpromResponse other) : this() { + WhsEEprom = other.whsEEprom_ != null ? other.WhsEEprom.Clone() : null; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public StubWhsEEpromResponse Clone() { + return new StubWhsEEpromResponse(this); + } + + /// <summary>Field number for the "WhsEEprom" field.</summary> + public const int WhsEEpromFieldNumber = 1; + private global::Tango.PMR.Stubs.StubWhsEEpromData whsEEprom_; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public global::Tango.PMR.Stubs.StubWhsEEpromData WhsEEprom { + get { return whsEEprom_; } + set { + whsEEprom_ = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as StubWhsEEpromResponse); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(StubWhsEEpromResponse other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + if (!object.Equals(WhsEEprom, other.WhsEEprom)) return false; + return true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (whsEEprom_ != null) hash ^= WhsEEprom.GetHashCode(); + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (whsEEprom_ != null) { + output.WriteRawTag(10); + output.WriteMessage(WhsEEprom); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (whsEEprom_ != null) { + size += 1 + pb::CodedOutputStream.ComputeMessageSize(WhsEEprom); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(StubWhsEEpromResponse other) { + if (other == null) { + return; + } + if (other.whsEEprom_ != null) { + if (whsEEprom_ == null) { + whsEEprom_ = new global::Tango.PMR.Stubs.StubWhsEEpromData(); + } + WhsEEprom.MergeFrom(other.WhsEEprom); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + input.SkipLastField(); + break; + case 10: { + if (whsEEprom_ == null) { + whsEEprom_ = new global::Tango.PMR.Stubs.StubWhsEEpromData(); + } + input.ReadMessage(whsEEprom_); + break; + } + } + } + } + + } + + #endregion + +} + +#endregion Designer generated code diff --git a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj index c9d87f7c1..3cfd8ee2d 100644 --- a/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj +++ b/Software/Visual_Studio/Tango.PMR/Tango.PMR.csproj @@ -94,9 +94,6 @@ <Compile Include="Diagnostics\DispenserAbortHomingResponse.cs" /> <Compile Include="Diagnostics\DispenserAbortJoggingRequest.cs" /> <Compile Include="Diagnostics\DispenserAbortJoggingResponse.cs" /> - <Compile Include="Diagnostics\DispenserEEPROM.cs" /> - <Compile Include="Diagnostics\DispenserEEpromRequest.cs" /> - <Compile Include="Diagnostics\DispenserEEpromResponse.cs" /> <Compile Include="Diagnostics\DispenserHomingRequest.cs" /> <Compile Include="Diagnostics\DispenserHomingResponse.cs" /> <Compile Include="Diagnostics\DispenserJoggingRequest.cs" /> @@ -299,6 +296,12 @@ <Compile Include="Printing\UploadProcessParametersResponse.cs" /> <Compile Include="Printing\WindingMethod.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Stubs\StubDispenserEEpromData.cs" /> + <Compile Include="Stubs\StubDispenserEEpromRequest.cs" /> + <Compile Include="Stubs\StubDispenserEEpromResponse.cs" /> + <Compile Include="Stubs\StubWhsEEpromData.cs" /> + <Compile Include="Stubs\StubWhsEEpromRequest.cs" /> + <Compile Include="Stubs\StubWhsEEpromResponse.cs" /> <Compile Include="Synchronization\HttpProtoException.cs" /> <Compile Include="TangoMessage.cs" /> <Compile Include="Common\ErrorCode.cs" /> @@ -437,7 +440,7 @@ </PropertyGroup> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file |
