From 09d9ccb6289e5f4b84a003f6ba3741924942a1d0 Mon Sep 17 00:00:00 2001 From: Matthew Connelly Date: Wed, 11 Sep 2019 11:06:53 +0100 Subject: [PATCH] miscellaneous changes --- libsharperang/Base.cs | 3 +-- libsharperang/DataTransforms.cs | 1 - libsharperang/libsharperang.csproj | 5 ++++- libsharperang/usb.cs | 20 +++++++++----------- sharperang/LogBridge.cs | 2 +- sharperang/MainWindow.xaml.cs | 28 ++++++++++++++++++++++------ sharperang/packages.config | 1 + sharperang/sharperang.csproj | 5 ++++- 8 files changed, 42 insertions(+), 23 deletions(-) diff --git a/libsharperang/Base.cs b/libsharperang/Base.cs index 519d140..f493eab 100644 --- a/libsharperang/Base.cs +++ b/libsharperang/Base.cs @@ -1,5 +1,4 @@ -using Crc; - + namespace libsharperang { public abstract class Base { public enum ConnectionType { diff --git a/libsharperang/DataTransforms.cs b/libsharperang/DataTransforms.cs index 5c25b3d..5c49415 100644 --- a/libsharperang/DataTransforms.cs +++ b/libsharperang/DataTransforms.cs @@ -1,5 +1,4 @@ using System; -using Crc; namespace libsharperang { public class DataTransforms { diff --git a/libsharperang/libsharperang.csproj b/libsharperang/libsharperang.csproj index 8695c91..18b1ef7 100644 --- a/libsharperang/libsharperang.csproj +++ b/libsharperang/libsharperang.csproj @@ -5,8 +5,11 @@ - + + + + diff --git a/libsharperang/usb.cs b/libsharperang/usb.cs index 208f734..e05d044 100644 --- a/libsharperang/usb.cs +++ b/libsharperang/usb.cs @@ -21,7 +21,7 @@ namespace libsharperang { public enum Opcode { SessionBegin = 10, - SessionEnd, + Feed, PrintBegin = 20, PrintContinue, CrcTransmit = 30 @@ -31,6 +31,7 @@ namespace libsharperang { private byte[] ResolveOpcode(Opcode opcode) { switch (opcode) { case Opcode.SessionBegin: return new byte[] { 0x06, 0x00, 0x02, 0x00 }; + case Opcode.Feed: return new byte[] { 0x1a, 0x00, 0x02, 0x00 }; case Opcode.CrcTransmit: return new byte[] { 0x18, 0x01, 0x04, 0x00 }; default: throw new NullReferenceException(); } @@ -73,7 +74,6 @@ namespace libsharperang { public USBPrinter() { ActiveConnectionType=ConnectionType.USB; ImageWidth=48; - Initialise(); } ~USBPrinter() { Close(); @@ -149,22 +149,22 @@ namespace libsharperang { public void TransmitCrcKey() => WriteBytes(builder.BuildTransmitCrc()); public void StartSession() => StartSession(new byte[2] { 0, 0 }); public void StartSession(byte[] data) => WriteBytes(builder.Build(Frame.Opcode.SessionBegin, data)); - public void EndSession() => EndSession(new byte[2] { 0, 0 }); - public void EndSession(byte[] data) => WriteBytes(builder.Build(Frame.Opcode.SessionEnd, data)); public void InitPrinter() { TransmitCrcKey(); - EndSession(); + NoOp(); PollPrinter(); } public void PollPrinter() { StartSession(); - EndSession(); + NoOp(); } - public void Feed() => EndSession(new byte[2] { 0x64, 0x00 }); - public void Feed(int milliseconds) => EndSession(BitConverter.GetBytes(transform.SwapEndianness( + public void Feed() => Feed(100); + //Feed 0 is equivalent to a no-op, though on the P2 model it appears to engage the roller even though it doesn't ultimately result in any rotation + public void NoOp() => Feed(0); + public void Feed(int milliseconds) => WriteBytes(builder.Build(Frame.Opcode.Feed, BitConverter.GetBytes(transform.SwapEndianness( 0x00000000 | ((((( (uint)milliseconds & 0xFFU) << 16) | - (uint)milliseconds) & 0xFFFF00U) >> 8))).Skip(2).ToArray()); + (uint)milliseconds) & 0xFFFF00U) >> 8))).Skip(2).ToArray())); public void PrintBytes(byte[] data, bool autofeed=true) { List datas = data .Select((b, i) => new {Index = i, Value = b }) @@ -174,8 +174,6 @@ namespace libsharperang { datas.ForEach(b => WriteBytes(builder.Build(transform.GeneratePrintOpcode(b), b))); if (autofeed) Feed(60); } - public void PrintTestA(byte[] data) => WriteBytes(builder.Build(Frame.Opcode.PrintBegin, data)); - public void PrintTestB(byte[] data) => WriteBytes(builder.Build(Frame.Opcode.PrintContinue, data)); public bool IsPrinterPresent() => (Devices != null && Devices.Count > 0); bool IPrinter.Initialised() => Initialised(); byte[] IPrinter.ReadBytes() => ReadBytes(); diff --git a/sharperang/LogBridge.cs b/sharperang/LogBridge.cs index 358f3c3..7530256 100644 --- a/sharperang/LogBridge.cs +++ b/sharperang/LogBridge.cs @@ -12,7 +12,7 @@ namespace sharperang { set { if (value == _LogBuffer) return; if (value == "!clearlog") _LogBuffer = ""; - else _LogBuffer += value + "\n"; + else _LogBuffer = value + "\n" + _LogBuffer; OnPropertyChanged("LogBuffer"); } } diff --git a/sharperang/MainWindow.xaml.cs b/sharperang/MainWindow.xaml.cs index 3987dd6..817c46c 100644 --- a/sharperang/MainWindow.xaml.cs +++ b/sharperang/MainWindow.xaml.cs @@ -26,6 +26,7 @@ namespace sharperang { logger.ClearBuffer(); private void BtInitUSB_Click(object sender, RoutedEventArgs e) { logger.Info("USB Initialising"); + printer.Initialise(); //printer = new LibSharperang(logger); logger.Debug("IsPrinterPresent => "+printer.IsPrinterPresent()); logger.Debug("FoundPrinterGuids => "+printer.FoundPrinterGuids()); @@ -36,21 +37,30 @@ namespace sharperang { printer.InitPrinter(); logger.Debug("Printer initialised and ready"); } - private void BtTestLine_Click(object sender, RoutedEventArgs e) => printer.Feed(200); + private void BtTestLine_Click(object sender, RoutedEventArgs e) => printer.Feed(200); private void BtLoadImage_Click(object sender, RoutedEventArgs e) { + logger.Debug("Loading image for print"); OpenFileDialog r = new OpenFileDialog { Title="Select 1 (one) image file", Multiselect=false, Filter="PNG files (*.png)|*.png|JPEG files (*.jpe?g)|*.jpg *.jpeg|Jraphics Interchange Format files (*.gif)|*.gif|Bitte-Mappe files (*.bmp)|*.bmp|All of the above|*.jpg *.jpeg *.png *.gif *.bmp", AutoUpgradeEnabled=true }; - r.ShowDialog(); + if (r.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) { + logger.Debug("Image load cancelled"); + return; + } Image _=Image.FromFile(r.FileName); - r.Dispose(); + logger.Debug("Loaded image " + r.FileName); + r.Dispose(); + logger.Debug("Disposed of dialog"); bimg=new Bitmap(_, (printer.ImageWidth*8), (int)((double)(printer.ImageWidth*8)*(double)((double)_.Height/(double)_.Width))); - _.Dispose(); + logger.Debug("Loaded image as Bitmap"); + _.Dispose(); + logger.Debug("Disposed of Image"); bimg=CopyToBpp(bimg); + logger.Debug("Converted Bitmap to Bitmap with 1-bit colour depth"); //BitArray img = new BitArray(bimg.Height*96*8); byte[] iimg = new byte[bimg.Height*printer.ImageWidth]; byte[] img; @@ -58,14 +68,20 @@ namespace sharperang { bimg.Save(s, ImageFormat.Bmp); img=s.ToArray(); } - int startoffset=img.Length-((bimg.Width/8)+(bimg.Height*48)); + logger.Debug("Got bitmap's bytes"); + int startoffset=img.Length-((bimg.Width/8)+(bimg.Height*printer.ImageWidth)); + logger.Debug("Processing bytes with offset " + startoffset); for(int h=0;h ((x & 0x55555555u) << 1) | ((x & (~0x55555555u)) >> 1); diff --git a/sharperang/packages.config b/sharperang/packages.config index a59f47c..e43e2b2 100644 --- a/sharperang/packages.config +++ b/sharperang/packages.config @@ -1,5 +1,6 @@  + diff --git a/sharperang/sharperang.csproj b/sharperang/sharperang.csproj index 1456f2e..5c295e5 100644 --- a/sharperang/sharperang.csproj +++ b/sharperang/sharperang.csproj @@ -14,6 +14,7 @@ 4 true true + false publish\ true Disk @@ -26,7 +27,6 @@ true 0 1.0.0.%2a - false false true @@ -50,6 +50,9 @@ 4 + + ..\packages\LibUsbDotNet.2.2.29\lib\net45\LibUsbDotNet.LibUsbDotNet.dll + ..\packages\Microsoft.Win32.Registry.4.5.0\lib\net461\Microsoft.Win32.Registry.dll