aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Modules/Tango.PPC.Browser/BrowserModule.cs
blob: dc7b294d555de3095873f3745411181c91a9076e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
using Tango.BL.Enumerations;
using Tango.PPC.Common;
using Tango.PPC.Browser.Views;
using Tango.SharedUI.Helpers;
using Tango.Core.DI;
using Tango.PPC.Common.Application;
using System.IO;
using Tango.Core.Helpers;

namespace Tango.PPC.Browser
{
    /// <summary>
    /// Represents a PPC <see cref="BrowserModule"/>.
    /// </summary>
    /// <seealso cref="Tango.PPC.Common.PPCModuleBase" />
    [PPCModule(10)]
    public class BrowserModule : PPCModuleBase
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="BrowserModule"/> class.
        /// </summary>
        public BrowserModule()
        {
            IsVisibleInMenu = false;
        }

        /// <summary>
        /// Gets the module name.
        /// </summary>
        public override string Name
        {
            get
            {
                return "Browser";
            }
        }

        /// <summary>
        /// Gets the module description.
        /// </summary>
        public override string Description
        {
            get
            {
                return "Browser module";
            }
        }

        /// <summary>
        /// Gets the module cover image.
        /// </summary>
        public override BitmapSource Image
        {
            get
            {
                return ResourceHelper.GetImageFromResources("Images/browser.png");
            }
        }

        /// <summary>
        /// Gets the module entry point view type.
        /// </summary>
        public override Type MainViewType
        {
            get
            {
                return IsCefAvailable() ? typeof(BrowserView) : typeof(ErrorView);
            }
        }

        /// <summary>
        /// Gets the permission required to see and load this module.
        /// </summary>
        public override Permissions Permission
        {
            get
            {
                return Permissions.RunPPC;
            }
        }

        private bool IsCefAvailable()
        {
            return File.Exists(Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "x86", "CefSharp.Core.dll"));
        }

        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        public override void Dispose()
        {
            //Dispose module here...
        }
    }
}
} private List<String> _ports; /// <summary> /// Gets or sets the ports. /// </summary> public List<String> Ports { get { return _ports; } set { _ports = value; RaisePropertyChanged(nameof(Ports)); } } private String _selectedPort; /// <summary> /// Gets or sets the selected port. /// </summary> public String SelectedPort { get { return _selectedPort; } set { _selectedPort = value; RaisePropertyChanged(nameof(SelectedPort)); } } #endregion #region Private Methods #endregion #region Commands /// <summary> /// Gets or sets the start command. /// </summary> public RelayCommand StartCommand { get; set; } /// <summary> /// Gets or sets the stop command. /// </summary> public RelayCommand StopCommand { get; set; } /// <summary> /// Gets or sets the run command. /// </summary> public RelayCommand RunCommand { get; set; } /// <summary> /// Gets or sets the cancel command. /// </summary> public RelayCommand CancelCommand { get; set; } /// <summary> /// Gets or sets the clear command. /// </summary> public RelayCommand ClearCommand { get; set; } /// <summary> /// Gets or sets the validate cartridge command. /// </summary> public RelayCommand ValidateCartridgeCommand { get; set; } #endregion #region Constructors /// <summary> /// Initializes a new instance of the <see cref="MainViewVM"/> class. /// </summary> public MainViewVM() { CoreSettings settings = SettingsManager.Default.GetOrCreate<CoreSettings>(); settings.Save(); SimpleStringLogger logger = new SimpleStringLogger(LogCategory.Critical, LogCategory.Error, LogCategory.Info, LogCategory.Warning); logger.LogReceived += (sedner, log) => { Log += log.ToString() + Environment.NewLine; }; logManager.RegisterLogger(logger); logManager.Log("Embedded Emulator Started..."); Emulator = new MachineEmulator(new BasicTransporter()); StartCommand = new RelayCommand(Start, (x) => !Emulator.IsStarted); StopCommand = new RelayCommand(Stop, (x) => Emulator.IsStarted); CancelCommand = new RelayCommand(Cancel, (x) => _running); ClearCommand = new RelayCommand(() => Log = String.Empty); ValidateCartridgeCommand = new RelayCommand(ValidateCartridge, (x) => Emulator.IsStarted); Ports = new List<string>() { "TCP", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", }; SelectedPort = Ports.First(); } #endregion #region Event Handlers /// <summary> /// Handles the ClientConnected event of the TcpServer control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="ClientConnectedEventArgs"/> instance containing the event data.</param> private void TcpServer_ClientConnected(object sender, ClientConnectedEventArgs e) { Emulator.Transporter.Adapter = new TcpTransportAdapter(e.Socket); } #endregion #region Command Handlers /// <summary> /// Stops the TCP server and emulator. /// </summary> private async void Start() { if (SelectedPort == Ports.First()) { TcpServer = new TcpServer(9999); TcpServer.ClientConnected += TcpServer_ClientConnected; TcpServer.Start(); } else { Emulator.Transporter.Adapter = new UsbTransportAdapter(SelectedPort); } await Emulator.Start(); InvalidateRelayCommands(); } /// <summary> /// Starts the TCP server/USB and emulator. /// </summary> private async void Stop() { if (TcpServer != null) { TcpServer.Stop(); } await Emulator.Stop(); InvalidateRelayCommands(); } private void Cancel() { } private async void ValidateCartridge() { LogManager.Log("Sending cartridge validation request..."); try { var index = await Emulator.ValidateCartridge(); LogManager.Log($"Cartridge validation response received: '{index}'."); } catch (Exception ex) { LogManager.Log(ex, "Cartridge validation request failed."); } } #endregion } }