From 3a554ebe4bdb7aa23edbd2cd4eeec0db7b29974e Mon Sep 17 00:00:00 2001 From: Maff Date: Thu, 22 Aug 2019 00:55:40 +0100 Subject: [PATCH] Add project files. --- libsharperang/Base.cs | 18 +++ libsharperang/libsharperang.csproj | 14 +++ libsharperang/usb.cs | 51 ++++++++ sharperang.sln | 31 +++++ sharperang/App.config | 6 + sharperang/App.xaml | 9 ++ sharperang/App.xaml.cs | 17 +++ sharperang/LibSharperang.cs | 73 +++++++++++ sharperang/LogBridge.cs | 29 +++++ sharperang/MainWindow.xaml | 23 ++++ sharperang/MainWindow.xaml.cs | 30 +++++ sharperang/Properties/AssemblyInfo.cs | 55 ++++++++ sharperang/Properties/Resources.Designer.cs | 71 +++++++++++ sharperang/Properties/Resources.resx | 117 +++++++++++++++++ sharperang/Properties/Settings.Designer.cs | 30 +++++ sharperang/Properties/Settings.settings | 7 ++ sharperang/packages.config | 11 ++ sharperang/sharperang.csproj | 132 ++++++++++++++++++++ 18 files changed, 724 insertions(+) create mode 100644 libsharperang/Base.cs create mode 100644 libsharperang/libsharperang.csproj create mode 100644 libsharperang/usb.cs create mode 100644 sharperang.sln create mode 100644 sharperang/App.config create mode 100644 sharperang/App.xaml create mode 100644 sharperang/App.xaml.cs create mode 100644 sharperang/LibSharperang.cs create mode 100644 sharperang/LogBridge.cs create mode 100644 sharperang/MainWindow.xaml create mode 100644 sharperang/MainWindow.xaml.cs create mode 100644 sharperang/Properties/AssemblyInfo.cs create mode 100644 sharperang/Properties/Resources.Designer.cs create mode 100644 sharperang/Properties/Resources.resx create mode 100644 sharperang/Properties/Settings.Designer.cs create mode 100644 sharperang/Properties/Settings.settings create mode 100644 sharperang/packages.config create mode 100644 sharperang/sharperang.csproj diff --git a/libsharperang/Base.cs b/libsharperang/Base.cs new file mode 100644 index 0000000..3dc9187 --- /dev/null +++ b/libsharperang/Base.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace libsharperang { + public abstract class Base { + public enum ConnectionType { + None, + UART, + USB, + Bluetooth + } + public string Model { get; internal set; } + public string FirmwareVer { get; internal set; } + public int Battery { get; internal set; } + public ConnectionType ActiveConnectionType { get; internal set; } = ConnectionType.None; + } +} diff --git a/libsharperang/libsharperang.csproj b/libsharperang/libsharperang.csproj new file mode 100644 index 0000000..4f85f0b --- /dev/null +++ b/libsharperang/libsharperang.csproj @@ -0,0 +1,14 @@ + + + + netstandard2.0 + + + + + + + + + + diff --git a/libsharperang/usb.cs b/libsharperang/usb.cs new file mode 100644 index 0000000..4076ee3 --- /dev/null +++ b/libsharperang/usb.cs @@ -0,0 +1,51 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using LibUsbDotNet; +using LibUsbDotNet.Main; + +namespace libsharperang { + public class USB : Base { + public readonly ushort idVendor=0x4348; + public readonly ushort idProduct=0x5584; + public UsbDevice printer; + public List pInstances; + public List pIds; + + public USB() { + ActiveConnectionType=ConnectionType.USB; + } + + public bool InitUSB() { + //NOTE - in order for this to work, you must use Zadig to change the driver for + // the printer from usbprint to WinUSB + if (UsbDevice.AllWinUsbDevices.Count == 0) return false; + //genuinely just having some fun with Linq, don't judge me. + pInstances = (from d in UsbDevice.AllWinUsbDevices + where d.Vid == idVendor && d.Pid == idProduct + select d) + .ToList(); + pIds = (from d in pInstances + select d.DeviceInterfaceGuids[0]) + //.Distinct() + .ToList(); + return (pIds.Count > 0); + } + public bool OpenUSB() { + if (UsbDevice.AllWinUsbDevices.Count == 0) return false; + if (pIds.Count == 0) return false; + return OpenUSB(pIds.FirstOrDefault()); + } + public bool OpenUSB(Guid deviceId) { + bool OpenResult = UsbDevice.OpenUsbDevice( + ref deviceId, out UsbDevice handle); + printer=handle; + return OpenResult; + } + + public string FoundPrinterGuids() => pIds + .ConvertAll(p => p.ToString()) + .Aggregate((a, b) => a+","+b); + public string FoundProdIds() => printer?.Info.ProductString; + } +} diff --git a/sharperang.sln b/sharperang.sln new file mode 100644 index 0000000..b44a1e9 --- /dev/null +++ b/sharperang.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29215.179 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sharperang", "sharperang\sharperang.csproj", "{677A8867-809E-4476-A9AE-7BEB5CE02F96}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "libsharperang", "libsharperang\libsharperang.csproj", "{93203F87-29D0-4CDE-B2EE-156488E30186}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {677A8867-809E-4476-A9AE-7BEB5CE02F96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {677A8867-809E-4476-A9AE-7BEB5CE02F96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {677A8867-809E-4476-A9AE-7BEB5CE02F96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {677A8867-809E-4476-A9AE-7BEB5CE02F96}.Release|Any CPU.Build.0 = Release|Any CPU + {93203F87-29D0-4CDE-B2EE-156488E30186}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {93203F87-29D0-4CDE-B2EE-156488E30186}.Debug|Any CPU.Build.0 = Debug|Any CPU + {93203F87-29D0-4CDE-B2EE-156488E30186}.Release|Any CPU.ActiveCfg = Release|Any CPU + {93203F87-29D0-4CDE-B2EE-156488E30186}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2C609AEA-466E-4158-892F-D9CA2D7BE532} + EndGlobalSection +EndGlobal diff --git a/sharperang/App.config b/sharperang/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/sharperang/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/sharperang/App.xaml b/sharperang/App.xaml new file mode 100644 index 0000000..a8bc715 --- /dev/null +++ b/sharperang/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/sharperang/App.xaml.cs b/sharperang/App.xaml.cs new file mode 100644 index 0000000..e3b1843 --- /dev/null +++ b/sharperang/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace sharperang +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/sharperang/LibSharperang.cs b/sharperang/LibSharperang.cs new file mode 100644 index 0000000..7049251 --- /dev/null +++ b/sharperang/LibSharperang.cs @@ -0,0 +1,73 @@ +#define LIBUSB +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Device.Net; +#if !LIBUSB +using Usb.Net.Windows; +#else +using Device.Net.LibUsb; +#endif + +namespace sharperang { + class LibSharperang { + private static readonly DebugLogger Logger = new DebugLogger(); + private static readonly DebugTracer Tracer = new DebugTracer(); + private LogBridge log; + private FilterDeviceDefinition PaperangFilter; + private List PaperangFilters; + public IDevice Printer { get; private set; } + public DeviceListener PrinterListener { get; } + public event EventHandler PrinterInit; + public event EventHandler PrinterDisc; + public LibSharperang(LogBridge _log) { + log = _log; + log.Trace("libsharperang::constructor"); + PaperangFilter = new FilterDeviceDefinition { DeviceType = DeviceType.Usb, VendorId = 0x4348, ProductId = 0x5584 }; + PaperangFilters = new List { PaperangFilter }; + log.Debug("libsharperang instantiated"); +#if LIBUSB + LibUsbUsbDeviceFactory.Register(Logger, Tracer); +#else + WindowsUsbDeviceFactory.Register(Logger, Tracer); +#endif + Logger.LogToConsole = true; + PrinterListener = new DeviceListener(PaperangFilters, 5000) { Logger = Logger }; + Printer?.Close(); + PrinterListener.DeviceInitialized += PrinterInitEvent; + PrinterListener.DeviceDisconnected += PrinterDiscEvent; + PrinterListener.Start(); + } + ~LibSharperang() { + log.Trace("libsharperang::deconstructor"); + PrinterListener.Dispose(); + Printer?.Close(); + Printer?.Dispose(); + log.Warn("libsharperang destroyed"); + } + private void PrinterInitEvent(object sender, DeviceEventArgs e) { + log.Trace("libsharperang::PrinterInitEvent"); + Printer = e.Device; + PrinterInit?.Invoke(this, new EventArgs()); + } + private void PrinterDiscEvent(object sender, DeviceEventArgs e) { + log.Trace("libsharperang::PrinterDiscEvent"); + Printer = null; + PrinterDisc?.Invoke(this, new EventArgs()); + } + public async Task InitPrinterAsync() { + log.Trace("libsharperang::InitPrinterAsync"); + List dev = await DeviceManager.Current.GetDevicesAsync(PaperangFilters); + Printer = dev.FirstOrDefault(); + if (Printer == null) log.Err("No device found"); + else await Printer.InitializeAsync(); + } + private async void ListDevs() { + log.Trace("libsharperang::ListDevs"); + IEnumerable dmdevs = await DeviceManager.Current.GetConnectedDeviceDefinitionsAsync(PaperangFilter); + log.Debug("List of USB devices via DeviceManager ConnectedDeviceDefinition:"); + foreach (ConnectedDeviceDefinition dev in dmdevs) log.Debug(dev.DeviceId); + } + } +} diff --git a/sharperang/LogBridge.cs b/sharperang/LogBridge.cs new file mode 100644 index 0000000..358f3c3 --- /dev/null +++ b/sharperang/LogBridge.cs @@ -0,0 +1,29 @@ +using System.ComponentModel; + +namespace sharperang { + class LogBridge : INotifyPropertyChanged { + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged(string propertyName) => + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + private string _LogBuffer = ""; + public string LogBuffer { + //get { return _LogBuffer; } + get => _LogBuffer; + set { + if (value == _LogBuffer) return; + if (value == "!clearlog") _LogBuffer = ""; + else _LogBuffer += value + "\n"; + OnPropertyChanged("LogBuffer"); + } + } + + public void ClearBuffer() => LogBuffer="!clearlog"; + public void Trace(string line) => LogBuffer="TRCE: "+line; + public void Debug(string line) => LogBuffer="DEBG: "+line; + public void Verbose(string line) => LogBuffer="VERB: "+line; + public void Info(string line) => LogBuffer="INFO: "+line; + public void Warn(string line) => LogBuffer="WARN: "+line; + public void Err(string line) => LogBuffer="ERR!: "+line; + public void Critical(string line) => LogBuffer="CRIT: "+line; + } +} diff --git a/sharperang/MainWindow.xaml b/sharperang/MainWindow.xaml new file mode 100644 index 0000000..70fea8c --- /dev/null +++ b/sharperang/MainWindow.xaml @@ -0,0 +1,23 @@ + + + + + + + + + +