This commit is contained in:
Scott Bezek
2021-10-24 22:23:05 -07:00
parent bbc51702ff
commit 0b5785ecf3
10 changed files with 431 additions and 80 deletions

View File

@@ -18,19 +18,19 @@ monitor_flags =
--echo
--filter=esp32_exception_decoder
lib_deps =
TFT_eSPI@2.3.59
TFT_eSPI@2.3.70
fastled/FastLED @ ^3.4.0
askuric/Simple FOC @ ^2.2
infineon/TLV493D-Magnetic-Sensor @ ^1.0.3
bxparks/AceButton @ ^1.9.1
build_flags =
-Os
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
-DUSER_SETUP_LOADED=1
-DST7789_DRIVER=1
-DGC9A01_DRIVER=1
-DCGRAM_OFFSET=1
-DTFT_WIDTH=135
-DTFT_WIDTH=240
-DTFT_HEIGHT=240
-DTFT_MISO=-1
-DTFT_MOSI=19
@@ -41,4 +41,4 @@ build_flags =
-DTFT_BL=4
-DLOAD_GLCD=1
-DLOAD_GFXFF=1
-DSPI_FREQUENCY=40000000
-DSPI_FREQUENCY=50000000

View File

@@ -1,6 +1,8 @@
#include "display_task.h"
#include "semaphore_guard.h"
#include "font/roboto_light_60.h"
DisplayTask::DisplayTask(const uint8_t task_core) : Task{"Display", 8192, 1, task_core} {
semaphore_ = xSemaphoreCreateMutex();
assert(semaphore_ != NULL);
@@ -77,51 +79,70 @@ void DisplayTask::run() {
spr_.setColorDepth(16);
spr_.createSprite(TFT_WIDTH, TFT_HEIGHT);
spr_.setFreeFont(&Roboto_Thin_24);
spr_.setFreeFont(&Roboto_Light_60);
spr_.setTextColor(0xFFFF, TFT_BLACK);
float angle;
KnobState state;
const int RADIUS = TFT_WIDTH / 2;
int32_t pointer_center_x = TFT_WIDTH / 2;
int32_t pointer_center_y = TFT_HEIGHT * 2 / 3;
int32_t pointer_center_y = TFT_HEIGHT / 2;
int32_t pointer_length_short = 10;
int32_t pointer_length_long = TFT_WIDTH / 2;
int32_t pointer_length_long = TFT_WIDTH / 2 - 5;
spr_.setTextDatum(CC_DATUM);
spr_.setTextColor(TFT_WHITE);
while(1) {
{
SemaphoreGuard lock(semaphore_);
angle = angle_;// < 0 ? angle_ + 2 * PI : angle_;
state = state_;
}
float degrees = angle * 360 / 2 / PI;
// float degrees = angle * 360 / 2 / PI;
uint8_t r, g, b;
HSV_to_RGB(degrees, 80, 80, &r, &g, &b);
// uint8_t r, g, b;
// HSV_to_RGB(degrees, 80, 80, &r, &g, &b);
spr_.fillSprite(tft_.color565(r, g, b));
spr_.setCursor(40, 40);
// spr_.fillSprite(tft_.color565(r, g, b));
spr_.fillSprite(TFT_BLACK);
spr_.printf("%.1f", degrees);
spr_.drawString(String() + state.current_position, TFT_WIDTH / 2, TFT_HEIGHT / 2, 1);
// spr_.setCursor(60, 40);
// spr_.printf("%.1f", degrees);
float pointer_angle = - angle;
spr_.fillTriangle(
pointer_center_x + pointer_length_short * cos(pointer_angle - PI * 3 /4),
pointer_center_y + pointer_length_short * sin(pointer_angle - PI * 3 /4),
pointer_center_x + pointer_length_short * cos(pointer_angle + PI * 3 /4),
pointer_center_y + pointer_length_short * sin(pointer_angle + PI * 3 /4),
pointer_center_x + pointer_length_long * cos(pointer_angle),
pointer_center_y + pointer_length_long * sin(pointer_angle),
TFT_WHITE
);
// float pointer_angle = - angle;
// spr_.fillTriangle(
// pointer_center_x + pointer_length_short * cos(pointer_angle - PI * 3 /4),
// pointer_center_y + pointer_length_short * sin(pointer_angle - PI * 3 /4),
// pointer_center_x + pointer_length_short * cos(pointer_angle + PI * 3 /4),
// pointer_center_y + pointer_length_short * sin(pointer_angle + PI * 3 /4),
// pointer_center_x + pointer_length_long * cos(pointer_angle),
// pointer_center_y + pointer_length_long * sin(pointer_angle),
// TFT_WHITE
// );
spr_.fillCircle(pointer_center_x, pointer_center_y, 3, TFT_RED);
// spr_.fillCircle(pointer_center_x, pointer_center_y, 3, TFT_RED);
float left_bound = PI / 2;
if (state.num_positions > 0) {
float range_radians = (state.num_positions - 1) * state.position_width_radians;
left_bound = PI / 2 + range_radians / 2;
float right_bound = PI / 2 - range_radians / 2;
spr_.drawLine(TFT_WIDTH/2 + RADIUS * cosf(left_bound), TFT_HEIGHT/2 - RADIUS * sinf(left_bound), TFT_WIDTH/2 + (RADIUS - 10) * cosf(left_bound), TFT_HEIGHT/2 - (RADIUS - 10) * sinf(left_bound), TFT_WHITE);
spr_.drawLine(TFT_WIDTH/2 + RADIUS * cosf(right_bound), TFT_HEIGHT/2 - RADIUS * sinf(right_bound), TFT_WIDTH/2 + (RADIUS - 10) * cosf(right_bound), TFT_HEIGHT/2 - (RADIUS - 10) * sinf(right_bound), TFT_WHITE);
}
float angle = left_bound - (state.sub_position_unit + state.current_position) * state.position_width_radians;
spr_.fillCircle(TFT_WIDTH/2 + (RADIUS - 10) * cosf(angle), TFT_HEIGHT/2 - (RADIUS - 10) * sinf(angle), 5, TFT_BLUE);
spr_.pushSprite(0, 0);
delay(10);
delay(2);
}
}
void DisplayTask::set_angle(float angle) {
void DisplayTask::setData(KnobState state) {
SemaphoreGuard lock(semaphore_);
angle_ = angle;
state_ = state;
}

View File

@@ -3,6 +3,7 @@
#include <Arduino.h>
#include <TFT_eSPI.h>
#include "knob_data.h"
#include "task.h"
class DisplayTask : public Task<DisplayTask> {
@@ -12,7 +13,7 @@ class DisplayTask : public Task<DisplayTask> {
DisplayTask(const uint8_t task_core);
~DisplayTask();
void set_angle(float angle);
void setData(KnobState state);
protected:
void run();
@@ -25,5 +26,5 @@ class DisplayTask : public Task<DisplayTask> {
SemaphoreHandle_t semaphore_;
float angle_ = 0;
KnobState state_;
};

View File

@@ -0,0 +1,199 @@
// Created by http://oleddisplay.squix.ch/ Consider a donation
// In case of problems make sure that you are using the font file with the correct version!
const uint8_t Roboto_Light_60Bitmaps[] PROGMEM = {
// Bitmap Data:
0x00, // ' '
0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x3C,0xF3,0xCF,0x00,0x00,0x00,0x00,0x00,0x07,0x3C,0xFB,0xC7,0x00, // '!'
0xE1,0xDC,0x3B,0x87,0x70,0xEE,0x1D,0xC3,0xB8,0x77,0x0E,0xE1,0xDC,0x3B,0x87,0x70,0xEE,0x1C, // '"'
0x00,0x03,0x80,0x38,0x00,0x01,0xC0,0x0E,0x00,0x00,0x70,0x07,0x00,0x00,0x1C,0x01,0xC0,0x00,0x07,0x00,0x70,0x00,0x01,0xC0,0x1C,0x00,0x00,0xE0,0x07,0x00,0x00,0x38,0x03,0x80,0x00,0x0E,0x00,0xE0,0x00,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x30,0x03,0x80,0x1F,0xFF,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xE1,0xFF,0xFF,0xFF,0xF8,0x00,0x70,0x07,0x00,0x00,0x1C,0x01,0xC0,0x00,0x0E,0x00,0x60,0x00,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x38,0x03,0x80,0x00,0x0E,0x00,0xE0,0x00,0x07,0x00,0x38,0x00,0x01,0xC0,0x1C,0x00,0x00,0x70,0x07,0x00,0x00,0x1C,0x01,0xC0,0x00,0x07,0x00,0x70,0x00,0x01,0x80,0x1C,0x00,0xFF,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xE0,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x70,0x03,0x80,0x00,0x1C,0x01,0xC0,0x00,0x07,0x00,0x70,0x00,0x01,0xC0,0x1C,0x00,0x00,0x70,0x07,0x00,0x00,0x18,0x01,0xC0,0x00,0x0E,0x00,0xE0,0x00,0x03,0x80,0x38,0x00,0x00,0xE0,0x0E,0x00,0x00,0x38,0x03,0x80,0x00, // '#'
0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x3F,0xC0,0x00,0x1F,0xFF,0x80,0x03,0xFF,0xFC,0x00,0x7E,0x07,0xE0,0x0F,0x80,0x1F,0x01,0xE0,0x00,0xF8,0x1E,0x00,0x07,0x83,0xC0,0x00,0x3C,0x3C,0x00,0x03,0xC3,0x80,0x00,0x1C,0x38,0x00,0x01,0xC3,0x80,0x00,0x1C,0x38,0x00,0x01,0xC3,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x1E,0x00,0x00,0x01,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x7F,0x00,0x00,0x01,0xFC,0x00,0x00,0x0F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0x80,0x00,0x00,0xFE,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0x80,0x00,0x00,0x78,0x00,0x00,0x03,0xC0,0x00,0x00,0x1C,0x00,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0x70,0x00,0x01,0xE7,0x00,0x00,0x1E,0x78,0x00,0x03,0xC7,0xC0,0x00,0x3C,0x3E,0x00,0x07,0x81,0xF0,0x00,0xF8,0x0F,0xC0,0x7F,0x00,0x7F,0xFF,0xE0,0x03,0xFF,0xF8,0x00,0x07,0xFE,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x00,0x00, // '$'
0x03,0xE0,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x01,0xE0,0xF0,0x00,0x00,0x07,0x80,0xF0,0x00,0x00,0x0E,0x00,0xE0,0x01,0x00,0x38,0x00,0xE0,0x07,0x80,0x70,0x01,0xC0,0x0E,0x00,0xE0,0x03,0x80,0x38,0x01,0xC0,0x07,0x00,0xF0,0x03,0x80,0x0E,0x01,0xC0,0x07,0x00,0x1C,0x07,0x00,0x0E,0x00,0x38,0x0E,0x00,0x1C,0x00,0x70,0x38,0x00,0x1C,0x01,0xC0,0xE0,0x00,0x3C,0x07,0x81,0xC0,0x00,0x3C,0x1E,0x07,0x00,0x00,0x3F,0xFC,0x1C,0x00,0x00,0x3F,0xE0,0x38,0x00,0x00,0x1F,0x80,0xE0,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0xE0,0x1F,0x80,0x00,0x03,0x80,0xFF,0xC0,0x00,0x07,0x03,0xFF,0xC0,0x00,0x1C,0x0F,0x87,0xC0,0x00,0x70,0x1C,0x03,0x80,0x00,0xE0,0x70,0x03,0x80,0x03,0x80,0xE0,0x07,0x00,0x0F,0x01,0xC0,0x0E,0x00,0x1C,0x03,0x80,0x0C,0x00,0x70,0x06,0x00,0x18,0x01,0xE0,0x0C,0x00,0x30,0x03,0x80,0x18,0x00,0xE0,0x0E,0x00,0x38,0x01,0xC0,0x1C,0x00,0x70,0x03,0x80,0x10,0x00,0xE0,0x07,0x00,0x00,0x00,0xE0,0x1C,0x00,0x00,0x01,0xF0,0xF8,0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x00,0xFC,0x00, // '%'
0x00,0x3F,0x80,0x00,0x00,0x3F,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x0F,0x83,0xE0,0x00,0x07,0xC0,0x3C,0x00,0x01,0xE0,0x07,0x00,0x00,0xF0,0x01,0xE0,0x00,0x3C,0x00,0x38,0x00,0x0F,0x00,0x0E,0x00,0x03,0xC0,0x07,0x80,0x00,0xF0,0x01,0xE0,0x00,0x3C,0x00,0x70,0x00,0x0F,0x00,0x3C,0x00,0x01,0xE0,0x1E,0x00,0x00,0x78,0x0F,0x00,0x00,0x0F,0x07,0x80,0x00,0x03,0xC7,0xC0,0x00,0x00,0x7B,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0x3C,0x00,0x00,0x0F,0x07,0x80,0x0E,0x07,0x80,0xF0,0x03,0x83,0xC0,0x1E,0x00,0xE1,0xE0,0x07,0xC0,0x78,0x78,0x00,0xF8,0x1E,0x1C,0x00,0x1E,0x07,0x0F,0x00,0x03,0xC1,0xC3,0xC0,0x00,0x78,0xF0,0xF0,0x00,0x0F,0x38,0x3C,0x00,0x03,0xFE,0x0F,0x00,0x00,0x7F,0x01,0xC0,0x00,0x0F,0xC0,0x78,0x00,0x01,0xF0,0x1E,0x00,0x00,0xFC,0x03,0xC0,0x00,0x7F,0x80,0xF8,0x00,0x7C,0xF0,0x1F,0xC0,0x7E,0x1E,0x01,0xFF,0xFF,0x03,0xC0,0x3F,0xFF,0x00,0xF8,0x01,0xFE,0x00,0x00, // '&'
0x73,0x9C,0xE7,0x39,0xCC,0x63,0x19,0xCE,0x00, // '''
0x00,0x08,0x00,0x38,0x00,0xF0,0x03,0xC0,0x0F,0x00,0x1C,0x00,0x70,0x01,0xE0,0x03,0x80,0x0E,0x00,0x1C,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x00,0x0E,0x00,0x3C,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x80,0x0E,0x00,0x1C,0x00,0x38,0x00,0xF0,0x01,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x1E,0x00,0x3C,0x00,0x78,0x00,0xF0,0x01,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x1E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xF0,0x01,0xE0,0x01,0xC0,0x03,0x80,0x07,0x80,0x0F,0x00,0x0E,0x00,0x1E,0x00,0x1C,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xE0,0x01,0xE0,0x01,0xE0,0x01,0xC0,0x01,0x00, // '('
0x40,0x01,0xC0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x03,0xC0,0x03,0x80,0x03,0x80,0x07,0x80,0x07,0x00,0x0F,0x00,0x0E,0x00,0x1E,0x00,0x1C,0x00,0x38,0x00,0x78,0x00,0x70,0x00,0xE0,0x01,0xE0,0x03,0xC0,0x03,0x80,0x07,0x00,0x0F,0x00,0x1E,0x00,0x3C,0x00,0x78,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x80,0x0F,0x00,0x1E,0x00,0x38,0x00,0x70,0x01,0xE0,0x03,0xC0,0x07,0x00,0x0E,0x00,0x3C,0x00,0x70,0x00,0xE0,0x03,0xC0,0x07,0x00,0x1E,0x00,0x38,0x00,0xF0,0x01,0xC0,0x07,0x00,0x1E,0x00,0x38,0x00,0xE0,0x07,0x80,0x0E,0x00,0x08,0x00,0x00, // ')'
0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x01,0x00,0x70,0x04,0xF0,0x38,0x1E,0x7F,0x0C,0x3F,0x3F,0xE6,0xFF,0xC1,0xFF,0xFE,0x00,0x1F,0xF8,0x00,0x01,0xE0,0x00,0x01,0xF8,0x00,0x01,0xDC,0x00,0x01,0xE7,0x00,0x00,0xE3,0xC0,0x00,0xE0,0xF0,0x00,0xF0,0x38,0x00,0xF0,0x0E,0x00,0x70,0x07,0x80,0x78,0x01,0xC0,0x08,0x00,0x40, // '*'
0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x0F,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xF8,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,0x00,0x00, // '+'
0x1C,0x38,0x70,0xE1,0xC7,0x8F,0x1C,0x38,0xF1,0xC7,0x8E,0x00, // ','
0xFF,0xFD,0xFF,0xFB,0xFF,0xF0, // '-'
0x73,0xEF,0xBE,0x70, // '.'
0x00,0x00,0x78,0x00,0x01,0xC0,0x00,0x07,0x00,0x00,0x3C,0x00,0x00,0xE0,0x00,0x03,0x80,0x00,0x1C,0x00,0x00,0x70,0x00,0x03,0xC0,0x00,0x0E,0x00,0x00,0x38,0x00,0x01,0xE0,0x00,0x07,0x00,0x00,0x1C,0x00,0x00,0xE0,0x00,0x03,0x80,0x00,0x1E,0x00,0x00,0x70,0x00,0x01,0xC0,0x00,0x0E,0x00,0x00,0x38,0x00,0x00,0xE0,0x00,0x07,0x00,0x00,0x1C,0x00,0x00,0xF0,0x00,0x03,0x80,0x00,0x0E,0x00,0x00,0x70,0x00,0x01,0xC0,0x00,0x0F,0x00,0x00,0x38,0x00,0x00,0xE0,0x00,0x07,0x80,0x00,0x1C,0x00,0x00,0x70,0x00,0x03,0x80,0x00,0x0E,0x00,0x00,0x78,0x00,0x01,0xC0,0x00,0x07,0x00,0x00,0x3C,0x00,0x00,0xE0,0x00,0x03,0x80,0x00,0x1C,0x00,0x00,0x70,0x00,0x03,0xC0,0x00,0x0E,0x00,0x00,0x00, // '/'
0x00,0x3F,0x80,0x00,0x1F,0xFF,0x00,0x03,0xFF,0xF8,0x00,0x7C,0x07,0xC0,0x0F,0x00,0x1E,0x01,0xE0,0x00,0xF0,0x1C,0x00,0x07,0x03,0xC0,0x00,0x78,0x38,0x00,0x03,0x87,0x80,0x00,0x3C,0x78,0x00,0x03,0xC7,0x00,0x00,0x3C,0x70,0x00,0x01,0xC7,0x00,0x00,0x1C,0x70,0x00,0x01,0xCF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xC7,0x00,0x00,0x1C,0x70,0x00,0x01,0xC7,0x00,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x78,0x00,0x03,0xC3,0x80,0x00,0x38,0x3C,0x00,0x07,0x81,0xE0,0x00,0xF0,0x1E,0x00,0x0F,0x00,0xF8,0x01,0xE0,0x07,0xC0,0x7C,0x00,0x3F,0xFF,0x80,0x01,0xFF,0xF0,0x00,0x03,0xF8,0x00, // '0'
0x00,0x06,0x00,0x3E,0x01,0xFE,0x07,0xFE,0x3F,0xCE,0xFF,0x0E,0xF8,0x0E,0xC0,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E, // '1'
0x00,0x7F,0x80,0x00,0x0F,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x1F,0x81,0xFC,0x01,0xF0,0x01,0xE0,0x1E,0x00,0x07,0x81,0xE0,0x00,0x1E,0x0F,0x00,0x00,0xF0,0x70,0x00,0x07,0x87,0x80,0x00,0x1C,0x3C,0x00,0x00,0xE1,0xE0,0x00,0x07,0x8E,0x00,0x00,0x38,0x00,0x00,0x01,0xC0,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0x00,0x00,0x01,0xE0,0x00,0x00,0x1E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0x80,0x00,0x00,0x7F,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFC, // '2'
0x00,0x7F,0x80,0x00,0x1F,0xFF,0x00,0x07,0xFF,0xFC,0x00,0xFC,0x07,0xE0,0x1F,0x00,0x1F,0x03,0xC0,0x00,0xF0,0x3C,0x00,0x07,0x87,0x80,0x00,0x78,0x70,0x00,0x03,0x87,0x00,0x00,0x3C,0xF0,0x00,0x03,0xCF,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x00,0x78,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x00,0x00,0x3E,0x00,0x00,0x0F,0xC0,0x00,0x7F,0xF0,0x00,0x07,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0x00,0x00,0x00,0xF8,0x00,0x00,0x07,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x1C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0xE0,0x00,0x01,0xEE,0x00,0x00,0x1C,0xF0,0x00,0x01,0xCF,0x00,0x00,0x3C,0x70,0x00,0x03,0xC7,0x80,0x00,0x78,0x3C,0x00,0x07,0x83,0xF0,0x01,0xF0,0x1F,0xC0,0x7E,0x00,0x7F,0xFF,0xC0,0x03,0xFF,0xF0,0x00,0x07,0xFC,0x00, // '3'
0x00,0x00,0x1F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7B,0xC0,0x00,0x00,0xE7,0x80,0x00,0x03,0xCF,0x00,0x00,0x0F,0x1E,0x00,0x00,0x1C,0x3C,0x00,0x00,0x78,0x78,0x00,0x01,0xE0,0xF0,0x00,0x03,0x81,0xE0,0x00,0x0F,0x03,0xC0,0x00,0x3C,0x07,0x80,0x00,0x70,0x0F,0x00,0x01,0xE0,0x1E,0x00,0x03,0x80,0x3C,0x00,0x0F,0x00,0x78,0x00,0x3C,0x00,0xF0,0x00,0x70,0x01,0xE0,0x01,0xE0,0x03,0xC0,0x07,0x80,0x07,0x80,0x0E,0x00,0x0F,0x00,0x3C,0x00,0x1E,0x00,0xF0,0x00,0x3C,0x01,0xC0,0x00,0x78,0x07,0x80,0x00,0xF0,0x1F,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00, // '4'
0x1F,0xFF,0xFF,0x83,0xFF,0xFF,0xF0,0x7F,0xFF,0xFE,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0x80,0x00,0x00,0x70,0x00,0x00,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x7F,0x80,0x07,0x7F,0xFC,0x01,0xFF,0xFF,0xE0,0x3F,0x80,0x7E,0x07,0xC0,0x03,0xE0,0x70,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x00,0x00,0x1C,0xE0,0x00,0x03,0x9C,0x00,0x00,0x73,0xC0,0x00,0x1E,0x78,0x00,0x03,0xC7,0x00,0x00,0x70,0xF0,0x00,0x1E,0x0F,0x00,0x07,0x81,0xF0,0x01,0xF0,0x1F,0x80,0xFC,0x01,0xFF,0xFF,0x00,0x0F,0xFF,0x80,0x00,0x3F,0xC0,0x00, // '5'
0x00,0x01,0xF8,0x00,0x01,0xFF,0x00,0x00,0xFF,0xE0,0x00,0x7F,0x80,0x00,0x1F,0x80,0x00,0x07,0xC0,0x00,0x01,0xE0,0x00,0x00,0x78,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x1C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1C,0x00,0x00,0x03,0x81,0xFC,0x00,0xF1,0xFF,0xF0,0x1E,0x7F,0xFF,0x03,0x9F,0x03,0xF0,0x77,0x80,0x1F,0x0F,0xC0,0x00,0xF1,0xF0,0x00,0x1E,0x3E,0x00,0x01,0xE7,0x80,0x00,0x1C,0xE0,0x00,0x03,0xDC,0x00,0x00,0x7B,0x80,0x00,0x0F,0x70,0x00,0x00,0xEE,0x00,0x00,0x1D,0xC0,0x00,0x03,0xB8,0x00,0x00,0x77,0x00,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x79,0xC0,0x00,0x0E,0x3C,0x00,0x03,0xC7,0x80,0x00,0x78,0x78,0x00,0x1E,0x07,0x80,0x07,0xC0,0x78,0x01,0xF0,0x0F,0xC0,0xFC,0x00,0x7F,0xFF,0x00,0x07,0xFF,0x80,0x00,0x1F,0xC0,0x00, // '6'
0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFC,0x00,0x00,0x01,0xE0,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x1C,0x00,0x00,0x01,0xE0,0x00,0x00,0x0E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0x00,0x00,0x00,0x78,0x00,0x00,0x03,0x80,0x00,0x00,0x3C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x78,0x00,0x00,0x07,0x80,0x00,0x00,0x3C,0x00,0x00,0x01,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x70,0x00,0x00,0x07,0x80,0x00,0x00,0x3C,0x00,0x00,0x03,0xC0,0x00,0x00,0x1E,0x00,0x00,0x00,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00, // '7'
0x00,0x7F,0xC0,0x00,0x1F,0xFF,0x00,0x07,0xFF,0xFC,0x00,0xFC,0x07,0xE0,0x1F,0x00,0x1F,0x01,0xE0,0x00,0xF0,0x3C,0x00,0x07,0x83,0x80,0x00,0x78,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x78,0x00,0x03,0xC7,0x80,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x78,0x00,0x03,0xC3,0x80,0x00,0x38,0x3C,0x00,0x07,0x81,0xE0,0x00,0xF0,0x0F,0x00,0x1E,0x00,0x7C,0x07,0xC0,0x03,0xFF,0xF8,0x00,0x0F,0xFE,0x00,0x03,0xFF,0xF8,0x00,0xFC,0x07,0xE0,0x1F,0x00,0x1F,0x03,0xC0,0x00,0x78,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x70,0x00,0x01,0xEF,0x00,0x00,0x1E,0xF0,0x00,0x01,0xEE,0x00,0x00,0x0E,0xE0,0x00,0x00,0xEF,0x00,0x00,0x0E,0xF0,0x00,0x01,0xEF,0x00,0x00,0x1E,0x70,0x00,0x01,0xC7,0x80,0x00,0x3C,0x3C,0x00,0x07,0x83,0xE0,0x00,0xF8,0x1F,0xC0,0x7F,0x00,0x7F,0xFF,0xE0,0x03,0xFF,0xF8,0x00,0x07,0xFC,0x00, // '8'
0x00,0x7F,0x80,0x00,0x3F,0xFC,0x00,0x1F,0xFF,0xE0,0x07,0xE0,0x7E,0x01,0xF0,0x03,0xE0,0x7C,0x00,0x3C,0x0F,0x00,0x03,0xC3,0xC0,0x00,0x3C,0x78,0x00,0x07,0x8E,0x00,0x00,0x73,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEE,0x00,0x00,0x3D,0xC0,0x00,0x03,0xB8,0x00,0x00,0x77,0x00,0x00,0x0E,0xE0,0x00,0x01,0xDE,0x00,0x00,0x3B,0xC0,0x00,0x07,0x78,0x00,0x01,0xE7,0x00,0x00,0x3C,0xF0,0x00,0x0F,0x8F,0x00,0x03,0xF1,0xE0,0x00,0xFE,0x1F,0x00,0x3D,0xC1,0xF0,0x1F,0x38,0x1F,0xFF,0xCF,0x01,0xFF,0xE1,0xE0,0x07,0xF0,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x00,0x00,0x01,0xE0,0x00,0x00,0x38,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x01,0xF0,0x00,0x00,0x7C,0x00,0x00,0xFF,0x00,0x03,0xFF,0x80,0x00,0x7F,0xC0,0x00,0x0F,0xC0,0x00,0x00, // '9'
0x38,0xF9,0xF3,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x8F,0x9F,0x3E,0x38, // ':'
0x38,0xF9,0xF3,0xE3,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0xC3,0x87,0x0E,0x3C,0x78,0xE1,0xC7,0x8E,0x3C,0x70, // ';'
0x00,0x00,0x01,0x80,0x00,0x01,0xE0,0x00,0x01,0xF8,0x00,0x01,0xF8,0x00,0x01,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF8,0x00,0x03,0xF0,0x00,0x00,0xF0,0x00,0x00,0x3F,0x00,0x00,0x03,0xF0,0x00,0x00,0x3F,0x80,0x00,0x03,0xF8,0x00,0x00,0x3F,0x80,0x00,0x03,0xF8,0x00,0x00,0x1F,0x80,0x00,0x01,0xF8,0x00,0x00,0x1F,0x80,0x00,0x01,0xF8,0x00,0x00,0x1E,0x00,0x00,0x01,0x80, // '<'
0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xEF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xEF,0xFF,0xFF,0xF8, // '='
0x80,0x00,0x00,0x70,0x00,0x00,0x3E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xFC,0x00,0x00,0x3F,0x80,0x00,0x07,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xE0,0x00,0x01,0xFC,0x00,0x00,0x3F,0x80,0x00,0x07,0xE0,0x00,0x00,0xF0,0x00,0x01,0xF8,0x00,0x03,0xF8,0x00,0x07,0xF0,0x00,0x0F,0xE0,0x00,0x3F,0x80,0x00,0x7F,0x00,0x00,0xFE,0x00,0x01,0xFC,0x00,0x03,0xF0,0x00,0x03,0xE0,0x00,0x01,0xC0,0x00,0x00,0x80,0x00,0x00,0x00, // '>'
0x00,0xFE,0x00,0x07,0xFF,0xC0,0x0F,0xFF,0xE0,0x1F,0x81,0xF0,0x3E,0x00,0xF8,0x7C,0x00,0x78,0x78,0x00,0x3C,0x70,0x00,0x1C,0xF0,0x00,0x1C,0xF0,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x78,0x00,0x00,0xF8,0x00,0x00,0x78,0x00,0x00,0x70,0x00, // '?'
0x00,0x00,0x07,0xFE,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x1F,0xE0,0x07,0xF8,0x00,0x00,0x0F,0xC0,0x00,0x1F,0x80,0x00,0x0F,0xC0,0x00,0x01,0xF0,0x00,0x07,0xC0,0x00,0x00,0x3E,0x00,0x03,0xE0,0x00,0x00,0x03,0x80,0x01,0xF0,0x00,0x00,0x00,0x70,0x00,0x78,0x00,0x00,0x00,0x0E,0x00,0x3C,0x00,0x00,0x00,0x03,0x80,0x1E,0x00,0x00,0x00,0x00,0x70,0x07,0x00,0x00,0x00,0x00,0x1C,0x03,0xC0,0x00,0x7F,0x00,0x03,0x80,0xE0,0x00,0x7F,0xF0,0x00,0xE0,0x78,0x00,0x3F,0xFE,0x00,0x18,0x1C,0x00,0x1F,0x07,0xC0,0x07,0x07,0x00,0x0F,0x00,0x70,0x01,0xC3,0x80,0x07,0x80,0x1C,0x00,0x70,0xE0,0x01,0xC0,0x07,0x00,0x1C,0x38,0x00,0xF0,0x01,0xC0,0x03,0x1C,0x00,0x38,0x00,0x70,0x00,0xC7,0x00,0x1E,0x00,0x1C,0x00,0x31,0xC0,0x07,0x00,0x07,0x00,0x0C,0x70,0x01,0xC0,0x01,0xC0,0x03,0x9C,0x00,0xF0,0x00,0x70,0x00,0xE7,0x00,0x38,0x00,0x38,0x00,0x31,0xC0,0x0E,0x00,0x0E,0x00,0x0C,0x70,0x03,0x80,0x03,0x80,0x03,0x1C,0x00,0xE0,0x00,0xE0,0x00,0xC7,0x00,0x38,0x00,0x38,0x00,0x71,0xC0,0x0E,0x00,0x0E,0x00,0x1C,0x70,0x03,0x80,0x03,0x80,0x07,0x1C,0x00,0xE0,0x00,0xE0,0x01,0x87,0x00,0x38,0x00,0x78,0x00,0xE1,0xC0,0x0E,0x00,0x1E,0x00,0x38,0x70,0x03,0x80,0x0F,0x80,0x1C,0x0E,0x00,0xF0,0x07,0xE0,0x07,0x03,0x80,0x1E,0x03,0xBC,0x03,0x80,0xE0,0x07,0xC1,0xE7,0x81,0xC0,0x3C,0x00,0xFF,0xF1,0xFF,0xF0,0x07,0x00,0x1F,0xF0,0x3F,0xF0,0x01,0xE0,0x03,0xF0,0x03,0xF0,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x0C,0x00,0x00,0x00,0x7F,0x80,0x3F,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x03,0xFF,0x00,0x00,0x00, // '@'
0x00,0x00,0xE0,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x03,0xB8,0x00,0x00,0x00,0x3B,0x80,0x00,0x00,0x07,0xBC,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x07,0x1C,0x00,0x00,0x00,0xF1,0xE0,0x00,0x00,0x0E,0x0E,0x00,0x00,0x01,0xE0,0xF0,0x00,0x00,0x1E,0x0F,0x00,0x00,0x01,0xC0,0x70,0x00,0x00,0x3C,0x07,0x80,0x00,0x03,0x80,0x78,0x00,0x00,0x38,0x03,0x80,0x00,0x07,0x80,0x3C,0x00,0x00,0x70,0x01,0xC0,0x00,0x0F,0x00,0x1E,0x00,0x00,0xF0,0x01,0xE0,0x00,0x0E,0x00,0x0E,0x00,0x01,0xE0,0x00,0xF0,0x00,0x1E,0x00,0x0F,0x00,0x01,0xC0,0x00,0x70,0x00,0x3C,0x00,0x07,0x80,0x03,0xC0,0x00,0x78,0x00,0x78,0x00,0x03,0xC0,0x07,0xFF,0xFF,0xFC,0x00,0x7F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xFE,0x00,0xF0,0x00,0x01,0xE0,0x0E,0x00,0x00,0x0E,0x01,0xE0,0x00,0x00,0xF0,0x1E,0x00,0x00,0x0F,0x03,0xC0,0x00,0x00,0x78,0x3C,0x00,0x00,0x07,0x83,0x80,0x00,0x00,0x38,0x78,0x00,0x00,0x03,0xC7,0x80,0x00,0x00,0x3C,0x70,0x00,0x00,0x01,0xCF,0x00,0x00,0x00,0x1E,0xF0,0x00,0x00,0x01,0xE0, // 'A'
0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x3F,0xFF,0xFF,0x01,0xC0,0x00,0xFC,0x0E,0x00,0x01,0xF0,0x70,0x00,0x07,0xC3,0x80,0x00,0x1E,0x1C,0x00,0x00,0x78,0xE0,0x00,0x03,0xC7,0x00,0x00,0x1E,0x38,0x00,0x00,0xF1,0xC0,0x00,0x07,0x8E,0x00,0x00,0x3C,0x70,0x00,0x01,0xE3,0x80,0x00,0x0E,0x1C,0x00,0x00,0xF0,0xE0,0x00,0x0F,0x07,0x00,0x00,0xF8,0x38,0x00,0x1F,0x81,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0x00,0x7F,0xFF,0xFE,0x03,0x80,0x00,0xFC,0x1C,0x00,0x01,0xF0,0xE0,0x00,0x07,0xC7,0x00,0x00,0x1E,0x38,0x00,0x00,0x79,0xC0,0x00,0x03,0xCE,0x00,0x00,0x0E,0x70,0x00,0x00,0x73,0x80,0x00,0x03,0xDC,0x00,0x00,0x1E,0xE0,0x00,0x00,0xE7,0x00,0x00,0x07,0x38,0x00,0x00,0x79,0xC0,0x00,0x03,0xCE,0x00,0x00,0x3C,0x70,0x00,0x03,0xE3,0x80,0x00,0x3E,0x1C,0x00,0x07,0xE0,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xC0,0x3F,0xFF,0xF0,0x00, // 'B'
0x00,0x0F,0xF8,0x00,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xE0,0x00,0x7F,0x01,0xFC,0x00,0x7C,0x00,0x1F,0x00,0x7C,0x00,0x07,0xC0,0x7C,0x00,0x01,0xE0,0x3C,0x00,0x00,0x78,0x3C,0x00,0x00,0x3C,0x1E,0x00,0x00,0x0F,0x1E,0x00,0x00,0x07,0x8F,0x00,0x00,0x01,0xC7,0x00,0x00,0x00,0xE7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x3C,0xE0,0x00,0x00,0x1C,0x78,0x00,0x00,0x0E,0x3C,0x00,0x00,0x0F,0x0F,0x00,0x00,0x07,0x87,0x80,0x00,0x07,0x81,0xE0,0x00,0x03,0xC0,0xF8,0x00,0x03,0xC0,0x3E,0x00,0x03,0xE0,0x0F,0x80,0x03,0xE0,0x03,0xF0,0x0F,0xE0,0x00,0xFF,0xFF,0xC0,0x00,0x1F,0xFF,0xC0,0x00,0x01,0xFF,0x00,0x00, // 'C'
0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xF0,0x07,0x80,0x07,0xF0,0x0F,0x00,0x01,0xF0,0x1E,0x00,0x00,0xF0,0x3C,0x00,0x00,0xF0,0x78,0x00,0x00,0xF0,0xF0,0x00,0x00,0xF1,0xE0,0x00,0x01,0xE3,0xC0,0x00,0x01,0xE7,0x80,0x00,0x03,0xCF,0x00,0x00,0x03,0x9E,0x00,0x00,0x07,0xBC,0x00,0x00,0x0F,0x78,0x00,0x00,0x1E,0xF0,0x00,0x00,0x1D,0xE0,0x00,0x00,0x3B,0xC0,0x00,0x00,0x77,0x80,0x00,0x00,0xEF,0x00,0x00,0x01,0xDE,0x00,0x00,0x03,0xBC,0x00,0x00,0x07,0x78,0x00,0x00,0x0E,0xF0,0x00,0x00,0x1D,0xE0,0x00,0x00,0x3B,0xC0,0x00,0x00,0x77,0x80,0x00,0x01,0xEF,0x00,0x00,0x03,0xDE,0x00,0x00,0x07,0xBC,0x00,0x00,0x0E,0x78,0x00,0x00,0x3C,0xF0,0x00,0x00,0x79,0xE0,0x00,0x01,0xE3,0xC0,0x00,0x03,0xC7,0x80,0x00,0x0F,0x0F,0x00,0x00,0x3C,0x1E,0x00,0x01,0xF0,0x3C,0x00,0x07,0xC0,0x78,0x00,0x7F,0x00,0xFF,0xFF,0xFC,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFE,0x00,0x00, // 'D'
0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xEF,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xE0, // 'E'
0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xEF,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xF0,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x00, // 'F'
0x00,0x0F,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x3F,0xFF,0xF0,0x00,0x7F,0x00,0xFE,0x00,0x7E,0x00,0x1F,0x80,0x7C,0x00,0x03,0xC0,0x3C,0x00,0x00,0xF0,0x3C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x1E,0x1E,0x00,0x00,0x07,0x0E,0x00,0x00,0x03,0xCF,0x00,0x00,0x01,0xE7,0x80,0x00,0x00,0x73,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0xFF,0xFE,0xF0,0x00,0x7F,0xFF,0x78,0x00,0x3F,0xFF,0xBC,0x00,0x00,0x01,0xDE,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x73,0x80,0x00,0x00,0x39,0xE0,0x00,0x00,0x1C,0xF0,0x00,0x00,0x0E,0x78,0x00,0x00,0x07,0x1E,0x00,0x00,0x03,0x8F,0x00,0x00,0x01,0xC3,0xC0,0x00,0x00,0xE1,0xF0,0x00,0x00,0x70,0x78,0x00,0x00,0x78,0x1F,0x00,0x00,0x7C,0x07,0xC0,0x00,0xFC,0x01,0xFC,0x03,0xFC,0x00,0x7F,0xFF,0xFC,0x00,0x0F,0xFF,0xF0,0x00,0x00,0xFF,0xC0,0x00, // 'G'
0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFB,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xDE,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0xF7,0x80,0x00,0x00,0x7B,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xBC,0x00,0x00,0x03,0xC0, // 'H'
0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBC, // 'I'
0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0E,0x78,0x00,0x03,0xC7,0x80,0x00,0x78,0xF0,0x00,0x1E,0x0F,0x00,0x07,0xC1,0xF0,0x01,0xF0,0x1F,0x80,0xFC,0x01,0xFF,0xFF,0x00,0x0F,0xFF,0xC0,0x00,0x3F,0xC0,0x00, // 'J'
0xF0,0x00,0x00,0x7C,0x78,0x00,0x00,0x7C,0x3C,0x00,0x00,0x3C,0x1E,0x00,0x00,0x3C,0x0F,0x00,0x00,0x3C,0x07,0x80,0x00,0x3C,0x03,0xC0,0x00,0x3C,0x01,0xE0,0x00,0x3C,0x00,0xF0,0x00,0x3E,0x00,0x78,0x00,0x3E,0x00,0x3C,0x00,0x3E,0x00,0x1E,0x00,0x3E,0x00,0x0F,0x00,0x3E,0x00,0x07,0x80,0x3E,0x00,0x03,0xC0,0x3E,0x00,0x01,0xE0,0x3E,0x00,0x00,0xF0,0x3E,0x00,0x00,0x78,0x3E,0x00,0x00,0x3C,0x3E,0x00,0x00,0x1E,0x1F,0x00,0x00,0x0F,0x1F,0xC0,0x00,0x07,0x9F,0xF0,0x00,0x03,0xDE,0x78,0x00,0x01,0xFE,0x1E,0x00,0x00,0xFE,0x0F,0x80,0x00,0x7E,0x03,0xE0,0x00,0x3E,0x00,0xF8,0x00,0x1E,0x00,0x3C,0x00,0x0F,0x00,0x0F,0x00,0x07,0x80,0x07,0xC0,0x03,0xC0,0x01,0xF0,0x01,0xE0,0x00,0x7C,0x00,0xF0,0x00,0x1E,0x00,0x78,0x00,0x07,0x80,0x3C,0x00,0x01,0xE0,0x1E,0x00,0x00,0xF8,0x0F,0x00,0x00,0x3E,0x07,0x80,0x00,0x0F,0x03,0xC0,0x00,0x03,0xC1,0xE0,0x00,0x00,0xF0,0xF0,0x00,0x00,0x7C,0x78,0x00,0x00,0x1F,0x3C,0x00,0x00,0x07,0xC0, // 'K'
0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xF0,0x00,0x00,0x3C,0x00,0x00,0x0F,0x00,0x00,0x03,0xC0,0x00,0x00,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xEF,0xFF,0xFF,0xF8, // 'L'
0xF8,0x00,0x00,0x00,0x0F,0xDF,0x80,0x00,0x00,0x01,0xFB,0xF0,0x00,0x00,0x00,0x3F,0x7F,0x00,0x00,0x00,0x0F,0xEF,0xE0,0x00,0x00,0x01,0xFD,0xFC,0x00,0x00,0x00,0x7F,0xBF,0xC0,0x00,0x00,0x0F,0xF7,0xB8,0x00,0x00,0x01,0xDE,0xF7,0x80,0x00,0x00,0x7B,0xDE,0xF0,0x00,0x00,0x0E,0x7B,0xCF,0x00,0x00,0x03,0xCF,0x79,0xE0,0x00,0x00,0x79,0xEF,0x1C,0x00,0x00,0x1E,0x3D,0xE3,0xC0,0x00,0x03,0xC7,0xBC,0x38,0x00,0x00,0x70,0xF7,0x87,0x80,0x00,0x1E,0x1E,0xF0,0xF0,0x00,0x03,0x83,0xDE,0x0E,0x00,0x00,0xF0,0x7B,0xC1,0xE0,0x00,0x1E,0x0F,0x78,0x1C,0x00,0x03,0x81,0xEF,0x03,0xC0,0x00,0xF0,0x3D,0xE0,0x38,0x00,0x1C,0x07,0xBC,0x07,0x00,0x07,0x80,0xF7,0x80,0xF0,0x00,0xE0,0x1E,0xF0,0x0E,0x00,0x3C,0x03,0xDE,0x01,0xE0,0x07,0x80,0x7B,0xC0,0x1C,0x00,0xE0,0x0F,0x78,0x03,0xC0,0x3C,0x01,0xEF,0x00,0x78,0x07,0x00,0x3D,0xE0,0x07,0x01,0xE0,0x07,0xBC,0x00,0xF0,0x3C,0x00,0xF7,0x80,0x0E,0x07,0x00,0x1E,0xF0,0x01,0xE1,0xE0,0x03,0xDE,0x00,0x1C,0x38,0x00,0x7B,0xC0,0x03,0x8F,0x00,0x0F,0x78,0x00,0x79,0xC0,0x01,0xEF,0x00,0x07,0x78,0x00,0x3D,0xE0,0x00,0xFF,0x00,0x07,0xBC,0x00,0x0F,0xC0,0x00,0xF7,0x80,0x01,0xF8,0x00,0x1E,0xF0,0x00,0x3E,0x00,0x03,0xDE,0x00,0x03,0xC0,0x00,0x7B,0xC0,0x00,0x78,0x00,0x0F,0x00, // 'M'
0xF0,0x00,0x00,0x0E,0xF0,0x00,0x00,0x0E,0xF8,0x00,0x00,0x0E,0xFC,0x00,0x00,0x0E,0xFC,0x00,0x00,0x0E,0xFE,0x00,0x00,0x0E,0xEF,0x00,0x00,0x0E,0xEF,0x00,0x00,0x0E,0xE7,0x80,0x00,0x0E,0xE3,0xC0,0x00,0x0E,0xE3,0xC0,0x00,0x0E,0xE1,0xE0,0x00,0x0E,0xE0,0xF0,0x00,0x0E,0xE0,0xF0,0x00,0x0E,0xE0,0x78,0x00,0x0E,0xE0,0x3C,0x00,0x0E,0xE0,0x3C,0x00,0x0E,0xE0,0x1E,0x00,0x0E,0xE0,0x0F,0x00,0x0E,0xE0,0x0F,0x00,0x0E,0xE0,0x07,0x80,0x0E,0xE0,0x03,0xC0,0x0E,0xE0,0x03,0xC0,0x0E,0xE0,0x01,0xE0,0x0E,0xE0,0x00,0xF0,0x0E,0xE0,0x00,0xF0,0x0E,0xE0,0x00,0x78,0x0E,0xE0,0x00,0x3C,0x0E,0xE0,0x00,0x3C,0x0E,0xE0,0x00,0x1E,0x0E,0xE0,0x00,0x0F,0x0E,0xE0,0x00,0x0F,0x0E,0xE0,0x00,0x07,0x8E,0xE0,0x00,0x03,0xCE,0xE0,0x00,0x03,0xCE,0xE0,0x00,0x01,0xEE,0xE0,0x00,0x00,0xFE,0xE0,0x00,0x00,0xFE,0xE0,0x00,0x00,0x7E,0xE0,0x00,0x00,0x3E,0xE0,0x00,0x00,0x3E,0xE0,0x00,0x00,0x1E,0xE0,0x00,0x00,0x0E, // 'N'
0x00,0x0F,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x0F,0xFF,0xF8,0x00,0x0F,0xE0,0x3F,0x80,0x07,0xC0,0x01,0xF0,0x03,0xE0,0x00,0x3E,0x00,0xF0,0x00,0x07,0x80,0x78,0x00,0x00,0xF0,0x3C,0x00,0x00,0x1E,0x0F,0x00,0x00,0x07,0x87,0x80,0x00,0x00,0xF1,0xE0,0x00,0x00,0x3C,0x70,0x00,0x00,0x07,0x1C,0x00,0x00,0x01,0xCF,0x00,0x00,0x00,0x7B,0xC0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xBC,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0x7B,0xC0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xBC,0x00,0x00,0x01,0xE7,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x1C,0x78,0x00,0x00,0x0F,0x1E,0x00,0x00,0x03,0xC3,0xC0,0x00,0x01,0xE0,0xF0,0x00,0x00,0x78,0x1E,0x00,0x00,0x3C,0x03,0xC0,0x00,0x1F,0x00,0xF8,0x00,0x0F,0x80,0x1F,0x00,0x07,0xC0,0x03,0xF8,0x0F,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0x07,0xFF,0xF0,0x00,0x00,0x3F,0xE0,0x00, // 'O'
0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x3C,0x00,0x07,0xF0,0xF0,0x00,0x07,0xE3,0xC0,0x00,0x07,0x8F,0x00,0x00,0x0F,0x3C,0x00,0x00,0x3C,0xF0,0x00,0x00,0x7B,0xC0,0x00,0x01,0xEF,0x00,0x00,0x03,0xBC,0x00,0x00,0x0E,0xF0,0x00,0x00,0x3B,0xC0,0x00,0x00,0xEF,0x00,0x00,0x03,0xBC,0x00,0x00,0x1E,0xF0,0x00,0x00,0x7B,0xC0,0x00,0x01,0xEF,0x00,0x00,0x0F,0x3C,0x00,0x00,0x7C,0xF0,0x00,0x03,0xE3,0xC0,0x00,0x7F,0x0F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0x80,0xFF,0xFF,0xF0,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x00, // 'P'
0x00,0x0F,0xF0,0x00,0x00,0x1F,0xFF,0x80,0x00,0x0F,0xFF,0xF8,0x00,0x0F,0xE0,0x3F,0x80,0x07,0xC0,0x03,0xF0,0x03,0xE0,0x00,0x3E,0x01,0xF0,0x00,0x07,0x80,0x78,0x00,0x00,0xF0,0x3C,0x00,0x00,0x1C,0x0F,0x00,0x00,0x07,0x87,0x80,0x00,0x00,0xE1,0xE0,0x00,0x00,0x3C,0x70,0x00,0x00,0x0F,0x3C,0x00,0x00,0x01,0xCF,0x00,0x00,0x00,0x7B,0xC0,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xE0,0x00,0x00,0x07,0xB8,0x00,0x00,0x01,0xEE,0x00,0x00,0x00,0x7B,0x80,0x00,0x00,0x1E,0xF0,0x00,0x00,0x07,0xBC,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x3C,0x78,0x00,0x00,0x0F,0x1E,0x00,0x00,0x03,0x83,0xC0,0x00,0x01,0xE0,0xF0,0x00,0x00,0x78,0x1E,0x00,0x00,0x3C,0x07,0xC0,0x00,0x1E,0x00,0xF8,0x00,0x0F,0x80,0x1F,0x00,0x07,0xC0,0x03,0xF8,0x0F,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0x07,0xFF,0xF8,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x40, // 'Q'
0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xFC,0x07,0x80,0x01,0xFC,0x0F,0x00,0x00,0x7C,0x1E,0x00,0x00,0x7C,0x3C,0x00,0x00,0x78,0x78,0x00,0x00,0x78,0xF0,0x00,0x00,0xF1,0xE0,0x00,0x00,0xE3,0xC0,0x00,0x01,0xC7,0x80,0x00,0x03,0xCF,0x00,0x00,0x07,0x9E,0x00,0x00,0x0F,0x3C,0x00,0x00,0x1E,0x78,0x00,0x00,0x38,0xF0,0x00,0x00,0xF1,0xE0,0x00,0x01,0xE3,0xC0,0x00,0x07,0x87,0x80,0x00,0x1F,0x0F,0x00,0x00,0x7C,0x1E,0x00,0x07,0xF0,0x3F,0xFF,0xFF,0xC0,0x7F,0xFF,0xFE,0x00,0xFF,0xFF,0xF0,0x01,0xE0,0x00,0xF0,0x03,0xC0,0x01,0xE0,0x07,0x80,0x01,0xE0,0x0F,0x00,0x03,0xC0,0x1E,0x00,0x03,0xC0,0x3C,0x00,0x07,0x80,0x78,0x00,0x07,0x80,0xF0,0x00,0x07,0x81,0xE0,0x00,0x0F,0x03,0xC0,0x00,0x0F,0x07,0x80,0x00,0x1E,0x0F,0x00,0x00,0x1E,0x1E,0x00,0x00,0x3C,0x3C,0x00,0x00,0x3C,0x78,0x00,0x00,0x3C,0xF0,0x00,0x00,0x79,0xE0,0x00,0x00,0x7B,0xC0,0x00,0x00,0xF0, // 'R'
0x00,0x1F,0xF0,0x00,0x01,0xFF,0xFC,0x00,0x0F,0xFF,0xFE,0x00,0x3F,0x00,0xFE,0x00,0xF8,0x00,0x3E,0x03,0xC0,0x00,0x3E,0x0F,0x00,0x00,0x3C,0x1E,0x00,0x00,0x3C,0x78,0x00,0x00,0x38,0xF0,0x00,0x00,0x79,0xE0,0x00,0x00,0xF3,0xC0,0x00,0x01,0xE7,0x80,0x00,0x03,0xCF,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xFC,0x00,0x00,0x03,0xFF,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x70,0x00,0x00,0x0E,0xE0,0x00,0x00,0x1D,0xE0,0x00,0x00,0x3B,0xC0,0x00,0x00,0x73,0x80,0x00,0x01,0xE7,0x80,0x00,0x03,0xCF,0x80,0x00,0x0F,0x0F,0x80,0x00,0x3E,0x0F,0xC0,0x00,0xF8,0x0F,0xE0,0x0F,0xE0,0x07,0xFF,0xFF,0x80,0x03,0xFF,0xFC,0x00,0x00,0xFF,0xC0,0x00, // 'S'
0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0xFF,0xFF,0xC0,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00, // 'T'
0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1E,0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1E,0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1E,0xE0,0x00,0x00,0x3D,0xC0,0x00,0x00,0x7B,0x80,0x00,0x00,0xF7,0x00,0x00,0x01,0xEE,0x00,0x00,0x03,0xDC,0x00,0x00,0x07,0xB8,0x00,0x00,0x0F,0x70,0x00,0x00,0x1C,0xE0,0x00,0x00,0x39,0xE0,0x00,0x00,0xF3,0xC0,0x00,0x01,0xE3,0x80,0x00,0x03,0xC7,0x80,0x00,0x0F,0x0F,0x80,0x00,0x3E,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x03,0xE0,0x0F,0xE0,0x3F,0x80,0x0F,0xFF,0xFE,0x00,0x07,0xFF,0xF0,0x00,0x01,0xFF,0x00,0x00, // 'U'
0xF0,0x00,0x00,0x01,0xEF,0x00,0x00,0x00,0x1E,0x78,0x00,0x00,0x03,0xC7,0x80,0x00,0x00,0x3C,0x38,0x00,0x00,0x03,0x83,0xC0,0x00,0x00,0x78,0x3C,0x00,0x00,0x07,0x81,0xC0,0x00,0x00,0xF0,0x1E,0x00,0x00,0x0F,0x01,0xE0,0x00,0x00,0xF0,0x0F,0x00,0x00,0x1E,0x00,0xF0,0x00,0x01,0xE0,0x07,0x00,0x00,0x1E,0x00,0x78,0x00,0x03,0xC0,0x07,0x80,0x00,0x3C,0x00,0x38,0x00,0x03,0x80,0x03,0xC0,0x00,0x78,0x00,0x3C,0x00,0x07,0x80,0x01,0xC0,0x00,0x70,0x00,0x1E,0x00,0x0F,0x00,0x01,0xE0,0x00,0xF0,0x00,0x0E,0x00,0x1E,0x00,0x00,0xF0,0x01,0xE0,0x00,0x07,0x00,0x1C,0x00,0x00,0x78,0x03,0xC0,0x00,0x07,0x80,0x3C,0x00,0x00,0x38,0x03,0x80,0x00,0x03,0xC0,0x78,0x00,0x00,0x3C,0x07,0x80,0x00,0x01,0xC0,0x70,0x00,0x00,0x1E,0x0F,0x00,0x00,0x00,0xE0,0xF0,0x00,0x00,0x0E,0x0E,0x00,0x00,0x00,0xF1,0xE0,0x00,0x00,0x07,0x1C,0x00,0x00,0x00,0x71,0xC0,0x00,0x00,0x07,0xBC,0x00,0x00,0x00,0x3B,0x80,0x00,0x00,0x03,0xB8,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0xE0,0x00,0x00, // 'V'
0xF0,0x00,0x01,0xE0,0x00,0x03,0xDE,0x00,0x00,0x3C,0x00,0x00,0x7B,0xC0,0x00,0x07,0x80,0x00,0x0F,0x38,0x00,0x01,0xF8,0x00,0x01,0xC7,0x80,0x00,0x3F,0x00,0x00,0x78,0xF0,0x00,0x07,0xE0,0x00,0x0F,0x1E,0x00,0x00,0xFE,0x00,0x01,0xE1,0xC0,0x00,0x3D,0xC0,0x00,0x38,0x3C,0x00,0x07,0x38,0x00,0x0F,0x07,0x80,0x00,0xE7,0x00,0x01,0xE0,0xF0,0x00,0x3C,0x70,0x00,0x3C,0x0E,0x00,0x07,0x0E,0x00,0x07,0x01,0xE0,0x00,0xE1,0xC0,0x01,0xE0,0x3C,0x00,0x1C,0x3C,0x00,0x3C,0x07,0x80,0x07,0x83,0x80,0x07,0x80,0x70,0x00,0xE0,0x70,0x00,0xE0,0x0F,0x00,0x1C,0x0E,0x00,0x3C,0x01,0xE0,0x07,0x80,0xE0,0x07,0x80,0x3C,0x00,0xE0,0x1C,0x00,0xF0,0x03,0x80,0x1C,0x03,0x80,0x1C,0x00,0x78,0x07,0x80,0x78,0x03,0x80,0x0F,0x00,0xE0,0x07,0x00,0xF0,0x01,0xE0,0x1C,0x00,0xE0,0x1E,0x00,0x1C,0x03,0x80,0x1C,0x03,0x80,0x03,0xC0,0xF0,0x01,0xC0,0x70,0x00,0x78,0x1C,0x00,0x38,0x1E,0x00,0x07,0x03,0x80,0x07,0x03,0xC0,0x00,0xE0,0xF0,0x00,0xF0,0x70,0x00,0x1E,0x1C,0x00,0x0E,0x0E,0x00,0x03,0xC3,0x80,0x01,0xC3,0xC0,0x00,0x38,0x70,0x00,0x3C,0x78,0x00,0x07,0x1E,0x00,0x03,0x8E,0x00,0x00,0xE3,0x80,0x00,0x71,0xC0,0x00,0x1E,0x70,0x00,0x0E,0x78,0x00,0x01,0xDE,0x00,0x01,0xEE,0x00,0x00,0x3B,0x80,0x00,0x1D,0xC0,0x00,0x07,0x70,0x00,0x03,0xB8,0x00,0x00,0xEE,0x00,0x00,0x77,0x00,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00,0x01,0xF0,0x00,0x00,0xF8,0x00,0x00,0x3E,0x00,0x00,0x1F,0x00,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00, // 'W'
0xF8,0x00,0x00,0x0F,0x9E,0x00,0x00,0x07,0xC3,0xC0,0x00,0x01,0xE0,0xF8,0x00,0x00,0xF0,0x1E,0x00,0x00,0x7C,0x03,0xC0,0x00,0x1E,0x00,0xF8,0x00,0x0F,0x00,0x1E,0x00,0x07,0xC0,0x03,0xC0,0x01,0xE0,0x00,0xF8,0x00,0xF0,0x00,0x1E,0x00,0x7C,0x00,0x03,0xC0,0x1E,0x00,0x00,0xF8,0x0F,0x00,0x00,0x1E,0x07,0xC0,0x00,0x03,0xC1,0xE0,0x00,0x00,0xF8,0xF0,0x00,0x00,0x1E,0x7C,0x00,0x00,0x03,0xDE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0x78,0x00,0x00,0x07,0xDE,0x00,0x00,0x01,0xE3,0xC0,0x00,0x00,0xF0,0x78,0x00,0x00,0x7C,0x1E,0x00,0x00,0x1E,0x03,0xC0,0x00,0x0F,0x00,0x78,0x00,0x07,0xC0,0x1E,0x00,0x01,0xE0,0x03,0xC0,0x00,0xF0,0x00,0x78,0x00,0x7C,0x00,0x1E,0x00,0x1E,0x00,0x03,0xC0,0x0F,0x00,0x00,0x78,0x07,0xC0,0x00,0x1E,0x01,0xE0,0x00,0x03,0xC0,0xF0,0x00,0x00,0xF8,0x7C,0x00,0x00,0x1E,0x1E,0x00,0x00,0x03,0xCF,0x00,0x00,0x00,0xF8, // 'X'
0xF0,0x00,0x00,0x03,0xCF,0x00,0x00,0x00,0xF1,0xE0,0x00,0x00,0x1E,0x1E,0x00,0x00,0x07,0x83,0xC0,0x00,0x01,0xF0,0x3C,0x00,0x00,0x3C,0x07,0xC0,0x00,0x0F,0x00,0x78,0x00,0x01,0xE0,0x07,0x80,0x00,0x78,0x00,0xF0,0x00,0x0F,0x00,0x0F,0x00,0x03,0xC0,0x01,0xE0,0x00,0x78,0x00,0x1E,0x00,0x1E,0x00,0x03,0xC0,0x07,0x80,0x00,0x3C,0x00,0xF0,0x00,0x03,0xC0,0x3C,0x00,0x00,0x78,0x07,0x80,0x00,0x07,0x81,0xE0,0x00,0x00,0xF0,0x38,0x00,0x00,0x0F,0x0F,0x00,0x00,0x01,0xE1,0xC0,0x00,0x00,0x1E,0x78,0x00,0x00,0x01,0xDE,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x07,0x80,0x00,0x00, // 'Y'
0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xF0, // 'Z'
0xFF,0xBF,0xEF,0xFB,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0x80,0xE0,0x38,0x0E,0x03,0xFE,0xFF,0xBF,0xE0, // '['
0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0x00, // '\'
0xFF,0xDF,0xFB,0xFF,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF0,0x1E,0x03,0xC0,0x78,0x0F,0x01,0xE0,0x3C,0x07,0x80,0xF7,0xFE,0xFF,0xDF,0xF8, // ']'
0x00,0x70,0x00,0x07,0x80,0x00,0x3E,0x00,0x01,0xF0,0x00,0x1F,0xC0,0x00,0xEE,0x00,0x0F,0x70,0x00,0x71,0xC0,0x07,0x8E,0x00,0x38,0x78,0x01,0xC1,0xC0,0x1E,0x0E,0x00,0xE0,0x38,0x0F,0x01,0xC0,0x70,0x0F,0x03,0x80,0x38,0x3C,0x01,0xE1,0xC0,0x07,0x1E,0x00,0x38,0xE0,0x01,0xEF,0x00,0x07,0x00, // '^'
0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0x00, // '_'
0xF8,0x0F,0x00,0xF0,0x0F,0x00,0xF0,0x0E,0x01,0xE0,0x1E, // '`'
0x00,0x7F,0x80,0x00,0xFF,0xFC,0x00,0xFF,0xFF,0x80,0x7E,0x03,0xF0,0x3E,0x00,0x3E,0x0F,0x00,0x07,0x87,0x80,0x00,0xF1,0xC0,0x00,0x3C,0x70,0x00,0x07,0x00,0x00,0x01,0xC0,0x00,0x00,0x70,0x00,0x00,0x1C,0x00,0x00,0x07,0x00,0x00,0x01,0xC0,0x07,0xFF,0xF0,0x0F,0xFF,0xFC,0x0F,0xFF,0xFF,0x07,0xF0,0x01,0xC3,0xE0,0x00,0x71,0xF0,0x00,0x1C,0x78,0x00,0x07,0x3C,0x00,0x01,0xCF,0x00,0x00,0x73,0x80,0x00,0x1C,0xE0,0x00,0x0F,0x3C,0x00,0x03,0xCF,0x00,0x01,0xF1,0xE0,0x00,0xFC,0x7C,0x00,0xF7,0x0F,0x80,0xF9,0xE1,0xFF,0xFC,0x78,0x3F,0xFC,0x1E,0x03,0xFC,0x00,0x00, // 'a'
0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x7F,0x00,0x3C,0x3F,0xFC,0x07,0x9F,0xFF,0xC0,0xF7,0xC0,0xFC,0x1F,0xE0,0x07,0xC3,0xF0,0x00,0x78,0x7E,0x00,0x07,0x8F,0x80,0x00,0x71,0xE0,0x00,0x0F,0x3C,0x00,0x00,0xE7,0x80,0x00,0x1C,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xCF,0x00,0x00,0x79,0xE0,0x00,0x0F,0x3E,0x00,0x01,0xC7,0xC0,0x00,0x78,0xFC,0x00,0x1E,0x1F,0xE0,0x07,0xC3,0xDF,0x03,0xF0,0x79,0xFF,0xFC,0x0F,0x0F,0xFF,0x00,0x00,0x7F,0x00,0x00, // 'b'
0x00,0x7F,0x80,0x00,0x3F,0xFE,0x00,0x1F,0xFF,0xE0,0x07,0xE0,0x7E,0x01,0xF0,0x03,0xE0,0x3C,0x00,0x1E,0x0F,0x00,0x01,0xC3,0xC0,0x00,0x3C,0x78,0x00,0x03,0x8E,0x00,0x00,0x73,0xC0,0x00,0x0E,0x78,0x00,0x00,0x2F,0x00,0x00,0x01,0xC0,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xE0,0x00,0x00,0x1C,0x00,0x00,0x03,0x80,0x00,0x00,0x70,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x1E,0x78,0x00,0x03,0x8F,0x00,0x00,0xF0,0xF0,0x00,0x1E,0x0F,0x00,0x07,0x81,0xF0,0x01,0xE0,0x1F,0x80,0xF8,0x01,0xFF,0xFE,0x00,0x0F,0xFF,0x80,0x00,0x7F,0x80,0x00, // 'c'
0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0xFE,0x07,0x80,0xFF,0xF0,0xF0,0x3F,0xFF,0x9E,0x0F,0xC0,0xFB,0xC3,0xE0,0x07,0xF8,0x78,0x00,0x7F,0x1E,0x00,0x07,0xE3,0x80,0x00,0x7C,0xF0,0x00,0x07,0x9E,0x00,0x00,0xF3,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x38,0x00,0x01,0xE7,0x00,0x00,0x3C,0xF0,0x00,0x07,0x8E,0x00,0x01,0xF1,0xE0,0x00,0x3E,0x1E,0x00,0x0F,0xC3,0xE0,0x07,0xF8,0x3F,0x03,0xEF,0x03,0xFF,0xF9,0xE0,0x3F,0xFC,0x3C,0x00,0xFE,0x00,0x00, // 'd'
0x00,0x3F,0x80,0x00,0x3F,0xFC,0x00,0x0F,0xFF,0xE0,0x03,0xE0,0x7E,0x00,0xF0,0x03,0xE0,0x3C,0x00,0x3C,0x0F,0x00,0x03,0xC1,0xC0,0x00,0x38,0x78,0x00,0x07,0x8E,0x00,0x00,0x73,0xC0,0x00,0x0E,0x78,0x00,0x01,0xCE,0x00,0x00,0x3D,0xC0,0x00,0x07,0xBF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xDC,0x00,0x00,0x03,0x80,0x00,0x00,0x70,0x00,0x00,0x0E,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x0C,0x0F,0x00,0x03,0xC0,0xF8,0x00,0xF0,0x1F,0xC0,0x7C,0x00,0xFF,0xFF,0x00,0x0F,0xFF,0xC0,0x00,0x3F,0xC0,0x00, // 'e'
0x00,0x1F,0xC0,0x0F,0xF8,0x03,0xFF,0x00,0xF8,0x00,0x3E,0x00,0x07,0x80,0x00,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x3F,0xFF,0xC7,0xFF,0xF8,0xFF,0xFF,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x1E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0F,0x00,0x00, // 'f'
0x00,0x7F,0x03,0xC0,0x7F,0xF8,0x78,0x1F,0xFF,0xCF,0x07,0xE0,0x7D,0xE1,0xF0,0x03,0xFC,0x3C,0x00,0x1F,0x8F,0x00,0x03,0xF1,0xC0,0x00,0x3E,0x78,0x00,0x03,0xCF,0x00,0x00,0x79,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0x9C,0x00,0x00,0xF3,0xC0,0x00,0x1E,0x78,0x00,0x03,0xC7,0x00,0x00,0xF8,0xF0,0x00,0x1F,0x0F,0x00,0x07,0xE1,0xF0,0x03,0xFC,0x1F,0x81,0xF7,0x81,0xFF,0xFC,0xF0,0x1F,0xFF,0x1E,0x00,0x7F,0x03,0xC0,0x00,0x00,0x70,0x00,0x00,0x0E,0x00,0x00,0x01,0xC0,0x00,0x00,0x78,0x20,0x00,0x0F,0x06,0x00,0x03,0xC1,0xE0,0x00,0xF8,0x3E,0x00,0x3E,0x03,0xF0,0x1F,0x80,0x1F,0xFF,0xE0,0x01,0xFF,0xF0,0x00,0x07,0xF8,0x00, // 'g'
0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x01,0xFC,0x03,0x83,0xFF,0x81,0xC7,0xFF,0xF0,0xE7,0xC0,0xF8,0x77,0x80,0x1E,0x3F,0x00,0x07,0x9F,0x00,0x03,0xCF,0x80,0x00,0xE7,0x80,0x00,0x73,0x80,0x00,0x39,0xC0,0x00,0x1C,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF0, // 'h'
0x73,0xEF,0xBE,0x70,0x00,0x00,0x00,0x00,0x00,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C,0x71,0xC7,0x1C, // 'i'
0x00,0xE0,0x07,0x80,0x7C,0x01,0xE0,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x80,0x3C,0x01,0xE0,0x0F,0x00,0x78,0x03,0xC0,0x1E,0x00,0xF0,0x07,0x00,0x38,0x03,0xC0,0x1E,0x03,0xE3,0xFF,0x1F,0xE0,0xFC,0x00, // 'j'
0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x01,0xF3,0x80,0x01,0xE1,0xC0,0x01,0xE0,0xE0,0x01,0xE0,0x70,0x01,0xE0,0x38,0x01,0xE0,0x1C,0x01,0xE0,0x0E,0x01,0xE0,0x07,0x01,0xE0,0x03,0x81,0xE0,0x01,0xC1,0xE0,0x00,0xE1,0xE0,0x00,0x71,0xE0,0x00,0x39,0xF0,0x00,0x1D,0xF8,0x00,0x0F,0xFE,0x00,0x07,0xE7,0x80,0x03,0xE3,0xE0,0x01,0xE0,0xF0,0x00,0xE0,0x3C,0x00,0x70,0x0F,0x00,0x38,0x03,0xC0,0x1C,0x01,0xF0,0x0E,0x00,0x78,0x07,0x00,0x1E,0x03,0x80,0x07,0x81,0xC0,0x01,0xE0,0xE0,0x00,0xF8,0x70,0x00,0x3C,0x38,0x00,0x0F,0x1C,0x00,0x03,0xCE,0x00,0x00,0xF0, // 'k'
0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x7B,0xDE,0xF7,0xBD,0xEF,0x00, // 'l'
0xF0,0x3F,0xC0,0x01,0xFC,0x03,0xC3,0xFF,0xC0,0x3F,0xFC,0x0F,0x1F,0xFF,0x81,0xFF,0xFC,0x3D,0xF0,0x3F,0x0F,0x81,0xF8,0xF7,0x00,0x3E,0x70,0x01,0xE3,0xF8,0x00,0x7B,0x80,0x03,0xCF,0xC0,0x00,0xFC,0x00,0x0F,0x3E,0x00,0x03,0xE0,0x00,0x1C,0xF8,0x00,0x0F,0x80,0x00,0x7B,0xC0,0x00,0x1E,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E,0xF0,0x00,0x07,0x00,0x00,0x7B,0xC0,0x00,0x1C,0x00,0x01,0xEF,0x00,0x00,0x70,0x00,0x07,0xBC,0x00,0x01,0xC0,0x00,0x1E, // 'm'
0xE0,0x3F,0x80,0x70,0x7F,0xF0,0x38,0xFF,0xFE,0x1C,0xF8,0x1F,0x0E,0xF0,0x03,0xC7,0xE0,0x00,0xF3,0xE0,0x00,0x79,0xF0,0x00,0x3C,0xF0,0x00,0x0E,0x70,0x00,0x07,0x38,0x00,0x03,0x9C,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x70,0x00,0x07,0xB8,0x00,0x03,0xDC,0x00,0x01,0xEE,0x00,0x00,0xF7,0x00,0x00,0x7B,0x80,0x00,0x3D,0xC0,0x00,0x1E, // 'n'
0x00,0x3F,0xC0,0x00,0x07,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x0F,0xC0,0xFC,0x00,0xF8,0x01,0xF0,0x0F,0x00,0x03,0xC0,0xF0,0x00,0x0F,0x07,0x80,0x00,0x78,0x78,0x00,0x01,0xE3,0xC0,0x00,0x0F,0x1C,0x00,0x00,0x39,0xE0,0x00,0x01,0xEF,0x00,0x00,0x0F,0x78,0x00,0x00,0x7B,0x80,0x00,0x01,0xDC,0x00,0x00,0x0E,0xE0,0x00,0x00,0x77,0x00,0x00,0x03,0xB8,0x00,0x00,0x1D,0xC0,0x00,0x01,0xEF,0x00,0x00,0x0F,0x78,0x00,0x00,0x79,0xC0,0x00,0x03,0x8F,0x00,0x00,0x3C,0x78,0x00,0x01,0xE1,0xE0,0x00,0x1E,0x0F,0x00,0x00,0xF0,0x3C,0x00,0x0F,0x00,0xF8,0x01,0xF0,0x03,0xF0,0x3F,0x00,0x0F,0xFF,0xF0,0x00,0x3F,0xFE,0x00,0x00,0x3F,0xC0,0x00, // 'o'
0xF0,0x3F,0x80,0x1E,0x1F,0xFE,0x03,0xCF,0xFF,0xE0,0x7B,0xE0,0x7E,0x0F,0xF0,0x03,0xE1,0xF8,0x00,0x3C,0x3E,0x00,0x03,0xC7,0xC0,0x00,0x38,0xF0,0x00,0x07,0x9E,0x00,0x00,0xF3,0xC0,0x00,0x0E,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xF7,0x80,0x00,0x1E,0xF0,0x00,0x03,0xDE,0x00,0x00,0x7B,0xC0,0x00,0x0F,0x78,0x00,0x01,0xEF,0x00,0x00,0x3D,0xE0,0x00,0x07,0xBC,0x00,0x00,0xE7,0x80,0x00,0x3C,0xF0,0x00,0x07,0x9E,0x00,0x00,0xE3,0xE0,0x00,0x3C,0x7E,0x00,0x0F,0x0F,0xE0,0x03,0xE1,0xEF,0x81,0xF8,0x3C,0xFF,0xFE,0x07,0x8F,0xFF,0x80,0xF0,0x3F,0x80,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x0F,0x00,0x00,0x01,0xE0,0x00,0x00,0x3C,0x00,0x00,0x07,0x80,0x00,0x00,0xF0,0x00,0x00,0x1E,0x00,0x00,0x03,0xC0,0x00,0x00,0x78,0x00,0x00,0x00, // 'p'
0x00,0x7F,0x03,0x80,0xFF,0xF0,0xE0,0x7F,0xFF,0x38,0x3F,0x03,0xEE,0x1F,0x00,0x3F,0x8F,0x80,0x07,0xE3,0xC0,0x00,0xF9,0xE0,0x00,0x1E,0x78,0x00,0x03,0x9C,0x00,0x00,0xE7,0x00,0x00,0x3B,0xC0,0x00,0x0E,0xF0,0x00,0x03,0xBC,0x00,0x00,0xEF,0x00,0x00,0x3B,0xC0,0x00,0x0E,0xE0,0x00,0x03,0xB8,0x00,0x00,0xEF,0x00,0x00,0x3B,0xC0,0x00,0x0E,0xF0,0x00,0x03,0xBC,0x00,0x00,0xE7,0x00,0x00,0x39,0xC0,0x00,0x0E,0x78,0x00,0x03,0x9E,0x00,0x01,0xE3,0xC0,0x00,0x78,0x78,0x00,0x3E,0x1F,0x00,0x3F,0x83,0xF0,0x3E,0xE0,0x7F,0xFF,0x38,0x0F,0xFF,0x8E,0x00,0x7F,0x03,0x80,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0E,0x00,0x00,0x03,0x80,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0E,0x00,0x00,0x03,0x80,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0E, // 'q'
0xF0,0x3E,0xF1,0xFE,0xF3,0xFE,0xF7,0xC0,0xF7,0x00,0xFC,0x00,0xFC,0x00,0xF8,0x00,0xF8,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00, // 'r'
0x00,0xFF,0x00,0x03,0xFF,0xF0,0x03,0xFF,0xFC,0x03,0xF0,0x3F,0x03,0xC0,0x07,0xC3,0xC0,0x00,0xF1,0xE0,0x00,0x78,0xE0,0x00,0x1E,0x70,0x00,0x0F,0x38,0x00,0x07,0x9E,0x00,0x00,0x0F,0x00,0x00,0x03,0xE0,0x00,0x00,0xFC,0x00,0x00,0x3F,0xE0,0x00,0x0F,0xFE,0x00,0x00,0xFF,0xE0,0x00,0x0F,0xF8,0x00,0x00,0x7F,0x00,0x00,0x0F,0xC0,0x00,0x01,0xE0,0x00,0x00,0x78,0x00,0x00,0x3D,0xC0,0x00,0x1E,0xE0,0x00,0x0F,0x78,0x00,0x07,0xBC,0x00,0x03,0xCF,0x00,0x03,0xC7,0xC0,0x03,0xE1,0xF8,0x07,0xE0,0x7F,0xFF,0xE0,0x0F,0xFF,0xC0,0x00,0xFF,0x00,0x00, // 's'
0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0xFF,0xFE,0x7F,0xFF,0x3F,0xFF,0x80,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0xF0,0x00,0x78,0x00,0x3C,0x00,0x1E,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x3C,0x00,0x1F,0x00,0x07,0xFC,0x01,0xFE,0x00,0x7F,0x00, // 't'
0xF0,0x00,0x07,0x78,0x00,0x03,0xBC,0x00,0x01,0xDE,0x00,0x00,0xEF,0x00,0x00,0x77,0x80,0x00,0x3B,0xC0,0x00,0x1D,0xE0,0x00,0x0E,0xF0,0x00,0x07,0x78,0x00,0x03,0xBC,0x00,0x01,0xDE,0x00,0x00,0xEF,0x00,0x00,0x77,0x80,0x00,0x3B,0xC0,0x00,0x1D,0xE0,0x00,0x0E,0xF0,0x00,0x07,0x78,0x00,0x03,0xBC,0x00,0x01,0xDE,0x00,0x00,0xEF,0x00,0x00,0x77,0x80,0x00,0x39,0xC0,0x00,0x1C,0xE0,0x00,0x0E,0x70,0x00,0x07,0x3C,0x00,0x07,0x9E,0x00,0x07,0xC7,0x80,0x03,0xE3,0xE0,0x07,0xF0,0xF8,0x0F,0xB8,0x3F,0xFF,0x9C,0x0F,0xFF,0x0E,0x01,0xFE,0x00,0x00, // 'u'
0xF0,0x00,0x01,0xE7,0x00,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x38,0x38,0x00,0x03,0x83,0xC0,0x00,0x78,0x1C,0x00,0x07,0x01,0xC0,0x00,0xF0,0x1E,0x00,0x0F,0x00,0xE0,0x00,0xE0,0x0F,0x00,0x1E,0x00,0xF0,0x01,0xE0,0x07,0x00,0x1C,0x00,0x78,0x03,0xC0,0x03,0x80,0x38,0x00,0x38,0x03,0x80,0x03,0xC0,0x78,0x00,0x1C,0x07,0x00,0x01,0xC0,0x70,0x00,0x1E,0x0F,0x00,0x00,0xE0,0xE0,0x00,0x0E,0x1E,0x00,0x00,0x71,0xC0,0x00,0x07,0x1C,0x00,0x00,0x7B,0xC0,0x00,0x03,0xB8,0x00,0x00,0x3B,0x80,0x00,0x03,0xF8,0x00,0x00,0x1F,0x00,0x00,0x01,0xF0,0x00,0x00,0x0E,0x00,0x00,0x00,0xE0,0x00, // 'v'
0xF0,0x00,0x1C,0x00,0x07,0xBC,0x00,0x07,0x00,0x01,0xE7,0x00,0x03,0xE0,0x00,0x71,0xC0,0x00,0xF8,0x00,0x1C,0x78,0x00,0x3E,0x00,0x0F,0x1E,0x00,0x1D,0xC0,0x03,0xC3,0x80,0x07,0x70,0x00,0xE0,0xE0,0x01,0xDC,0x00,0x38,0x3C,0x00,0xE7,0x80,0x1E,0x07,0x00,0x38,0xE0,0x07,0x01,0xC0,0x0E,0x38,0x01,0xC0,0x78,0x07,0x8F,0x00,0xF0,0x1E,0x01,0xC1,0xC0,0x3C,0x03,0x80,0x70,0x70,0x0E,0x00,0xE0,0x3C,0x1C,0x03,0x80,0x3C,0x0E,0x03,0x81,0xE0,0x07,0x03,0x80,0xE0,0x70,0x01,0xC0,0xE0,0x38,0x1C,0x00,0x70,0x70,0x07,0x07,0x00,0x1E,0x1C,0x01,0xC3,0xC0,0x03,0x87,0x00,0x70,0xE0,0x00,0xE3,0x80,0x0E,0x38,0x00,0x3C,0xE0,0x03,0x8E,0x00,0x07,0x38,0x00,0xE7,0x00,0x01,0xDC,0x00,0x1D,0xC0,0x00,0x77,0x00,0x07,0x70,0x00,0x1F,0xC0,0x01,0xDC,0x00,0x03,0xE0,0x00,0x7E,0x00,0x00,0xF8,0x00,0x0F,0x80,0x00,0x3E,0x00,0x03,0xE0,0x00,0x07,0x80,0x00,0xF0,0x00,0x01,0xC0,0x00,0x1C,0x00, // 'w'
0x78,0x00,0x03,0xC3,0xC0,0x00,0x78,0x1E,0x00,0x0F,0x81,0xE0,0x00,0xF0,0x0F,0x00,0x1E,0x00,0x78,0x03,0xC0,0x07,0x80,0x3C,0x00,0x3C,0x07,0x80,0x01,0xE0,0xF0,0x00,0x1E,0x0F,0x00,0x00,0xF1,0xE0,0x00,0x07,0xBC,0x00,0x00,0x7B,0xC0,0x00,0x03,0xF8,0x00,0x00,0x1F,0x00,0x00,0x01,0xF0,0x00,0x00,0x1F,0x00,0x00,0x03,0xF8,0x00,0x00,0x3F,0x80,0x00,0x07,0xBC,0x00,0x00,0xF1,0xE0,0x00,0x0F,0x0E,0x00,0x01,0xE0,0xF0,0x00,0x3C,0x07,0x80,0x03,0xC0,0x3C,0x00,0x78,0x03,0xC0,0x0F,0x00,0x1E,0x01,0xF0,0x00,0xF0,0x1E,0x00,0x0F,0x03,0xC0,0x00,0x78,0x7C,0x00,0x03,0xCF,0x80,0x00,0x3E, // 'x'
0xF0,0x00,0x01,0xE7,0x80,0x00,0x1C,0x78,0x00,0x03,0xC7,0x80,0x00,0x3C,0x3C,0x00,0x03,0x83,0xC0,0x00,0x78,0x1C,0x00,0x07,0x81,0xE0,0x00,0x70,0x1E,0x00,0x0F,0x00,0xE0,0x00,0xE0,0x0F,0x00,0x1E,0x00,0xF0,0x01,0xE0,0x07,0x80,0x1C,0x00,0x78,0x03,0xC0,0x03,0x80,0x3C,0x00,0x3C,0x03,0x80,0x03,0xC0,0x78,0x00,0x1C,0x07,0x80,0x01,0xE0,0x70,0x00,0x1E,0x0F,0x00,0x00,0xF0,0xF0,0x00,0x0F,0x0E,0x00,0x00,0x71,0xE0,0x00,0x07,0x9C,0x00,0x00,0x79,0xC0,0x00,0x03,0xBC,0x00,0x00,0x3F,0x80,0x00,0x03,0xF8,0x00,0x00,0x1F,0x80,0x00,0x01,0xF0,0x00,0x00,0x0F,0x00,0x00,0x00,0xF0,0x00,0x00,0x0E,0x00,0x00,0x00,0xE0,0x00,0x00,0x1C,0x00,0x00,0x01,0xC0,0x00,0x00,0x3C,0x00,0x00,0x03,0x80,0x00,0x00,0x38,0x00,0x00,0x07,0x00,0x00,0x00,0xF0,0x00,0x00,0x3E,0x00,0x00,0x3F,0xE0,0x00,0x03,0xF8,0x00,0x00,0x3F,0x00,0x00,0x00, // 'y'
0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0x3F,0xFF,0xFF,0x80,0x00,0x07,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0xF8,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x07,0xFF,0xFF,0xFB,0xFF,0xFF,0xFD,0xFF,0xFF,0xFE, // 'z'
0x00,0x01,0x80,0x00,0xF0,0x00,0x3F,0x00,0x1F,0x00,0x03,0xC0,0x00,0xF0,0x00,0x3C,0x00,0x07,0x80,0x00,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x1E,0x00,0x03,0xC0,0x00,0x70,0x00,0x1E,0x00,0x0F,0x80,0x0F,0xE0,0x01,0xF0,0x00,0x3F,0x80,0x00,0xF8,0x00,0x07,0x80,0x00,0x70,0x00,0x0F,0x00,0x01,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x80,0x00,0x78,0x00,0x0F,0x00,0x00,0xF0,0x00,0x0F,0x00,0x01,0xF0,0x00,0x0F,0x80,0x00,0xF8,0x00,0x06,0x00, // '{'
0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xE0, // '|'
0x60,0x00,0x0F,0x00,0x03,0xF0,0x00,0x0F,0x00,0x00,0xF0,0x00,0x0F,0x00,0x00,0xF0,0x00,0x1E,0x00,0x01,0xC0,0x00,0x3C,0x00,0x07,0x80,0x00,0xF0,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xF0,0x00,0x0E,0x00,0x01,0xE0,0x00,0x1F,0x00,0x01,0xFC,0x00,0x0F,0x80,0x07,0xF0,0x01,0xF0,0x00,0x78,0x00,0x0E,0x00,0x03,0xC0,0x00,0x78,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x07,0x00,0x00,0xE0,0x00,0x1C,0x00,0x03,0x80,0x00,0x70,0x00,0x0E,0x00,0x01,0xC0,0x00,0x38,0x00,0x0F,0x00,0x01,0xE0,0x00,0x3C,0x00,0x07,0x00,0x01,0xE0,0x00,0x3C,0x00,0x0F,0x00,0x03,0xC0,0x00,0xF0,0x00,0x7C,0x00,0x1F,0x00,0x01,0x80,0x00,0x00 // '}'
};
const GFXglyph Roboto_Light_60Glyphs[] PROGMEM = {
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
{ 0, 1, 1, 16, 0, 0 }, // ' '
{ 1, 6, 43, 15, 5, -43 }, // '!'
{ 34, 11, 13, 18, 4, -45 }, // '"'
{ 52, 34, 43, 36, 2, -43 }, // '#'
{ 235, 28, 55, 34, 3, -49 }, // '$'
{ 428, 39, 44, 45, 3, -43 }, // '%'
{ 643, 34, 44, 38, 3, -43 }, // '&'
{ 830, 5, 13, 11, 3, -45 }, // '''
{ 839, 15, 62, 20, 4, -48 }, // '('
{ 956, 15, 62, 21, 1, -48 }, // ')'
{ 1073, 25, 24, 26, 1, -43 }, // '*'
{ 1148, 30, 31, 35, 2, -36 }, // '+'
{ 1265, 7, 13, 12, 2, -5 }, // ','
{ 1277, 15, 3, 18, 1, -20 }, // '-'
{ 1283, 6, 5, 15, 4, -5 }, // '.'
{ 1287, 22, 47, 25, 1, -43 }, // '/'
{ 1417, 28, 44, 34, 3, -43 }, // '0'
{ 1571, 16, 43, 34, 5, -43 }, // '1'
{ 1657, 29, 43, 34, 3, -43 }, // '2'
{ 1813, 28, 44, 34, 3, -43 }, // '3'
{ 1967, 31, 43, 34, 2, -43 }, // '4'
{ 2134, 27, 44, 34, 5, -43 }, // '5'
{ 2283, 27, 44, 34, 4, -43 }, // '6'
{ 2432, 29, 43, 34, 2, -43 }, // '7'
{ 2588, 28, 44, 34, 3, -43 }, // '8'
{ 2742, 27, 43, 34, 3, -43 }, // '9'
{ 2888, 7, 32, 14, 3, -32 }, // ':'
{ 2916, 7, 40, 13, 2, -32 }, // ';'
{ 2951, 26, 25, 32, 2, -32 }, // '<'
{ 3033, 26, 15, 34, 4, -27 }, // '='
{ 3082, 25, 25, 32, 4, -32 }, // '>'
{ 3161, 24, 43, 28, 2, -43 }, // '?'
{ 3290, 50, 55, 56, 3, -42 }, // '@'
{ 3634, 36, 43, 38, 1, -43 }, // 'A'
{ 3828, 29, 43, 38, 6, -43 }, // 'B'
{ 3984, 33, 44, 40, 4, -43 }, // 'C'
{ 4166, 31, 43, 40, 5, -43 }, // 'D'
{ 4333, 28, 43, 35, 5, -43 }, // 'E'
{ 4484, 28, 43, 35, 5, -43 }, // 'F'
{ 4635, 33, 44, 42, 4, -43 }, // 'G'
{ 4817, 33, 43, 43, 5, -43 }, // 'H'
{ 4995, 5, 43, 17, 6, -43 }, // 'I'
{ 5022, 27, 44, 34, 2, -43 }, // 'J'
{ 5171, 33, 43, 39, 5, -43 }, // 'K'
{ 5349, 26, 43, 33, 5, -43 }, // 'L'
{ 5489, 43, 43, 53, 5, -43 }, // 'M'
{ 5721, 32, 43, 44, 6, -43 }, // 'N'
{ 5893, 34, 44, 42, 4, -43 }, // 'O'
{ 6080, 30, 43, 38, 5, -43 }, // 'P'
{ 6242, 34, 51, 42, 4, -43 }, // 'Q'
{ 6459, 31, 43, 39, 5, -43 }, // 'R'
{ 6626, 31, 44, 37, 3, -43 }, // 'S'
{ 6797, 33, 43, 37, 2, -43 }, // 'T'
{ 6975, 31, 44, 40, 5, -43 }, // 'U'
{ 7146, 36, 43, 38, 1, -43 }, // 'V'
{ 7340, 51, 43, 55, 2, -43 }, // 'W'
{ 7615, 34, 43, 38, 2, -43 }, // 'X'
{ 7798, 35, 43, 37, 1, -43 }, // 'Y'
{ 7987, 31, 43, 37, 3, -43 }, // 'Z'
{ 8154, 10, 58, 15, 5, -49 }, // '['
{ 8227, 23, 47, 25, 1, -43 }, // '\'
{ 8363, 11, 58, 15, 0, -49 }, // ']'
{ 8443, 21, 21, 26, 2, -43 }, // '^'
{ 8499, 27, 3, 27, 0, 0 }, // '_'
{ 8510, 11, 8, 18, 3, -45 }, // '`'
{ 8521, 26, 33, 33, 3, -32 }, // 'a'
{ 8629, 27, 46, 34, 4, -45 }, // 'b'
{ 8785, 27, 33, 32, 3, -32 }, // 'c'
{ 8897, 27, 46, 34, 3, -45 }, // 'd'
{ 9053, 27, 33, 32, 3, -32 }, // 'e'
{ 9165, 19, 46, 21, 2, -46 }, // 'f'
{ 9275, 27, 45, 34, 3, -32 }, // 'g'
{ 9427, 25, 45, 34, 5, -45 }, // 'h'
{ 9568, 6, 44, 14, 4, -44 }, // 'i'
{ 9601, 13, 57, 15, -3, -44 }, // 'j'
{ 9694, 25, 45, 30, 5, -45 }, // 'k'
{ 9835, 5, 45, 14, 5, -45 }, // 'l'
{ 9864, 46, 32, 54, 4, -32 }, // 'm'
{ 10048, 25, 32, 34, 5, -32 }, // 'n'
{ 10148, 29, 33, 35, 3, -32 }, // 'o'
{ 10268, 27, 44, 34, 4, -32 }, // 'p'
{ 10417, 26, 44, 34, 3, -32 }, // 'q'
{ 10560, 16, 32, 21, 4, -32 }, // 'r'
{ 10624, 25, 33, 31, 3, -32 }, // 's'
{ 10728, 17, 41, 20, 1, -40 }, // 't'
{ 10816, 25, 33, 34, 4, -32 }, // 'u'
{ 10920, 28, 32, 30, 1, -32 }, // 'v'
{ 11032, 42, 32, 46, 2, -32 }, // 'w'
{ 11200, 28, 32, 30, 1, -32 }, // 'x'
{ 11312, 28, 45, 30, 1, -32 }, // 'y'
{ 11470, 25, 32, 30, 3, -32 }, // 'z'
{ 11570, 19, 59, 21, 2, -47 }, // '{'
{ 11711, 4, 51, 14, 5, -43 }, // '|'
{ 11737, 19, 59, 21, 0, -47 } // '}'
};
const GFXfont Roboto_Light_60 PROGMEM = {
(uint8_t *)Roboto_Light_60Bitmaps,(GFXglyph *)Roboto_Light_60Glyphs,0x20, 0x7E, 71};

View File

@@ -0,0 +1,70 @@
#include "interface_task.h"
#define COUNT_OF(A) (sizeof(A) / sizeof(A[0]))
InterfaceTask::InterfaceTask(const uint8_t task_core, MotorTask& motor_task) : Task{"Interface", 8192, 1, task_core}, motor_task_(motor_task) {
}
InterfaceTask::~InterfaceTask() {}
void InterfaceTask::run() {
KnobConfig configs[] = {
{
.num_positions = 0,
.position = 0,
.position_width_radians = 10 * PI / 180,
.detent_strength_unit = 0,
},
{
.num_positions = 11,
.position = 0,
.position_width_radians = 10 * PI / 180,
.detent_strength_unit = 0,
},
{
.num_positions = 2,
.position = 0,
.position_width_radians = 60 * PI / 180,
.detent_strength_unit = 1,
},
{
.num_positions = 256,
.position = 127,
.position_width_radians = 1 * PI / 180,
.detent_strength_unit = 0,
},
{
.num_positions = 256,
.position = 127,
.position_width_radians = 1 * PI / 180,
.detent_strength_unit = 1,
},
{
.num_positions = 32,
.position = 0,
.position_width_radians = 8.225806452 * PI / 180,
.detent_strength_unit = 1,
},
{
.num_positions = 32,
.position = 0,
.position_width_radians = 8.225806452 * PI / 180,
.detent_strength_unit = 0.1,
},
};
int current_config = 0;
motor_task_.setConfig(configs[current_config]);
while (1) {
if (Serial.available()) {
int v = Serial.read();
if (v == ' ') {
current_config = (current_config + 1) % COUNT_OF(configs);
Serial.printf("Chaning config to %d\n", current_config);
motor_task_.setConfig(configs[current_config]);
}
}
delay(10);
}
}

View File

@@ -0,0 +1,20 @@
#pragma once
#include <Arduino.h>
#include "motor_task.h"
#include "task.h"
class InterfaceTask : public Task<InterfaceTask> {
friend class Task<InterfaceTask>; // Allow base Task to invoke protected run()
public:
InterfaceTask(const uint8_t task_core, MotorTask& motor_task);
~InterfaceTask();
protected:
void run();
private:
MotorTask& motor_task_;
};

17
firmware/src/knob_data.h Normal file
View File

@@ -0,0 +1,17 @@
#pragma once
#include <Arduino.h>
struct KnobConfig {
int32_t num_positions;
int32_t position;
float position_width_radians;
float detent_strength_unit;
};
struct KnobState {
int32_t num_positions;
int32_t current_position;
float sub_position_unit;
float position_width_radians;
};

View File

@@ -5,6 +5,7 @@
#include <TFT_eSPI.h>
#include "display_task.h"
#include "interface_task.h"
#include "motor_task.h"
#include "tlv_sensor.h"
@@ -12,6 +13,7 @@ using namespace ace_button;
DisplayTask display_task = DisplayTask(1);
MotorTask motor_task = MotorTask(0, display_task);
InterfaceTask interface_task = InterfaceTask(1, motor_task);
CRGB leds[1];
@@ -21,6 +23,7 @@ void setup() {
display_task.begin();
motor_task.begin();
interface_task.begin();
vTaskDelete(nullptr);
}

View File

@@ -20,6 +20,8 @@ static const float IDLE_CORRECTION_RATE_ALPHA = 0.0005;
MotorTask::MotorTask(const uint8_t task_core, DisplayTask& display_task) : Task{"Motor", 8192, 1, task_core}, display_task_(display_task) {
queue_ = xQueueCreate(1, sizeof(KnobConfig));
assert(queue_ != NULL);
}
MotorTask::~MotorTask() {}
@@ -35,10 +37,7 @@ TlvSensor tlv = TlvSensor();
Commander command = Commander(Serial);
float detents = 36;
void doMotor(char* cmd) { command.motor(&motor, cmd); }
void doDetents(char* cmd) { command.scalar(&detents, cmd); }
void MotorTask::run() {
driver.voltage_power_supply = 5;
@@ -63,32 +62,42 @@ void MotorTask::run() {
motor.PID_velocity.limit = 10;
// motor.useMonitoring(Serial);
motor.init();
tlv.update();
delay(10);
motor.initFOC(-0.2, Direction::CW);
motor.initFOC(6, Direction::CW);
Serial.println(motor.zero_electric_angle);
command.add('M', &doMotor, "foo");
command.add('D', &doDetents, "Detents");
motor.useMonitoring(Serial);
// command.add('D', &doDetents, "Detents");
motor.monitor_downsample = 0; // disable monitor at first - optional
// disableCore0WDT();
float current_detent_center = motor.shaft_angle;
int min = 0;
int max = 255;
int value = 0;
KnobConfig config = {
.num_positions = 2,
.position = 0,
.position_width_radians = 60 * _PI / 180,
.detent_strength_unit = 0,
};
float idle_check_velocity_ewma = 0;
uint32_t last_idle_start = 0;
uint32_t last_debug = 0;
while (1) {
motor.loopFOC();
if (xQueueReceive(queue_, &config, 0) == pdTRUE) {
Serial.println("Got new config");
current_detent_center = motor.shaft_angle;
}
idle_check_velocity_ewma = motor.shaft_velocity * IDLE_VELOCITY_EWMA_ALPHA + idle_check_velocity_ewma * (1 - IDLE_VELOCITY_EWMA_ALPHA);
if (fabsf(idle_check_velocity_ewma) > IDLE_VELOCITY_RAD_PER_SEC) {
last_idle_start = 0;
@@ -101,48 +110,55 @@ void MotorTask::run() {
// If we are not moving and we're close to the center (but not exactly there), slowly adjust the centerpoint to match the current position
if (last_idle_start > 0 && millis() - last_idle_start > IDLE_CORRECTION_DELAY_MILLIS && fabsf(motor.shaft_angle - current_detent_center) < IDLE_CORRECTION_MAX_ANGLE_RAD) {
current_detent_center = motor.shaft_angle * IDLE_CORRECTION_RATE_ALPHA + current_detent_center * (1 - IDLE_CORRECTION_RATE_ALPHA);
if (millis() - last_debug > 100) {
last_debug = millis();
Serial.print("Moving detent center. ");
Serial.print(current_detent_center);
Serial.print(" ");
Serial.println(motor.shaft_angle);
}
// if (millis() - last_debug > 100) {
// last_debug = millis();
// Serial.print("Moving detent center. ");
// Serial.print(current_detent_center);
// Serial.print(" ");
// Serial.println(motor.shaft_angle);
// }
}
if (fabs(detents) < 0.01) {
float angle_to_detent_center = motor.shaft_angle - current_detent_center;
if (angle_to_detent_center > config.position_width_radians * 1.05 && (config.num_positions <= 0 || config.position > 0)) {
current_detent_center += config.position_width_radians;
angle_to_detent_center -= config.position_width_radians;
config.position--;
} else if (angle_to_detent_center < -config.position_width_radians * 1.05 && (config.num_positions <= 0 || config.position < config.num_positions - 1)) {
current_detent_center -= config.position_width_radians;
angle_to_detent_center += config.position_width_radians;
config.position++;
}
float dead_zone_adjustment = CLAMP(
angle_to_detent_center,
fmaxf(-config.position_width_radians*DEAD_ZONE_DETENT_PERCENT, -DEAD_ZONE_RAD),
fminf(config.position_width_radians*DEAD_ZONE_DETENT_PERCENT, DEAD_ZONE_RAD));
bool out_of_bounds = config.num_positions > 0 && ((angle_to_detent_center > 0 && config.position == 0) || (angle_to_detent_center < 0 && config.position == config.num_positions - 1));
motor.PID_velocity.limit = out_of_bounds ? 10 : 3;
motor.PID_velocity.P = out_of_bounds ? 4 : config.detent_strength_unit * 4;
motor.PID_velocity.D = config.detent_strength_unit * 0.04;
if (fabsf(motor.shaft_velocity) > 20) {
// Don't apply torque if velocity is too high (helps avoid feedback loop)
motor.move(0);
display_task_.set_angle(motor.shaft_angle);
current_detent_center = motor.shaft_angle;
} else {
float detent_width = 2*PI/detents;
float angle_to_detent_center = motor.shaft_angle - current_detent_center;
if (angle_to_detent_center > detent_width * 1.2 && value > min) {
current_detent_center += detent_width;
angle_to_detent_center -= detent_width;
value--;
} else if (angle_to_detent_center < -detent_width * 1.2 && value < max) {
current_detent_center -= detent_width;
angle_to_detent_center += detent_width;
value++;
}
float dead_zone_adjustment = CLAMP(
angle_to_detent_center,
fmaxf(-detent_width*DEAD_ZONE_DETENT_PERCENT, -DEAD_ZONE_RAD),
fminf(detent_width*DEAD_ZONE_DETENT_PERCENT, DEAD_ZONE_RAD));
if (fabsf(motor.shaft_velocity) > 20) {
// Don't apply torque if velocity is too high (helps avoid feedback loop)
motor.move(0);
} else {
motor.move(motor.PID_velocity(-angle_to_detent_center + dead_zone_adjustment));
}
display_task_.set_angle(-value * PI / 180);
motor.move(motor.PID_velocity(-angle_to_detent_center + dead_zone_adjustment));
}
display_task_.setData({
.num_positions = config.num_positions,
.current_position = config.position,
.sub_position_unit = -angle_to_detent_center / config.position_width_radians,
.position_width_radians = config.position_width_radians,
});
motor.monitor();
command.run();
// command.run();
}
}
void MotorTask::setConfig(const KnobConfig& config) {
xQueueOverwrite(queue_, &config);
}

View File

@@ -2,6 +2,7 @@
#include <Arduino.h>
#include "knob_data.h"
#include "task.h"
#include "display_task.h"
@@ -12,9 +13,12 @@ class MotorTask : public Task<MotorTask> {
MotorTask(const uint8_t task_core, DisplayTask& display_task);
~MotorTask();
void setConfig(const KnobConfig& config);
protected:
void run();
private:
DisplayTask& display_task_;
QueueHandle_t queue_;
};