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
}
}
|