Example #1
0
        //########################################################################################

        #region Private Methods

        /// <summary>
        /// Create a instance of a internal E-Paper Display
        /// </summary>
        /// <param name="displayType"></param>
        /// <returns></returns>
        internal static IEPaperDisplayInternal CreateEPaperDisplay(EPaperDisplayType displayType)
        {
            IEPaperDisplayInternal display;

            switch (displayType)
            {
            case EPaperDisplayType.WaveShare7In5Bc:
                display = new Epd7In5Bc();
                break;

            case EPaperDisplayType.WaveShare7In5_V2:
                display = new Epd7In5_V2();
                break;

            case EPaperDisplayType.WaveShare7In5b_V2:
                display = new Epd7In5b_V2();
                break;

            case EPaperDisplayType.WaveShare5In65f:
                display = new Epd5in65f();
                break;

            default:
                display = null;
                break;
            }

            display?.Initialize(EPaperDisplayHardware.Value);

            return(display);
        }
        public void DisplayImageSmallTest()
        {
            using var result = new Epd5in65f();
            result.Initialize(m_EPaperDisplayHardwareMock.Object);

            var image = CommonTestData.CreateSampleBitmap(result.Width / 2, result.Height / 2);

            var validBuffer = new List <byte>
            {
                (byte)Epd5in65fCommands.DataStartTransmission1
            };

            m_DataBuffer.Clear();

            validBuffer.AddRange(BitmapToData(image, result.Width, result.Height));
            validBuffer.Add((byte)Epd5in65fCommands.DataStop);
            validBuffer.Add((byte)Epd5in65fCommands.PowerOn);
            validBuffer.Add((byte)Epd5in65fCommands.GetStatus);
            validBuffer.Add((byte)Epd5in65fCommands.DisplayRefresh);
            validBuffer.Add((byte)Epd5in65fCommands.GetStatus);

            m_DataBuffer.Clear();

            var bitmapEPaperDisplay = new SKBitmapLoader(result);

            bitmapEPaperDisplay.DisplayImage(image);

            Assert.AreEqual(validBuffer.Count, m_DataBuffer.Count, "Data Length is wrong");
            Assert.IsTrue(m_DataBuffer.SequenceEqual(validBuffer), "Command Data Sequence is wrong");
        }
        public void ClearBlackTest()
        {
            using var result = new Epd5in65f();
            result.Initialize(m_EPaperDisplayHardwareMock.Object);

            m_DataBuffer.Clear();

            result.ClearBlack();

            const int pixelPerByte = 2;
            var       displayBytes = result.Width / pixelPerByte * result.Height;

            const byte black         = Epd5in65fColors.Black;
            var        twoBlackPixel = result.MergePixelDataInByte(black, black);

            var validBuffer = new List <byte>
            {
                (byte)Epd5in65fCommands.DataStartTransmission1
            };

            for (int i = 0; i < displayBytes; i++)
            {
                validBuffer.Add(twoBlackPixel);
            }
            validBuffer.Add((byte)Epd5in65fCommands.DataStop);
            validBuffer.Add((byte)Epd5in65fCommands.PowerOn);
            validBuffer.Add((byte)Epd5in65fCommands.GetStatus);
            validBuffer.Add((byte)Epd5in65fCommands.DisplayRefresh);
            validBuffer.Add((byte)Epd5in65fCommands.GetStatus);

            Assert.IsTrue(m_DataBuffer.SequenceEqual(validBuffer), "Command Data Sequence is wrong");
        }
        public void DoubleDisposeTest()
        {
            var result = new Epd5in65f();

            result.Initialize(m_EPaperDisplayHardwareMock.Object);
            result.Dispose();
            result.Dispose();
        }
        public void FinalizerNoHardwareTest()
        {
            var result = new Epd5in65f();

            Assert.NotNull(result, "Object should not be null");

            // ReSharper disable once RedundantAssignment
#pragma warning disable IDE0059 // Unnecessary assignment of a value
            result = null;
#pragma warning restore IDE0059 // Unnecessary assignment of a value

            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
        public void TestMergePixelDataInByte()
        {
            using var result = new Epd5in65f();

            var random = new Random();

            for (int i = 0; i < 200; i++)
            {
                var b1 = (byte)random.Next(0, 0x0F);
                var b2 = (byte)random.Next(0, 0x0F);

                var oldResult = MergePixelDataInByte(b1, b2);
                var newResult = result.MergePixelDataInByte(b1, b2);

                Assert.AreEqual(oldResult, newResult, $"Merged Byte Run {i} is wrong. Expected {oldResult}, Returned {newResult}");
            }
        }
        public void PowerOffTest()
        {
            using var result = new Epd5in65f();
            result.Initialize(m_EPaperDisplayHardwareMock.Object);

            m_DataBuffer.Clear();

            result.PowerOff();

            var validBuffer = new List <byte>
            {
                (byte)Epd5in65fCommands.PowerOff,
                (byte)Epd5in65fCommands.GetStatus
            };

            Assert.IsTrue(m_DataBuffer.SequenceEqual(validBuffer), "Command Data Sequence is wrong");
        }
        public void WakeUpTest()
        {
            using var result = new Epd5in65f();
            result.Initialize(m_EPaperDisplayHardwareMock.Object);

            m_DataBuffer.Clear();

            result.WakeUp();

            var validBuffer = new List <byte>
            {
                (byte)Epd5in65fCommands.PanelSetting,
                0xEF,
                0x08,
                (byte)Epd5in65fCommands.PowerSetting,
                0x37,
                0x00,
                0x23,
                0x23,
                (byte)Epd5in65fCommands.PowerOffSequenceSetting,
                0x00,
                (byte)Epd5in65fCommands.PowerOn,
                0xC7,
                0xC7,
                0x1D,
                (byte)Epd5in65fCommands.PllControl,
                0x3C,
                (byte)Epd5in65fCommands.TemperatureCalibration,
                0x00,
                (byte)Epd5in65fCommands.VcomAndDataIntervalSetting,
                0x37,
                (byte)Epd5in65fCommands.TconSetting,
                0x22,
                (byte)Epd5in65fCommands.TconResolution,
                0x02,
                0x58,
                0x01,
                0xC0,
                (byte)Epd5in65fCommands.FlashMode,
                0xAA,
            };

            Assert.IsTrue(m_DataBuffer.SequenceEqual(validBuffer), "Command Data Sequence is wrong");
        }
 public void DisposeNoHardwareTest()
 {
     using var result = new Epd5in65f();
     result.Initialize(m_EPaperDisplayHardwareMock.Object);
 }
 public void ConstructorTest()
 {
     using var result = new Epd5in65f();
     result.Initialize(m_EPaperDisplayHardwareMock.Object);
 }