aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/General/MachineStatus.h
blob: 489a8f6386b01ddb317b40a7798a6b67f17f34d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * MachineStatus.h
 *
 *  Created on: Aug 15, 2019
 *      Author: shlomo
 */

#ifndef MODULES_GENERAL_MACHINESTATUS_H_
#define MODULES_GENERAL_MACHINESTATUS_H_
#include <PMR/Common/MessageContainer.pb-c.h>
#include "PMR/MachineStatus/MachineState.pb-c.h"

uint32_t MachineUpdateInitFunc(MessageContainer* requestContainer);
uint32_t StopMachineUpdateFunc(MessageContainer* requestContainer);
void SetMachineStatus (MachineState State);
int MachineUpdateResponseFunc(void);




#endif /* MODULES_GENERAL_MACHINESTATUS_H_ */
olor: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core;
using Tango.FileSystem;
using Tango.FSE.Common.Connection;
using Tango.FSE.Common.FileSystem;
using Tango.FSE.Common.Logging;
using Tango.Integration.ExternalBridge;
using Tango.Integration.Logging;
using Tango.Logging;
using Tango.PPC.Shared.Logs;

namespace Tango.FSE.UI.Logging
{
    /// <summary>
    /// Represents the <see cref="ILoggingProvider"/> default implementation.
    /// </summary>
    /// <seealso cref="Tango.FSE.Common.Logging.ILoggingProvider" />
    public class DefaultLoggingProvider : ExtendedObject, ILoggingProvider
    {
        private IFileSystemProvider _fileSystemProvider;
        private IMachineProvider _machineProvider;

        public event EventHandler<LogItemBase> FSELogAvailable;

        /// <summary>
        /// Occurs when a new PPC application log is available.
        /// </summary>
        public event EventHandler<LogItemBase> ApplicationLogAvailable;

        /// <summary>
        /// Occurs when a new embedded log is available.
        /// </summary>
        public event EventHandler<EmbeddedLogItem> FirmwareLogAvailable;

        /// <summary>
        /// Gets the last retrieved history of the application log files.
        /// </summary>
        public ObservableCollection<RemoteLogFile> ApplicationLogFiles { get; private set; }

        /// <summary>
        /// Gets the last retrieved history of the embedded firmware log files.
        /// </summary>
        public ObservableCollection<RemoteLogFile> FirmwareLogFiles { get; private set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="DefaultLoggingProvider"/> class.
        /// </summary>
        /// <param name="machineProvider">The machine provider.</param>
        public DefaultLoggingProvider(IMachineProvider machineProvider, IFileSystemProvider fileSystemProvider)
        {
            ApplicationLogFiles = new ObservableCollection<RemoteLogFile>();
            FirmwareLogFiles = new ObservableCollection<RemoteLogFile>();

            _machineProvider = machineProvider;
            _fileSystemProvider = fileSystemProvider;

            if (machineProvider.MachineOperator is ExternalBridgeTcpClient)
            {
                (machineProvider.MachineOperator as ExternalBridgeTcpClient).ApplicationLogAvailable += DefaultLoggingProvider_ApplicationLogAvailable;
            }

            machineProvider.MachineOperator.DebugLogAvailable += MachineOperator_DebugLogAvailable;

            LogManager.NewLog += LogManager_NewLog;
        }

        /// <summary>
        /// Gets the history of application log files.
        /// </summary>
        /// <returns></returns>
        public async Task<List<RemoteLogFile>> GetApplicationLogFiles()
        {
            var response = await _machineProvider.MachineOperator.SendGenericRequest<GetLogFilesRequest, GetLogFilesResponse>(new GetLogFilesRequest() { LogFileType = RemoteLogFileType.Application });

            ApplicationLogFiles.Clear();

            foreach (var item in response.LogFiles)
            {
                ApplicationLogFiles.Add(item);
            }

            return response.LogFiles;
        }

        /// <summary>
        /// Gets the history of the embedded firmware log files.
        /// </summary>
        /// <returns></returns>
        public async Task<List<RemoteLogFile>> GetFirmwareLogFiles()
        {
            var response = await _machineProvider.MachineOperator.SendGenericRequest<GetLogFilesRequest, GetLogFilesResponse>(new GetLogFilesRequest() { LogFileType = RemoteLogFileType.Firmware });

            FirmwareLogFiles.Clear();

            foreach (var item in response.LogFiles)
            {
                FirmwareLogFiles.Add(item);
            }

            return response.LogFiles;
        }

        /// <summary>
        /// Downloads the specified remote log file.
        /// </summary>
        /// <param name="logFile">The log file.</param>
        /// <param name="targetFile">Target local file.</param>
        /// <returns></returns>
        public async Task<FileSystemHandler> DownloadLogFile(RemoteLogFile logFile, String targetFile)
        {
            var tempFolder = TemporaryManager.CreateFolder();
            var handler = await _fileSystemProvider.Download(new FileItem() { Path = logFile.Path }, tempFolder);
            handler.StatusChanged += (x, status) =>
            {
                if (status == FileSystemHandlerStatus.Completed)
                {
                    File.Move(Path.Combine(tempFolder, logFile.Name), targetFile);
                }
            };
            return handler;
        }

        private void LogManager_NewLog(object sender, LogItemBase log)
        {
            FSELogAvailable?.Invoke(this, log);
        }

        private void DefaultLoggingProvider_ApplicationLogAvailable(object sender, LogItemBase log)
        {
            ApplicationLogAvailable?.Invoke(this, log);
        }

        private void MachineOperator_DebugLogAvailable(object sender, PMR.Debugging.StartDebugLogResponse log)
        {
            FirmwareLogAvailable?.Invoke(this, new EmbeddedLogItem(log) { TimeStamp = DateTime.Now });
        }
    }
}