123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using System;
- namespace Vinno.FIS.Sonopost.Features.Oled
- {
- public enum MessageType
- {
- QueryStatus = 0x00,
- SetBaudRate = 0x11,
- SetBrightness = 0x15,
- OpenScreen = 0x16,
- CloseScreen = 0x17,
- ClearScreen = 0x20,
- DisplayEnglishSmallInCurrentPage = 0x21,//文本显示 5*8英文
- DisplayEnglishLargeInCurrentPage = 0x22,//8*16英文
- DisplayChineseLargeInCurrentPage = 0x23,//16*16中文
- DisplayEnglishSmall2InCurrentPage = 0x24,//8*8英文
- DisplayEnglishMediumInCurrentPage = 0x25,//6*12英文
- DisplayChineseMediumInCurrentPage = 0x26,//12*12中文
- DisplayImageInCurrentPage = 0x27,//图片显示
- AddPage = 0x30,//1-6
- DisplayEnglishSmallWithPageNum = 0x31,//修改页面 5*8英文
- DisplayEnglishLargeWithPageNum = 0x32,//8*16英文
- DisplayChineseLargeWithPageNum = 0x33,//16*16中文
- DisplayEnglishSmall2WithPageNum = 0x39,//8*8英文
- DisplayEnglishMediumWithPageNum = 0x3a,//6*12英文
- DisplayChineseMediumWithPageNum = 0x3b,//12*12中文
- DisplayImageWithPageNum = 0x3c,//图片修改
- SearchPage = 0x34,
- DeletePage = 0x36,
- PreviousPage = 0x37,
- NextPage = 0x38
- }
- public interface ISendData
- {
- /// <summary>
- /// Message type
- /// </summary>
- MessageType MessageType { get; }
- /// <summary>
- /// Generate buffer which will be send to oled screen.
- /// </summary>
- /// <returns></returns>
- byte[] GenerateBuffer();
- }
- public abstract class BaseData : ISendData
- {
- protected const byte FrameHeader = 0xAA;
- public MessageType MessageType { get; }
- public BaseData(MessageType messageType)
- {
- MessageType = messageType;
- }
- public abstract byte[] GenerateBuffer();
- }
- public class CommandData : BaseData
- {
- private readonly byte data;
- private readonly bool _hasData;
- public CommandData(MessageType messageType) : base(messageType)
- {
- _hasData = false;
- }
- public CommandData(MessageType messageType, byte data) : base(messageType)
- {
- this.data = data;
- _hasData = true;
- }
- public override byte[] GenerateBuffer()
- {
- if (_hasData)
- {
- return new byte[3] { FrameHeader, (byte)MessageType, data };
- }
- else
- {
- return new byte[2] { FrameHeader, (byte)MessageType };
- }
- }
- }
- public class DisplayData : BaseData
- {
- private readonly byte _page;
- private readonly byte _row;
- private readonly byte _col;
- private readonly byte[] _data;
- public DisplayData(MessageType messageType, byte row, byte col, byte[] data, byte page = 255) : base(messageType)
- {
- _row = row;
- _col = col;
- _data = data;
- _page = page;
- }
- public override byte[] GenerateBuffer()
- {
- switch (MessageType)
- {
- case MessageType.DisplayEnglishSmallInCurrentPage:
- case MessageType.DisplayEnglishLargeInCurrentPage:
- case MessageType.DisplayChineseLargeInCurrentPage:
- case MessageType.DisplayEnglishSmall2InCurrentPage:
- case MessageType.DisplayEnglishMediumInCurrentPage:
- case MessageType.DisplayChineseMediumInCurrentPage:
- {
- var message = new byte[4 + _data.Length];
- message[0] = FrameHeader;
- message[1] = (byte)MessageType;
- message[2] = _row;
- message[3] = _col;
- Buffer.BlockCopy(_data, 0, message, 4, _data.Length);
- return message;
- }
- case MessageType.DisplayEnglishSmallWithPageNum:
- case MessageType.DisplayEnglishLargeWithPageNum:
- case MessageType.DisplayChineseLargeWithPageNum:
- case MessageType.DisplayEnglishSmall2WithPageNum:
- case MessageType.DisplayEnglishMediumWithPageNum:
- case MessageType.DisplayChineseMediumWithPageNum:
- {
- var message = new byte[5 + _data.Length];
- message[0] = FrameHeader;
- message[1] = (byte)MessageType;
- message[2] = _page;
- message[3] = _row;
- message[4] = _col;
- Buffer.BlockCopy(_data, 0, message, 5, _data.Length);
- return message;
- }
- }
- throw new ArgumentException("Message type not supported");
- }
- }
- public class ImageData : BaseData
- {
- private readonly byte _page;
- private readonly byte _x;
- private readonly byte _y;
- private readonly byte _width;
- private readonly byte _height;
- private readonly byte[] _data;
- public ImageData(MessageType messageType, byte x, byte y, byte width, byte height, byte[] data, byte page = 255) : base(messageType)
- {
- _x = x;
- _y = y;
- _width = width;
- _height = height;
- _data = data;
- _page = page;
- }
- public override byte[] GenerateBuffer()
- {
- if (MessageType == MessageType.DisplayImageInCurrentPage)
- {
- var message = new byte[6 + _data.Length];
- message[0] = FrameHeader;
- message[1] = (byte)MessageType;
- message[2] = _x;
- message[3] = _y;
- message[4] = _width;
- message[5] = _height;
- Buffer.BlockCopy(_data, 0, message, 6, _data.Length);
- return message;
- }
- else if (MessageType == MessageType.DisplayImageWithPageNum)
- {
- var message = new byte[7 + _data.Length];
- message[0] = FrameHeader;
- message[1] = (byte)MessageType;
- message[2] = _page;
- message[3] = _x;
- message[4] = _y;
- message[5] = _width;
- message[6] = _height;
- Buffer.BlockCopy(_data, 0, message, 7, _data.Length);
- return message;
- }
- throw new ArgumentException("Message type not supported");
- }
- }
- }
|