nyx: Add joycon fallback support as a virtual mouse

Cursor Movement: Left Stick
Click: A / ZL / ZR
Back: B
This commit is contained in:
CTCaer 2020-04-30 13:16:30 +03:00
parent 7b715f7be9
commit 1483a61f11
4 changed files with 535 additions and 1 deletions

View file

@ -35,7 +35,7 @@ OBJS += $(addprefix $(BUILDDIR)/$(TARGET)/, \
mc.o sdram.o minerva.o \ mc.o sdram.o minerva.o \
sdmmc.o sdmmc_driver.o nx_emmc.o nx_sd.o \ sdmmc.o sdmmc_driver.o nx_emmc.o nx_sd.o \
bq24193.o max17050.o max7762x.o max77620-rtc.o regulator_5v.o \ bq24193.o max17050.o max7762x.o max77620-rtc.o regulator_5v.o \
touch.o tmp451.o fan.o \ touch.o joycon.o tmp451.o fan.o \
hw_init.o \ hw_init.o \
) )

View file

@ -29,6 +29,7 @@
#include "../config/ini.h" #include "../config/ini.h"
#include "../gfx/di.h" #include "../gfx/di.h"
#include "../gfx/gfx.h" #include "../gfx/gfx.h"
#include "../input/joycon.h"
#include "../input/touch.h" #include "../input/touch.h"
#include "../libs/fatfs/ff.h" #include "../libs/fatfs/ff.h"
#include "../mem/heap.h" #include "../mem/heap.h"
@ -68,6 +69,26 @@ typedef struct _gui_status_bar_ctx
lv_obj_t *battery_more; lv_obj_t *battery_more;
} gui_status_bar_ctx; } gui_status_bar_ctx;
typedef struct _jc_lv_driver_t
{
lv_indev_t *indev;
bool centering_done;
u16 cx_max;
u16 cx_min;
u16 cy_max;
u16 cy_min;
s16 pos_x;
s16 pos_y;
s16 pos_last_x;
s16 pos_last_y;
lv_obj_t *cursor;
u32 cursor_timeout;
bool cursor_hidden;
u32 console_timeout;
} jc_lv_driver_t;
static jc_lv_driver_t jc_drv_ctx;
static gui_status_bar_ctx status_bar; static gui_status_bar_ctx status_bar;
static void _nyx_disp_init() static void _nyx_disp_init()
@ -212,6 +233,126 @@ static bool _fts_touch_read(lv_indev_data_t *data)
return false; // No buffering so no more data read. return false; // No buffering so no more data read.
} }
static bool _jc_virt_mouse_read(lv_indev_data_t *data)
{
// Poll Joy-Con.
jc_gamepad_rpt_t *jc_pad = joycon_poll();
if (!jc_pad)
{
data->state = LV_INDEV_STATE_REL;
return false;
}
// Take a screenshot if Capture button is pressed.
if (jc_pad->cap)
{
_save_fb_to_bmp();
msleep(1000);
}
// Calibrate left stick.
if (!jc_drv_ctx.centering_done)
{
if (jc_pad->conn_l
&& jc_pad->lstick_x > 0x400 && jc_pad->lstick_y > 0x400
&& jc_pad->lstick_x < 0xC00 && jc_pad->lstick_y < 0xC00)
{
jc_drv_ctx.cx_max = jc_pad->lstick_x + 0x72;
jc_drv_ctx.cx_min = jc_pad->lstick_x - 0x72;
jc_drv_ctx.cy_max = jc_pad->lstick_y + 0x72;
jc_drv_ctx.cy_min = jc_pad->lstick_y - 0x72;
jc_drv_ctx.centering_done = true;
jc_drv_ctx.cursor_timeout = 0;
}
else
{
data->state = LV_INDEV_STATE_REL;
return false;
}
}
// Re-calibrate on disconnection.
if (!jc_pad->conn_l)
jc_drv_ctx.centering_done = 0;
// Set button presses.
if (jc_pad->a || jc_pad->zl || jc_pad->zr)
data->state = LV_INDEV_STATE_PR;
else
data->state = LV_INDEV_STATE_REL;
// Calculate new cursor position.
if (jc_pad->lstick_x <= jc_drv_ctx.cx_max && jc_pad->lstick_x >= jc_drv_ctx.cx_min)
jc_drv_ctx.pos_x += 0;
else if (jc_pad->lstick_x > jc_drv_ctx.cx_max)
jc_drv_ctx.pos_x += ((jc_pad->lstick_x - jc_drv_ctx.cx_max) / 30);
else
jc_drv_ctx.pos_x -= ((jc_drv_ctx.cx_min - jc_pad->lstick_x) / 30);
if (jc_pad->lstick_y <= jc_drv_ctx.cy_max && jc_pad->lstick_y >= jc_drv_ctx.cy_min)
jc_drv_ctx.pos_y += 0;
else if (jc_pad->lstick_y > jc_drv_ctx.cy_max)
jc_drv_ctx.pos_y -= ((jc_pad->lstick_y - jc_drv_ctx.cy_max) / 30);
else
jc_drv_ctx.pos_y += ((jc_drv_ctx.cy_min - jc_pad->lstick_y) / 30);
// Ensure value inside screen limits.
if (jc_drv_ctx.pos_x < 0)
jc_drv_ctx.pos_x = 0;
else if (jc_drv_ctx.pos_x > 1279)
jc_drv_ctx.pos_x = 1279;
if (jc_drv_ctx.pos_y < 0)
jc_drv_ctx.pos_y = 0;
else if (jc_drv_ctx.pos_y > 719)
jc_drv_ctx.pos_y = 719;
// Set cursor position.
data->point.x = jc_drv_ctx.pos_x;
data->point.y = jc_drv_ctx.pos_y;
// Auto hide cursor.
if (jc_drv_ctx.pos_x != jc_drv_ctx.pos_last_x || jc_drv_ctx.pos_y != jc_drv_ctx.pos_last_y)
{
jc_drv_ctx.pos_last_x = jc_drv_ctx.pos_x;
jc_drv_ctx.pos_last_y = jc_drv_ctx.pos_y;
jc_drv_ctx.cursor_hidden = false;
jc_drv_ctx.cursor_timeout = get_tmr_ms();
lv_indev_set_cursor(jc_drv_ctx.indev, jc_drv_ctx.cursor);
// Un hide cursor.
lv_obj_set_opa_scale_enable(jc_drv_ctx.cursor, false);
}
else
{
if (!jc_drv_ctx.cursor_hidden)
{
if (((u32)get_tmr_ms() - jc_drv_ctx.cursor_timeout) > 3000)
{
// Remove cursor and hide it.
lv_indev_set_cursor(jc_drv_ctx.indev, NULL);
lv_obj_set_opa_scale_enable(jc_drv_ctx.cursor, true);
lv_obj_set_opa_scale(jc_drv_ctx.cursor, LV_OPA_TRANSP);
jc_drv_ctx.cursor_hidden = true;
}
}
else
data->state = LV_INDEV_STATE_REL; // Ensure that no clicks are allowed.
}
if (jc_pad->b && close_btn)
{
lv_action_t close_btn_action = lv_btn_get_action(close_btn, LV_BTN_ACTION_CLICK);
close_btn_action(close_btn);
close_btn = NULL;
}
return false; // No buffering so no more data read.
}
typedef struct _system_maintenance_tasks_t typedef struct _system_maintenance_tasks_t
{ {
union union
@ -1709,6 +1850,17 @@ void nyx_load_and_run()
disp_drv.disp_flush = _disp_fb_flush; disp_drv.disp_flush = _disp_fb_flush;
lv_disp_drv_register(&disp_drv); lv_disp_drv_register(&disp_drv);
// Initialize Joy-Con.
lv_task_t *task_jc_init_hw = lv_task_create(jc_init_hw, LV_TASK_ONESHOT, LV_TASK_PRIO_LOWEST, NULL);
lv_task_once(task_jc_init_hw);
lv_indev_drv_t indev_drv_jc;
lv_indev_drv_init(&indev_drv_jc);
indev_drv_jc.type = LV_INDEV_TYPE_POINTER;
indev_drv_jc.read = _jc_virt_mouse_read;
memset(&jc_drv_ctx, 0, sizeof(jc_lv_driver_t));
jc_drv_ctx.indev = lv_indev_drv_register(&indev_drv_jc);
close_btn = NULL;
// Initialize touch. // Initialize touch.
touch_power_on(); touch_power_on();
lv_indev_drv_t indev_drv_touch; lv_indev_drv_t indev_drv_touch;
@ -1728,6 +1880,11 @@ void nyx_load_and_run()
// Create main menu // Create main menu
_nyx_main_menu(th); _nyx_main_menu(th);
jc_drv_ctx.cursor = lv_img_create(lv_scr_act(), NULL);
lv_img_set_src(jc_drv_ctx.cursor, &touch_cursor);
lv_obj_set_opa_scale(jc_drv_ctx.cursor, LV_OPA_TRANSP);
lv_obj_set_opa_scale_enable(jc_drv_ctx.cursor, true);
// Check if sd card issues. // Check if sd card issues.
if (sd_get_mode() == SD_1BIT_HS25) if (sd_get_mode() == SD_1BIT_HS25)
{ {

View file

@ -9,6 +9,381 @@
#define HEKATE_LOGO #define HEKATE_LOGO
const u8 touch_cursor_map[] = {
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
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, 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, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18,
0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1b,
0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 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, 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, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1f,
0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x30,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x33,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2c,
0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14,
0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03,
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x38,
0x07, 0x07, 0x07, 0x44, 0x0d, 0x0d, 0x0d, 0x4c, 0x16, 0x16, 0x16, 0x53,
0x1e, 0x1e, 0x1e, 0x54, 0x21, 0x21, 0x21, 0x57, 0x21, 0x21, 0x21, 0x57,
0x18, 0x18, 0x18, 0x54, 0x10, 0x10, 0x10, 0x50, 0x07, 0x07, 0x07, 0x4c,
0x04, 0x04, 0x04, 0x44, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2b,
0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2b,
0x00, 0x00, 0x00, 0x38, 0x0a, 0x0a, 0x0a, 0x4b, 0x1d, 0x1d, 0x1d, 0x58,
0x38, 0x38, 0x38, 0x64, 0x59, 0x59, 0x59, 0x6c, 0x73, 0x73, 0x73, 0x70,
0x84, 0x84, 0x84, 0x74, 0x8b, 0x8b, 0x8b, 0x74, 0x86, 0x86, 0x86, 0x74,
0x76, 0x76, 0x76, 0x73, 0x5c, 0x5c, 0x5c, 0x6f, 0x3a, 0x3a, 0x3a, 0x6b,
0x1d, 0x1d, 0x1d, 0x60, 0x09, 0x09, 0x09, 0x53, 0x04, 0x04, 0x04, 0x44,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x13,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x44,
0x15, 0x15, 0x15, 0x54, 0x41, 0x41, 0x41, 0x67, 0x7b, 0x7b, 0x7b, 0x74,
0xb2, 0xb2, 0xb2, 0x7b, 0xe1, 0xe1, 0xe1, 0x7f, 0xf7, 0xf7, 0xf7, 0x7f,
0xfd, 0xfd, 0xfd, 0x80, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
0xf9, 0xf9, 0xf9, 0x7f, 0xe5, 0xe5, 0xe5, 0x7f, 0xb9, 0xb9, 0xb9, 0x7c,
0x80, 0x80, 0x80, 0x78, 0x46, 0x46, 0x46, 0x6f, 0x1b, 0x1b, 0x1b, 0x5f,
0x03, 0x03, 0x03, 0x48, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
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, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c,
0x00, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x47, 0x21, 0x21, 0x21, 0x5f,
0x63, 0x63, 0x63, 0x70, 0xb9, 0xb9, 0xb9, 0x7b, 0xf5, 0xf5, 0xf5, 0x7f,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xf9, 0xf9, 0xf9, 0x80, 0xc2, 0xc2, 0xc2, 0x7c, 0x6d, 0x6d, 0x6d, 0x74,
0x27, 0x27, 0x27, 0x63, 0x07, 0x07, 0x07, 0x4b, 0x00, 0x00, 0x00, 0x34,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b,
0x04, 0x04, 0x04, 0x43, 0x23, 0x23, 0x23, 0x5f, 0x7a, 0x7a, 0x7a, 0x74,
0xdb, 0xdb, 0xdb, 0x7f, 0xfd, 0xfd, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xe3, 0xe3, 0xe3, 0x7f,
0x87, 0x87, 0x87, 0x77, 0x2e, 0x2e, 0x2e, 0x63, 0x07, 0x07, 0x07, 0x4b,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x38,
0x1d, 0x1d, 0x1d, 0x57, 0x79, 0x79, 0x79, 0x73, 0xe5, 0xe5, 0xe5, 0x7f,
0xfd, 0xfd, 0xfd, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xef, 0xef, 0xef, 0x7f, 0x86, 0x86, 0x86, 0x77, 0x26, 0x26, 0x26, 0x5f,
0x04, 0x04, 0x04, 0x44, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2f, 0x0e, 0x0e, 0x0e, 0x4b,
0x5d, 0x5d, 0x5d, 0x6b, 0xda, 0xda, 0xda, 0x7c, 0xfd, 0xfd, 0xfd, 0x7f,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xe5, 0xe5, 0xe5, 0x7f, 0x69, 0x69, 0x69, 0x70,
0x15, 0x15, 0x15, 0x57, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f,
0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3b, 0x30, 0x30, 0x30, 0x5b,
0xb5, 0xb5, 0xb5, 0x78, 0xf9, 0xf9, 0xf9, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xc1, 0xc1, 0xc1, 0x7c,
0x3c, 0x3c, 0x3c, 0x67, 0x07, 0x07, 0x07, 0x48, 0x00, 0x00, 0x00, 0x2c,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x2c, 0x0a, 0x0a, 0x0a, 0x48, 0x6a, 0x6a, 0x6a, 0x6c,
0xef, 0xef, 0xef, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xf9, 0xf9, 0xf9, 0x80,
0x77, 0x77, 0x77, 0x74, 0x15, 0x15, 0x15, 0x57, 0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1f,
0x00, 0x00, 0x00, 0x38, 0x1d, 0x1d, 0x1d, 0x58, 0xa7, 0xa7, 0xa7, 0x77,
0xf9, 0xf9, 0xf9, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xb4, 0xb4, 0xb4, 0x7b, 0x2a, 0x2a, 0x2a, 0x60, 0x04, 0x04, 0x04, 0x44,
0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x27,
0x04, 0x04, 0x04, 0x44, 0x36, 0x36, 0x36, 0x64, 0xd6, 0xd6, 0xd6, 0x7c,
0xfd, 0xfd, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xe5, 0xe5, 0xe5, 0x7f, 0x46, 0x46, 0x46, 0x6b, 0x07, 0x07, 0x07, 0x4c,
0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2c,
0x03, 0x03, 0x03, 0x4b, 0x4e, 0x4e, 0x4e, 0x6c, 0xeb, 0xeb, 0xeb, 0x7f,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xf9, 0xf9, 0xf9, 0x7f, 0x60, 0x60, 0x60, 0x6f, 0x0a, 0x0a, 0x0a, 0x50,
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2f,
0x06, 0x06, 0x06, 0x4f, 0x5e, 0x5e, 0x5e, 0x6f, 0xf1, 0xf1, 0xf1, 0x80,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0x71, 0x71, 0x71, 0x70, 0x0f, 0x0f, 0x0f, 0x53,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2f,
0x06, 0x06, 0x06, 0x4f, 0x63, 0x63, 0x63, 0x6f, 0xf3, 0xf3, 0xf3, 0x7f,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x7f, 0x74, 0x74, 0x74, 0x73, 0x0f, 0x0f, 0x0f, 0x53,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2c,
0x03, 0x03, 0x03, 0x4b, 0x5a, 0x5a, 0x5a, 0x6c, 0xf1, 0xf1, 0xf1, 0x7f,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xfd, 0xfd, 0xfd, 0x7f, 0x6b, 0x6b, 0x6b, 0x70, 0x10, 0x10, 0x10, 0x50,
0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x28,
0x04, 0x04, 0x04, 0x47, 0x45, 0x45, 0x45, 0x67, 0xe5, 0xe5, 0xe5, 0x7f,
0xfd, 0xfd, 0xfd, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xf3, 0xf3, 0xf3, 0x7f, 0x57, 0x57, 0x57, 0x6c, 0x0a, 0x0a, 0x0a, 0x4c,
0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x3c, 0x2e, 0x2e, 0x2e, 0x5f, 0xc7, 0xc7, 0xc7, 0x7b,
0xfb, 0xfb, 0xfb, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xd4, 0xd4, 0xd4, 0x7c, 0x3d, 0x3d, 0x3d, 0x64, 0x04, 0x04, 0x04, 0x44,
0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1b,
0x00, 0x00, 0x00, 0x33, 0x16, 0x16, 0x16, 0x53, 0x8f, 0x8f, 0x8f, 0x74,
0xf5, 0xf5, 0xf5, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xfd, 0xfd, 0xfd, 0x80,
0x9f, 0x9f, 0x9f, 0x77, 0x23, 0x23, 0x23, 0x58, 0x00, 0x00, 0x00, 0x38,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14,
0x00, 0x00, 0x00, 0x28, 0x07, 0x07, 0x07, 0x47, 0x4e, 0x4e, 0x4e, 0x68,
0xdf, 0xdf, 0xdf, 0x7f, 0xfd, 0xfd, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xeb, 0xeb, 0xeb, 0x7f,
0x5f, 0x5f, 0x5f, 0x6b, 0x0e, 0x0e, 0x0e, 0x4b, 0x00, 0x00, 0x00, 0x2f,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c,
0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x38, 0x1e, 0x1e, 0x1e, 0x57,
0x93, 0x93, 0x93, 0x74, 0xf1, 0xf1, 0xf1, 0x7f, 0xff, 0xff, 0xff, 0x7f,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xf7, 0xf7, 0xf7, 0x80, 0xa4, 0xa4, 0xa4, 0x77,
0x2b, 0x2b, 0x2b, 0x58, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x04, 0x04, 0x04, 0x44,
0x3c, 0x3c, 0x3c, 0x63, 0xbc, 0xbc, 0xbc, 0x7b, 0xf5, 0xf5, 0xf5, 0x80,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xfb, 0xfb, 0xfb, 0x7f, 0xc9, 0xc9, 0xc9, 0x7b, 0x4d, 0x4d, 0x4d, 0x64,
0x0f, 0x0f, 0x0f, 0x47, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x33,
0x0e, 0x0e, 0x0e, 0x4b, 0x54, 0x54, 0x54, 0x67, 0xc5, 0xc5, 0xc5, 0x7c,
0xf3, 0xf3, 0xf3, 0x80, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xf7, 0xf7, 0xf7, 0x80,
0xd2, 0xd2, 0xd2, 0x7c, 0x63, 0x63, 0x63, 0x6b, 0x14, 0x14, 0x14, 0x4c,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0f,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x34, 0x11, 0x11, 0x11, 0x4c, 0x54, 0x54, 0x54, 0x67,
0xb8, 0xb8, 0xb8, 0x7b, 0xe9, 0xe9, 0xe9, 0x7f, 0xfd, 0xfd, 0xfd, 0x7f,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0x80,
0xfd, 0xfd, 0xfd, 0x80, 0xef, 0xef, 0xef, 0x7f, 0xc3, 0xc3, 0xc3, 0x7b,
0x61, 0x61, 0x61, 0x68, 0x17, 0x17, 0x17, 0x4f, 0x00, 0x00, 0x00, 0x34,
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13,
0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x34, 0x0e, 0x0e, 0x0e, 0x4b,
0x3c, 0x3c, 0x3c, 0x63, 0x90, 0x90, 0x90, 0x74, 0xd2, 0xd2, 0xd2, 0x7c,
0xe9, 0xe9, 0xe9, 0x7f, 0xf7, 0xf7, 0xf7, 0x7f, 0xfd, 0xfd, 0xfd, 0x7f,
0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
0xfd, 0xfd, 0xfd, 0x80, 0xf7, 0xf7, 0xf7, 0x80, 0xeb, 0xeb, 0xeb, 0x7f,
0xd9, 0xd9, 0xd9, 0x7f, 0x9b, 0x9b, 0x9b, 0x74, 0x46, 0x46, 0x46, 0x63,
0x11, 0x11, 0x11, 0x4b, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x23,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03,
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, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x33,
0x04, 0x04, 0x04, 0x44, 0x1b, 0x1b, 0x1b, 0x54, 0x4a, 0x4a, 0x4a, 0x67,
0x87, 0x87, 0x87, 0x73, 0xb8, 0xb8, 0xb8, 0x7b, 0xd2, 0xd2, 0xd2, 0x7c,
0xdd, 0xdd, 0xdd, 0x7f, 0xdf, 0xdf, 0xdf, 0x7f, 0xdd, 0xdd, 0xdd, 0x7f,
0xd5, 0xd5, 0xd5, 0x7f, 0xbf, 0xbf, 0xbf, 0x7b, 0x90, 0x90, 0x90, 0x73,
0x53, 0x53, 0x53, 0x68, 0x23, 0x23, 0x23, 0x58, 0x07, 0x07, 0x07, 0x44,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x13,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1c,
0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x38, 0x07, 0x07, 0x07, 0x47,
0x16, 0x16, 0x16, 0x53, 0x29, 0x29, 0x29, 0x5c, 0x3f, 0x3f, 0x3f, 0x67,
0x4f, 0x4f, 0x4f, 0x6b, 0x57, 0x57, 0x57, 0x6c, 0x53, 0x53, 0x53, 0x6c,
0x43, 0x43, 0x43, 0x67, 0x2e, 0x2e, 0x2e, 0x5f, 0x16, 0x16, 0x16, 0x53,
0x07, 0x07, 0x07, 0x47, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2b,
0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x28,
0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x3c, 0x04, 0x04, 0x04, 0x47,
0x03, 0x03, 0x03, 0x4b, 0x07, 0x07, 0x07, 0x4f, 0x07, 0x07, 0x07, 0x4c,
0x04, 0x04, 0x04, 0x44, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x33,
0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03,
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, 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, 0x03, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14,
0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28,
0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2c,
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1b,
0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13,
0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17,
0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0b,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03,
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, 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, 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, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07,
0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03,
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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
lv_img_dsc_t touch_cursor = {
.header.always_zero = 0,
.header.w = 33,
.header.h = 33,
.data_size = 1089 * LV_IMG_PX_SIZE_ALPHA_BYTE,
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,
.data = touch_cursor_map,
};
#ifdef HEKATE_LOGO #ifdef HEKATE_LOGO
lv_img_dsc_t hekate_logo = { lv_img_dsc_t hekate_logo = {

View file

@ -169,6 +169,8 @@ void clock_disable(const clock_t *clk);
/*! Clock control for specific hardware portions. */ /*! Clock control for specific hardware portions. */
void clock_enable_fuse(bool enable); void clock_enable_fuse(bool enable);
void clock_enable_uart(u32 idx); void clock_enable_uart(u32 idx);
void clock_disable_uart(u32 idx);
int clock_uart_use_src_div(u32 idx, u32 baud);
void clock_enable_i2c(u32 idx); void clock_enable_i2c(u32 idx);
void clock_disable_i2c(u32 idx); void clock_disable_i2c(u32 idx);
void clock_enable_se(); void clock_enable_se();