├── src └── EPaperHatCore │ ├── IEpaper.cs │ ├── IO │ ├── IEPaperConnection.cs │ ├── IHardwareSpecification.cs │ ├── DefaultConnection.cs │ └── EPaperConnection.cs │ ├── GUI │ ├── Fonts │ │ ├── IFont.cs │ │ ├── Font8.cs │ │ ├── Font12.cs │ │ └── Font16.cs │ ├── Constants.cs │ ├── Enums.cs │ └── Screen.cs │ ├── EPaperHatCore.csproj │ ├── EpaperBase.cs │ ├── Connections.cs │ ├── HardwareCodes.cs │ ├── Epaper213v2.cs │ └── Epaper27.cs ├── tests └── EPaperHatCore.Tests │ ├── EpaperTests.cs │ ├── EPaperHatCore.Tests.csproj │ └── ScreenTests.cs ├── .gitignore ├── examples └── EPaperHatCore.Examples │ ├── EPaperHatCore.Examples.csproj │ └── Program.cs ├── .github └── workflows │ ├── ci.yml │ ├── claude.yml │ └── claude-code-review.yml ├── LICENSE ├── EPaperHatCore.sln └── README.md /src/EPaperHatCore/IEpaper.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore; 2 | 3 | public interface IEpaper 4 | { 5 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/IO/IEPaperConnection.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore.IO; 2 | 3 | public interface IEpaperConnection 4 | { 5 | void SendCommand(int command); 6 | void SendData(int data); 7 | } 8 | -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Fonts/IFont.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore.GUI.Fonts; 2 | 3 | public interface IFont 4 | { 5 | uint Width { get; } 6 | uint Height { get; } 7 | char[] Table { get; } 8 | } 9 | -------------------------------------------------------------------------------- /src/EPaperHatCore/IO/IHardwareSpecification.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore.IO; 2 | 3 | public interface IHardwareSpecification 4 | { 5 | int RST_PIN { get; } 6 | int DC_PIN { get; } 7 | int CS_PIN { get; } 8 | int BUSY_PIN { get; } 9 | int Channel0Frequency { get; } 10 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/IO/DefaultConnection.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore.IO; 2 | 3 | public class DefaultSpecification : IHardwareSpecification 4 | { 5 | public int RST_PIN => 17; 6 | public int DC_PIN => 25; 7 | public int CS_PIN => 8; 8 | public int BUSY_PIN => 24; 9 | public int Channel0Frequency => 2000000; 10 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Constants.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore.GUI; 2 | 3 | public static class Constants 4 | { 5 | public const uint WHITE = 0xFF; 6 | public const uint BLACK = 0x00; 7 | public const uint RED = BLACK; 8 | 9 | public const uint IMAGE_BACKGROUND = WHITE; 10 | public const uint FONT_FOREGROUND = BLACK; 11 | public const uint FONT_BACKGROUND = WHITE; 12 | } 13 | -------------------------------------------------------------------------------- /tests/EPaperHatCore.Tests/EpaperTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using EPaperHatCore; 3 | using Shouldly; 4 | using Xunit; 5 | 6 | namespace EPaperHatCore.Tests; 7 | public class EpaperTests 8 | { 9 | [Fact] 10 | public void Width_Or_Height_Less_Or_Equal_Zero_Throws() 11 | { 12 | var exception = Record.Exception(() => 13 | { 14 | new Epaper27(0, 0); 15 | }); 16 | 17 | exception.ShouldBeOfType(typeof(ArgumentException)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.*~ 3 | project.lock.json 4 | .DS_Store 5 | *.pyc 6 | nupkg/ 7 | 8 | # Visual Studio Code 9 | .vscode 10 | 11 | # Rider 12 | .idea 13 | 14 | # User-specific files 15 | *.suo 16 | *.user 17 | *.userosscache 18 | *.sln.docstates 19 | 20 | # Build results 21 | [Dd]ebug/ 22 | [Dd]ebugPublic/ 23 | [Rr]elease/ 24 | [Rr]eleases/ 25 | x64/ 26 | x86/ 27 | build/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Oo]ut/ 32 | msbuild.log 33 | msbuild.err 34 | msbuild.wrn 35 | 36 | # Visual Studio 2015 37 | .vs/ -------------------------------------------------------------------------------- /examples/EPaperHatCore.Examples/EPaperHatCore.Examples.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Exe 13 | net8.0 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /tests/EPaperHatCore.Tests/EPaperHatCore.Tests.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | 6 | false 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Enums.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore.GUI; 2 | public class Enums 3 | { 4 | public enum MirrorImage 5 | { 6 | MIRROR_NONE = 0x00, 7 | MIRROR_HORIZONTAL = 0x01, 8 | MIRROR_VERTICAL = 0x02, 9 | MIRROR_ORIGIN = 0x03 10 | } 11 | 12 | public enum Rotate 13 | { 14 | ROTATE_0 = 0, 15 | ROTATE_90 = 90, 16 | ROTATE_180 = 180, 17 | ROTATE_270 = 270 18 | } 19 | 20 | public enum Color 21 | { 22 | WHITE = 0xFF, 23 | BLACK = 0x00, 24 | RED = Color.BLACK 25 | } 26 | 27 | public enum DotStyle 28 | { 29 | DOT_FILL_AROUND, 30 | DOT_FILL_RIGHTUP 31 | } 32 | 33 | public enum LineStyle 34 | { 35 | LINE_STYLE_SOLID, 36 | LINE_STYLE_DOTTED 37 | } 38 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/EPaperHatCore.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | EPaperHatCore 6 | EPaperHatCore 7 | 0.3.0 8 | Pawel Skaruz 9 | A .NET 8 library for controlling E-Paper HAT displays on Raspberry Pi 10 | https://github.com/paw3lx/EPaperHatCore 11 | https://github.com/paw3lx/EPaperHatCore 12 | MIT 13 | true 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - uses: actions/checkout@v4 15 | 16 | - name: Setup .NET 17 | uses: actions/setup-dotnet@v4 18 | with: 19 | dotnet-version: '8.0.x' 20 | 21 | - name: Display .NET version 22 | run: dotnet --version 23 | 24 | - name: Restore dependencies 25 | run: dotnet restore ./src/EPaperHatCore/EPaperHatCore.csproj --verbosity minimal 26 | 27 | - name: Build 28 | run: dotnet build ./src/EPaperHatCore/EPaperHatCore.csproj --no-restore 29 | 30 | - name: Restore test dependencies 31 | run: dotnet restore ./tests/EPaperHatCore.Tests/EPaperHatCore.Tests.csproj --verbosity minimal 32 | 33 | - name: Test 34 | run: dotnet test ./tests/EPaperHatCore.Tests/EPaperHatCore.Tests.csproj --no-restore --verbosity normal -------------------------------------------------------------------------------- /examples/EPaperHatCore.Examples/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using EPaperHatCore; 3 | using EPaperHatCore.GUI; 4 | using EPaperHatCore.GUI.Fonts; 5 | using static EPaperHatCore.GUI.Enums; 6 | 7 | namespace EPaperHatCore.Examples; 8 | class Program 9 | { 10 | static void Main(string[] args) 11 | { 12 | //initialize ePaper display 13 | var ePaper = new Epaper27(176, 264); 14 | ePaper.Initialize(); 15 | 16 | //create black and red screens 17 | var blackScreen = new Screen(176, 264, Rotate.ROTATE_270, Color.WHITE); 18 | var redScreen = new Screen(176, 264, Rotate.ROTATE_270, Color.WHITE); 19 | 20 | //draw something on screen using a font 21 | var font = new Font8(); 22 | var font2 = new Font20(); 23 | blackScreen.DrawString(10, 20, "Text", font, Color.WHITE, Color.BLACK); 24 | redScreen.DrawString(10, 50, "text", font2, Color.WHITE, Color.RED); 25 | 26 | ePaper.DisplayScreens(blackScreen, redScreen); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Paweł Skaruz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/EPaperHatCore/EpaperBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using EPaperHatCore.GUI; 3 | using EPaperHatCore.IO; 4 | 5 | namespace EPaperHatCore; 6 | public abstract class EpaperBase : IEpaper 7 | { 8 | public int ScreenWidth { get; } 9 | public int ScreenHeight { get; } 10 | 11 | protected readonly IEpaperConnection _ePaperConnection; 12 | protected readonly Connections _connections; 13 | 14 | public EpaperBase(int screenWidth, int screenHeight, IHardwareSpecification specification = null) 15 | { 16 | if (screenWidth <= 0 || screenHeight <= 0) 17 | { 18 | throw new ArgumentException("Width and/or height cannot be less or equal zero"); 19 | } 20 | ScreenWidth = screenWidth; 21 | ScreenHeight = screenHeight; 22 | 23 | _connections = new Connections(specification ?? new DefaultSpecification()); 24 | _ePaperConnection = new EPaperConnection(_connections); 25 | } 26 | 27 | public abstract void Initialize(); 28 | public abstract void ClearScreen(); 29 | public abstract void WaitUntilIdle(); 30 | public abstract void DisplayScreens(params Screen[] screens); 31 | public abstract void Sleep(); 32 | public abstract void Reset(); 33 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/IO/EPaperConnection.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Device.Gpio; 3 | 4 | namespace EPaperHatCore.IO; 5 | internal class EPaperConnection : IEpaperConnection 6 | { 7 | private readonly Connections _connection; 8 | private static readonly object _syncLock = new object(); 9 | 10 | public EPaperConnection(Connections connection) 11 | { 12 | _connection = connection; 13 | } 14 | 15 | public void SendCommand(int command) 16 | { 17 | lock (_syncLock) 18 | { 19 | _connection.GpioController.Write(_connection.DcPin, PinValue.Low); 20 | _connection.GpioController.Write(_connection.CsPin, PinValue.Low); 21 | _connection.SpiDevice.Write(ToBytes(command)); 22 | _connection.GpioController.Write(_connection.CsPin, PinValue.High); 23 | } 24 | } 25 | 26 | public void SendData(int data) 27 | { 28 | lock (_syncLock) 29 | { 30 | _connection.GpioController.Write(_connection.DcPin, PinValue.High); 31 | _connection.GpioController.Write(_connection.CsPin, PinValue.Low); 32 | _connection.SpiDevice.Write(ToBytes(data)); 33 | _connection.GpioController.Write(_connection.CsPin, PinValue.High); 34 | } 35 | } 36 | 37 | private byte[] ToBytes(int intValue) 38 | { 39 | byte b = (byte)intValue; 40 | return new byte[1] { b }; 41 | } 42 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/Connections.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Device.Gpio; 3 | using System.Device.Spi; 4 | using EPaperHatCore.IO; 5 | 6 | namespace EPaperHatCore; 7 | public class Connections : IDisposable 8 | { 9 | private readonly IHardwareSpecification _specification; 10 | public int ResetPin { get; private set; } 11 | public int DcPin { get; private set; } 12 | public int CsPin { get; private set; } 13 | public int BusyPin { get; private set; } 14 | public SpiDevice SpiDevice { get; private set; } 15 | public GpioController GpioController { get; private set; } 16 | private static readonly object _syncLock = new object(); 17 | 18 | public Connections(IHardwareSpecification specification) 19 | { 20 | _specification = specification; 21 | } 22 | 23 | public void Initialize() 24 | { 25 | lock (_syncLock) 26 | { 27 | GpioController = new GpioController(); 28 | 29 | ResetPin = _specification.RST_PIN; 30 | GpioController.OpenPin(ResetPin, PinMode.Output); 31 | 32 | DcPin = _specification.DC_PIN; 33 | GpioController.OpenPin(DcPin, PinMode.Output); 34 | 35 | CsPin = _specification.CS_PIN; 36 | GpioController.OpenPin(CsPin, PinMode.Output); 37 | 38 | BusyPin = _specification.BUSY_PIN; 39 | GpioController.OpenPin(BusyPin, PinMode.Input); 40 | 41 | var spiSettings = new SpiConnectionSettings(0, CsPin) 42 | { 43 | ClockFrequency = _specification.Channel0Frequency, 44 | Mode = SpiMode.Mode0 45 | }; 46 | SpiDevice = SpiDevice.Create(spiSettings); 47 | } 48 | } 49 | 50 | public void Dispose() 51 | { 52 | SpiDevice?.Dispose(); 53 | GpioController?.Dispose(); 54 | GC.SuppressFinalize(this); 55 | } 56 | } -------------------------------------------------------------------------------- /.github/workflows/claude.yml: -------------------------------------------------------------------------------- 1 | name: Claude Code 2 | 3 | on: 4 | issue_comment: 5 | types: [created] 6 | pull_request_review_comment: 7 | types: [created] 8 | issues: 9 | types: [opened, assigned] 10 | pull_request_review: 11 | types: [submitted] 12 | 13 | jobs: 14 | claude: 15 | if: | 16 | (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || 17 | (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || 18 | (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || 19 | (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) 20 | runs-on: ubuntu-latest 21 | permissions: 22 | contents: read 23 | pull-requests: read 24 | issues: read 25 | id-token: write 26 | actions: read # Required for Claude to read CI results on PRs 27 | steps: 28 | - name: Checkout repository 29 | uses: actions/checkout@v4 30 | with: 31 | fetch-depth: 1 32 | 33 | - name: Run Claude Code 34 | id: claude 35 | uses: anthropics/claude-code-action@beta 36 | with: 37 | claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} 38 | 39 | # This is an optional setting that allows Claude to read CI results on PRs 40 | additional_permissions: | 41 | actions: read 42 | 43 | # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1) 44 | # model: "claude-opus-4-1-20250805" 45 | 46 | # Optional: Customize the trigger phrase (default: @claude) 47 | # trigger_phrase: "/claude" 48 | 49 | # Optional: Trigger when specific user is assigned to an issue 50 | # assignee_trigger: "claude-bot" 51 | 52 | # Optional: Allow Claude to run specific commands 53 | # allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)" 54 | 55 | # Optional: Add custom instructions for Claude to customize its behavior for your project 56 | # custom_instructions: | 57 | # Follow our coding standards 58 | # Ensure all new code has tests 59 | # Use TypeScript for new files 60 | 61 | # Optional: Custom environment variables for Claude 62 | # claude_env: | 63 | # NODE_ENV: test 64 | 65 | -------------------------------------------------------------------------------- /src/EPaperHatCore/HardwareCodes.cs: -------------------------------------------------------------------------------- 1 | namespace EPaperHatCore; 2 | internal static class HardwareCodes 3 | { 4 | public const int POWER_ON = 0x04; 5 | public const int PANEL_SETTING = 0x00; 6 | public const int PLL_CONTROL = 0x30; 7 | public const int POWER_SETTING = 0x01; 8 | public const int BOOSTER_SOFT_START = 0x06; 9 | public const int VCM_DC_SETTING_REGISTER = 0x82; 10 | public const int VCOM_AND_DATA_INTERVAL_SETTING = 0x50; 11 | public const int PARTIAL_DISPLAY_REFRESH = 0x16; 12 | public const int LUT_FOR_VCOM = 0x20; 13 | public const int LUT_WHITE_TO_WHITE = 0x21; 14 | public const int LUT_BLACK_TO_WHITE = 0x22; 15 | public const int LUT_WHITE_TO_BLACK = 0x23; 16 | public const int LUT_BLACK_TO_BLACK = 0x24; 17 | public const int DATA_START_TRANSMISSION_1 = 0x10; 18 | public const int DATA_STOP = 0x11; 19 | public const int DATA_START_TRANSMISSION_2 = 0x13; 20 | public const int DISPLAY_REFRESH = 0x12; 21 | public static int[] lut_vcom_dc = new int[]{ 22 | 0x00, 0x00, 23 | 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x01, 24 | 0x00, 0x0A, 0x0A, 0x00, 0x00, 0x08, 25 | 0x00, 0x0E, 0x01, 0x0E, 0x01, 0x10, 26 | 0x00, 0x0A, 0x0A, 0x00, 0x00, 0x08, 27 | 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 28 | 0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A, 29 | 0x00, 0x23, 0x00, 0x00, 0x00, 0x01 30 | }; 31 | 32 | //R21H 33 | public static int[] lut_ww = new int[]{ 34 | 0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01, 35 | 0x40, 0x0A, 0x0A, 0x00, 0x00, 0x08, 36 | 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 37 | 0x80, 0x0A, 0x0A, 0x00, 0x00, 0x08, 38 | 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 39 | 0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A, 40 | 0x00, 0x23, 0x00, 0x00, 0x00, 0x01 41 | }; 42 | 43 | //R22H r 44 | public static int[] lut_bw = new int[]{ 45 | 0xA0, 0x1A, 0x1A, 0x00, 0x00, 0x01, 46 | 0x00, 0x0A, 0x0A, 0x00, 0x00, 0x08, 47 | 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 48 | 0x90, 0x0A, 0x0A, 0x00, 0x00, 0x08, 49 | 0xB0, 0x04, 0x10, 0x00, 0x00, 0x05, 50 | 0xB0, 0x03, 0x0E, 0x00, 0x00, 0x0A, 51 | 0xC0, 0x23, 0x00, 0x00, 0x00, 0x01 52 | }; 53 | 54 | //R23H w 55 | public static int[] lut_bb = new int[] { 56 | 0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01, 57 | 0x40, 0x0A, 0x0A, 0x00, 0x00, 0x08, 58 | 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 59 | 0x80, 0x0A, 0x0A, 0x00, 0x00, 0x08, 60 | 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 61 | 0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A, 62 | 0x00, 0x23, 0x00, 0x00, 0x00, 0x01 63 | }; 64 | 65 | //R24H b 66 | public static int[] lut_wb = new int[]{ 67 | 0x90, 0x1A, 0x1A, 0x00, 0x00, 0x01, 68 | 0x20, 0x0A, 0x0A, 0x00, 0x00, 0x08, 69 | 0x84, 0x0E, 0x01, 0x0E, 0x01, 0x10, 70 | 0x10, 0x0A, 0x0A, 0x00, 0x00, 0x08, 71 | 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 72 | 0x00, 0x03, 0x0E, 0x00, 0x00, 0x0A, 73 | 0x00, 0x23, 0x00, 0x00, 0x00, 0x01 74 | }; 75 | } -------------------------------------------------------------------------------- /tests/EPaperHatCore.Tests/ScreenTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using EPaperHatCore; 3 | using EPaperHatCore.GUI; 4 | using EPaperHatCore.GUI.Fonts; 5 | using Shouldly; 6 | using Xunit; 7 | using static EPaperHatCore.GUI.Enums; 8 | 9 | namespace EPaperHatCore.Tests; 10 | public class ScreenTests 11 | { 12 | [Fact] 13 | public void Unsupperted_Character_Throws() 14 | { 15 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 16 | 17 | var exception = Record.Exception(() => 18 | { 19 | screen.DrawString(10, 10, "ł", new Font16(), Color.WHITE, Color.BLACK); 20 | }); 21 | 22 | exception.ShouldBeOfType(typeof(ArgumentException)); 23 | } 24 | 25 | [Fact] 26 | public void String_XPosition_Biggen_Than_Width_Throws() 27 | { 28 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 29 | 30 | var exception = Record.Exception(() => 31 | { 32 | screen.DrawString(1000, 10, "ScreenTest", new Font16(), Color.WHITE, Color.BLACK); 33 | }); 34 | 35 | exception.ShouldBeOfType(typeof(ArgumentOutOfRangeException)); 36 | } 37 | 38 | [Fact] 39 | public void String_YPosition_Biggen_Than_Width_Throws() 40 | { 41 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 42 | 43 | var exception = Record.Exception(() => 44 | { 45 | screen.DrawString(0, 1000, "ScreenTest", new Font16(), Color.WHITE, Color.BLACK); 46 | }); 47 | 48 | exception.ShouldBeOfType(typeof(ArgumentOutOfRangeException)); 49 | } 50 | 51 | [Fact] 52 | public void Charater_XPosition_Biggen_Than_Width_Throws() 53 | { 54 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 55 | 56 | var exception = Record.Exception(() => 57 | { 58 | screen.DrawCharachter(1000, 10, 'e', new Font16(), Color.WHITE, Color.BLACK); 59 | }); 60 | 61 | exception.ShouldBeOfType(typeof(ArgumentOutOfRangeException)); 62 | } 63 | 64 | [Fact] 65 | public void Charater_YPosition_Biggen_Than_Width_Throws() 66 | { 67 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 68 | 69 | var exception = Record.Exception(() => 70 | { 71 | screen.DrawCharachter(0, 1000, 'e', new Font16(), Color.WHITE, Color.BLACK); 72 | }); 73 | 74 | exception.ShouldBeOfType(typeof(ArgumentOutOfRangeException)); 75 | } 76 | 77 | [Fact] 78 | public void Pixel_XPosition_Biggen_Than_Width_Throws() 79 | { 80 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 81 | 82 | var exception = Record.Exception(() => 83 | { 84 | screen.SetPixel(1000, 10, Color.RED); 85 | }); 86 | 87 | exception.ShouldBeOfType(typeof(ArgumentOutOfRangeException)); 88 | } 89 | 90 | [Fact] 91 | public void Pixel_YPosition_Biggen_Than_Width_Throws() 92 | { 93 | var screen = new Screen(176, 264, Rotate.ROTATE_270, 0); 94 | 95 | var exception = Record.Exception(() => 96 | { 97 | screen.SetPixel(0, 1000, Color.RED); 98 | }); 99 | 100 | exception.ShouldBeOfType(typeof(ArgumentOutOfRangeException)); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /.github/workflows/claude-code-review.yml: -------------------------------------------------------------------------------- 1 | name: Claude Code Review 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize] 6 | # Optional: Only run on specific file changes 7 | # paths: 8 | # - "src/**/*.ts" 9 | # - "src/**/*.tsx" 10 | # - "src/**/*.js" 11 | # - "src/**/*.jsx" 12 | 13 | jobs: 14 | claude-review: 15 | # Optional: Filter by PR author 16 | # if: | 17 | # github.event.pull_request.user.login == 'external-contributor' || 18 | # github.event.pull_request.user.login == 'new-developer' || 19 | # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' 20 | 21 | runs-on: ubuntu-latest 22 | permissions: 23 | contents: read 24 | pull-requests: read 25 | issues: read 26 | id-token: write 27 | 28 | steps: 29 | - name: Checkout repository 30 | uses: actions/checkout@v4 31 | with: 32 | fetch-depth: 1 33 | 34 | - name: Run Claude Code Review 35 | id: claude-review 36 | uses: anthropics/claude-code-action@beta 37 | with: 38 | claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }} 39 | 40 | # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1) 41 | # model: "claude-opus-4-1-20250805" 42 | 43 | # Direct prompt for automated review (no @claude mention needed) 44 | direct_prompt: | 45 | Please review this pull request and provide feedback on: 46 | - Code quality and best practices 47 | - Potential bugs or issues 48 | - Performance considerations 49 | - Security concerns 50 | - Test coverage 51 | 52 | Be constructive and helpful in your feedback. 53 | 54 | # Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR 55 | # use_sticky_comment: true 56 | 57 | # Optional: Customize review based on file types 58 | # direct_prompt: | 59 | # Review this PR focusing on: 60 | # - For TypeScript files: Type safety and proper interface usage 61 | # - For API endpoints: Security, input validation, and error handling 62 | # - For React components: Performance, accessibility, and best practices 63 | # - For tests: Coverage, edge cases, and test quality 64 | 65 | # Optional: Different prompts for different authors 66 | # direct_prompt: | 67 | # ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' && 68 | # 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' || 69 | # 'Please provide a thorough code review focusing on our coding standards and best practices.' }} 70 | 71 | # Optional: Add specific tools for running tests or linting 72 | # allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)" 73 | 74 | # Optional: Skip review for certain conditions 75 | # if: | 76 | # !contains(github.event.pull_request.title, '[skip-review]') && 77 | # !contains(github.event.pull_request.title, '[WIP]') 78 | 79 | -------------------------------------------------------------------------------- /EPaperHatCore.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26124.0 5 | MinimumVisualStudioVersion = 15.0.26124.0 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{79E1B4FB-2718-4B6E-862B-A78280FE5104}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EPaperHatCore", "src\EPaperHatCore\EPaperHatCore.csproj", "{4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{E61B8F4F-B386-4F82-905F-DBF4327CB283}" 11 | EndProject 12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EPaperHatCore.Tests", "tests\EPaperHatCore.Tests\EPaperHatCore.Tests.csproj", "{4EB0F350-938A-4449-8EB3-4DFB4ED45902}" 13 | EndProject 14 | Global 15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 16 | Debug|Any CPU = Debug|Any CPU 17 | Debug|x64 = Debug|x64 18 | Debug|x86 = Debug|x86 19 | Release|Any CPU = Release|Any CPU 20 | Release|x64 = Release|x64 21 | Release|x86 = Release|x86 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 27 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 28 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Debug|Any CPU.Build.0 = Debug|Any CPU 29 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Debug|x64.ActiveCfg = Debug|Any CPU 30 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Debug|x64.Build.0 = Debug|Any CPU 31 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Debug|x86.ActiveCfg = Debug|Any CPU 32 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Debug|x86.Build.0 = Debug|Any CPU 33 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Release|Any CPU.ActiveCfg = Release|Any CPU 34 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Release|Any CPU.Build.0 = Release|Any CPU 35 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Release|x64.ActiveCfg = Release|Any CPU 36 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Release|x64.Build.0 = Release|Any CPU 37 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Release|x86.ActiveCfg = Release|Any CPU 38 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23}.Release|x86.Build.0 = Release|Any CPU 39 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 40 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Debug|Any CPU.Build.0 = Debug|Any CPU 41 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Debug|x64.ActiveCfg = Debug|Any CPU 42 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Debug|x64.Build.0 = Debug|Any CPU 43 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Debug|x86.ActiveCfg = Debug|Any CPU 44 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Debug|x86.Build.0 = Debug|Any CPU 45 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Release|Any CPU.ActiveCfg = Release|Any CPU 46 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Release|Any CPU.Build.0 = Release|Any CPU 47 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Release|x64.ActiveCfg = Release|Any CPU 48 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Release|x64.Build.0 = Release|Any CPU 49 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Release|x86.ActiveCfg = Release|Any CPU 50 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902}.Release|x86.Build.0 = Release|Any CPU 51 | EndGlobalSection 52 | GlobalSection(NestedProjects) = preSolution 53 | {4BDB7E87-AE8C-4CF4-9925-1B2E4B258F23} = {79E1B4FB-2718-4B6E-862B-A78280FE5104} 54 | {4EB0F350-938A-4449-8EB3-4DFB4ED45902} = {E61B8F4F-B386-4F82-905F-DBF4327CB283} 55 | EndGlobalSection 56 | EndGlobal 57 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EPaperHatCore 2 | 3 | EPaperHatCore is a .NET 8.0 library for controlling Waveshare e-Paper HAT displays on Raspberry Pi. This library provides a simple and intuitive API for working with e-Paper displays, supporting various screen sizes and drawing operations. 4 | 5 | [![CI](https://github.com/paw3lx/epaperhatcore/actions/workflows/ci.yml/badge.svg)](https://github.com/paw3lx/epaperhatcore/actions/workflows/ci.yml) 6 | 7 | ## Features 8 | 9 | - 🖥️ Support for multiple e-Paper display sizes 10 | - 🎨 Drawing operations: text, lines, rectangles, and points 11 | - 🔄 Screen rotation support (0°, 90°, 180°, 270°) 12 | - 📝 Multiple font sizes (8pt, 12pt, 16pt, 20pt) 13 | - 🎯 Two-color display support (black and red) 14 | - 🔧 Built on System.Device.Gpio for reliable GPIO communication 15 | - ⚡ .NET 8.0 performance and compatibility 16 | 17 | ## Supported E-Paper Displays 18 | 19 | | Display Size | Resolution | Class Name | Colors | 20 | |-------------|------------|------------|--------| 21 | | 2.7 inch | 176×264 | `Epaper27` | Black, Red | 22 | | 2.13 inch v2 | 128×250 | `Epaper213v2` | Black | 23 | 24 | ## Dependencies 25 | 26 | - .NET 8.0 or later 27 | - System.Device.Gpio 3.1.0 (automatically installed) 28 | - Raspberry Pi with GPIO support 29 | 30 | ## Installation 31 | 32 | EPaperHatCore is available on [MyGet](https://www.myget.org/feed/epaperhatcore/package/nuget/EPaperHatCore) 33 | 34 | [![MyGet](https://img.shields.io/myget/epaperhatcore/v/EPaperHatCore.svg??style=flat-square)](https://www.myget.org/feed/epaperhatcore/package/nuget/EPaperHatCore) 35 | 36 | ### Package Manager 37 | ```bash 38 | Install-Package EPaperHatCore -Source https://www.myget.org/F/epaperhatcore/api/v3/index.json 39 | ``` 40 | 41 | ### .NET CLI 42 | ```bash 43 | dotnet add package EPaperHatCore --source https://www.myget.org/F/epaperhatcore/api/v3/index.json 44 | ``` 45 | 46 | ## Getting Started 47 | 48 | ### Basic Example - 2.7 inch Display 49 | ```csharp 50 | using EPaperHatCore; 51 | using EPaperHatCore.GUI; 52 | using EPaperHatCore.GUI.Fonts; 53 | using static EPaperHatCore.GUI.Enums; 54 | 55 | // Initialize the e-Paper display (2.7 inch) 56 | var ePaper = new Epaper27(176, 264); 57 | ePaper.Initialize(); 58 | 59 | // Create black and red screens 60 | var blackScreen = new Screen(176, 264, Rotate.ROTATE_270, Color.WHITE); 61 | var redScreen = new Screen(176, 264, Rotate.ROTATE_270, Color.WHITE); 62 | 63 | // Draw text using different fonts 64 | var font = new Font8(); 65 | var font2 = new Font20(); 66 | blackScreen.DrawString(10, 20, "Hello World!", font, Color.WHITE, Color.BLACK); 67 | redScreen.DrawString(10, 50, "EPaperHatCore", font2, Color.WHITE, Color.RED); 68 | 69 | // Display the screens 70 | ePaper.DisplayScreens(blackScreen, redScreen); 71 | ``` 72 | 73 | ### Basic Example - 2.13 inch v2 Display 74 | ```csharp 75 | using EPaperHatCore; 76 | using EPaperHatCore.GUI; 77 | using EPaperHatCore.GUI.Fonts; 78 | using static EPaperHatCore.GUI.Enums; 79 | 80 | // Initialize the e-Paper display (2.13 inch v2) 81 | var ePaper = new Epaper213v2(128, 250); 82 | ePaper.Initialize(); 83 | 84 | // Create a black and white screen 85 | var screen = new Screen(128, 250, Rotate.ROTATE_0, Color.WHITE); 86 | 87 | // Draw text and shapes 88 | var font = new Font16(); 89 | screen.DrawString(10, 10, "EPaperHatCore", font, Color.WHITE, Color.BLACK); 90 | screen.DrawRectangle(10, 40, 100, 60, Color.BLACK, false, 1); 91 | screen.DrawLine(10, 70, 100, 90, Color.BLACK, LineStyle.LINE_STYLE_SOLID, 1); 92 | 93 | // Display the screen 94 | ePaper.DisplayScreens(screen); 95 | ``` 96 | 97 | ### Advanced Drawing Operations 98 | ```csharp 99 | // Drawing shapes and text with various options 100 | var screen = new Screen(176, 264, Rotate.ROTATE_0, Color.WHITE); 101 | 102 | // Draw filled rectangle 103 | screen.DrawRectangle(20, 20, 80, 60, Color.BLACK, filled: true, dotSize: 1); 104 | 105 | // Draw dotted line 106 | screen.DrawLine(10, 100, 150, 120, Color.BLACK, LineStyle.LINE_STYLE_DOTTED, 2); 107 | 108 | // Draw points with different sizes 109 | screen.DrawPoint(50, 150, Color.BLACK, dotSize: 3, DotStyle.DOT_FILL_AROUND); 110 | 111 | // Text with different font sizes 112 | var font8 = new Font8(); 113 | var font12 = new Font12(); 114 | var font16 = new Font16(); 115 | var font20 = new Font20(); 116 | 117 | screen.DrawString(10, 180, "Font 8pt", font8, Color.WHITE, Color.BLACK); 118 | screen.DrawString(10, 200, "Font 12pt", font12, Color.WHITE, Color.BLACK); 119 | screen.DrawString(10, 220, "Font 16pt", font16, Color.WHITE, Color.BLACK); 120 | screen.DrawString(10, 240, "Font 20pt", font20, Color.WHITE, Color.BLACK); 121 | ``` 122 | 123 | ## API Reference 124 | 125 | ### Core Classes 126 | 127 | #### `Epaper27(int width, int height)` 128 | Driver for 2.7 inch e-Paper displays with black and red color support. 129 | 130 | #### `Epaper213v2(int width, int height)` 131 | Driver for 2.13 inch v2 e-Paper displays with black and white support. 132 | 133 | #### `Screen(uint width, uint height, Rotate rotation, Color backgroundColor)` 134 | Represents a drawable screen buffer with various drawing methods. 135 | 136 | ### Drawing Methods 137 | 138 | - `DrawString(x, y, text, font, bgColor, fgColor)` - Draw text 139 | - `DrawRectangle(x1, y1, x2, y2, color, filled, dotSize)` - Draw rectangles 140 | - `DrawLine(x1, y1, x2, y2, color, lineStyle, dotSize)` - Draw lines 141 | - `DrawPoint(x, y, color, dotSize, dotStyle)` - Draw points 142 | - `SetPixel(x, y, color)` - Set individual pixels 143 | - `Clear(color)` - Clear screen with specified color 144 | 145 | ### Enumerations 146 | 147 | - `Color`: `BLACK`, `WHITE`, `RED` 148 | - `Rotate`: `ROTATE_0`, `ROTATE_90`, `ROTATE_180`, `ROTATE_270` 149 | - `LineStyle`: `LINE_STYLE_SOLID`, `LINE_STYLE_DOTTED` 150 | - `DotStyle`: `DOT_FILL_AROUND`, `DOT_FILL_RIGHTUP` 151 | 152 | ## Hardware Setup 153 | 154 | 1. Connect the e-Paper HAT to your Raspberry Pi GPIO pins 155 | 2. Ensure your Raspberry Pi has .NET 8.0 runtime installed 156 | 3. Run your application with appropriate GPIO permissions 157 | 158 | ## Contributing 159 | 160 | Contributions are welcome! Please feel free to submit issues and pull requests. 161 | 162 | ## License 163 | 164 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. -------------------------------------------------------------------------------- /src/EPaperHatCore/Epaper213v2.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Device.Gpio; 4 | using EPaperHatCore.GUI; 5 | using EPaperHatCore.IO; 6 | 7 | namespace EPaperHatCore; 8 | public class Epaper213v2 : EpaperBase 9 | { 10 | public Epaper213v2(int screenWidth, int screenHeight, IHardwareSpecification specification = null) : base(screenWidth, screenHeight, specification) 11 | { 12 | } 13 | 14 | public override void ClearScreen() 15 | { 16 | int Width, Height; 17 | Width = (ScreenWidth % 8 == 0) ? (ScreenWidth / 8) : (ScreenWidth / 8 + 1); 18 | Height = ScreenHeight; 19 | 20 | _ePaperConnection.SendCommand(0x24); 21 | for (int j = 0; j < Height; j++) 22 | { 23 | for (int i = 0; i < Width; i++) 24 | { 25 | _ePaperConnection.SendData(0xFF); 26 | } 27 | } 28 | 29 | TurnOnDisplay(); 30 | } 31 | 32 | public override void DisplayScreens(params Screen[] screens) 33 | { 34 | if (screens.Length == 0) 35 | return; 36 | var screen = screens[0]; 37 | 38 | int Width, Height; 39 | Width = (ScreenWidth % 8 == 0) ? (ScreenWidth / 8) : (ScreenWidth / 8 + 1); 40 | Height = ScreenHeight; 41 | 42 | _ePaperConnection.SendCommand(0x24); 43 | for (int j = 0; j < Height; j++) 44 | { 45 | for (int i = 0; i < Width; i++) 46 | { 47 | _ePaperConnection.SendData(screen.Image[i + j * Width]); 48 | } 49 | } 50 | TurnOnDisplay(); 51 | } 52 | 53 | public override void Initialize() 54 | { 55 | _connections.Initialize(); 56 | Reset(); 57 | 58 | WaitUntilIdle(); 59 | _ePaperConnection.SendCommand(0x12); // soft reset 60 | WaitUntilIdle(); 61 | 62 | _ePaperConnection.SendCommand(0x74); //set analog block control 63 | _ePaperConnection.SendData(0x54); 64 | _ePaperConnection.SendCommand(0x7E); //set digital block control 65 | _ePaperConnection.SendData(0x3B); 66 | 67 | _ePaperConnection.SendCommand(0x01); //Driver output control 68 | _ePaperConnection.SendData(0xF9); 69 | _ePaperConnection.SendData(0x00); 70 | _ePaperConnection.SendData(0x00); 71 | 72 | _ePaperConnection.SendCommand(0x11); //data entry mode 73 | _ePaperConnection.SendData(0x01); 74 | 75 | _ePaperConnection.SendCommand(0x44); //set Ram-X address start/end position 76 | _ePaperConnection.SendData(0x00); 77 | _ePaperConnection.SendData(0x0F); //0x0C-->(15+1)*8=128 78 | 79 | _ePaperConnection.SendCommand(0x45); //set Ram-Y address start/end position 80 | _ePaperConnection.SendData(0xF9); //0xF9-->(249+1)=250 81 | _ePaperConnection.SendData(0x00); 82 | _ePaperConnection.SendData(0x00); 83 | _ePaperConnection.SendData(0x00); 84 | 85 | _ePaperConnection.SendCommand(0x3C); //BorderWavefrom 86 | _ePaperConnection.SendData(0x03); 87 | 88 | _ePaperConnection.SendCommand(0x2C); //VCOM Voltage 89 | _ePaperConnection.SendData(0x55); // 90 | 91 | _ePaperConnection.SendCommand(0x03); 92 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[70]); 93 | 94 | _ePaperConnection.SendCommand(0x04); // 95 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[71]); 96 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[72]); 97 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[73]); 98 | 99 | _ePaperConnection.SendCommand(0x3A); //Dummy Line 100 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[74]); 101 | _ePaperConnection.SendCommand(0x3B); //Gate time 102 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[75]); 103 | 104 | _ePaperConnection.SendCommand(0x32); 105 | for (int count = 0; count < 70; count++) 106 | { 107 | _ePaperConnection.SendData(EPD_2IN13_V2_lut_full_update[count]); 108 | } 109 | 110 | _ePaperConnection.SendCommand(0x4E); // set RAM x address count to 0; 111 | _ePaperConnection.SendData(0x00); 112 | _ePaperConnection.SendCommand(0x4F); // set RAM y address count to 0X127; 113 | _ePaperConnection.SendData(0xF9); 114 | _ePaperConnection.SendData(0x00); 115 | WaitUntilIdle(); 116 | 117 | } 118 | 119 | public override void Reset() 120 | { 121 | _connections.GpioController.Write(_connections.ResetPin, PinValue.High); 122 | Thread.Sleep(200); 123 | _connections.GpioController.Write(_connections.ResetPin, PinValue.Low); 124 | Thread.Sleep(10); 125 | _connections.GpioController.Write(_connections.ResetPin, PinValue.High); 126 | Thread.Sleep(200); 127 | } 128 | 129 | public override void Sleep() 130 | { 131 | _ePaperConnection.SendCommand(0x10); 132 | _ePaperConnection.SendData(0x01); 133 | Thread.Sleep(100); 134 | } 135 | 136 | public override void WaitUntilIdle() 137 | { 138 | while (_connections.GpioController.Read(_connections.BusyPin) == PinValue.High) 139 | { //LOW: idle, HIGH: busy 140 | Thread.Sleep(100); 141 | } 142 | } 143 | 144 | private void TurnOnDisplay() 145 | { 146 | _ePaperConnection.SendCommand(0x22); 147 | _ePaperConnection.SendData(0xC7); 148 | _ePaperConnection.SendCommand(0x20); 149 | WaitUntilIdle(); 150 | } 151 | 152 | private static int[] EPD_2IN13_V2_lut_full_update = new int[76]{ 153 | 0x80,0x60,0x40,0x00,0x00,0x00,0x00, //LUT0: BB: VS 0 ~7 154 | 0x10,0x60,0x20,0x00,0x00,0x00,0x00, //LUT1: BW: VS 0 ~7 155 | 0x80,0x60,0x40,0x00,0x00,0x00,0x00, //LUT2: WB: VS 0 ~7 156 | 0x10,0x60,0x20,0x00,0x00,0x00,0x00, //LUT3: WW: VS 0 ~7 157 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00, //LUT4: VCOM: VS 0 ~7 158 | 159 | 0x03,0x03,0x00,0x00,0x02, // TP0 A~D RP0 160 | 0x09,0x09,0x00,0x00,0x02, // TP1 A~D RP1 161 | 0x03,0x03,0x00,0x00,0x02, // TP2 A~D RP2 162 | 0x00,0x00,0x00,0x00,0x00, // TP3 A~D RP3 163 | 0x00,0x00,0x00,0x00,0x00, // TP4 A~D RP4 164 | 0x00,0x00,0x00,0x00,0x00, // TP5 A~D RP5 165 | 0x00,0x00,0x00,0x00,0x00, // TP6 A~D RP6 166 | 167 | 0x15,0x41,0xA8,0x32,0x30,0x0A, 168 | }; 169 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/Epaper27.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Device.Gpio; 4 | using EPaperHatCore.GUI; 5 | using EPaperHatCore.IO; 6 | 7 | namespace EPaperHatCore; 8 | public class Epaper27 : EpaperBase 9 | { 10 | public Epaper27(int screenWidth, int screenHeight, IHardwareSpecification specification = null) 11 | : base(screenWidth, screenHeight, specification) 12 | { 13 | 14 | } 15 | 16 | public override void Initialize() 17 | { 18 | _connections.Initialize(); 19 | Reset(); 20 | 21 | _ePaperConnection.SendCommand(HardwareCodes.POWER_ON); 22 | WaitUntilIdle(); 23 | 24 | _ePaperConnection.SendCommand(HardwareCodes.PANEL_SETTING); 25 | _ePaperConnection.SendData(0xaf); //KW-BF KWR-AF BWROTP 0f 26 | 27 | _ePaperConnection.SendCommand(HardwareCodes.PLL_CONTROL); 28 | _ePaperConnection.SendData(0x3a); //3A 100HZ 29 150Hz 39 200HZ 31 171HZ 29 | 30 | _ePaperConnection.SendCommand(HardwareCodes.POWER_SETTING); 31 | _ePaperConnection.SendData(0x03); //# VDS_EN, VDG_EN 32 | _ePaperConnection.SendData(0x00); //# VCOM_HV, VGHL_LV[1], VGHL_LV[0] 33 | _ePaperConnection.SendData(0x2b); //# VDH 34 | _ePaperConnection.SendData(0x2b); //# VDL 35 | _ePaperConnection.SendData(0x09); //# VDHR 36 | 37 | _ePaperConnection.SendCommand(HardwareCodes.BOOSTER_SOFT_START); 38 | _ePaperConnection.SendData(0x07); 39 | _ePaperConnection.SendData(0x07); 40 | _ePaperConnection.SendData(0x17); 41 | 42 | //Power optimization 43 | _ePaperConnection.SendCommand(0xF8); 44 | _ePaperConnection.SendData(0x60); 45 | _ePaperConnection.SendData(0xA5); 46 | 47 | //Power optimization 48 | _ePaperConnection.SendCommand(0xF8); 49 | _ePaperConnection.SendData(0x89); 50 | _ePaperConnection.SendData(0xA5); 51 | 52 | //Power optimization 53 | _ePaperConnection.SendCommand(0xF8); 54 | _ePaperConnection.SendData(0x90); 55 | _ePaperConnection.SendData(0x00); 56 | 57 | //Power optimization 58 | _ePaperConnection.SendCommand(0xF8); 59 | _ePaperConnection.SendData(0x93); 60 | _ePaperConnection.SendData(0x2A); 61 | 62 | //Power optimization 63 | _ePaperConnection.SendCommand(0xF8); 64 | _ePaperConnection.SendData(0x73); 65 | _ePaperConnection.SendData(0x41); 66 | 67 | _ePaperConnection.SendCommand(HardwareCodes.VCM_DC_SETTING_REGISTER); 68 | _ePaperConnection.SendData(0x12); 69 | _ePaperConnection.SendCommand(HardwareCodes.VCOM_AND_DATA_INTERVAL_SETTING); 70 | _ePaperConnection.SendData(0x87); //define by OTP 71 | 72 | SetLut(); 73 | 74 | _ePaperConnection.SendCommand(HardwareCodes.PARTIAL_DISPLAY_REFRESH); 75 | _ePaperConnection.SendData(0x00); 76 | } 77 | 78 | private void SetLut() 79 | { 80 | int count; 81 | _ePaperConnection.SendCommand(HardwareCodes.LUT_FOR_VCOM); //vcom 82 | for (count = 0; count < 44; count++) 83 | { 84 | _ePaperConnection.SendData(HardwareCodes.lut_vcom_dc[count]); 85 | } 86 | 87 | _ePaperConnection.SendCommand(HardwareCodes.LUT_WHITE_TO_WHITE); //ww -- 88 | for (count = 0; count < 42; count++) 89 | { 90 | _ePaperConnection.SendData(HardwareCodes.lut_ww[count]); 91 | } 92 | 93 | _ePaperConnection.SendCommand(HardwareCodes.LUT_BLACK_TO_WHITE); //bw r 94 | for (count = 0; count < 42; count++) 95 | { 96 | _ePaperConnection.SendData(HardwareCodes.lut_bw[count]); 97 | } 98 | 99 | _ePaperConnection.SendCommand(HardwareCodes.LUT_WHITE_TO_BLACK); //wb w 100 | for (count = 0; count < 42; count++) 101 | { 102 | _ePaperConnection.SendData(HardwareCodes.lut_bb[count]); 103 | } 104 | 105 | _ePaperConnection.SendCommand(HardwareCodes.LUT_BLACK_TO_BLACK); //bb b 106 | for (count = 0; count < 42; count++) 107 | { 108 | _ePaperConnection.SendData(HardwareCodes.lut_wb[count]); 109 | } 110 | } 111 | 112 | public override void Reset() 113 | { 114 | _connections.GpioController.Write(_connections.ResetPin, PinValue.High); 115 | Thread.Sleep(200); 116 | _connections.GpioController.Write(_connections.ResetPin, PinValue.Low); 117 | Thread.Sleep(200); 118 | _connections.GpioController.Write(_connections.ResetPin, PinValue.High); 119 | } 120 | 121 | public override void WaitUntilIdle() 122 | { 123 | Console.WriteLine("e-Paper busy"); 124 | while (_connections.GpioController.Read(_connections.BusyPin) == PinValue.Low) 125 | { 126 | System.Threading.Thread.Sleep(100); 127 | } 128 | Console.WriteLine("e-Paper busy release"); 129 | } 130 | 131 | public override void ClearScreen() 132 | { 133 | int Width, Height; 134 | Width = (ScreenWidth % 8 == 0) ? (ScreenWidth / 8) : (ScreenHeight / 8 + 1); 135 | Height = ScreenHeight; 136 | 137 | _ePaperConnection.SendCommand(HardwareCodes.DATA_START_TRANSMISSION_1); 138 | for (int j = 0; j < Height; j++) 139 | { 140 | for (int i = 0; i < Width; i++) 141 | { 142 | _ePaperConnection.SendData(0x00); 143 | } 144 | } 145 | _ePaperConnection.SendData(HardwareCodes.DATA_STOP); 146 | 147 | _ePaperConnection.SendCommand(HardwareCodes.DATA_START_TRANSMISSION_2); 148 | for (int j = 0; j < Height; j++) 149 | { 150 | for (int i = 0; i < Width; i++) 151 | { 152 | _ePaperConnection.SendData(0x00); 153 | } 154 | } 155 | _ePaperConnection.SendData(HardwareCodes.DATA_STOP); 156 | 157 | _ePaperConnection.SendCommand(HardwareCodes.DISPLAY_REFRESH); 158 | WaitUntilIdle(); 159 | } 160 | 161 | public override void DisplayScreens(params Screen[] screens) 162 | { 163 | if (screens.Length != 2) 164 | throw new ArgumentNullException(nameof(screens)); 165 | 166 | var blackScreen = screens[0]; 167 | var redScreen = screens[1]; 168 | 169 | if (blackScreen?.Image == null) 170 | throw new ArgumentNullException(nameof(blackScreen)); 171 | if (redScreen?.Image == null) 172 | throw new ArgumentNullException(nameof(redScreen)); 173 | 174 | DispalScreen(blackScreen, HardwareCodes.DATA_START_TRANSMISSION_1); 175 | DispalScreen(redScreen, HardwareCodes.DATA_START_TRANSMISSION_2); 176 | 177 | _ePaperConnection.SendCommand(HardwareCodes.DISPLAY_REFRESH); 178 | WaitUntilIdle(); 179 | } 180 | 181 | private void DispalScreen(Screen screen, int dataTransmissionCode) 182 | { 183 | int width, height; 184 | width = (ScreenWidth % 8 == 0) ? (ScreenWidth / 8) : (ScreenHeight / 8 + 1); 185 | height = ScreenHeight; 186 | 187 | _ePaperConnection.SendCommand(dataTransmissionCode); 188 | for (int j = 0; j < height; j++) 189 | { 190 | for (int i = 0; i < width; i++) 191 | { 192 | _ePaperConnection.SendData(~screen.Image[i + j * width]); 193 | } 194 | } 195 | _ePaperConnection.SendData(HardwareCodes.DATA_STOP); 196 | } 197 | 198 | public override void Sleep() 199 | { 200 | _ePaperConnection.SendCommand(0X50); 201 | _ePaperConnection.SendData(0xf7); 202 | _ePaperConnection.SendCommand(0X02); //power off 203 | _ePaperConnection.SendCommand(0X07); //deep sleep 204 | _ePaperConnection.SendData(0xA5); 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Screen.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using static EPaperHatCore.GUI.Enums; 3 | using EPaperHatCore.GUI.Fonts; 4 | 5 | namespace EPaperHatCore.GUI; 6 | public class Screen 7 | { 8 | public Screen(uint width, uint height, Rotate? rotate = null, Color? backgroundColor = null, MirrorImage? mirror = null) 9 | { 10 | var imageSize = ((width % 8 == 0) ? (width / 8) : (width / 8 + 1)) * height; 11 | Image = new byte[imageSize]; 12 | 13 | _widthMemory = width; 14 | _heightMemory = height; 15 | _widthByte = (width % 8 == 0) ? (width / 8) : (width / 8 + 1); 16 | _heightByte = height; 17 | 18 | Rotate = rotate ?? Rotate.ROTATE_0; 19 | Mirror = mirror ?? MirrorImage.MIRROR_NONE; 20 | 21 | if (rotate == Rotate.ROTATE_0 || rotate == Rotate.ROTATE_180) 22 | { 23 | Width = width; 24 | Height = height; 25 | } 26 | else 27 | { 28 | Width = height; 29 | Height = width; 30 | } 31 | 32 | if (backgroundColor.HasValue) 33 | { 34 | Clear(backgroundColor.Value); 35 | } 36 | } 37 | 38 | public byte[] Image { get; } 39 | public uint Width { get; } 40 | public uint Height { get; } 41 | public Rotate Rotate { get; } 42 | public MirrorImage Mirror { get; } 43 | private readonly uint _widthMemory; 44 | private readonly uint _heightMemory; 45 | private readonly uint _widthByte; 46 | private readonly uint _heightByte; 47 | 48 | public void SetPixel(uint xPoint, uint yPoint, Color color) 49 | { 50 | if (xPoint > Width) 51 | throw new ArgumentOutOfRangeException(nameof(xPoint), $"{nameof(xPoint)} cannot be bigger than {nameof(Width)}"); 52 | if (yPoint > Height) 53 | throw new ArgumentOutOfRangeException(nameof(yPoint), $"{nameof(yPoint)} cannot be bigger than {nameof(Height)}"); 54 | uint x = 0, y = 0; 55 | switch (Rotate) 56 | { 57 | case Rotate.ROTATE_0: 58 | x = xPoint; 59 | y = yPoint; 60 | break; 61 | case Rotate.ROTATE_90: 62 | x = _widthMemory - yPoint - 1; 63 | y = xPoint; 64 | break; 65 | case Rotate.ROTATE_180: 66 | x = _widthMemory - xPoint - 1; 67 | y = _heightMemory - yPoint - 1; 68 | break; 69 | case Rotate.ROTATE_270: 70 | x = yPoint; 71 | y = _heightMemory - xPoint - 1; 72 | break; 73 | } 74 | 75 | switch (Mirror) 76 | { 77 | case MirrorImage.MIRROR_NONE: 78 | break; 79 | case MirrorImage.MIRROR_HORIZONTAL: 80 | x = _widthMemory - x - 1; 81 | break; 82 | case MirrorImage.MIRROR_VERTICAL: 83 | y = _heightMemory - y - 1; 84 | break; 85 | case MirrorImage.MIRROR_ORIGIN: 86 | x = _widthMemory - x - 1; 87 | y = _heightMemory - y - 1; 88 | break; 89 | } 90 | 91 | if (x > _widthMemory) 92 | throw new ArgumentOutOfRangeException(nameof(x), $"{nameof(x)} cannot be bigger than width"); 93 | if (y > _heightMemory) 94 | throw new ArgumentOutOfRangeException(nameof(y), $"{nameof(y)} cannot be bigger than height"); 95 | 96 | int address = (int)(x / 8 + y * _widthByte); 97 | byte rData = Image[address]; 98 | if (color == Color.BLACK) 99 | { 100 | Image[address] = (byte)(rData & ~(0x80 >> (int)(x % 8))); 101 | } 102 | else 103 | { 104 | Image[address] = (byte)(rData | (0x80 >> (int)(x % 8))); 105 | } 106 | } 107 | 108 | public void DrawCharachter(uint xPoint, uint yPoint, char asciiChar, 109 | IFont font, Color backgroundColor, Color foregroundColor) 110 | { 111 | if (xPoint > Width) 112 | throw new ArgumentOutOfRangeException(nameof(xPoint), $"{nameof(xPoint)} cannot be bigger than {nameof(Width)}"); 113 | if (yPoint > Height) 114 | throw new ArgumentOutOfRangeException(nameof(yPoint), $"{nameof(yPoint)} cannot be bigger than {nameof(Height)}"); 115 | 116 | int charOffset = (int)((asciiChar - ' ') * font.Height * (font.Width / 8 + (font.Width % 8 > 0 ? 1 : 0))); 117 | for (uint page = 0; page < font.Height; page++) 118 | { 119 | for (uint column = 0; column < font.Width; column++) 120 | { 121 | if (charOffset >= font.Table.Length) 122 | { 123 | throw new ArgumentException($"Character '{asciiChar}' is not available in the font"); 124 | } 125 | char character = font.Table[charOffset]; 126 | //To determine whether the font background color and screen background color is consistent 127 | if (backgroundColor == Color.WHITE) 128 | { //this process is to speed up the scan 129 | 130 | if ((character & (0x80 >> (int)(column % 8))) != 0) 131 | SetPixel(xPoint + column, yPoint + page, foregroundColor); 132 | } 133 | else 134 | { 135 | if ((character & (0x80 >> (int)(column % 8))) != 0) 136 | { 137 | SetPixel(xPoint + column, yPoint + page, foregroundColor); 138 | } 139 | else 140 | { 141 | SetPixel(xPoint + column, yPoint + page, backgroundColor); 142 | } 143 | } 144 | //One pixel is 8 bits 145 | if (column % 8 == 7) 146 | charOffset++; 147 | }// Write a line 148 | if (font.Width % 8 != 0) 149 | charOffset++; 150 | }// Write all 151 | } 152 | 153 | public void DrawString(uint xStart, uint yStart, string text, 154 | IFont font, Color backgroundColor, Color foregroundColor) 155 | { 156 | uint xPoint = xStart; 157 | uint yPoint = yStart; 158 | 159 | if (xStart > Width) 160 | throw new ArgumentOutOfRangeException(nameof(xStart), $"{nameof(xStart)} cannot be bigger than {nameof(Width)}"); 161 | if (yStart > Height) 162 | throw new ArgumentOutOfRangeException(nameof(yStart), $"{nameof(yStart)} cannot be bigger than {nameof(Height)}"); 163 | 164 | foreach (char c in text) 165 | { 166 | //if X direction filled , reposition to(Xstart,Ypoint),Ypoint is Y direction plus the Height of the character 167 | if ((xPoint + font.Width) > Width) 168 | { 169 | xPoint = xStart; 170 | yPoint += font.Height; 171 | } 172 | 173 | // If the Y direction is full, reposition to(Xstart, Ystart) 174 | if ((yPoint + font.Height) > Height) 175 | { 176 | xPoint = xStart; 177 | yPoint = yStart; 178 | } 179 | DrawCharachter(xPoint, yPoint, c, font, backgroundColor, foregroundColor); 180 | 181 | //The next word of the abscissa increases the font of the broadband 182 | xPoint += font.Width; 183 | } 184 | } 185 | 186 | public void DrawPoint(uint xStart, uint yStart, Color Color, uint dotSize, DotStyle dotStyle) 187 | { 188 | if (xStart > Width) 189 | throw new ArgumentOutOfRangeException(nameof(xStart), $"{nameof(xStart)} cannot be bigger than {nameof(Width)}"); 190 | if (yStart > Height) 191 | throw new ArgumentOutOfRangeException(nameof(yStart), $"{nameof(yStart)} cannot be bigger than {nameof(Height)}"); 192 | 193 | if (dotSize <= 0 || dotSize >= 8) 194 | throw new ArgumentOutOfRangeException(nameof(dotSize), $"{nameof(yStart)} cannot be less than 0 and bigger than 8"); 195 | 196 | if (dotStyle == DotStyle.DOT_FILL_AROUND) 197 | { 198 | for (uint xDir = 0; xDir < 2 * dotSize - 1; xDir++) 199 | { 200 | for (uint yDir = 0; yDir < 2 * dotSize - 1; yDir++) 201 | { 202 | if (xStart + xDir - dotSize < 0 || yStart + yDir - dotSize < 0) 203 | break; 204 | SetPixel(xStart + xDir - dotSize, yStart + yDir - dotSize, Color); 205 | } 206 | } 207 | } 208 | else 209 | { 210 | for (uint xDir = 0; xDir < dotSize; xDir++) 211 | { 212 | for (uint yDir = 0; yDir < dotSize; yDir++) 213 | { 214 | SetPixel(xStart + xDir - 1, yStart + yDir - 1, Color); 215 | } 216 | } 217 | } 218 | } 219 | 220 | public void DrawLine(uint xStart, uint yStart, uint xEnd, uint yEnd, Color Color, LineStyle lineStyle, uint dotSize) 221 | { 222 | if (xStart > Width) 223 | throw new ArgumentOutOfRangeException(nameof(xStart), $"{nameof(xStart)} cannot be bigger than {nameof(Width)}"); 224 | if (yStart > Height) 225 | throw new ArgumentOutOfRangeException(nameof(yStart), $"{nameof(yStart)} cannot be bigger than {nameof(Height)}"); 226 | if (xEnd > Width) 227 | throw new ArgumentOutOfRangeException(nameof(xEnd), $"{nameof(xEnd)} cannot be bigger than {nameof(Width)}"); 228 | if (yEnd > Height) 229 | throw new ArgumentOutOfRangeException(nameof(yEnd), $"{nameof(yEnd)} cannot be bigger than {nameof(Height)}"); 230 | 231 | if (dotSize <= 0 || dotSize >= 8) 232 | throw new ArgumentOutOfRangeException(nameof(dotSize), $"{nameof(yStart)} cannot be less than 0 and bigger than 8"); 233 | 234 | uint xPoint = xStart; 235 | uint yPoint = yStart; 236 | int dx = (int)(xEnd - xStart) >= 0 ? (int)(xEnd - xStart) : (int)(xStart - xEnd); 237 | int dy = (int)(yEnd - yStart) <= 0 ? (int)(yEnd - yStart) : (int)(yStart - yEnd); 238 | 239 | int xIncrDecr = xStart < xEnd ? 1 : -1; 240 | int yIncDecr = yStart < yEnd ? 1 : -1; 241 | 242 | int esp = dx + dy; 243 | uint dotLen = 0; 244 | 245 | while (true) 246 | { 247 | dotLen++; 248 | 249 | if (lineStyle == LineStyle.LINE_STYLE_DOTTED && dotLen % 3 == 0) 250 | { 251 | DrawPoint(xPoint, yPoint, Color.WHITE, dotSize, DotStyle.DOT_FILL_AROUND); 252 | dotLen = 0; 253 | } 254 | else 255 | { 256 | DrawPoint(xPoint, yPoint, Color, dotSize, DotStyle.DOT_FILL_AROUND); 257 | } 258 | 259 | if (2 * esp >= dy) 260 | { 261 | if (xPoint == xEnd) 262 | break; 263 | esp += dy; 264 | xPoint = (uint)(xPoint + xIncrDecr); 265 | } 266 | if (2 * esp <= dx) 267 | { 268 | if (yPoint == yEnd) 269 | break; 270 | esp += dx; 271 | yPoint = (uint)(yPoint + yIncDecr); 272 | } 273 | } 274 | } 275 | 276 | public void DrawRectangle(uint xStart, uint yStart, uint xEnd, uint yEnd, Color color, bool filled, uint dotSize) 277 | { 278 | if (xStart > Width) 279 | throw new ArgumentOutOfRangeException(nameof(xStart), $"{nameof(xStart)} cannot be bigger than {nameof(Width)}"); 280 | if (yStart > Height) 281 | throw new ArgumentOutOfRangeException(nameof(yStart), $"{nameof(yStart)} cannot be bigger than {nameof(Height)}"); 282 | if (xEnd > Width) 283 | throw new ArgumentOutOfRangeException(nameof(xEnd), $"{nameof(xEnd)} cannot be bigger than {nameof(Width)}"); 284 | if (yEnd > Height) 285 | throw new ArgumentOutOfRangeException(nameof(yEnd), $"{nameof(yEnd)} cannot be bigger than {nameof(Height)}"); 286 | 287 | if (filled) 288 | { 289 | uint Ypoint; 290 | for (Ypoint = yStart; Ypoint < yEnd; Ypoint++) 291 | { 292 | DrawLine(xStart, Ypoint, xEnd, Ypoint, color, LineStyle.LINE_STYLE_SOLID, dotSize); 293 | } 294 | } 295 | else 296 | { 297 | DrawLine(xStart, yStart, xEnd, yStart, color, LineStyle.LINE_STYLE_SOLID, dotSize); 298 | DrawLine(xStart, yStart, xStart, yEnd, color, LineStyle.LINE_STYLE_SOLID, dotSize); 299 | DrawLine(xEnd, yEnd, xEnd, yStart, color, LineStyle.LINE_STYLE_SOLID, dotSize); 300 | DrawLine(xEnd, yEnd, xStart, yEnd, color, LineStyle.LINE_STYLE_SOLID, dotSize); 301 | } 302 | } 303 | 304 | public void Clear(Color color) 305 | { 306 | for (int Y = 0; Y < _heightByte; Y++) 307 | { 308 | for (int X = 0; X < _widthByte; X++) 309 | { 310 | int Addr = (int)(X + Y * _widthByte); 311 | byte byteColor = (byte)color; 312 | this.Image[Addr] = byteColor; 313 | } 314 | } 315 | } 316 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Fonts/Font8.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | 3 | namespace EPaperHatCore.GUI.Fonts; 4 | public class Font8 : IFont 5 | { 6 | public uint Width { get; } 7 | 8 | public uint Height { get; } 9 | 10 | public char[] Table { get; } 11 | 12 | public Font8() 13 | { 14 | Width = 5; 15 | Height = 8; 16 | Table = new int[] 17 | { 18 | // @0 ' ' (5 pixels wide) 19 | 0x00, // 20 | 0x00, // 21 | 0x00, // 22 | 0x00, // 23 | 0x00, // 24 | 0x00, // 25 | 0x00, // 26 | 0x00, // 27 | 28 | // @8 '!' (5 pixels wide) 29 | 0x20, // # 30 | 0x20, // # 31 | 0x20, // # 32 | 0x20, // # 33 | 0x00, // 34 | 0x20, // # 35 | 0x00, // 36 | 0x00, // 37 | 38 | // @16 '"' (5 pixels wide) 39 | 0x50, // # # 40 | 0x50, // # # 41 | 0x00, // 42 | 0x00, // 43 | 0x00, // 44 | 0x00, // 45 | 0x00, // 46 | 0x00, // 47 | 48 | // @24 '#' (5 pixels wide) 49 | 0x28, // # # 50 | 0x50, // # # 51 | 0xF8, // ##### 52 | 0x50, // # # 53 | 0xF8, // ##### 54 | 0x50, // # # 55 | 0xA0, // # # 56 | 0x00, // 57 | 58 | // @32 '$' (5 pixels wide) 59 | 0x20, // # 60 | 0x30, // ## 61 | 0x60, // ## 62 | 0x30, // ## 63 | 0x10, // # 64 | 0x60, // ## 65 | 0x20, // # 66 | 0x00, // 67 | 68 | // @40 '%' (5 pixels wide) 69 | 0x20, // # 70 | 0x20, // # 71 | 0x18, // ## 72 | 0x60, // ## 73 | 0x10, // # 74 | 0x10, // # 75 | 0x00, // 76 | 0x00, // 77 | 78 | // @48 '&' (5 pixels wide) 79 | 0x00, // 80 | 0x38, // ### 81 | 0x20, // # 82 | 0x60, // ## 83 | 0x50, // # # 84 | 0x78, // #### 85 | 0x00, // 86 | 0x00, // 87 | 88 | // @56 ''' (5 pixels wide) 89 | 0x20, // # 90 | 0x20, // # 91 | 0x20, // # 92 | 0x00, // 93 | 0x00, // 94 | 0x00, // 95 | 0x00, // 96 | 0x00, // 97 | 98 | // @64 '(' (5 pixels wide) 99 | 0x10, // # 100 | 0x20, // # 101 | 0x20, // # 102 | 0x20, // # 103 | 0x20, // # 104 | 0x20, // # 105 | 0x10, // # 106 | 0x00, // 107 | 108 | // @72 ')' (5 pixels wide) 109 | 0x40, // # 110 | 0x20, // # 111 | 0x20, // # 112 | 0x20, // # 113 | 0x20, // # 114 | 0x20, // # 115 | 0x40, // # 116 | 0x00, // 117 | 118 | // @80 '*' (5 pixels wide) 119 | 0x20, // # 120 | 0x70, // ### 121 | 0x20, // # 122 | 0x50, // # # 123 | 0x00, // 124 | 0x00, // 125 | 0x00, // 126 | 0x00, // 127 | 128 | // @88 '+' (5 pixels wide) 129 | 0x00, // 130 | 0x20, // # 131 | 0x20, // # 132 | 0xF8, // ##### 133 | 0x20, // # 134 | 0x20, // # 135 | 0x00, // 136 | 0x00, // 137 | 138 | // @96 ',' (5 pixels wide) 139 | 0x00, // 140 | 0x00, // 141 | 0x00, // 142 | 0x00, // 143 | 0x10, // # 144 | 0x20, // # 145 | 0x20, // # 146 | 0x00, // 147 | 148 | // @104 '-' (5 pixels wide) 149 | 0x00, // 150 | 0x00, // 151 | 0x00, // 152 | 0x70, // ### 153 | 0x00, // 154 | 0x00, // 155 | 0x00, // 156 | 0x00, // 157 | 158 | // @112 '.' (5 pixels wide) 159 | 0x00, // 160 | 0x00, // 161 | 0x00, // 162 | 0x00, // 163 | 0x00, // 164 | 0x20, // # 165 | 0x00, // 166 | 0x00, // 167 | 168 | // @120 '/' (5 pixels wide) 169 | 0x10, // # 170 | 0x20, // # 171 | 0x20, // # 172 | 0x20, // # 173 | 0x40, // # 174 | 0x40, // # 175 | 0x80, // # 176 | 0x00, // 177 | 178 | // @128 '0' (5 pixels wide) 179 | 0x20, // # 180 | 0x50, // # # 181 | 0x50, // # # 182 | 0x50, // # # 183 | 0x50, // # # 184 | 0x20, // # 185 | 0x00, // 186 | 0x00, // 187 | 188 | // @136 '1' (5 pixels wide) 189 | 0x60, // ## 190 | 0x20, // # 191 | 0x20, // # 192 | 0x20, // # 193 | 0x20, // # 194 | 0xF8, // ##### 195 | 0x00, // 196 | 0x00, // 197 | 198 | // @144 '2' (5 pixels wide) 199 | 0x20, // # 200 | 0x50, // # # 201 | 0x20, // # 202 | 0x20, // # 203 | 0x40, // # 204 | 0x70, // ### 205 | 0x00, // 206 | 0x00, // 207 | 208 | // @152 '3' (5 pixels wide) 209 | 0x20, // # 210 | 0x50, // # # 211 | 0x10, // # 212 | 0x20, // # 213 | 0x10, // # 214 | 0x60, // ## 215 | 0x00, // 216 | 0x00, // 217 | 218 | // @160 '4' (5 pixels wide) 219 | 0x10, // # 220 | 0x30, // ## 221 | 0x50, // # # 222 | 0x78, // #### 223 | 0x10, // # 224 | 0x38, // ### 225 | 0x00, // 226 | 0x00, // 227 | 228 | // @168 '5' (5 pixels wide) 229 | 0x70, // ### 230 | 0x40, // # 231 | 0x60, // ## 232 | 0x10, // # 233 | 0x50, // # # 234 | 0x20, // # 235 | 0x00, // 236 | 0x00, // 237 | 238 | // @176 '6' (5 pixels wide) 239 | 0x30, // ## 240 | 0x40, // # 241 | 0x60, // ## 242 | 0x50, // # # 243 | 0x50, // # # 244 | 0x60, // ## 245 | 0x00, // 246 | 0x00, // 247 | 248 | // @184 '7' (5 pixels wide) 249 | 0x70, // ### 250 | 0x50, // # # 251 | 0x10, // # 252 | 0x20, // # 253 | 0x20, // # 254 | 0x20, // # 255 | 0x00, // 256 | 0x00, // 257 | 258 | // @192 '8' (5 pixels wide) 259 | 0x20, // # 260 | 0x50, // # # 261 | 0x20, // # 262 | 0x50, // # # 263 | 0x50, // # # 264 | 0x20, // # 265 | 0x00, // 266 | 0x00, // 267 | 268 | // @200 '9' (5 pixels wide) 269 | 0x30, // ## 270 | 0x50, // # # 271 | 0x50, // # # 272 | 0x30, // ## 273 | 0x10, // # 274 | 0x60, // ## 275 | 0x00, // 276 | 0x00, // 277 | 278 | // @208 ':' (5 pixels wide) 279 | 0x00, // 280 | 0x00, // 281 | 0x20, // # 282 | 0x00, // 283 | 0x00, // 284 | 0x20, // # 285 | 0x00, // 286 | 0x00, // 287 | 288 | // @216 ';' (5 pixels wide) 289 | 0x00, // 290 | 0x00, // 291 | 0x10, // # 292 | 0x00, // 293 | 0x10, // # 294 | 0x20, // # 295 | 0x00, // 296 | 0x00, // 297 | 298 | // @224 '<' (5 pixels wide) 299 | 0x00, // 300 | 0x10, // # 301 | 0x20, // # 302 | 0xC0, // ## 303 | 0x20, // # 304 | 0x10, // # 305 | 0x00, // 306 | 0x00, // 307 | 308 | // @232 '=' (5 pixels wide) 309 | 0x00, // 310 | 0x70, // ### 311 | 0x00, // 312 | 0x70, // ### 313 | 0x00, // 314 | 0x00, // 315 | 0x00, // 316 | 0x00, // 317 | 318 | // @240 '>' (5 pixels wide) 319 | 0x00, // 320 | 0x40, // # 321 | 0x20, // # 322 | 0x18, // ## 323 | 0x20, // # 324 | 0x40, // # 325 | 0x00, // 326 | 0x00, // 327 | 328 | // @248 '?' (5 pixels wide) 329 | 0x20, // # 330 | 0x50, // # # 331 | 0x10, // # 332 | 0x20, // # 333 | 0x00, // 334 | 0x20, // # 335 | 0x00, // 336 | 0x00, // 337 | 338 | // @256 '@' (5 pixels wide) 339 | 0x30, // ## 340 | 0x48, // # # 341 | 0x48, // # # 342 | 0x58, // # ## 343 | 0x48, // # # 344 | 0x40, // # 345 | 0x38, // ### 346 | 0x00, // 347 | 348 | // @264 'A' (5 pixels wide) 349 | 0x60, // ## 350 | 0x20, // # 351 | 0x50, // # # 352 | 0x70, // ### 353 | 0x88, // # # 354 | 0xD8, // ## ## 355 | 0x00, // 356 | 0x00, // 357 | 358 | // @272 'B' (5 pixels wide) 359 | 0xF0, // #### 360 | 0x48, // # # 361 | 0x70, // ### 362 | 0x48, // # # 363 | 0x48, // # # 364 | 0xF0, // #### 365 | 0x00, // 366 | 0x00, // 367 | 368 | // @280 'C' (5 pixels wide) 369 | 0x70, // ### 370 | 0x50, // # # 371 | 0x40, // # 372 | 0x40, // # 373 | 0x40, // # 374 | 0x30, // ## 375 | 0x00, // 376 | 0x00, // 377 | 378 | // @288 'D' (5 pixels wide) 379 | 0xF0, // #### 380 | 0x48, // # # 381 | 0x48, // # # 382 | 0x48, // # # 383 | 0x48, // # # 384 | 0xF0, // #### 385 | 0x00, // 386 | 0x00, // 387 | 388 | // @296 'E' (5 pixels wide) 389 | 0xF8, // ##### 390 | 0x48, // # # 391 | 0x60, // ## 392 | 0x40, // # 393 | 0x48, // # # 394 | 0xF8, // ##### 395 | 0x00, // 396 | 0x00, // 397 | 398 | // @304 'F' (5 pixels wide) 399 | 0xF8, // ##### 400 | 0x48, // # # 401 | 0x60, // ## 402 | 0x40, // # 403 | 0x40, // # 404 | 0xE0, // ### 405 | 0x00, // 406 | 0x00, // 407 | 408 | // @312 'G' (5 pixels wide) 409 | 0x70, // ### 410 | 0x40, // # 411 | 0x40, // # 412 | 0x58, // # ## 413 | 0x50, // # # 414 | 0x30, // ## 415 | 0x00, // 416 | 0x00, // 417 | 418 | // @320 'H' (5 pixels wide) 419 | 0xE8, // ### # 420 | 0x48, // # # 421 | 0x78, // #### 422 | 0x48, // # # 423 | 0x48, // # # 424 | 0xE8, // ### # 425 | 0x00, // 426 | 0x00, // 427 | 428 | // @328 'I' (5 pixels wide) 429 | 0x70, // ### 430 | 0x20, // # 431 | 0x20, // # 432 | 0x20, // # 433 | 0x20, // # 434 | 0x70, // ### 435 | 0x00, // 436 | 0x00, // 437 | 438 | // @336 'J' (5 pixels wide) 439 | 0x38, // ### 440 | 0x10, // # 441 | 0x10, // # 442 | 0x50, // # # 443 | 0x50, // # # 444 | 0x20, // # 445 | 0x00, // 446 | 0x00, // 447 | 448 | // @344 'K' (5 pixels wide) 449 | 0xD8, // ## ## 450 | 0x50, // # # 451 | 0x60, // ## 452 | 0x70, // ### 453 | 0x50, // # # 454 | 0xD8, // ## ## 455 | 0x00, // 456 | 0x00, // 457 | 458 | // @352 'L' (5 pixels wide) 459 | 0xE0, // ### 460 | 0x40, // # 461 | 0x40, // # 462 | 0x40, // # 463 | 0x48, // # # 464 | 0xF8, // ##### 465 | 0x00, // 466 | 0x00, // 467 | 468 | // @360 'M' (5 pixels wide) 469 | 0xD8, // ## ## 470 | 0xD8, // ## ## 471 | 0xD8, // ## ## 472 | 0xA8, // # # # 473 | 0x88, // # # 474 | 0xD8, // ## ## 475 | 0x00, // 476 | 0x00, // 477 | 478 | // @368 'N' (5 pixels wide) 479 | 0xD8, // ## ## 480 | 0x68, // ## # 481 | 0x68, // ## # 482 | 0x58, // # ## 483 | 0x58, // # ## 484 | 0xE8, // ### # 485 | 0x00, // 486 | 0x00, // 487 | 488 | // @376 'O' (5 pixels wide) 489 | 0x30, // ## 490 | 0x48, // # # 491 | 0x48, // # # 492 | 0x48, // # # 493 | 0x48, // # # 494 | 0x30, // ## 495 | 0x00, // 496 | 0x00, // 497 | 498 | // @384 'P' (5 pixels wide) 499 | 0xF0, // #### 500 | 0x48, // # # 501 | 0x48, // # # 502 | 0x70, // ### 503 | 0x40, // # 504 | 0xE0, // ### 505 | 0x00, // 506 | 0x00, // 507 | 508 | // @392 'Q' (5 pixels wide) 509 | 0x30, // ## 510 | 0x48, // # # 511 | 0x48, // # # 512 | 0x48, // # # 513 | 0x48, // # # 514 | 0x30, // ## 515 | 0x18, // ## 516 | 0x00, // 517 | 518 | // @400 'R' (5 pixels wide) 519 | 0xF0, // #### 520 | 0x48, // # # 521 | 0x48, // # # 522 | 0x70, // ### 523 | 0x48, // # # 524 | 0xE8, // ### # 525 | 0x00, // 526 | 0x00, // 527 | 528 | // @408 'S' (5 pixels wide) 529 | 0x70, // ### 530 | 0x50, // # # 531 | 0x20, // # 532 | 0x10, // # 533 | 0x50, // # # 534 | 0x70, // ### 535 | 0x00, // 536 | 0x00, // 537 | 538 | // @416 'T' (5 pixels wide) 539 | 0xF8, // ##### 540 | 0xA8, // # # # 541 | 0x20, // # 542 | 0x20, // # 543 | 0x20, // # 544 | 0x70, // ### 545 | 0x00, // 546 | 0x00, // 547 | 548 | // @424 'U' (5 pixels wide) 549 | 0xD8, // ## ## 550 | 0x48, // # # 551 | 0x48, // # # 552 | 0x48, // # # 553 | 0x48, // # # 554 | 0x30, // ## 555 | 0x00, // 556 | 0x00, // 557 | 558 | // @432 'V' (5 pixels wide) 559 | 0xD8, // ## ## 560 | 0x88, // # # 561 | 0x48, // # # 562 | 0x50, // # # 563 | 0x50, // # # 564 | 0x30, // ## 565 | 0x00, // 566 | 0x00, // 567 | 568 | // @440 'W' (5 pixels wide) 569 | 0xD8, // ## ## 570 | 0x88, // # # 571 | 0xA8, // # # # 572 | 0xA8, // # # # 573 | 0xA8, // # # # 574 | 0x50, // # # 575 | 0x00, // 576 | 0x00, // 577 | 578 | // @448 'X' (5 pixels wide) 579 | 0xD8, // ## ## 580 | 0x50, // # # 581 | 0x20, // # 582 | 0x20, // # 583 | 0x50, // # # 584 | 0xD8, // ## ## 585 | 0x00, // 586 | 0x00, // 587 | 588 | // @456 'Y' (5 pixels wide) 589 | 0xD8, // ## ## 590 | 0x88, // # # 591 | 0x50, // # # 592 | 0x20, // # 593 | 0x20, // # 594 | 0x70, // ### 595 | 0x00, // 596 | 0x00, // 597 | 598 | // @464 'Z' (5 pixels wide) 599 | 0x78, // #### 600 | 0x48, // # # 601 | 0x10, // # 602 | 0x20, // # 603 | 0x48, // # # 604 | 0x78, // #### 605 | 0x00, // 606 | 0x00, // 607 | 608 | // @472 '[' (5 pixels wide) 609 | 0x30, // ## 610 | 0x20, // # 611 | 0x20, // # 612 | 0x20, // # 613 | 0x20, // # 614 | 0x20, // # 615 | 0x30, // ## 616 | 0x00, // 617 | 618 | // @480 '\' (5 pixels wide) 619 | 0x80, // # 620 | 0x40, // # 621 | 0x40, // # 622 | 0x20, // # 623 | 0x20, // # 624 | 0x20, // # 625 | 0x10, // # 626 | 0x00, // 627 | 628 | // @488 ']' (5 pixels wide) 629 | 0x60, // ## 630 | 0x20, // # 631 | 0x20, // # 632 | 0x20, // # 633 | 0x20, // # 634 | 0x20, // # 635 | 0x60, // ## 636 | 0x00, // 637 | 638 | // @496 '^' (5 pixels wide) 639 | 0x20, // # 640 | 0x20, // # 641 | 0x50, // # # 642 | 0x00, // 643 | 0x00, // 644 | 0x00, // 645 | 0x00, // 646 | 0x00, // 647 | 648 | // @504 '_' (5 pixels wide) 649 | 0x00, // 650 | 0x00, // 651 | 0x00, // 652 | 0x00, // 653 | 0x00, // 654 | 0x00, // 655 | 0x00, // 656 | 0xF8, // ##### 657 | 658 | // @512 '`' (5 pixels wide) 659 | 0x20, // # 660 | 0x10, // # 661 | 0x00, // 662 | 0x00, // 663 | 0x00, // 664 | 0x00, // 665 | 0x00, // 666 | 0x00, // 667 | 668 | // @520 'a' (5 pixels wide) 669 | 0x00, // 670 | 0x00, // 671 | 0x30, // ## 672 | 0x10, // # 673 | 0x70, // ### 674 | 0x78, // #### 675 | 0x00, // 676 | 0x00, // 677 | 678 | // @528 'b' (5 pixels wide) 679 | 0xC0, // ## 680 | 0x40, // # 681 | 0x70, // ### 682 | 0x48, // # # 683 | 0x48, // # # 684 | 0xF0, // #### 685 | 0x00, // 686 | 0x00, // 687 | 688 | // @536 'c' (5 pixels wide) 689 | 0x00, // 690 | 0x00, // 691 | 0x70, // ### 692 | 0x40, // # 693 | 0x40, // # 694 | 0x70, // ### 695 | 0x00, // 696 | 0x00, // 697 | 698 | // @544 'd' (5 pixels wide) 699 | 0x18, // ## 700 | 0x08, // # 701 | 0x38, // ### 702 | 0x48, // # # 703 | 0x48, // # # 704 | 0x38, // ### 705 | 0x00, // 706 | 0x00, // 707 | 708 | // @552 'e' (5 pixels wide) 709 | 0x00, // 710 | 0x00, // 711 | 0x70, // ### 712 | 0x70, // ### 713 | 0x40, // # 714 | 0x30, // ## 715 | 0x00, // 716 | 0x00, // 717 | 718 | // @560 'f' (5 pixels wide) 719 | 0x10, // # 720 | 0x20, // # 721 | 0x70, // ### 722 | 0x20, // # 723 | 0x20, // # 724 | 0x70, // ### 725 | 0x00, // 726 | 0x00, // 727 | 728 | // @568 'g' (5 pixels wide) 729 | 0x00, // 730 | 0x00, // 731 | 0x38, // ### 732 | 0x48, // # # 733 | 0x48, // # # 734 | 0x38, // ### 735 | 0x08, // # 736 | 0x30, // ## 737 | 738 | // @576 'h' (5 pixels wide) 739 | 0xC0, // ## 740 | 0x40, // # 741 | 0x70, // ### 742 | 0x48, // # # 743 | 0x48, // # # 744 | 0xE8, // ### # 745 | 0x00, // 746 | 0x00, // 747 | 748 | // @584 'i' (5 pixels wide) 749 | 0x20, // # 750 | 0x00, // 751 | 0x60, // ## 752 | 0x20, // # 753 | 0x20, // # 754 | 0x70, // ### 755 | 0x00, // 756 | 0x00, // 757 | 758 | // @592 'j' (5 pixels wide) 759 | 0x20, // # 760 | 0x00, // 761 | 0x70, // ### 762 | 0x10, // # 763 | 0x10, // # 764 | 0x10, // # 765 | 0x10, // # 766 | 0x70, // ### 767 | 768 | // @600 'k' (5 pixels wide) 769 | 0xC0, // ## 770 | 0x40, // # 771 | 0x58, // # ## 772 | 0x70, // ### 773 | 0x50, // # # 774 | 0xD8, // ## ## 775 | 0x00, // 776 | 0x00, // 777 | 778 | // @608 'l' (5 pixels wide) 779 | 0x60, // ## 780 | 0x20, // # 781 | 0x20, // # 782 | 0x20, // # 783 | 0x20, // # 784 | 0x70, // ### 785 | 0x00, // 786 | 0x00, // 787 | 788 | // @616 'm' (5 pixels wide) 789 | 0x00, // 790 | 0x00, // 791 | 0xD0, // ## # 792 | 0xA8, // # # # 793 | 0xA8, // # # # 794 | 0xA8, // # # # 795 | 0x00, // 796 | 0x00, // 797 | 798 | // @624 'n' (5 pixels wide) 799 | 0x00, // 800 | 0x00, // 801 | 0xF0, // #### 802 | 0x48, // # # 803 | 0x48, // # # 804 | 0xC8, // ## # 805 | 0x00, // 806 | 0x00, // 807 | 808 | // @632 'o' (5 pixels wide) 809 | 0x00, // 810 | 0x00, // 811 | 0x30, // ## 812 | 0x48, // # # 813 | 0x48, // # # 814 | 0x30, // ## 815 | 0x00, // 816 | 0x00, // 817 | 818 | // @640 'p' (5 pixels wide) 819 | 0x00, // 820 | 0x00, // 821 | 0xF0, // #### 822 | 0x48, // # # 823 | 0x48, // # # 824 | 0x70, // ### 825 | 0x40, // # 826 | 0xE0, // ### 827 | 828 | // @648 'q' (5 pixels wide) 829 | 0x00, // 830 | 0x00, // 831 | 0x38, // ### 832 | 0x48, // # # 833 | 0x48, // # # 834 | 0x38, // ### 835 | 0x08, // # 836 | 0x18, // ## 837 | 838 | // @656 'r' (5 pixels wide) 839 | 0x00, // 840 | 0x00, // 841 | 0x78, // #### 842 | 0x20, // # 843 | 0x20, // # 844 | 0x70, // ### 845 | 0x00, // 846 | 0x00, // 847 | 848 | // @664 's' (5 pixels wide) 849 | 0x00, // 850 | 0x00, // 851 | 0x30, // ## 852 | 0x20, // # 853 | 0x10, // # 854 | 0x60, // ## 855 | 0x00, // 856 | 0x00, // 857 | 858 | // @672 't' (5 pixels wide) 859 | 0x00, // 860 | 0x40, // # 861 | 0xF0, // #### 862 | 0x40, // # 863 | 0x48, // # # 864 | 0x30, // ## 865 | 0x00, // 866 | 0x00, // 867 | 868 | // @680 'u' (5 pixels wide) 869 | 0x00, // 870 | 0x00, // 871 | 0xD8, // ## ## 872 | 0x48, // # # 873 | 0x48, // # # 874 | 0x38, // ### 875 | 0x00, // 876 | 0x00, // 877 | 878 | // @688 'v' (5 pixels wide) 879 | 0x00, // 880 | 0x00, // 881 | 0xC8, // ## # 882 | 0x48, // # # 883 | 0x30, // ## 884 | 0x30, // ## 885 | 0x00, // 886 | 0x00, // 887 | 888 | // @696 'w' (5 pixels wide) 889 | 0x00, // 890 | 0x00, // 891 | 0xD8, // ## ## 892 | 0xA8, // # # # 893 | 0xA8, // # # # 894 | 0x50, // # # 895 | 0x00, // 896 | 0x00, // 897 | 898 | // @704 'x' (5 pixels wide) 899 | 0x00, // 900 | 0x00, // 901 | 0x48, // # # 902 | 0x30, // ## 903 | 0x30, // ## 904 | 0x48, // # # 905 | 0x00, // 906 | 0x00, // 907 | 908 | // @712 'y' (5 pixels wide) 909 | 0x00, // 910 | 0x00, // 911 | 0xD8, // ## ## 912 | 0x50, // # # 913 | 0x50, // # # 914 | 0x20, // # 915 | 0x20, // # 916 | 0x60, // ## 917 | 918 | // @720 'z' (5 pixels wide) 919 | 0x00, // 920 | 0x00, // 921 | 0x78, // #### 922 | 0x50, // # # 923 | 0x28, // # # 924 | 0x78, // #### 925 | 0x00, // 926 | 0x00, // 927 | 928 | // @728 '{' (5 pixels wide) 929 | 0x10, // # 930 | 0x20, // # 931 | 0x20, // # 932 | 0x60, // ## 933 | 0x20, // # 934 | 0x20, // # 935 | 0x10, // # 936 | 0x00, // 937 | 938 | // @736 '|' (5 pixels wide) 939 | 0x20, // # 940 | 0x20, // # 941 | 0x20, // # 942 | 0x20, // # 943 | 0x20, // # 944 | 0x20, // # 945 | 0x20, // # 946 | 0x00, // 947 | 948 | // @744 '}' (5 pixels wide) 949 | 0x40, // # 950 | 0x20, // # 951 | 0x20, // # 952 | 0x30, // ## 953 | 0x20, // # 954 | 0x20, // # 955 | 0x40, // # 956 | 0x00, // 957 | 958 | // @752 '~' (5 pixels wide) 959 | 0x00, // 960 | 0x00, // 961 | 0x00, // 962 | 0x28, // # # 963 | 0x50, // # # 964 | 0x00, // 965 | 0x00, // 966 | 0x00, // 967 | }.Select(s => (char)s).ToArray(); 968 | } 969 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Fonts/Font12.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | 3 | namespace EPaperHatCore.GUI.Fonts; 4 | public class Font12 : IFont 5 | { 6 | public uint Width { get; } 7 | 8 | public uint Height { get; } 9 | 10 | public char[] Table { get; } 11 | 12 | public Font12() 13 | { 14 | Width = 7; 15 | Height = 12; 16 | Table = new int[] 17 | { 18 | // @0 ' ' (7 pixels wide) 19 | 0x00, // 20 | 0x00, // 21 | 0x00, // 22 | 0x00, // 23 | 0x00, // 24 | 0x00, // 25 | 0x00, // 26 | 0x00, // 27 | 0x00, // 28 | 0x00, // 29 | 0x00, // 30 | 0x00, // 31 | 32 | // @12 '!' (7 pixels wide) 33 | 0x00, // 34 | 0x10, // # 35 | 0x10, // # 36 | 0x10, // # 37 | 0x10, // # 38 | 0x10, // # 39 | 0x00, // 40 | 0x00, // 41 | 0x10, // # 42 | 0x00, // 43 | 0x00, // 44 | 0x00, // 45 | 46 | // @24 '"' (7 pixels wide) 47 | 0x00, // 48 | 0x6C, // ## ## 49 | 0x48, // # # 50 | 0x48, // # # 51 | 0x00, // 52 | 0x00, // 53 | 0x00, // 54 | 0x00, // 55 | 0x00, // 56 | 0x00, // 57 | 0x00, // 58 | 0x00, // 59 | 60 | // @36 '#' (7 pixels wide) 61 | 0x00, // 62 | 0x14, // # # 63 | 0x14, // # # 64 | 0x28, // # # 65 | 0x7C, // ##### 66 | 0x28, // # # 67 | 0x7C, // ##### 68 | 0x28, // # # 69 | 0x50, // # # 70 | 0x50, // # # 71 | 0x00, // 72 | 0x00, // 73 | 74 | // @48 '$' (7 pixels wide) 75 | 0x00, // 76 | 0x10, // # 77 | 0x38, // ### 78 | 0x40, // # 79 | 0x40, // # 80 | 0x38, // ### 81 | 0x48, // # # 82 | 0x70, // ### 83 | 0x10, // # 84 | 0x10, // # 85 | 0x00, // 86 | 0x00, // 87 | 88 | // @60 '%' (7 pixels wide) 89 | 0x00, // 90 | 0x20, // # 91 | 0x50, // # # 92 | 0x20, // # 93 | 0x0C, // ## 94 | 0x70, // ### 95 | 0x08, // # 96 | 0x14, // # # 97 | 0x08, // # 98 | 0x00, // 99 | 0x00, // 100 | 0x00, // 101 | 102 | // @72 '&' (7 pixels wide) 103 | 0x00, // 104 | 0x00, // 105 | 0x00, // 106 | 0x18, // ## 107 | 0x20, // # 108 | 0x20, // # 109 | 0x54, // # # # 110 | 0x48, // # # 111 | 0x34, // ## # 112 | 0x00, // 113 | 0x00, // 114 | 0x00, // 115 | 116 | // @84 ''' (7 pixels wide) 117 | 0x00, // 118 | 0x10, // # 119 | 0x10, // # 120 | 0x10, // # 121 | 0x10, // # 122 | 0x00, // 123 | 0x00, // 124 | 0x00, // 125 | 0x00, // 126 | 0x00, // 127 | 0x00, // 128 | 0x00, // 129 | 130 | // @96 '(' (7 pixels wide) 131 | 0x00, // 132 | 0x08, // # 133 | 0x08, // # 134 | 0x10, // # 135 | 0x10, // # 136 | 0x10, // # 137 | 0x10, // # 138 | 0x10, // # 139 | 0x10, // # 140 | 0x08, // # 141 | 0x08, // # 142 | 0x00, // 143 | 144 | // @108 ')' (7 pixels wide) 145 | 0x00, // 146 | 0x20, // # 147 | 0x20, // # 148 | 0x10, // # 149 | 0x10, // # 150 | 0x10, // # 151 | 0x10, // # 152 | 0x10, // # 153 | 0x10, // # 154 | 0x20, // # 155 | 0x20, // # 156 | 0x00, // 157 | 158 | // @120 '*' (7 pixels wide) 159 | 0x00, // 160 | 0x10, // # 161 | 0x7C, // ##### 162 | 0x10, // # 163 | 0x28, // # # 164 | 0x28, // # # 165 | 0x00, // 166 | 0x00, // 167 | 0x00, // 168 | 0x00, // 169 | 0x00, // 170 | 0x00, // 171 | 172 | // @132 '+' (7 pixels wide) 173 | 0x00, // 174 | 0x00, // 175 | 0x10, // # 176 | 0x10, // # 177 | 0x10, // # 178 | 0xFE, // ####### 179 | 0x10, // # 180 | 0x10, // # 181 | 0x10, // # 182 | 0x00, // 183 | 0x00, // 184 | 0x00, // 185 | 186 | // @144 ',' (7 pixels wide) 187 | 0x00, // 188 | 0x00, // 189 | 0x00, // 190 | 0x00, // 191 | 0x00, // 192 | 0x00, // 193 | 0x00, // 194 | 0x18, // ## 195 | 0x10, // # 196 | 0x30, // ## 197 | 0x20, // # 198 | 0x00, // 199 | 200 | // @156 '-' (7 pixels wide) 201 | 0x00, // 202 | 0x00, // 203 | 0x00, // 204 | 0x00, // 205 | 0x00, // 206 | 0x7C, // ##### 207 | 0x00, // 208 | 0x00, // 209 | 0x00, // 210 | 0x00, // 211 | 0x00, // 212 | 0x00, // 213 | 214 | // @168 '.' (7 pixels wide) 215 | 0x00, // 216 | 0x00, // 217 | 0x00, // 218 | 0x00, // 219 | 0x00, // 220 | 0x00, // 221 | 0x00, // 222 | 0x30, // ## 223 | 0x30, // ## 224 | 0x00, // 225 | 0x00, // 226 | 0x00, // 227 | 228 | // @180 '/' (7 pixels wide) 229 | 0x00, // 230 | 0x04, // # 231 | 0x04, // # 232 | 0x08, // # 233 | 0x08, // # 234 | 0x10, // # 235 | 0x10, // # 236 | 0x20, // # 237 | 0x20, // # 238 | 0x40, // # 239 | 0x00, // 240 | 0x00, // 241 | 242 | // @192 '0' (7 pixels wide) 243 | 0x00, // 244 | 0x38, // ### 245 | 0x44, // # # 246 | 0x44, // # # 247 | 0x44, // # # 248 | 0x44, // # # 249 | 0x44, // # # 250 | 0x44, // # # 251 | 0x38, // ### 252 | 0x00, // 253 | 0x00, // 254 | 0x00, // 255 | 256 | // @204 '1' (7 pixels wide) 257 | 0x00, // 258 | 0x30, // ## 259 | 0x10, // # 260 | 0x10, // # 261 | 0x10, // # 262 | 0x10, // # 263 | 0x10, // # 264 | 0x10, // # 265 | 0x7C, // ##### 266 | 0x00, // 267 | 0x00, // 268 | 0x00, // 269 | 270 | // @216 '2' (7 pixels wide) 271 | 0x00, // 272 | 0x38, // ### 273 | 0x44, // # # 274 | 0x04, // # 275 | 0x08, // # 276 | 0x10, // # 277 | 0x20, // # 278 | 0x44, // # # 279 | 0x7C, // ##### 280 | 0x00, // 281 | 0x00, // 282 | 0x00, // 283 | 284 | // @228 '3' (7 pixels wide) 285 | 0x00, // 286 | 0x38, // ### 287 | 0x44, // # # 288 | 0x04, // # 289 | 0x18, // ## 290 | 0x04, // # 291 | 0x04, // # 292 | 0x44, // # # 293 | 0x38, // ### 294 | 0x00, // 295 | 0x00, // 296 | 0x00, // 297 | 298 | // @240 '4' (7 pixels wide) 299 | 0x00, // 300 | 0x0C, // ## 301 | 0x14, // # # 302 | 0x14, // # # 303 | 0x24, // # # 304 | 0x44, // # # 305 | 0x7E, // ###### 306 | 0x04, // # 307 | 0x0E, // ### 308 | 0x00, // 309 | 0x00, // 310 | 0x00, // 311 | 312 | // @252 '5' (7 pixels wide) 313 | 0x00, // 314 | 0x3C, // #### 315 | 0x20, // # 316 | 0x20, // # 317 | 0x38, // ### 318 | 0x04, // # 319 | 0x04, // # 320 | 0x44, // # # 321 | 0x38, // ### 322 | 0x00, // 323 | 0x00, // 324 | 0x00, // 325 | 326 | // @264 '6' (7 pixels wide) 327 | 0x00, // 328 | 0x1C, // ### 329 | 0x20, // # 330 | 0x40, // # 331 | 0x78, // #### 332 | 0x44, // # # 333 | 0x44, // # # 334 | 0x44, // # # 335 | 0x38, // ### 336 | 0x00, // 337 | 0x00, // 338 | 0x00, // 339 | 340 | // @276 '7' (7 pixels wide) 341 | 0x00, // 342 | 0x7C, // ##### 343 | 0x44, // # # 344 | 0x04, // # 345 | 0x08, // # 346 | 0x08, // # 347 | 0x08, // # 348 | 0x10, // # 349 | 0x10, // # 350 | 0x00, // 351 | 0x00, // 352 | 0x00, // 353 | 354 | // @288 '8' (7 pixels wide) 355 | 0x00, // 356 | 0x38, // ### 357 | 0x44, // # # 358 | 0x44, // # # 359 | 0x38, // ### 360 | 0x44, // # # 361 | 0x44, // # # 362 | 0x44, // # # 363 | 0x38, // ### 364 | 0x00, // 365 | 0x00, // 366 | 0x00, // 367 | 368 | // @300 '9' (7 pixels wide) 369 | 0x00, // 370 | 0x38, // ### 371 | 0x44, // # # 372 | 0x44, // # # 373 | 0x44, // # # 374 | 0x3C, // #### 375 | 0x04, // # 376 | 0x08, // # 377 | 0x70, // ### 378 | 0x00, // 379 | 0x00, // 380 | 0x00, // 381 | 382 | // @312 ':' (7 pixels wide) 383 | 0x00, // 384 | 0x00, // 385 | 0x00, // 386 | 0x30, // ## 387 | 0x30, // ## 388 | 0x00, // 389 | 0x00, // 390 | 0x30, // ## 391 | 0x30, // ## 392 | 0x00, // 393 | 0x00, // 394 | 0x00, // 395 | 396 | // @324 ';' (7 pixels wide) 397 | 0x00, // 398 | 0x00, // 399 | 0x00, // 400 | 0x18, // ## 401 | 0x18, // ## 402 | 0x00, // 403 | 0x00, // 404 | 0x18, // ## 405 | 0x30, // ## 406 | 0x20, // # 407 | 0x00, // 408 | 0x00, // 409 | 410 | // @336 '<' (7 pixels wide) 411 | 0x00, // 412 | 0x00, // 413 | 0x0C, // ## 414 | 0x10, // # 415 | 0x60, // ## 416 | 0x80, // # 417 | 0x60, // ## 418 | 0x10, // # 419 | 0x0C, // ## 420 | 0x00, // 421 | 0x00, // 422 | 0x00, // 423 | 424 | // @348 '=' (7 pixels wide) 425 | 0x00, // 426 | 0x00, // 427 | 0x00, // 428 | 0x00, // 429 | 0x7C, // ##### 430 | 0x00, // 431 | 0x7C, // ##### 432 | 0x00, // 433 | 0x00, // 434 | 0x00, // 435 | 0x00, // 436 | 0x00, // 437 | 438 | // @360 '>' (7 pixels wide) 439 | 0x00, // 440 | 0x00, // 441 | 0xC0, // ## 442 | 0x20, // # 443 | 0x18, // ## 444 | 0x04, // # 445 | 0x18, // ## 446 | 0x20, // # 447 | 0xC0, // ## 448 | 0x00, // 449 | 0x00, // 450 | 0x00, // 451 | 452 | // @372 '?' (7 pixels wide) 453 | 0x00, // 454 | 0x00, // 455 | 0x18, // ## 456 | 0x24, // # # 457 | 0x04, // # 458 | 0x08, // # 459 | 0x10, // # 460 | 0x00, // 461 | 0x30, // ## 462 | 0x00, // 463 | 0x00, // 464 | 0x00, // 465 | 466 | // @384 '@' (7 pixels wide) 467 | 0x38, // ### 468 | 0x44, // # # 469 | 0x44, // # # 470 | 0x4C, // # ## 471 | 0x54, // # # # 472 | 0x54, // # # # 473 | 0x4C, // # ## 474 | 0x40, // # 475 | 0x44, // # # 476 | 0x38, // ### 477 | 0x00, // 478 | 0x00, // 479 | 480 | // @396 'A' (7 pixels wide) 481 | 0x00, // 482 | 0x30, // ## 483 | 0x10, // # 484 | 0x28, // # # 485 | 0x28, // # # 486 | 0x28, // # # 487 | 0x7C, // ##### 488 | 0x44, // # # 489 | 0xEE, // ### ### 490 | 0x00, // 491 | 0x00, // 492 | 0x00, // 493 | 494 | // @408 'B' (7 pixels wide) 495 | 0x00, // 496 | 0xF8, // ##### 497 | 0x44, // # # 498 | 0x44, // # # 499 | 0x78, // #### 500 | 0x44, // # # 501 | 0x44, // # # 502 | 0x44, // # # 503 | 0xF8, // ##### 504 | 0x00, // 505 | 0x00, // 506 | 0x00, // 507 | 508 | // @420 'C' (7 pixels wide) 509 | 0x00, // 510 | 0x3C, // #### 511 | 0x44, // # # 512 | 0x40, // # 513 | 0x40, // # 514 | 0x40, // # 515 | 0x40, // # 516 | 0x44, // # # 517 | 0x38, // ### 518 | 0x00, // 519 | 0x00, // 520 | 0x00, // 521 | 522 | // @432 'D' (7 pixels wide) 523 | 0x00, // 524 | 0xF0, // #### 525 | 0x48, // # # 526 | 0x44, // # # 527 | 0x44, // # # 528 | 0x44, // # # 529 | 0x44, // # # 530 | 0x48, // # # 531 | 0xF0, // #### 532 | 0x00, // 533 | 0x00, // 534 | 0x00, // 535 | 536 | // @444 'E' (7 pixels wide) 537 | 0x00, // 538 | 0xFC, // ###### 539 | 0x44, // # # 540 | 0x50, // # # 541 | 0x70, // ### 542 | 0x50, // # # 543 | 0x40, // # 544 | 0x44, // # # 545 | 0xFC, // ###### 546 | 0x00, // 547 | 0x00, // 548 | 0x00, // 549 | 550 | // @456 'F' (7 pixels wide) 551 | 0x00, // 552 | 0x7E, // ###### 553 | 0x22, // # # 554 | 0x28, // # # 555 | 0x38, // ### 556 | 0x28, // # # 557 | 0x20, // # 558 | 0x20, // # 559 | 0x70, // ### 560 | 0x00, // 561 | 0x00, // 562 | 0x00, // 563 | 564 | // @468 'G' (7 pixels wide) 565 | 0x00, // 566 | 0x3C, // #### 567 | 0x44, // # # 568 | 0x40, // # 569 | 0x40, // # 570 | 0x4E, // # ### 571 | 0x44, // # # 572 | 0x44, // # # 573 | 0x38, // ### 574 | 0x00, // 575 | 0x00, // 576 | 0x00, // 577 | 578 | // @480 'H' (7 pixels wide) 579 | 0x00, // 580 | 0xEE, // ### ### 581 | 0x44, // # # 582 | 0x44, // # # 583 | 0x7C, // ##### 584 | 0x44, // # # 585 | 0x44, // # # 586 | 0x44, // # # 587 | 0xEE, // ### ### 588 | 0x00, // 589 | 0x00, // 590 | 0x00, // 591 | 592 | // @492 'I' (7 pixels wide) 593 | 0x00, // 594 | 0x7C, // ##### 595 | 0x10, // # 596 | 0x10, // # 597 | 0x10, // # 598 | 0x10, // # 599 | 0x10, // # 600 | 0x10, // # 601 | 0x7C, // ##### 602 | 0x00, // 603 | 0x00, // 604 | 0x00, // 605 | 606 | // @504 'J' (7 pixels wide) 607 | 0x00, // 608 | 0x3C, // #### 609 | 0x08, // # 610 | 0x08, // # 611 | 0x08, // # 612 | 0x48, // # # 613 | 0x48, // # # 614 | 0x48, // # # 615 | 0x30, // ## 616 | 0x00, // 617 | 0x00, // 618 | 0x00, // 619 | 620 | // @516 'K' (7 pixels wide) 621 | 0x00, // 622 | 0xEE, // ### ### 623 | 0x44, // # # 624 | 0x48, // # # 625 | 0x50, // # # 626 | 0x70, // ### 627 | 0x48, // # # 628 | 0x44, // # # 629 | 0xE6, // ### ## 630 | 0x00, // 631 | 0x00, // 632 | 0x00, // 633 | 634 | // @528 'L' (7 pixels wide) 635 | 0x00, // 636 | 0x70, // ### 637 | 0x20, // # 638 | 0x20, // # 639 | 0x20, // # 640 | 0x20, // # 641 | 0x24, // # # 642 | 0x24, // # # 643 | 0x7C, // ##### 644 | 0x00, // 645 | 0x00, // 646 | 0x00, // 647 | 648 | // @540 'M' (7 pixels wide) 649 | 0x00, // 650 | 0xEE, // ### ### 651 | 0x6C, // ## ## 652 | 0x6C, // ## ## 653 | 0x54, // # # # 654 | 0x54, // # # # 655 | 0x44, // # # 656 | 0x44, // # # 657 | 0xEE, // ### ### 658 | 0x00, // 659 | 0x00, // 660 | 0x00, // 661 | 662 | // @552 'N' (7 pixels wide) 663 | 0x00, // 664 | 0xEE, // ### ### 665 | 0x64, // ## # 666 | 0x64, // ## # 667 | 0x54, // # # # 668 | 0x54, // # # # 669 | 0x54, // # # # 670 | 0x4C, // # ## 671 | 0xEC, // ### ## 672 | 0x00, // 673 | 0x00, // 674 | 0x00, // 675 | 676 | // @564 'O' (7 pixels wide) 677 | 0x00, // 678 | 0x38, // ### 679 | 0x44, // # # 680 | 0x44, // # # 681 | 0x44, // # # 682 | 0x44, // # # 683 | 0x44, // # # 684 | 0x44, // # # 685 | 0x38, // ### 686 | 0x00, // 687 | 0x00, // 688 | 0x00, // 689 | 690 | // @576 'P' (7 pixels wide) 691 | 0x00, // 692 | 0x78, // #### 693 | 0x24, // # # 694 | 0x24, // # # 695 | 0x24, // # # 696 | 0x38, // ### 697 | 0x20, // # 698 | 0x20, // # 699 | 0x70, // ### 700 | 0x00, // 701 | 0x00, // 702 | 0x00, // 703 | 704 | // @588 'Q' (7 pixels wide) 705 | 0x00, // 706 | 0x38, // ### 707 | 0x44, // # # 708 | 0x44, // # # 709 | 0x44, // # # 710 | 0x44, // # # 711 | 0x44, // # # 712 | 0x44, // # # 713 | 0x38, // ### 714 | 0x1C, // ### 715 | 0x00, // 716 | 0x00, // 717 | 718 | // @600 'R' (7 pixels wide) 719 | 0x00, // 720 | 0xF8, // ##### 721 | 0x44, // # # 722 | 0x44, // # # 723 | 0x44, // # # 724 | 0x78, // #### 725 | 0x48, // # # 726 | 0x44, // # # 727 | 0xE2, // ### # 728 | 0x00, // 729 | 0x00, // 730 | 0x00, // 731 | 732 | // @612 'S' (7 pixels wide) 733 | 0x00, // 734 | 0x34, // ## # 735 | 0x4C, // # ## 736 | 0x40, // # 737 | 0x38, // ### 738 | 0x04, // # 739 | 0x04, // # 740 | 0x64, // ## # 741 | 0x58, // # ## 742 | 0x00, // 743 | 0x00, // 744 | 0x00, // 745 | 746 | // @624 'T' (7 pixels wide) 747 | 0x00, // 748 | 0xFE, // ####### 749 | 0x92, // # # # 750 | 0x10, // # 751 | 0x10, // # 752 | 0x10, // # 753 | 0x10, // # 754 | 0x10, // # 755 | 0x38, // ### 756 | 0x00, // 757 | 0x00, // 758 | 0x00, // 759 | 760 | // @636 'U' (7 pixels wide) 761 | 0x00, // 762 | 0xEE, // ### ### 763 | 0x44, // # # 764 | 0x44, // # # 765 | 0x44, // # # 766 | 0x44, // # # 767 | 0x44, // # # 768 | 0x44, // # # 769 | 0x38, // ### 770 | 0x00, // 771 | 0x00, // 772 | 0x00, // 773 | 774 | // @648 'V' (7 pixels wide) 775 | 0x00, // 776 | 0xEE, // ### ### 777 | 0x44, // # # 778 | 0x44, // # # 779 | 0x28, // # # 780 | 0x28, // # # 781 | 0x28, // # # 782 | 0x10, // # 783 | 0x10, // # 784 | 0x00, // 785 | 0x00, // 786 | 0x00, // 787 | 788 | // @660 'W' (7 pixels wide) 789 | 0x00, // 790 | 0xEE, // ### ### 791 | 0x44, // # # 792 | 0x44, // # # 793 | 0x54, // # # # 794 | 0x54, // # # # 795 | 0x54, // # # # 796 | 0x54, // # # # 797 | 0x28, // # # 798 | 0x00, // 799 | 0x00, // 800 | 0x00, // 801 | 802 | // @672 'X' (7 pixels wide) 803 | 0x00, // 804 | 0xC6, // ## ## 805 | 0x44, // # # 806 | 0x28, // # # 807 | 0x10, // # 808 | 0x10, // # 809 | 0x28, // # # 810 | 0x44, // # # 811 | 0xC6, // ## ## 812 | 0x00, // 813 | 0x00, // 814 | 0x00, // 815 | 816 | // @684 'Y' (7 pixels wide) 817 | 0x00, // 818 | 0xEE, // ### ### 819 | 0x44, // # # 820 | 0x28, // # # 821 | 0x28, // # # 822 | 0x10, // # 823 | 0x10, // # 824 | 0x10, // # 825 | 0x38, // ### 826 | 0x00, // 827 | 0x00, // 828 | 0x00, // 829 | 830 | // @696 'Z' (7 pixels wide) 831 | 0x00, // 832 | 0x7C, // ##### 833 | 0x44, // # # 834 | 0x08, // # 835 | 0x10, // # 836 | 0x10, // # 837 | 0x20, // # 838 | 0x44, // # # 839 | 0x7C, // ##### 840 | 0x00, // 841 | 0x00, // 842 | 0x00, // 843 | 844 | // @708 '[' (7 pixels wide) 845 | 0x00, // 846 | 0x38, // ### 847 | 0x20, // # 848 | 0x20, // # 849 | 0x20, // # 850 | 0x20, // # 851 | 0x20, // # 852 | 0x20, // # 853 | 0x20, // # 854 | 0x20, // # 855 | 0x38, // ### 856 | 0x00, // 857 | 858 | // @720 '\' (7 pixels wide) 859 | 0x00, // 860 | 0x40, // # 861 | 0x20, // # 862 | 0x20, // # 863 | 0x20, // # 864 | 0x10, // # 865 | 0x10, // # 866 | 0x08, // # 867 | 0x08, // # 868 | 0x08, // # 869 | 0x00, // 870 | 0x00, // 871 | 872 | // @732 ']' (7 pixels wide) 873 | 0x00, // 874 | 0x38, // ### 875 | 0x08, // # 876 | 0x08, // # 877 | 0x08, // # 878 | 0x08, // # 879 | 0x08, // # 880 | 0x08, // # 881 | 0x08, // # 882 | 0x08, // # 883 | 0x38, // ### 884 | 0x00, // 885 | 886 | // @744 '^' (7 pixels wide) 887 | 0x00, // 888 | 0x10, // # 889 | 0x10, // # 890 | 0x28, // # # 891 | 0x44, // # # 892 | 0x00, // 893 | 0x00, // 894 | 0x00, // 895 | 0x00, // 896 | 0x00, // 897 | 0x00, // 898 | 0x00, // 899 | 900 | // @756 '_' (7 pixels wide) 901 | 0x00, // 902 | 0x00, // 903 | 0x00, // 904 | 0x00, // 905 | 0x00, // 906 | 0x00, // 907 | 0x00, // 908 | 0x00, // 909 | 0x00, // 910 | 0x00, // 911 | 0x00, // 912 | 0xFE, // ####### 913 | 914 | // @768 '`' (7 pixels wide) 915 | 0x00, // 916 | 0x10, // # 917 | 0x08, // # 918 | 0x00, // 919 | 0x00, // 920 | 0x00, // 921 | 0x00, // 922 | 0x00, // 923 | 0x00, // 924 | 0x00, // 925 | 0x00, // 926 | 0x00, // 927 | 928 | // @780 'a' (7 pixels wide) 929 | 0x00, // 930 | 0x00, // 931 | 0x00, // 932 | 0x38, // ### 933 | 0x44, // # # 934 | 0x3C, // #### 935 | 0x44, // # # 936 | 0x44, // # # 937 | 0x3E, // ##### 938 | 0x00, // 939 | 0x00, // 940 | 0x00, // 941 | 942 | // @792 'b' (7 pixels wide) 943 | 0x00, // 944 | 0xC0, // ## 945 | 0x40, // # 946 | 0x58, // # ## 947 | 0x64, // ## # 948 | 0x44, // # # 949 | 0x44, // # # 950 | 0x44, // # # 951 | 0xF8, // ##### 952 | 0x00, // 953 | 0x00, // 954 | 0x00, // 955 | 956 | // @804 'c' (7 pixels wide) 957 | 0x00, // 958 | 0x00, // 959 | 0x00, // 960 | 0x3C, // #### 961 | 0x44, // # # 962 | 0x40, // # 963 | 0x40, // # 964 | 0x44, // # # 965 | 0x38, // ### 966 | 0x00, // 967 | 0x00, // 968 | 0x00, // 969 | 970 | // @816 'd' (7 pixels wide) 971 | 0x00, // 972 | 0x0C, // ## 973 | 0x04, // # 974 | 0x34, // ## # 975 | 0x4C, // # ## 976 | 0x44, // # # 977 | 0x44, // # # 978 | 0x44, // # # 979 | 0x3E, // ##### 980 | 0x00, // 981 | 0x00, // 982 | 0x00, // 983 | 984 | // @828 'e' (7 pixels wide) 985 | 0x00, // 986 | 0x00, // 987 | 0x00, // 988 | 0x38, // ### 989 | 0x44, // # # 990 | 0x7C, // ##### 991 | 0x40, // # 992 | 0x40, // # 993 | 0x3C, // #### 994 | 0x00, // 995 | 0x00, // 996 | 0x00, // 997 | 998 | // @840 'f' (7 pixels wide) 999 | 0x00, // 1000 | 0x1C, // ### 1001 | 0x20, // # 1002 | 0x7C, // ##### 1003 | 0x20, // # 1004 | 0x20, // # 1005 | 0x20, // # 1006 | 0x20, // # 1007 | 0x7C, // ##### 1008 | 0x00, // 1009 | 0x00, // 1010 | 0x00, // 1011 | 1012 | // @852 'g' (7 pixels wide) 1013 | 0x00, // 1014 | 0x00, // 1015 | 0x00, // 1016 | 0x36, // ## ## 1017 | 0x4C, // # ## 1018 | 0x44, // # # 1019 | 0x44, // # # 1020 | 0x44, // # # 1021 | 0x3C, // #### 1022 | 0x04, // # 1023 | 0x38, // ### 1024 | 0x00, // 1025 | 1026 | // @864 'h' (7 pixels wide) 1027 | 0x00, // 1028 | 0xC0, // ## 1029 | 0x40, // # 1030 | 0x58, // # ## 1031 | 0x64, // ## # 1032 | 0x44, // # # 1033 | 0x44, // # # 1034 | 0x44, // # # 1035 | 0xEE, // ### ### 1036 | 0x00, // 1037 | 0x00, // 1038 | 0x00, // 1039 | 1040 | // @876 'i' (7 pixels wide) 1041 | 0x00, // 1042 | 0x10, // # 1043 | 0x00, // 1044 | 0x70, // ### 1045 | 0x10, // # 1046 | 0x10, // # 1047 | 0x10, // # 1048 | 0x10, // # 1049 | 0x7C, // ##### 1050 | 0x00, // 1051 | 0x00, // 1052 | 0x00, // 1053 | 1054 | // @888 'j' (7 pixels wide) 1055 | 0x00, // 1056 | 0x10, // # 1057 | 0x00, // 1058 | 0x78, // #### 1059 | 0x08, // # 1060 | 0x08, // # 1061 | 0x08, // # 1062 | 0x08, // # 1063 | 0x08, // # 1064 | 0x08, // # 1065 | 0x70, // ### 1066 | 0x00, // 1067 | 1068 | // @900 'k' (7 pixels wide) 1069 | 0x00, // 1070 | 0xC0, // ## 1071 | 0x40, // # 1072 | 0x5C, // # ### 1073 | 0x48, // # # 1074 | 0x70, // ### 1075 | 0x50, // # # 1076 | 0x48, // # # 1077 | 0xDC, // ## ### 1078 | 0x00, // 1079 | 0x00, // 1080 | 0x00, // 1081 | 1082 | // @912 'l' (7 pixels wide) 1083 | 0x00, // 1084 | 0x30, // ## 1085 | 0x10, // # 1086 | 0x10, // # 1087 | 0x10, // # 1088 | 0x10, // # 1089 | 0x10, // # 1090 | 0x10, // # 1091 | 0x7C, // ##### 1092 | 0x00, // 1093 | 0x00, // 1094 | 0x00, // 1095 | 1096 | // @924 'm' (7 pixels wide) 1097 | 0x00, // 1098 | 0x00, // 1099 | 0x00, // 1100 | 0xE8, // ### # 1101 | 0x54, // # # # 1102 | 0x54, // # # # 1103 | 0x54, // # # # 1104 | 0x54, // # # # 1105 | 0xFE, // ####### 1106 | 0x00, // 1107 | 0x00, // 1108 | 0x00, // 1109 | 1110 | // @936 'n' (7 pixels wide) 1111 | 0x00, // 1112 | 0x00, // 1113 | 0x00, // 1114 | 0xD8, // ## ## 1115 | 0x64, // ## # 1116 | 0x44, // # # 1117 | 0x44, // # # 1118 | 0x44, // # # 1119 | 0xEE, // ### ### 1120 | 0x00, // 1121 | 0x00, // 1122 | 0x00, // 1123 | 1124 | // @948 'o' (7 pixels wide) 1125 | 0x00, // 1126 | 0x00, // 1127 | 0x00, // 1128 | 0x38, // ### 1129 | 0x44, // # # 1130 | 0x44, // # # 1131 | 0x44, // # # 1132 | 0x44, // # # 1133 | 0x38, // ### 1134 | 0x00, // 1135 | 0x00, // 1136 | 0x00, // 1137 | 1138 | // @960 'p' (7 pixels wide) 1139 | 0x00, // 1140 | 0x00, // 1141 | 0x00, // 1142 | 0xD8, // ## ## 1143 | 0x64, // ## # 1144 | 0x44, // # # 1145 | 0x44, // # # 1146 | 0x44, // # # 1147 | 0x78, // #### 1148 | 0x40, // # 1149 | 0xE0, // ### 1150 | 0x00, // 1151 | 1152 | // @972 'q' (7 pixels wide) 1153 | 0x00, // 1154 | 0x00, // 1155 | 0x00, // 1156 | 0x36, // ## ## 1157 | 0x4C, // # ## 1158 | 0x44, // # # 1159 | 0x44, // # # 1160 | 0x44, // # # 1161 | 0x3C, // #### 1162 | 0x04, // # 1163 | 0x0E, // ### 1164 | 0x00, // 1165 | 1166 | // @984 'r' (7 pixels wide) 1167 | 0x00, // 1168 | 0x00, // 1169 | 0x00, // 1170 | 0x6C, // ## ## 1171 | 0x30, // ## 1172 | 0x20, // # 1173 | 0x20, // # 1174 | 0x20, // # 1175 | 0x7C, // ##### 1176 | 0x00, // 1177 | 0x00, // 1178 | 0x00, // 1179 | 1180 | // @996 's' (7 pixels wide) 1181 | 0x00, // 1182 | 0x00, // 1183 | 0x00, // 1184 | 0x3C, // #### 1185 | 0x44, // # # 1186 | 0x38, // ### 1187 | 0x04, // # 1188 | 0x44, // # # 1189 | 0x78, // #### 1190 | 0x00, // 1191 | 0x00, // 1192 | 0x00, // 1193 | 1194 | // @1008 't' (7 pixels wide) 1195 | 0x00, // 1196 | 0x00, // 1197 | 0x20, // # 1198 | 0x7C, // ##### 1199 | 0x20, // # 1200 | 0x20, // # 1201 | 0x20, // # 1202 | 0x22, // # # 1203 | 0x1C, // ### 1204 | 0x00, // 1205 | 0x00, // 1206 | 0x00, // 1207 | 1208 | // @1020 'u' (7 pixels wide) 1209 | 0x00, // 1210 | 0x00, // 1211 | 0x00, // 1212 | 0xCC, // ## ## 1213 | 0x44, // # # 1214 | 0x44, // # # 1215 | 0x44, // # # 1216 | 0x4C, // # ## 1217 | 0x36, // ## ## 1218 | 0x00, // 1219 | 0x00, // 1220 | 0x00, // 1221 | 1222 | // @1032 'v' (7 pixels wide) 1223 | 0x00, // 1224 | 0x00, // 1225 | 0x00, // 1226 | 0xEE, // ### ### 1227 | 0x44, // # # 1228 | 0x44, // # # 1229 | 0x28, // # # 1230 | 0x28, // # # 1231 | 0x10, // # 1232 | 0x00, // 1233 | 0x00, // 1234 | 0x00, // 1235 | 1236 | // @1044 'w' (7 pixels wide) 1237 | 0x00, // 1238 | 0x00, // 1239 | 0x00, // 1240 | 0xEE, // ### ### 1241 | 0x44, // # # 1242 | 0x54, // # # # 1243 | 0x54, // # # # 1244 | 0x54, // # # # 1245 | 0x28, // # # 1246 | 0x00, // 1247 | 0x00, // 1248 | 0x00, // 1249 | 1250 | // @1056 'x' (7 pixels wide) 1251 | 0x00, // 1252 | 0x00, // 1253 | 0x00, // 1254 | 0xCC, // ## ## 1255 | 0x48, // # # 1256 | 0x30, // ## 1257 | 0x30, // ## 1258 | 0x48, // # # 1259 | 0xCC, // ## ## 1260 | 0x00, // 1261 | 0x00, // 1262 | 0x00, // 1263 | 1264 | // @1068 'y' (7 pixels wide) 1265 | 0x00, // 1266 | 0x00, // 1267 | 0x00, // 1268 | 0xEE, // ### ### 1269 | 0x44, // # # 1270 | 0x24, // # # 1271 | 0x28, // # # 1272 | 0x18, // ## 1273 | 0x10, // # 1274 | 0x10, // # 1275 | 0x78, // #### 1276 | 0x00, // 1277 | 1278 | // @1080 'z' (7 pixels wide) 1279 | 0x00, // 1280 | 0x00, // 1281 | 0x00, // 1282 | 0x7C, // ##### 1283 | 0x48, // # # 1284 | 0x10, // # 1285 | 0x20, // # 1286 | 0x44, // # # 1287 | 0x7C, // ##### 1288 | 0x00, // 1289 | 0x00, // 1290 | 0x00, // 1291 | 1292 | // @1092 '{' (7 pixels wide) 1293 | 0x00, // 1294 | 0x08, // # 1295 | 0x10, // # 1296 | 0x10, // # 1297 | 0x10, // # 1298 | 0x10, // # 1299 | 0x20, // # 1300 | 0x10, // # 1301 | 0x10, // # 1302 | 0x10, // # 1303 | 0x08, // # 1304 | 0x00, // 1305 | 1306 | // @1104 '|' (7 pixels wide) 1307 | 0x00, // 1308 | 0x10, // # 1309 | 0x10, // # 1310 | 0x10, // # 1311 | 0x10, // # 1312 | 0x10, // # 1313 | 0x10, // # 1314 | 0x10, // # 1315 | 0x10, // # 1316 | 0x10, // # 1317 | 0x00, // 1318 | 0x00, // 1319 | 1320 | // @1116 '}' (7 pixels wide) 1321 | 0x00, // 1322 | 0x20, // # 1323 | 0x10, // # 1324 | 0x10, // # 1325 | 0x10, // # 1326 | 0x10, // # 1327 | 0x08, // # 1328 | 0x10, // # 1329 | 0x10, // # 1330 | 0x10, // # 1331 | 0x20, // # 1332 | 0x00, // 1333 | 1334 | // @1128 '~' (7 pixels wide) 1335 | 0x00, // 1336 | 0x00, // 1337 | 0x00, // 1338 | 0x00, // 1339 | 0x00, // 1340 | 0x24, // # # 1341 | 0x58, // # ## 1342 | 0x00, // 1343 | 0x00, // 1344 | 0x00, // 1345 | 0x00, // 1346 | 0x00, // 1347 | }.Select(s => (char)s).ToArray(); 1348 | } 1349 | } -------------------------------------------------------------------------------- /src/EPaperHatCore/GUI/Fonts/Font16.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | 3 | namespace EPaperHatCore.GUI.Fonts; 4 | public class Font16 : IFont 5 | { 6 | public uint Width { get; } 7 | 8 | public uint Height { get; } 9 | 10 | public char[] Table { get; } 11 | 12 | public Font16() 13 | { 14 | Width = 11; 15 | Height = 16; 16 | Table = new int[] 17 | { 18 | // @0 ' ' (11 pixels wide) 19 | 0x00, 0x00, // 20 | 0x00, 0x00, // 21 | 0x00, 0x00, // 22 | 0x00, 0x00, // 23 | 0x00, 0x00, // 24 | 0x00, 0x00, // 25 | 0x00, 0x00, // 26 | 0x00, 0x00, // 27 | 0x00, 0x00, // 28 | 0x00, 0x00, // 29 | 0x00, 0x00, // 30 | 0x00, 0x00, // 31 | 0x00, 0x00, // 32 | 0x00, 0x00, // 33 | 0x00, 0x00, // 34 | 0x00, 0x00, // 35 | 36 | // @32 '!' (11 pixels wide) 37 | 0x00, 0x00, // 38 | 0x0C, 0x00, // ## 39 | 0x0C, 0x00, // ## 40 | 0x0C, 0x00, // ## 41 | 0x0C, 0x00, // ## 42 | 0x0C, 0x00, // ## 43 | 0x0C, 0x00, // ## 44 | 0x0C, 0x00, // ## 45 | 0x0C, 0x00, // ## 46 | 0x00, 0x00, // 47 | 0x0C, 0x00, // ## 48 | 0x00, 0x00, // 49 | 0x00, 0x00, // 50 | 0x00, 0x00, // 51 | 0x00, 0x00, // 52 | 0x00, 0x00, // 53 | 54 | // @64 '"' (11 pixels wide) 55 | 0x00, 0x00, // 56 | 0x00, 0x00, // 57 | 0x1D, 0xC0, // ### ### 58 | 0x1D, 0xC0, // ### ### 59 | 0x08, 0x80, // # # 60 | 0x08, 0x80, // # # 61 | 0x08, 0x80, // # # 62 | 0x00, 0x00, // 63 | 0x00, 0x00, // 64 | 0x00, 0x00, // 65 | 0x00, 0x00, // 66 | 0x00, 0x00, // 67 | 0x00, 0x00, // 68 | 0x00, 0x00, // 69 | 0x00, 0x00, // 70 | 0x00, 0x00, // 71 | 72 | // @96 '#' (11 pixels wide) 73 | 0x00, 0x00, // 74 | 0x0D, 0x80, // ## ## 75 | 0x0D, 0x80, // ## ## 76 | 0x0D, 0x80, // ## ## 77 | 0x0D, 0x80, // ## ## 78 | 0x3F, 0xC0, // ######## 79 | 0x1B, 0x00, // ## ## 80 | 0x3F, 0xC0, // ######## 81 | 0x1B, 0x00, // ## ## 82 | 0x1B, 0x00, // ## ## 83 | 0x1B, 0x00, // ## ## 84 | 0x1B, 0x00, // ## ## 85 | 0x00, 0x00, // 86 | 0x00, 0x00, // 87 | 0x00, 0x00, // 88 | 0x00, 0x00, // 89 | 90 | // @128 '$' (11 pixels wide) 91 | 0x04, 0x00, // # 92 | 0x1F, 0x80, // ###### 93 | 0x31, 0x80, // ## ## 94 | 0x31, 0x80, // ## ## 95 | 0x38, 0x00, // ### 96 | 0x1E, 0x00, // #### 97 | 0x0F, 0x00, // #### 98 | 0x03, 0x80, // ### 99 | 0x31, 0x80, // ## ## 100 | 0x31, 0x80, // ## ## 101 | 0x3F, 0x00, // ###### 102 | 0x04, 0x00, // # 103 | 0x04, 0x00, // # 104 | 0x00, 0x00, // 105 | 0x00, 0x00, // 106 | 0x00, 0x00, // 107 | 108 | // @160 '%' (11 pixels wide) 109 | 0x00, 0x00, // 110 | 0x18, 0x00, // ## 111 | 0x24, 0x00, // # # 112 | 0x24, 0x00, // # # 113 | 0x18, 0xC0, // ## ## 114 | 0x07, 0x80, // #### 115 | 0x1E, 0x00, // #### 116 | 0x31, 0x80, // ## ## 117 | 0x02, 0x40, // # # 118 | 0x02, 0x40, // # # 119 | 0x01, 0x80, // ## 120 | 0x00, 0x00, // 121 | 0x00, 0x00, // 122 | 0x00, 0x00, // 123 | 0x00, 0x00, // 124 | 0x00, 0x00, // 125 | 126 | // @192 '&' (11 pixels wide) 127 | 0x00, 0x00, // 128 | 0x00, 0x00, // 129 | 0x0F, 0x00, // #### 130 | 0x18, 0x00, // ## 131 | 0x18, 0x00, // ## 132 | 0x18, 0x00, // ## 133 | 0x0C, 0x00, // ## 134 | 0x1D, 0x80, // ### ## 135 | 0x37, 0x00, // ## ### 136 | 0x33, 0x00, // ## ## 137 | 0x1D, 0x80, // ### ## 138 | 0x00, 0x00, // 139 | 0x00, 0x00, // 140 | 0x00, 0x00, // 141 | 0x00, 0x00, // 142 | 0x00, 0x00, // 143 | 144 | // @224 ''' (11 pixels wide) 145 | 0x00, 0x00, // 146 | 0x00, 0x00, // 147 | 0x07, 0x00, // ### 148 | 0x07, 0x00, // ### 149 | 0x02, 0x00, // # 150 | 0x02, 0x00, // # 151 | 0x02, 0x00, // # 152 | 0x00, 0x00, // 153 | 0x00, 0x00, // 154 | 0x00, 0x00, // 155 | 0x00, 0x00, // 156 | 0x00, 0x00, // 157 | 0x00, 0x00, // 158 | 0x00, 0x00, // 159 | 0x00, 0x00, // 160 | 0x00, 0x00, // 161 | 162 | // @256 '(' (11 pixels wide) 163 | 0x00, 0x00, // 164 | 0x03, 0x00, // ## 165 | 0x03, 0x00, // ## 166 | 0x06, 0x00, // ## 167 | 0x0E, 0x00, // ### 168 | 0x0C, 0x00, // ## 169 | 0x0C, 0x00, // ## 170 | 0x0C, 0x00, // ## 171 | 0x0C, 0x00, // ## 172 | 0x0E, 0x00, // ### 173 | 0x06, 0x00, // ## 174 | 0x03, 0x00, // ## 175 | 0x03, 0x00, // ## 176 | 0x00, 0x00, // 177 | 0x00, 0x00, // 178 | 0x00, 0x00, // 179 | 180 | // @288 ')' (11 pixels wide) 181 | 0x00, 0x00, // 182 | 0x18, 0x00, // ## 183 | 0x18, 0x00, // ## 184 | 0x0C, 0x00, // ## 185 | 0x06, 0x00, // ## 186 | 0x06, 0x00, // ## 187 | 0x06, 0x00, // ## 188 | 0x06, 0x00, // ## 189 | 0x06, 0x00, // ## 190 | 0x06, 0x00, // ## 191 | 0x0C, 0x00, // ## 192 | 0x1C, 0x00, // ### 193 | 0x18, 0x00, // ## 194 | 0x00, 0x00, // 195 | 0x00, 0x00, // 196 | 0x00, 0x00, // 197 | 198 | // @320 '*' (11 pixels wide) 199 | 0x00, 0x00, // 200 | 0x06, 0x00, // ## 201 | 0x06, 0x00, // ## 202 | 0x3F, 0xC0, // ######## 203 | 0x3F, 0xC0, // ######## 204 | 0x0F, 0x00, // #### 205 | 0x1F, 0x80, // ###### 206 | 0x19, 0x80, // ## ## 207 | 0x00, 0x00, // 208 | 0x00, 0x00, // 209 | 0x00, 0x00, // 210 | 0x00, 0x00, // 211 | 0x00, 0x00, // 212 | 0x00, 0x00, // 213 | 0x00, 0x00, // 214 | 0x00, 0x00, // 215 | 216 | // @352 '+' (11 pixels wide) 217 | 0x00, 0x00, // 218 | 0x00, 0x00, // 219 | 0x00, 0x00, // 220 | 0x04, 0x00, // # 221 | 0x04, 0x00, // # 222 | 0x04, 0x00, // # 223 | 0x3F, 0x80, // ####### 224 | 0x04, 0x00, // # 225 | 0x04, 0x00, // # 226 | 0x04, 0x00, // # 227 | 0x00, 0x00, // 228 | 0x00, 0x00, // 229 | 0x00, 0x00, // 230 | 0x00, 0x00, // 231 | 0x00, 0x00, // 232 | 0x00, 0x00, // 233 | 234 | // @384 ',' (11 pixels wide) 235 | 0x00, 0x00, // 236 | 0x00, 0x00, // 237 | 0x00, 0x00, // 238 | 0x00, 0x00, // 239 | 0x00, 0x00, // 240 | 0x00, 0x00, // 241 | 0x00, 0x00, // 242 | 0x00, 0x00, // 243 | 0x00, 0x00, // 244 | 0x06, 0x00, // ## 245 | 0x04, 0x00, // # 246 | 0x0C, 0x00, // ## 247 | 0x08, 0x00, // # 248 | 0x08, 0x00, // # 249 | 0x00, 0x00, // 250 | 0x00, 0x00, // 251 | 252 | // @416 '-' (11 pixels wide) 253 | 0x00, 0x00, // 254 | 0x00, 0x00, // 255 | 0x00, 0x00, // 256 | 0x00, 0x00, // 257 | 0x00, 0x00, // 258 | 0x00, 0x00, // 259 | 0x3F, 0x80, // ####### 260 | 0x00, 0x00, // 261 | 0x00, 0x00, // 262 | 0x00, 0x00, // 263 | 0x00, 0x00, // 264 | 0x00, 0x00, // 265 | 0x00, 0x00, // 266 | 0x00, 0x00, // 267 | 0x00, 0x00, // 268 | 0x00, 0x00, // 269 | 270 | // @448 '.' (11 pixels wide) 271 | 0x00, 0x00, // 272 | 0x00, 0x00, // 273 | 0x00, 0x00, // 274 | 0x00, 0x00, // 275 | 0x00, 0x00, // 276 | 0x00, 0x00, // 277 | 0x00, 0x00, // 278 | 0x00, 0x00, // 279 | 0x00, 0x00, // 280 | 0x0C, 0x00, // ## 281 | 0x0C, 0x00, // ## 282 | 0x00, 0x00, // 283 | 0x00, 0x00, // 284 | 0x00, 0x00, // 285 | 0x00, 0x00, // 286 | 0x00, 0x00, // 287 | 288 | // @480 '/' (11 pixels wide) 289 | 0x00, 0xC0, // ## 290 | 0x00, 0xC0, // ## 291 | 0x01, 0x80, // ## 292 | 0x01, 0x80, // ## 293 | 0x03, 0x00, // ## 294 | 0x03, 0x00, // ## 295 | 0x06, 0x00, // ## 296 | 0x0C, 0x00, // ## 297 | 0x0C, 0x00, // ## 298 | 0x18, 0x00, // ## 299 | 0x18, 0x00, // ## 300 | 0x30, 0x00, // ## 301 | 0x30, 0x00, // ## 302 | 0x00, 0x00, // 303 | 0x00, 0x00, // 304 | 0x00, 0x00, // 305 | 306 | // @512 '0' (11 pixels wide) 307 | 0x00, 0x00, // 308 | 0x0E, 0x00, // ### 309 | 0x1B, 0x00, // ## ## 310 | 0x31, 0x80, // ## ## 311 | 0x31, 0x80, // ## ## 312 | 0x31, 0x80, // ## ## 313 | 0x31, 0x80, // ## ## 314 | 0x31, 0x80, // ## ## 315 | 0x31, 0x80, // ## ## 316 | 0x1B, 0x00, // ## ## 317 | 0x0E, 0x00, // ### 318 | 0x00, 0x00, // 319 | 0x00, 0x00, // 320 | 0x00, 0x00, // 321 | 0x00, 0x00, // 322 | 0x00, 0x00, // 323 | 324 | // @544 '1' (11 pixels wide) 325 | 0x00, 0x00, // 326 | 0x06, 0x00, // ## 327 | 0x3E, 0x00, // ##### 328 | 0x06, 0x00, // ## 329 | 0x06, 0x00, // ## 330 | 0x06, 0x00, // ## 331 | 0x06, 0x00, // ## 332 | 0x06, 0x00, // ## 333 | 0x06, 0x00, // ## 334 | 0x06, 0x00, // ## 335 | 0x3F, 0xC0, // ######## 336 | 0x00, 0x00, // 337 | 0x00, 0x00, // 338 | 0x00, 0x00, // 339 | 0x00, 0x00, // 340 | 0x00, 0x00, // 341 | 342 | // @576 '2' (11 pixels wide) 343 | 0x00, 0x00, // 344 | 0x0F, 0x00, // #### 345 | 0x19, 0x80, // ## ## 346 | 0x31, 0x80, // ## ## 347 | 0x31, 0x80, // ## ## 348 | 0x03, 0x00, // ## 349 | 0x06, 0x00, // ## 350 | 0x0C, 0x00, // ## 351 | 0x18, 0x00, // ## 352 | 0x30, 0x00, // ## 353 | 0x3F, 0x80, // ####### 354 | 0x00, 0x00, // 355 | 0x00, 0x00, // 356 | 0x00, 0x00, // 357 | 0x00, 0x00, // 358 | 0x00, 0x00, // 359 | 360 | // @608 '3' (11 pixels wide) 361 | 0x00, 0x00, // 362 | 0x3F, 0x00, // ###### 363 | 0x61, 0x80, // ## ## 364 | 0x01, 0x80, // ## 365 | 0x03, 0x00, // ## 366 | 0x1F, 0x00, // ##### 367 | 0x03, 0x80, // ### 368 | 0x01, 0x80, // ## 369 | 0x01, 0x80, // ## 370 | 0x61, 0x80, // ## ## 371 | 0x3F, 0x00, // ###### 372 | 0x00, 0x00, // 373 | 0x00, 0x00, // 374 | 0x00, 0x00, // 375 | 0x00, 0x00, // 376 | 0x00, 0x00, // 377 | 378 | // @640 '4' (11 pixels wide) 379 | 0x00, 0x00, // 380 | 0x07, 0x00, // ### 381 | 0x07, 0x00, // ### 382 | 0x0F, 0x00, // #### 383 | 0x0B, 0x00, // # ## 384 | 0x1B, 0x00, // ## ## 385 | 0x13, 0x00, // # ## 386 | 0x33, 0x00, // ## ## 387 | 0x3F, 0x80, // ####### 388 | 0x03, 0x00, // ## 389 | 0x0F, 0x80, // ##### 390 | 0x00, 0x00, // 391 | 0x00, 0x00, // 392 | 0x00, 0x00, // 393 | 0x00, 0x00, // 394 | 0x00, 0x00, // 395 | 396 | // @672 '5' (11 pixels wide) 397 | 0x00, 0x00, // 398 | 0x1F, 0x80, // ###### 399 | 0x18, 0x00, // ## 400 | 0x18, 0x00, // ## 401 | 0x18, 0x00, // ## 402 | 0x1F, 0x00, // ##### 403 | 0x11, 0x80, // # ## 404 | 0x01, 0x80, // ## 405 | 0x01, 0x80, // ## 406 | 0x21, 0x80, // # ## 407 | 0x1F, 0x00, // ##### 408 | 0x00, 0x00, // 409 | 0x00, 0x00, // 410 | 0x00, 0x00, // 411 | 0x00, 0x00, // 412 | 0x00, 0x00, // 413 | 414 | // @704 '6' (11 pixels wide) 415 | 0x00, 0x00, // 416 | 0x07, 0x80, // #### 417 | 0x1C, 0x00, // ### 418 | 0x18, 0x00, // ## 419 | 0x30, 0x00, // ## 420 | 0x37, 0x00, // ## ### 421 | 0x39, 0x80, // ### ## 422 | 0x31, 0x80, // ## ## 423 | 0x31, 0x80, // ## ## 424 | 0x19, 0x80, // ## ## 425 | 0x0F, 0x00, // #### 426 | 0x00, 0x00, // 427 | 0x00, 0x00, // 428 | 0x00, 0x00, // 429 | 0x00, 0x00, // 430 | 0x00, 0x00, // 431 | 432 | // @736 '7' (11 pixels wide) 433 | 0x00, 0x00, // 434 | 0x7F, 0x00, // ####### 435 | 0x43, 0x00, // # ## 436 | 0x03, 0x00, // ## 437 | 0x06, 0x00, // ## 438 | 0x06, 0x00, // ## 439 | 0x06, 0x00, // ## 440 | 0x06, 0x00, // ## 441 | 0x0C, 0x00, // ## 442 | 0x0C, 0x00, // ## 443 | 0x0C, 0x00, // ## 444 | 0x00, 0x00, // 445 | 0x00, 0x00, // 446 | 0x00, 0x00, // 447 | 0x00, 0x00, // 448 | 0x00, 0x00, // 449 | 450 | // @768 '8' (11 pixels wide) 451 | 0x00, 0x00, // 452 | 0x1F, 0x00, // ##### 453 | 0x31, 0x80, // ## ## 454 | 0x31, 0x80, // ## ## 455 | 0x31, 0x80, // ## ## 456 | 0x1F, 0x00, // ##### 457 | 0x31, 0x80, // ## ## 458 | 0x31, 0x80, // ## ## 459 | 0x31, 0x80, // ## ## 460 | 0x31, 0x80, // ## ## 461 | 0x1F, 0x00, // ##### 462 | 0x00, 0x00, // 463 | 0x00, 0x00, // 464 | 0x00, 0x00, // 465 | 0x00, 0x00, // 466 | 0x00, 0x00, // 467 | 468 | // @800 '9' (11 pixels wide) 469 | 0x00, 0x00, // 470 | 0x1E, 0x00, // #### 471 | 0x33, 0x00, // ## ## 472 | 0x31, 0x80, // ## ## 473 | 0x31, 0x80, // ## ## 474 | 0x33, 0x80, // ## ### 475 | 0x1D, 0x80, // ### ## 476 | 0x01, 0x80, // ## 477 | 0x03, 0x00, // ## 478 | 0x07, 0x00, // ### 479 | 0x3C, 0x00, // #### 480 | 0x00, 0x00, // 481 | 0x00, 0x00, // 482 | 0x00, 0x00, // 483 | 0x00, 0x00, // 484 | 0x00, 0x00, // 485 | 486 | // @832 ':' (11 pixels wide) 487 | 0x00, 0x00, // 488 | 0x00, 0x00, // 489 | 0x00, 0x00, // 490 | 0x00, 0x00, // 491 | 0x0C, 0x00, // ## 492 | 0x0C, 0x00, // ## 493 | 0x00, 0x00, // 494 | 0x00, 0x00, // 495 | 0x00, 0x00, // 496 | 0x0C, 0x00, // ## 497 | 0x0C, 0x00, // ## 498 | 0x00, 0x00, // 499 | 0x00, 0x00, // 500 | 0x00, 0x00, // 501 | 0x00, 0x00, // 502 | 0x00, 0x00, // 503 | 504 | // @864 ';' (11 pixels wide) 505 | 0x00, 0x00, // 506 | 0x00, 0x00, // 507 | 0x00, 0x00, // 508 | 0x00, 0x00, // 509 | 0x03, 0x00, // ## 510 | 0x03, 0x00, // ## 511 | 0x00, 0x00, // 512 | 0x00, 0x00, // 513 | 0x00, 0x00, // 514 | 0x06, 0x00, // ## 515 | 0x04, 0x00, // # 516 | 0x08, 0x00, // # 517 | 0x08, 0x00, // # 518 | 0x00, 0x00, // 519 | 0x00, 0x00, // 520 | 0x00, 0x00, // 521 | 522 | // @896 '<' (11 pixels wide) 523 | 0x00, 0x00, // 524 | 0x00, 0x00, // 525 | 0x00, 0xC0, // ## 526 | 0x03, 0x00, // ## 527 | 0x04, 0x00, // # 528 | 0x18, 0x00, // ## 529 | 0x60, 0x00, // ## 530 | 0x18, 0x00, // ## 531 | 0x04, 0x00, // # 532 | 0x03, 0x00, // ## 533 | 0x00, 0xC0, // ## 534 | 0x00, 0x00, // 535 | 0x00, 0x00, // 536 | 0x00, 0x00, // 537 | 0x00, 0x00, // 538 | 0x00, 0x00, // 539 | 540 | // @928 '=' (11 pixels wide) 541 | 0x00, 0x00, // 542 | 0x00, 0x00, // 543 | 0x00, 0x00, // 544 | 0x00, 0x00, // 545 | 0x00, 0x00, // 546 | 0x7F, 0xC0, // ######### 547 | 0x00, 0x00, // 548 | 0x7F, 0xC0, // ######### 549 | 0x00, 0x00, // 550 | 0x00, 0x00, // 551 | 0x00, 0x00, // 552 | 0x00, 0x00, // 553 | 0x00, 0x00, // 554 | 0x00, 0x00, // 555 | 0x00, 0x00, // 556 | 0x00, 0x00, // 557 | 558 | // @960 '>' (11 pixels wide) 559 | 0x00, 0x00, // 560 | 0x00, 0x00, // 561 | 0x60, 0x00, // ## 562 | 0x18, 0x00, // ## 563 | 0x04, 0x00, // # 564 | 0x03, 0x00, // ## 565 | 0x00, 0xC0, // ## 566 | 0x03, 0x00, // ## 567 | 0x04, 0x00, // # 568 | 0x18, 0x00, // ## 569 | 0x60, 0x00, // ## 570 | 0x00, 0x00, // 571 | 0x00, 0x00, // 572 | 0x00, 0x00, // 573 | 0x00, 0x00, // 574 | 0x00, 0x00, // 575 | 576 | // @992 '?' (11 pixels wide) 577 | 0x00, 0x00, // 578 | 0x00, 0x00, // 579 | 0x1F, 0x00, // ##### 580 | 0x31, 0x80, // ## ## 581 | 0x31, 0x80, // ## ## 582 | 0x01, 0x80, // ## 583 | 0x07, 0x00, // ### 584 | 0x0C, 0x00, // ## 585 | 0x0C, 0x00, // ## 586 | 0x00, 0x00, // 587 | 0x0C, 0x00, // ## 588 | 0x00, 0x00, // 589 | 0x00, 0x00, // 590 | 0x00, 0x00, // 591 | 0x00, 0x00, // 592 | 0x00, 0x00, // 593 | 594 | // @1024 '@' (11 pixels wide) 595 | 0x00, 0x00, // 596 | 0x0E, 0x00, // ### 597 | 0x11, 0x00, // # # 598 | 0x21, 0x00, // # # 599 | 0x21, 0x00, // # # 600 | 0x27, 0x00, // # ### 601 | 0x29, 0x00, // # # # 602 | 0x29, 0x00, // # # # 603 | 0x27, 0x00, // # ### 604 | 0x20, 0x00, // # 605 | 0x11, 0x00, // # # 606 | 0x0E, 0x00, // ### 607 | 0x00, 0x00, // 608 | 0x00, 0x00, // 609 | 0x00, 0x00, // 610 | 0x00, 0x00, // 611 | 612 | // @1056 'A' (11 pixels wide) 613 | 0x00, 0x00, // 614 | 0x00, 0x00, // 615 | 0x3F, 0x00, // ###### 616 | 0x0F, 0x00, // #### 617 | 0x09, 0x00, // # # 618 | 0x19, 0x80, // ## ## 619 | 0x19, 0x80, // ## ## 620 | 0x1F, 0x80, // ###### 621 | 0x30, 0xC0, // ## ## 622 | 0x30, 0xC0, // ## ## 623 | 0x79, 0xE0, // #### #### 624 | 0x00, 0x00, // 625 | 0x00, 0x00, // 626 | 0x00, 0x00, // 627 | 0x00, 0x00, // 628 | 0x00, 0x00, // 629 | 630 | // @1088 'B' (11 pixels wide) 631 | 0x00, 0x00, // 632 | 0x00, 0x00, // 633 | 0x7F, 0x00, // ####### 634 | 0x31, 0x80, // ## ## 635 | 0x31, 0x80, // ## ## 636 | 0x31, 0x80, // ## ## 637 | 0x3F, 0x00, // ###### 638 | 0x31, 0x80, // ## ## 639 | 0x31, 0x80, // ## ## 640 | 0x31, 0x80, // ## ## 641 | 0x7F, 0x00, // ####### 642 | 0x00, 0x00, // 643 | 0x00, 0x00, // 644 | 0x00, 0x00, // 645 | 0x00, 0x00, // 646 | 0x00, 0x00, // 647 | 648 | // @1120 'C' (11 pixels wide) 649 | 0x00, 0x00, // 650 | 0x00, 0x00, // 651 | 0x1F, 0x40, // ##### # 652 | 0x30, 0xC0, // ## ## 653 | 0x60, 0x40, // ## # 654 | 0x60, 0x00, // ## 655 | 0x60, 0x00, // ## 656 | 0x60, 0x00, // ## 657 | 0x60, 0x40, // ## # 658 | 0x30, 0x80, // ## # 659 | 0x1F, 0x00, // ##### 660 | 0x00, 0x00, // 661 | 0x00, 0x00, // 662 | 0x00, 0x00, // 663 | 0x00, 0x00, // 664 | 0x00, 0x00, // 665 | 666 | // @1152 'D' (11 pixels wide) 667 | 0x00, 0x00, // 668 | 0x00, 0x00, // 669 | 0x7F, 0x00, // ####### 670 | 0x31, 0x80, // ## ## 671 | 0x30, 0xC0, // ## ## 672 | 0x30, 0xC0, // ## ## 673 | 0x30, 0xC0, // ## ## 674 | 0x30, 0xC0, // ## ## 675 | 0x30, 0xC0, // ## ## 676 | 0x31, 0x80, // ## ## 677 | 0x7F, 0x00, // ####### 678 | 0x00, 0x00, // 679 | 0x00, 0x00, // 680 | 0x00, 0x00, // 681 | 0x00, 0x00, // 682 | 0x00, 0x00, // 683 | 684 | // @1184 'E' (11 pixels wide) 685 | 0x00, 0x00, // 686 | 0x00, 0x00, // 687 | 0x7F, 0x80, // ######## 688 | 0x30, 0x80, // ## # 689 | 0x30, 0x80, // ## # 690 | 0x32, 0x00, // ## # 691 | 0x3E, 0x00, // ##### 692 | 0x32, 0x00, // ## # 693 | 0x30, 0x80, // ## # 694 | 0x30, 0x80, // ## # 695 | 0x7F, 0x80, // ######## 696 | 0x00, 0x00, // 697 | 0x00, 0x00, // 698 | 0x00, 0x00, // 699 | 0x00, 0x00, // 700 | 0x00, 0x00, // 701 | 702 | // @1216 'F' (11 pixels wide) 703 | 0x00, 0x00, // 704 | 0x00, 0x00, // 705 | 0x7F, 0xC0, // ######### 706 | 0x30, 0x40, // ## # 707 | 0x30, 0x40, // ## # 708 | 0x32, 0x00, // ## # 709 | 0x3E, 0x00, // ##### 710 | 0x32, 0x00, // ## # 711 | 0x30, 0x00, // ## 712 | 0x30, 0x00, // ## 713 | 0x7C, 0x00, // ##### 714 | 0x00, 0x00, // 715 | 0x00, 0x00, // 716 | 0x00, 0x00, // 717 | 0x00, 0x00, // 718 | 0x00, 0x00, // 719 | 720 | // @1248 'G' (11 pixels wide) 721 | 0x00, 0x00, // 722 | 0x00, 0x00, // 723 | 0x1E, 0x80, // #### # 724 | 0x31, 0x80, // ## ## 725 | 0x60, 0x80, // ## # 726 | 0x60, 0x00, // ## 727 | 0x60, 0x00, // ## 728 | 0x67, 0xC0, // ## ##### 729 | 0x61, 0x80, // ## ## 730 | 0x31, 0x80, // ## ## 731 | 0x1F, 0x00, // ##### 732 | 0x00, 0x00, // 733 | 0x00, 0x00, // 734 | 0x00, 0x00, // 735 | 0x00, 0x00, // 736 | 0x00, 0x00, // 737 | 738 | // @1280 'H' (11 pixels wide) 739 | 0x00, 0x00, // 740 | 0x00, 0x00, // 741 | 0x7B, 0xC0, // #### #### 742 | 0x31, 0x80, // ## ## 743 | 0x31, 0x80, // ## ## 744 | 0x31, 0x80, // ## ## 745 | 0x3F, 0x80, // ####### 746 | 0x31, 0x80, // ## ## 747 | 0x31, 0x80, // ## ## 748 | 0x31, 0x80, // ## ## 749 | 0x7B, 0xC0, // #### #### 750 | 0x00, 0x00, // 751 | 0x00, 0x00, // 752 | 0x00, 0x00, // 753 | 0x00, 0x00, // 754 | 0x00, 0x00, // 755 | 756 | // @1312 'I' (11 pixels wide) 757 | 0x00, 0x00, // 758 | 0x00, 0x00, // 759 | 0x3F, 0xC0, // ######## 760 | 0x06, 0x00, // ## 761 | 0x06, 0x00, // ## 762 | 0x06, 0x00, // ## 763 | 0x06, 0x00, // ## 764 | 0x06, 0x00, // ## 765 | 0x06, 0x00, // ## 766 | 0x06, 0x00, // ## 767 | 0x3F, 0xC0, // ######## 768 | 0x00, 0x00, // 769 | 0x00, 0x00, // 770 | 0x00, 0x00, // 771 | 0x00, 0x00, // 772 | 0x00, 0x00, // 773 | 774 | // @1344 'J' (11 pixels wide) 775 | 0x00, 0x00, // 776 | 0x00, 0x00, // 777 | 0x1F, 0xC0, // ####### 778 | 0x03, 0x00, // ## 779 | 0x03, 0x00, // ## 780 | 0x03, 0x00, // ## 781 | 0x03, 0x00, // ## 782 | 0x63, 0x00, // ## ## 783 | 0x63, 0x00, // ## ## 784 | 0x63, 0x00, // ## ## 785 | 0x3E, 0x00, // ##### 786 | 0x00, 0x00, // 787 | 0x00, 0x00, // 788 | 0x00, 0x00, // 789 | 0x00, 0x00, // 790 | 0x00, 0x00, // 791 | 792 | // @1376 'K' (11 pixels wide) 793 | 0x00, 0x00, // 794 | 0x00, 0x00, // 795 | 0x7B, 0xC0, // #### #### 796 | 0x31, 0x80, // ## ## 797 | 0x33, 0x00, // ## ## 798 | 0x36, 0x00, // ## ## 799 | 0x3C, 0x00, // #### 800 | 0x3E, 0x00, // ##### 801 | 0x33, 0x00, // ## ## 802 | 0x31, 0x80, // ## ## 803 | 0x79, 0xC0, // #### ### 804 | 0x00, 0x00, // 805 | 0x00, 0x00, // 806 | 0x00, 0x00, // 807 | 0x00, 0x00, // 808 | 0x00, 0x00, // 809 | 810 | // @1408 'L' (11 pixels wide) 811 | 0x00, 0x00, // 812 | 0x00, 0x00, // 813 | 0x7E, 0x00, // ###### 814 | 0x18, 0x00, // ## 815 | 0x18, 0x00, // ## 816 | 0x18, 0x00, // ## 817 | 0x18, 0x00, // ## 818 | 0x18, 0x40, // ## # 819 | 0x18, 0x40, // ## # 820 | 0x18, 0x40, // ## # 821 | 0x7F, 0xC0, // ######### 822 | 0x00, 0x00, // 823 | 0x00, 0x00, // 824 | 0x00, 0x00, // 825 | 0x00, 0x00, // 826 | 0x00, 0x00, // 827 | 828 | // @1440 'M' (11 pixels wide) 829 | 0x00, 0x00, // 830 | 0x00, 0x00, // 831 | 0xE0, 0xE0, // ### ### 832 | 0x60, 0xC0, // ## ## 833 | 0x71, 0xC0, // ### ### 834 | 0x7B, 0xC0, // #### #### 835 | 0x6A, 0xC0, // ## # # ## 836 | 0x6E, 0xC0, // ## ### ## 837 | 0x64, 0xC0, // ## # ## 838 | 0x60, 0xC0, // ## ## 839 | 0xFB, 0xE0, // ##### ##### 840 | 0x00, 0x00, // 841 | 0x00, 0x00, // 842 | 0x00, 0x00, // 843 | 0x00, 0x00, // 844 | 0x00, 0x00, // 845 | 846 | // @1472 'N' (11 pixels wide) 847 | 0x00, 0x00, // 848 | 0x00, 0x00, // 849 | 0x73, 0xC0, // ### #### 850 | 0x31, 0x80, // ## ## 851 | 0x39, 0x80, // ### ## 852 | 0x3D, 0x80, // #### ## 853 | 0x35, 0x80, // ## # ## 854 | 0x37, 0x80, // ## #### 855 | 0x33, 0x80, // ## ### 856 | 0x31, 0x80, // ## ## 857 | 0x79, 0x80, // #### ## 858 | 0x00, 0x00, // 859 | 0x00, 0x00, // 860 | 0x00, 0x00, // 861 | 0x00, 0x00, // 862 | 0x00, 0x00, // 863 | 864 | // @1504 'O' (11 pixels wide) 865 | 0x00, 0x00, // 866 | 0x00, 0x00, // 867 | 0x1F, 0x00, // ##### 868 | 0x31, 0x80, // ## ## 869 | 0x60, 0xC0, // ## ## 870 | 0x60, 0xC0, // ## ## 871 | 0x60, 0xC0, // ## ## 872 | 0x60, 0xC0, // ## ## 873 | 0x60, 0xC0, // ## ## 874 | 0x31, 0x80, // ## ## 875 | 0x1F, 0x00, // ##### 876 | 0x00, 0x00, // 877 | 0x00, 0x00, // 878 | 0x00, 0x00, // 879 | 0x00, 0x00, // 880 | 0x00, 0x00, // 881 | 882 | // @1536 'P' (11 pixels wide) 883 | 0x00, 0x00, // 884 | 0x00, 0x00, // 885 | 0x7F, 0x00, // ####### 886 | 0x31, 0x80, // ## ## 887 | 0x31, 0x80, // ## ## 888 | 0x31, 0x80, // ## ## 889 | 0x31, 0x80, // ## ## 890 | 0x3F, 0x00, // ###### 891 | 0x30, 0x00, // ## 892 | 0x30, 0x00, // ## 893 | 0x7E, 0x00, // ###### 894 | 0x00, 0x00, // 895 | 0x00, 0x00, // 896 | 0x00, 0x00, // 897 | 0x00, 0x00, // 898 | 0x00, 0x00, // 899 | 900 | // @1568 'Q' (11 pixels wide) 901 | 0x00, 0x00, // 902 | 0x00, 0x00, // 903 | 0x1F, 0x00, // ##### 904 | 0x31, 0x80, // ## ## 905 | 0x60, 0xC0, // ## ## 906 | 0x60, 0xC0, // ## ## 907 | 0x60, 0xC0, // ## ## 908 | 0x60, 0xC0, // ## ## 909 | 0x60, 0xC0, // ## ## 910 | 0x31, 0x80, // ## ## 911 | 0x1F, 0x00, // ##### 912 | 0x0C, 0xC0, // ## ## 913 | 0x1F, 0x80, // ###### 914 | 0x00, 0x00, // 915 | 0x00, 0x00, // 916 | 0x00, 0x00, // 917 | 918 | // @1600 'R' (11 pixels wide) 919 | 0x00, 0x00, // 920 | 0x00, 0x00, // 921 | 0x7F, 0x00, // ####### 922 | 0x31, 0x80, // ## ## 923 | 0x31, 0x80, // ## ## 924 | 0x31, 0x80, // ## ## 925 | 0x3E, 0x00, // ##### 926 | 0x33, 0x00, // ## ## 927 | 0x31, 0x80, // ## ## 928 | 0x31, 0x80, // ## ## 929 | 0x7C, 0xE0, // ##### ### 930 | 0x00, 0x00, // 931 | 0x00, 0x00, // 932 | 0x00, 0x00, // 933 | 0x00, 0x00, // 934 | 0x00, 0x00, // 935 | 936 | // @1632 'S' (11 pixels wide) 937 | 0x00, 0x00, // 938 | 0x00, 0x00, // 939 | 0x1F, 0x80, // ###### 940 | 0x31, 0x80, // ## ## 941 | 0x31, 0x80, // ## ## 942 | 0x38, 0x00, // ### 943 | 0x1F, 0x00, // ##### 944 | 0x03, 0x80, // ### 945 | 0x31, 0x80, // ## ## 946 | 0x31, 0x80, // ## ## 947 | 0x3F, 0x00, // ###### 948 | 0x00, 0x00, // 949 | 0x00, 0x00, // 950 | 0x00, 0x00, // 951 | 0x00, 0x00, // 952 | 0x00, 0x00, // 953 | 954 | // @1664 'T' (11 pixels wide) 955 | 0x00, 0x00, // 956 | 0x00, 0x00, // 957 | 0x7F, 0x80, // ######## 958 | 0x4C, 0x80, // # ## # 959 | 0x4C, 0x80, // # ## # 960 | 0x4C, 0x80, // # ## # 961 | 0x0C, 0x00, // ## 962 | 0x0C, 0x00, // ## 963 | 0x0C, 0x00, // ## 964 | 0x0C, 0x00, // ## 965 | 0x3F, 0x00, // ###### 966 | 0x00, 0x00, // 967 | 0x00, 0x00, // 968 | 0x00, 0x00, // 969 | 0x00, 0x00, // 970 | 0x00, 0x00, // 971 | 972 | // @1696 'U' (11 pixels wide) 973 | 0x00, 0x00, // 974 | 0x00, 0x00, // 975 | 0x7B, 0xC0, // #### #### 976 | 0x31, 0x80, // ## ## 977 | 0x31, 0x80, // ## ## 978 | 0x31, 0x80, // ## ## 979 | 0x31, 0x80, // ## ## 980 | 0x31, 0x80, // ## ## 981 | 0x31, 0x80, // ## ## 982 | 0x31, 0x80, // ## ## 983 | 0x1F, 0x00, // ##### 984 | 0x00, 0x00, // 985 | 0x00, 0x00, // 986 | 0x00, 0x00, // 987 | 0x00, 0x00, // 988 | 0x00, 0x00, // 989 | 990 | // @1728 'V' (11 pixels wide) 991 | 0x00, 0x00, // 992 | 0x00, 0x00, // 993 | 0x7B, 0xC0, // #### #### 994 | 0x31, 0x80, // ## ## 995 | 0x31, 0x80, // ## ## 996 | 0x1B, 0x00, // ## ## 997 | 0x1B, 0x00, // ## ## 998 | 0x1B, 0x00, // ## ## 999 | 0x0A, 0x00, // # # 1000 | 0x0E, 0x00, // ### 1001 | 0x0E, 0x00, // ### 1002 | 0x00, 0x00, // 1003 | 0x00, 0x00, // 1004 | 0x00, 0x00, // 1005 | 0x00, 0x00, // 1006 | 0x00, 0x00, // 1007 | 1008 | // @1760 'W' (11 pixels wide) 1009 | 0x00, 0x00, // 1010 | 0x00, 0x00, // 1011 | 0xFB, 0xE0, // ##### ##### 1012 | 0x60, 0xC0, // ## ## 1013 | 0x64, 0xC0, // ## # ## 1014 | 0x6E, 0xC0, // ## ### ## 1015 | 0x6E, 0xC0, // ## ### ## 1016 | 0x2A, 0x80, // # # # # 1017 | 0x3B, 0x80, // ### ### 1018 | 0x3B, 0x80, // ### ### 1019 | 0x31, 0x80, // ## ## 1020 | 0x00, 0x00, // 1021 | 0x00, 0x00, // 1022 | 0x00, 0x00, // 1023 | 0x00, 0x00, // 1024 | 0x00, 0x00, // 1025 | 1026 | // @1792 'X' (11 pixels wide) 1027 | 0x00, 0x00, // 1028 | 0x00, 0x00, // 1029 | 0x7B, 0xC0, // #### #### 1030 | 0x31, 0x80, // ## ## 1031 | 0x1B, 0x00, // ## ## 1032 | 0x0E, 0x00, // ### 1033 | 0x0E, 0x00, // ### 1034 | 0x0E, 0x00, // ### 1035 | 0x1B, 0x00, // ## ## 1036 | 0x31, 0x80, // ## ## 1037 | 0x7B, 0xC0, // #### #### 1038 | 0x00, 0x00, // 1039 | 0x00, 0x00, // 1040 | 0x00, 0x00, // 1041 | 0x00, 0x00, // 1042 | 0x00, 0x00, // 1043 | 1044 | // @1824 'Y' (11 pixels wide) 1045 | 0x00, 0x00, // 1046 | 0x00, 0x00, // 1047 | 0x79, 0xE0, // #### #### 1048 | 0x30, 0xC0, // ## ## 1049 | 0x19, 0x80, // ## ## 1050 | 0x0F, 0x00, // #### 1051 | 0x06, 0x00, // ## 1052 | 0x06, 0x00, // ## 1053 | 0x06, 0x00, // ## 1054 | 0x06, 0x00, // ## 1055 | 0x1F, 0x80, // ###### 1056 | 0x00, 0x00, // 1057 | 0x00, 0x00, // 1058 | 0x00, 0x00, // 1059 | 0x00, 0x00, // 1060 | 0x00, 0x00, // 1061 | 1062 | // @1856 'Z' (11 pixels wide) 1063 | 0x00, 0x00, // 1064 | 0x00, 0x00, // 1065 | 0x3F, 0x80, // ####### 1066 | 0x21, 0x80, // # ## 1067 | 0x23, 0x00, // # ## 1068 | 0x06, 0x00, // ## 1069 | 0x04, 0x00, // # 1070 | 0x0C, 0x00, // ## 1071 | 0x18, 0x80, // ## # 1072 | 0x30, 0x80, // ## # 1073 | 0x3F, 0x80, // ####### 1074 | 0x00, 0x00, // 1075 | 0x00, 0x00, // 1076 | 0x00, 0x00, // 1077 | 0x00, 0x00, // 1078 | 0x00, 0x00, // 1079 | 1080 | // @1888 '[' (11 pixels wide) 1081 | 0x00, 0x00, // 1082 | 0x07, 0x80, // #### 1083 | 0x06, 0x00, // ## 1084 | 0x06, 0x00, // ## 1085 | 0x06, 0x00, // ## 1086 | 0x06, 0x00, // ## 1087 | 0x06, 0x00, // ## 1088 | 0x06, 0x00, // ## 1089 | 0x06, 0x00, // ## 1090 | 0x06, 0x00, // ## 1091 | 0x06, 0x00, // ## 1092 | 0x06, 0x00, // ## 1093 | 0x07, 0x80, // #### 1094 | 0x00, 0x00, // 1095 | 0x00, 0x00, // 1096 | 0x00, 0x00, // 1097 | 1098 | // @1920 '\' (11 pixels wide) 1099 | 0x30, 0x00, // ## 1100 | 0x30, 0x00, // ## 1101 | 0x18, 0x00, // ## 1102 | 0x18, 0x00, // ## 1103 | 0x0C, 0x00, // ## 1104 | 0x0C, 0x00, // ## 1105 | 0x06, 0x00, // ## 1106 | 0x03, 0x00, // ## 1107 | 0x03, 0x00, // ## 1108 | 0x01, 0x80, // ## 1109 | 0x01, 0x80, // ## 1110 | 0x00, 0xC0, // ## 1111 | 0x00, 0xC0, // ## 1112 | 0x00, 0x00, // 1113 | 0x00, 0x00, // 1114 | 0x00, 0x00, // 1115 | 1116 | // @1952 ']' (11 pixels wide) 1117 | 0x00, 0x00, // 1118 | 0x1E, 0x00, // #### 1119 | 0x06, 0x00, // ## 1120 | 0x06, 0x00, // ## 1121 | 0x06, 0x00, // ## 1122 | 0x06, 0x00, // ## 1123 | 0x06, 0x00, // ## 1124 | 0x06, 0x00, // ## 1125 | 0x06, 0x00, // ## 1126 | 0x06, 0x00, // ## 1127 | 0x06, 0x00, // ## 1128 | 0x06, 0x00, // ## 1129 | 0x1E, 0x00, // #### 1130 | 0x00, 0x00, // 1131 | 0x00, 0x00, // 1132 | 0x00, 0x00, // 1133 | 1134 | // @1984 '^' (11 pixels wide) 1135 | 0x04, 0x00, // # 1136 | 0x0A, 0x00, // # # 1137 | 0x0A, 0x00, // # # 1138 | 0x11, 0x00, // # # 1139 | 0x20, 0x80, // # # 1140 | 0x20, 0x80, // # # 1141 | 0x00, 0x00, // 1142 | 0x00, 0x00, // 1143 | 0x00, 0x00, // 1144 | 0x00, 0x00, // 1145 | 0x00, 0x00, // 1146 | 0x00, 0x00, // 1147 | 0x00, 0x00, // 1148 | 0x00, 0x00, // 1149 | 0x00, 0x00, // 1150 | 0x00, 0x00, // 1151 | 1152 | // @2016 '_' (11 pixels wide) 1153 | 0x00, 0x00, // 1154 | 0x00, 0x00, // 1155 | 0x00, 0x00, // 1156 | 0x00, 0x00, // 1157 | 0x00, 0x00, // 1158 | 0x00, 0x00, // 1159 | 0x00, 0x00, // 1160 | 0x00, 0x00, // 1161 | 0x00, 0x00, // 1162 | 0x00, 0x00, // 1163 | 0x00, 0x00, // 1164 | 0x00, 0x00, // 1165 | 0x00, 0x00, // 1166 | 0x00, 0x00, // 1167 | 0x00, 0x00, // 1168 | 0xFF, 0xE0, // ########### 1169 | 1170 | // @2048 '`' (11 pixels wide) 1171 | 0x08, 0x00, // # 1172 | 0x04, 0x00, // # 1173 | 0x02, 0x00, // # 1174 | 0x00, 0x00, // 1175 | 0x00, 0x00, // 1176 | 0x00, 0x00, // 1177 | 0x00, 0x00, // 1178 | 0x00, 0x00, // 1179 | 0x00, 0x00, // 1180 | 0x00, 0x00, // 1181 | 0x00, 0x00, // 1182 | 0x00, 0x00, // 1183 | 0x00, 0x00, // 1184 | 0x00, 0x00, // 1185 | 0x00, 0x00, // 1186 | 0x00, 0x00, // 1187 | 1188 | // @2080 'a' (11 pixels wide) 1189 | 0x00, 0x00, // 1190 | 0x00, 0x00, // 1191 | 0x00, 0x00, // 1192 | 0x00, 0x00, // 1193 | 0x1F, 0x00, // ##### 1194 | 0x01, 0x80, // ## 1195 | 0x01, 0x80, // ## 1196 | 0x1F, 0x80, // ###### 1197 | 0x31, 0x80, // ## ## 1198 | 0x33, 0x80, // ## ### 1199 | 0x1D, 0xC0, // ### ### 1200 | 0x00, 0x00, // 1201 | 0x00, 0x00, // 1202 | 0x00, 0x00, // 1203 | 0x00, 0x00, // 1204 | 0x00, 0x00, // 1205 | 1206 | // @2112 'b' (11 pixels wide) 1207 | 0x00, 0x00, // 1208 | 0x70, 0x00, // ### 1209 | 0x30, 0x00, // ## 1210 | 0x30, 0x00, // ## 1211 | 0x37, 0x00, // ## ### 1212 | 0x39, 0x80, // ### ## 1213 | 0x30, 0xC0, // ## ## 1214 | 0x30, 0xC0, // ## ## 1215 | 0x30, 0xC0, // ## ## 1216 | 0x39, 0x80, // ### ## 1217 | 0x77, 0x00, // ### ### 1218 | 0x00, 0x00, // 1219 | 0x00, 0x00, // 1220 | 0x00, 0x00, // 1221 | 0x00, 0x00, // 1222 | 0x00, 0x00, // 1223 | 1224 | // @2144 'c' (11 pixels wide) 1225 | 0x00, 0x00, // 1226 | 0x00, 0x00, // 1227 | 0x00, 0x00, // 1228 | 0x00, 0x00, // 1229 | 0x1E, 0x80, // #### # 1230 | 0x31, 0x80, // ## ## 1231 | 0x60, 0x80, // ## # 1232 | 0x60, 0x00, // ## 1233 | 0x60, 0x80, // ## # 1234 | 0x31, 0x80, // ## ## 1235 | 0x1F, 0x00, // ##### 1236 | 0x00, 0x00, // 1237 | 0x00, 0x00, // 1238 | 0x00, 0x00, // 1239 | 0x00, 0x00, // 1240 | 0x00, 0x00, // 1241 | 1242 | // @2176 'd' (11 pixels wide) 1243 | 0x00, 0x00, // 1244 | 0x03, 0x80, // ### 1245 | 0x01, 0x80, // ## 1246 | 0x01, 0x80, // ## 1247 | 0x1D, 0x80, // ### ## 1248 | 0x33, 0x80, // ## ### 1249 | 0x61, 0x80, // ## ## 1250 | 0x61, 0x80, // ## ## 1251 | 0x61, 0x80, // ## ## 1252 | 0x33, 0x80, // ## ### 1253 | 0x1D, 0xC0, // ### ### 1254 | 0x00, 0x00, // 1255 | 0x00, 0x00, // 1256 | 0x00, 0x00, // 1257 | 0x00, 0x00, // 1258 | 0x00, 0x00, // 1259 | 1260 | // @2208 'e' (11 pixels wide) 1261 | 0x00, 0x00, // 1262 | 0x00, 0x00, // 1263 | 0x00, 0x00, // 1264 | 0x00, 0x00, // 1265 | 0x1F, 0x00, // ##### 1266 | 0x31, 0x80, // ## ## 1267 | 0x60, 0xC0, // ## ## 1268 | 0x7F, 0xC0, // ######### 1269 | 0x60, 0x00, // ## 1270 | 0x30, 0xC0, // ## ## 1271 | 0x1F, 0x80, // ###### 1272 | 0x00, 0x00, // 1273 | 0x00, 0x00, // 1274 | 0x00, 0x00, // 1275 | 0x00, 0x00, // 1276 | 0x00, 0x00, // 1277 | 1278 | // @2240 'f' (11 pixels wide) 1279 | 0x00, 0x00, // 1280 | 0x07, 0xE0, // ###### 1281 | 0x0C, 0x00, // ## 1282 | 0x0C, 0x00, // ## 1283 | 0x3F, 0x80, // ####### 1284 | 0x0C, 0x00, // ## 1285 | 0x0C, 0x00, // ## 1286 | 0x0C, 0x00, // ## 1287 | 0x0C, 0x00, // ## 1288 | 0x0C, 0x00, // ## 1289 | 0x3F, 0x80, // ####### 1290 | 0x00, 0x00, // 1291 | 0x00, 0x00, // 1292 | 0x00, 0x00, // 1293 | 0x00, 0x00, // 1294 | 0x00, 0x00, // 1295 | 1296 | // @2272 'g' (11 pixels wide) 1297 | 0x00, 0x00, // 1298 | 0x00, 0x00, // 1299 | 0x00, 0x00, // 1300 | 0x00, 0x00, // 1301 | 0x1D, 0xC0, // ### ### 1302 | 0x33, 0x80, // ## ### 1303 | 0x61, 0x80, // ## ## 1304 | 0x61, 0x80, // ## ## 1305 | 0x61, 0x80, // ## ## 1306 | 0x33, 0x80, // ## ### 1307 | 0x1D, 0x80, // ### ## 1308 | 0x01, 0x80, // ## 1309 | 0x01, 0x80, // ## 1310 | 0x1F, 0x00, // ##### 1311 | 0x00, 0x00, // 1312 | 0x00, 0x00, // 1313 | 1314 | // @2304 'h' (11 pixels wide) 1315 | 0x00, 0x00, // 1316 | 0x70, 0x00, // ### 1317 | 0x30, 0x00, // ## 1318 | 0x30, 0x00, // ## 1319 | 0x37, 0x00, // ## ### 1320 | 0x39, 0x80, // ### ## 1321 | 0x31, 0x80, // ## ## 1322 | 0x31, 0x80, // ## ## 1323 | 0x31, 0x80, // ## ## 1324 | 0x31, 0x80, // ## ## 1325 | 0x7B, 0xC0, // #### #### 1326 | 0x00, 0x00, // 1327 | 0x00, 0x00, // 1328 | 0x00, 0x00, // 1329 | 0x00, 0x00, // 1330 | 0x00, 0x00, // 1331 | 1332 | // @2336 'i' (11 pixels wide) 1333 | 0x00, 0x00, // 1334 | 0x06, 0x00, // ## 1335 | 0x06, 0x00, // ## 1336 | 0x00, 0x00, // 1337 | 0x1E, 0x00, // #### 1338 | 0x06, 0x00, // ## 1339 | 0x06, 0x00, // ## 1340 | 0x06, 0x00, // ## 1341 | 0x06, 0x00, // ## 1342 | 0x06, 0x00, // ## 1343 | 0x3F, 0xC0, // ######## 1344 | 0x00, 0x00, // 1345 | 0x00, 0x00, // 1346 | 0x00, 0x00, // 1347 | 0x00, 0x00, // 1348 | 0x00, 0x00, // 1349 | 1350 | // @2368 'j' (11 pixels wide) 1351 | 0x00, 0x00, // 1352 | 0x06, 0x00, // ## 1353 | 0x06, 0x00, // ## 1354 | 0x00, 0x00, // 1355 | 0x3F, 0x00, // ###### 1356 | 0x03, 0x00, // ## 1357 | 0x03, 0x00, // ## 1358 | 0x03, 0x00, // ## 1359 | 0x03, 0x00, // ## 1360 | 0x03, 0x00, // ## 1361 | 0x03, 0x00, // ## 1362 | 0x03, 0x00, // ## 1363 | 0x03, 0x00, // ## 1364 | 0x3E, 0x00, // ##### 1365 | 0x00, 0x00, // 1366 | 0x00, 0x00, // 1367 | 1368 | // @2400 'k' (11 pixels wide) 1369 | 0x00, 0x00, // 1370 | 0x70, 0x00, // ### 1371 | 0x30, 0x00, // ## 1372 | 0x30, 0x00, // ## 1373 | 0x37, 0x80, // ## #### 1374 | 0x36, 0x00, // ## ## 1375 | 0x3C, 0x00, // #### 1376 | 0x3C, 0x00, // #### 1377 | 0x36, 0x00, // ## ## 1378 | 0x33, 0x00, // ## ## 1379 | 0x77, 0xC0, // ### ##### 1380 | 0x00, 0x00, // 1381 | 0x00, 0x00, // 1382 | 0x00, 0x00, // 1383 | 0x00, 0x00, // 1384 | 0x00, 0x00, // 1385 | 1386 | // @2432 'l' (11 pixels wide) 1387 | 0x00, 0x00, // 1388 | 0x1E, 0x00, // #### 1389 | 0x06, 0x00, // ## 1390 | 0x06, 0x00, // ## 1391 | 0x06, 0x00, // ## 1392 | 0x06, 0x00, // ## 1393 | 0x06, 0x00, // ## 1394 | 0x06, 0x00, // ## 1395 | 0x06, 0x00, // ## 1396 | 0x06, 0x00, // ## 1397 | 0x3F, 0xC0, // ######## 1398 | 0x00, 0x00, // 1399 | 0x00, 0x00, // 1400 | 0x00, 0x00, // 1401 | 0x00, 0x00, // 1402 | 0x00, 0x00, // 1403 | 1404 | // @2464 'm' (11 pixels wide) 1405 | 0x00, 0x00, // 1406 | 0x00, 0x00, // 1407 | 0x00, 0x00, // 1408 | 0x00, 0x00, // 1409 | 0x7F, 0x80, // ######## 1410 | 0x36, 0xC0, // ## ## ## 1411 | 0x36, 0xC0, // ## ## ## 1412 | 0x36, 0xC0, // ## ## ## 1413 | 0x36, 0xC0, // ## ## ## 1414 | 0x36, 0xC0, // ## ## ## 1415 | 0x76, 0xE0, // ### ## ### 1416 | 0x00, 0x00, // 1417 | 0x00, 0x00, // 1418 | 0x00, 0x00, // 1419 | 0x00, 0x00, // 1420 | 0x00, 0x00, // 1421 | 1422 | // @2496 'n' (11 pixels wide) 1423 | 0x00, 0x00, // 1424 | 0x00, 0x00, // 1425 | 0x00, 0x00, // 1426 | 0x00, 0x00, // 1427 | 0x77, 0x00, // ### ### 1428 | 0x39, 0x80, // ### ## 1429 | 0x31, 0x80, // ## ## 1430 | 0x31, 0x80, // ## ## 1431 | 0x31, 0x80, // ## ## 1432 | 0x31, 0x80, // ## ## 1433 | 0x7B, 0xC0, // #### #### 1434 | 0x00, 0x00, // 1435 | 0x00, 0x00, // 1436 | 0x00, 0x00, // 1437 | 0x00, 0x00, // 1438 | 0x00, 0x00, // 1439 | 1440 | // @2528 'o' (11 pixels wide) 1441 | 0x00, 0x00, // 1442 | 0x00, 0x00, // 1443 | 0x00, 0x00, // 1444 | 0x00, 0x00, // 1445 | 0x1F, 0x00, // ##### 1446 | 0x31, 0x80, // ## ## 1447 | 0x60, 0xC0, // ## ## 1448 | 0x60, 0xC0, // ## ## 1449 | 0x60, 0xC0, // ## ## 1450 | 0x31, 0x80, // ## ## 1451 | 0x1F, 0x00, // ##### 1452 | 0x00, 0x00, // 1453 | 0x00, 0x00, // 1454 | 0x00, 0x00, // 1455 | 0x00, 0x00, // 1456 | 0x00, 0x00, // 1457 | 1458 | // @2560 'p' (11 pixels wide) 1459 | 0x00, 0x00, // 1460 | 0x00, 0x00, // 1461 | 0x00, 0x00, // 1462 | 0x00, 0x00, // 1463 | 0x77, 0x00, // ### ### 1464 | 0x39, 0x80, // ### ## 1465 | 0x30, 0xC0, // ## ## 1466 | 0x30, 0xC0, // ## ## 1467 | 0x30, 0xC0, // ## ## 1468 | 0x39, 0x80, // ### ## 1469 | 0x37, 0x00, // ## ### 1470 | 0x30, 0x00, // ## 1471 | 0x30, 0x00, // ## 1472 | 0x7C, 0x00, // ##### 1473 | 0x00, 0x00, // 1474 | 0x00, 0x00, // 1475 | 1476 | // @2592 'q' (11 pixels wide) 1477 | 0x00, 0x00, // 1478 | 0x00, 0x00, // 1479 | 0x00, 0x00, // 1480 | 0x00, 0x00, // 1481 | 0x1D, 0xC0, // ### ### 1482 | 0x33, 0x80, // ## ### 1483 | 0x61, 0x80, // ## ## 1484 | 0x61, 0x80, // ## ## 1485 | 0x61, 0x80, // ## ## 1486 | 0x33, 0x80, // ## ### 1487 | 0x1D, 0x80, // ### ## 1488 | 0x01, 0x80, // ## 1489 | 0x01, 0x80, // ## 1490 | 0x07, 0xC0, // ##### 1491 | 0x00, 0x00, // 1492 | 0x00, 0x00, // 1493 | 1494 | // @2624 'r' (11 pixels wide) 1495 | 0x00, 0x00, // 1496 | 0x00, 0x00, // 1497 | 0x00, 0x00, // 1498 | 0x00, 0x00, // 1499 | 0x7B, 0x80, // #### ### 1500 | 0x1C, 0xC0, // ### ## 1501 | 0x18, 0x00, // ## 1502 | 0x18, 0x00, // ## 1503 | 0x18, 0x00, // ## 1504 | 0x18, 0x00, // ## 1505 | 0x7F, 0x00, // ####### 1506 | 0x00, 0x00, // 1507 | 0x00, 0x00, // 1508 | 0x00, 0x00, // 1509 | 0x00, 0x00, // 1510 | 0x00, 0x00, // 1511 | 1512 | // @2656 's' (11 pixels wide) 1513 | 0x00, 0x00, // 1514 | 0x00, 0x00, // 1515 | 0x00, 0x00, // 1516 | 0x00, 0x00, // 1517 | 0x1F, 0x80, // ###### 1518 | 0x31, 0x80, // ## ## 1519 | 0x3C, 0x00, // #### 1520 | 0x1F, 0x00, // ##### 1521 | 0x03, 0x80, // ### 1522 | 0x31, 0x80, // ## ## 1523 | 0x3F, 0x00, // ###### 1524 | 0x00, 0x00, // 1525 | 0x00, 0x00, // 1526 | 0x00, 0x00, // 1527 | 0x00, 0x00, // 1528 | 0x00, 0x00, // 1529 | 1530 | // @2688 't' (11 pixels wide) 1531 | 0x00, 0x00, // 1532 | 0x18, 0x00, // ## 1533 | 0x18, 0x00, // ## 1534 | 0x18, 0x00, // ## 1535 | 0x7F, 0x00, // ####### 1536 | 0x18, 0x00, // ## 1537 | 0x18, 0x00, // ## 1538 | 0x18, 0x00, // ## 1539 | 0x18, 0x00, // ## 1540 | 0x18, 0x80, // ## # 1541 | 0x0F, 0x00, // #### 1542 | 0x00, 0x00, // 1543 | 0x00, 0x00, // 1544 | 0x00, 0x00, // 1545 | 0x00, 0x00, // 1546 | 0x00, 0x00, // 1547 | 1548 | // @2720 'u' (11 pixels wide) 1549 | 0x00, 0x00, // 1550 | 0x00, 0x00, // 1551 | 0x00, 0x00, // 1552 | 0x00, 0x00, // 1553 | 0x73, 0x80, // ### ### 1554 | 0x31, 0x80, // ## ## 1555 | 0x31, 0x80, // ## ## 1556 | 0x31, 0x80, // ## ## 1557 | 0x31, 0x80, // ## ## 1558 | 0x33, 0x80, // ## ### 1559 | 0x1D, 0xC0, // ### ### 1560 | 0x00, 0x00, // 1561 | 0x00, 0x00, // 1562 | 0x00, 0x00, // 1563 | 0x00, 0x00, // 1564 | 0x00, 0x00, // 1565 | 1566 | // @2752 'v' (11 pixels wide) 1567 | 0x00, 0x00, // 1568 | 0x00, 0x00, // 1569 | 0x00, 0x00, // 1570 | 0x00, 0x00, // 1571 | 0x7B, 0xC0, // #### #### 1572 | 0x31, 0x80, // ## ## 1573 | 0x31, 0x80, // ## ## 1574 | 0x1B, 0x00, // ## ## 1575 | 0x1B, 0x00, // ## ## 1576 | 0x0E, 0x00, // ### 1577 | 0x0E, 0x00, // ### 1578 | 0x00, 0x00, // 1579 | 0x00, 0x00, // 1580 | 0x00, 0x00, // 1581 | 0x00, 0x00, // 1582 | 0x00, 0x00, // 1583 | 1584 | // @2784 'w' (11 pixels wide) 1585 | 0x00, 0x00, // 1586 | 0x00, 0x00, // 1587 | 0x00, 0x00, // 1588 | 0x00, 0x00, // 1589 | 0xF1, 0xE0, // #### #### 1590 | 0x60, 0xC0, // ## ## 1591 | 0x64, 0xC0, // ## # ## 1592 | 0x6E, 0xC0, // ## ### ## 1593 | 0x3B, 0x80, // ### ### 1594 | 0x3B, 0x80, // ### ### 1595 | 0x31, 0x80, // ## ## 1596 | 0x00, 0x00, // 1597 | 0x00, 0x00, // 1598 | 0x00, 0x00, // 1599 | 0x00, 0x00, // 1600 | 0x00, 0x00, // 1601 | 1602 | // @2816 'x' (11 pixels wide) 1603 | 0x00, 0x00, // 1604 | 0x00, 0x00, // 1605 | 0x00, 0x00, // 1606 | 0x00, 0x00, // 1607 | 0x7B, 0xC0, // #### #### 1608 | 0x1B, 0x00, // ## ## 1609 | 0x0E, 0x00, // ### 1610 | 0x0E, 0x00, // ### 1611 | 0x0E, 0x00, // ### 1612 | 0x1B, 0x00, // ## ## 1613 | 0x7B, 0xC0, // #### #### 1614 | 0x00, 0x00, // 1615 | 0x00, 0x00, // 1616 | 0x00, 0x00, // 1617 | 0x00, 0x00, // 1618 | 0x00, 0x00, // 1619 | 1620 | // @2848 'y' (11 pixels wide) 1621 | 0x00, 0x00, // 1622 | 0x00, 0x00, // 1623 | 0x00, 0x00, // 1624 | 0x00, 0x00, // 1625 | 0x79, 0xE0, // #### #### 1626 | 0x30, 0xC0, // ## ## 1627 | 0x19, 0x80, // ## ## 1628 | 0x19, 0x80, // ## ## 1629 | 0x0B, 0x00, // # ## 1630 | 0x0F, 0x00, // #### 1631 | 0x06, 0x00, // ## 1632 | 0x06, 0x00, // ## 1633 | 0x0C, 0x00, // ## 1634 | 0x3E, 0x00, // ##### 1635 | 0x00, 0x00, // 1636 | 0x00, 0x00, // 1637 | 1638 | // @2880 'z' (11 pixels wide) 1639 | 0x00, 0x00, // 1640 | 0x00, 0x00, // 1641 | 0x00, 0x00, // 1642 | 0x00, 0x00, // 1643 | 0x3F, 0x80, // ####### 1644 | 0x21, 0x80, // # ## 1645 | 0x03, 0x00, // ## 1646 | 0x0E, 0x00, // ### 1647 | 0x18, 0x00, // ## 1648 | 0x30, 0x80, // ## # 1649 | 0x3F, 0x80, // ####### 1650 | 0x00, 0x00, // 1651 | 0x00, 0x00, // 1652 | 0x00, 0x00, // 1653 | 0x00, 0x00, // 1654 | 0x00, 0x00, // 1655 | 1656 | // @2912 '{' (11 pixels wide) 1657 | 0x00, 0x00, // 1658 | 0x06, 0x00, // ## 1659 | 0x0C, 0x00, // ## 1660 | 0x0C, 0x00, // ## 1661 | 0x0C, 0x00, // ## 1662 | 0x0C, 0x00, // ## 1663 | 0x0C, 0x00, // ## 1664 | 0x18, 0x00, // ## 1665 | 0x0C, 0x00, // ## 1666 | 0x0C, 0x00, // ## 1667 | 0x0C, 0x00, // ## 1668 | 0x0C, 0x00, // ## 1669 | 0x06, 0x00, // ## 1670 | 0x00, 0x00, // 1671 | 0x00, 0x00, // 1672 | 0x00, 0x00, // 1673 | 1674 | // @2944 '|' (11 pixels wide) 1675 | 0x00, 0x00, // 1676 | 0x06, 0x00, // ## 1677 | 0x06, 0x00, // ## 1678 | 0x06, 0x00, // ## 1679 | 0x06, 0x00, // ## 1680 | 0x06, 0x00, // ## 1681 | 0x06, 0x00, // ## 1682 | 0x06, 0x00, // ## 1683 | 0x06, 0x00, // ## 1684 | 0x06, 0x00, // ## 1685 | 0x06, 0x00, // ## 1686 | 0x06, 0x00, // ## 1687 | 0x06, 0x00, // ## 1688 | 0x00, 0x00, // 1689 | 0x00, 0x00, // 1690 | 0x00, 0x00, // 1691 | 1692 | // @2976 '}' (11 pixels wide) 1693 | 0x00, 0x00, // 1694 | 0x0C, 0x00, // ## 1695 | 0x06, 0x00, // ## 1696 | 0x06, 0x00, // ## 1697 | 0x06, 0x00, // ## 1698 | 0x06, 0x00, // ## 1699 | 0x06, 0x00, // ## 1700 | 0x03, 0x00, // ## 1701 | 0x06, 0x00, // ## 1702 | 0x06, 0x00, // ## 1703 | 0x06, 0x00, // ## 1704 | 0x06, 0x00, // ## 1705 | 0x0C, 0x00, // ## 1706 | 0x00, 0x00, // 1707 | 0x00, 0x00, // 1708 | 0x00, 0x00, // 1709 | 1710 | // @3008 '~' (11 pixels wide) 1711 | 0x00, 0x00, // 1712 | 0x00, 0x00, // 1713 | 0x00, 0x00, // 1714 | 0x00, 0x00, // 1715 | 0x00, 0x00, // 1716 | 0x18, 0x00, // ## 1717 | 0x24, 0x80, // # # # 1718 | 0x03, 0x00, // ## 1719 | 0x00, 0x00, // 1720 | 0x00, 0x00, // 1721 | 0x00, 0x00, // 1722 | 0x00, 0x00, // 1723 | 0x00, 0x00, // 1724 | 0x00, 0x00, // 1725 | 0x00, 0x00, // 1726 | 0x00, 0x00, // 1727 | }.Select(s => (char)s).ToArray(); 1728 | } 1729 | } --------------------------------------------------------------------------------