lv_misc moved to misc/gfx

This commit is contained in:
Gabor 2017-04-18 10:27:59 +02:00
parent d93844bdd8
commit 2a1ace1f81
31 changed files with 0 additions and 67284 deletions

View File

@ -1,259 +0,0 @@
/**
* @file anim.c
*
*/
/*********************
* INCLUDES
*********************/
#include <string.h>
#include "anim.h"
#include "misc/math/math_base.h"
#include "misc/os/ptask.h"
#include "hal/systick/systick.h"
/*********************
* DEFINES
*********************/
#define ANIM_PATH_LENGTH 129 /*Elements in a path array*/
#define ANIM_PATH_START 64 /*In path array a value which corresponds to the start position*/
#define ANIM_PATH_END 192 /* ... to the end position. Not required, just for clearance.*/
#define ANIM_PATH_NORM_SHIFT 7 /*ANIM_PATH_START - ANIM_PATH_END. Must be 2^N. The exponent goes here. */
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static void anim_task (void * param);
static bool anim_ready_handler(anim_t * a);
/**********************
* STATIC VARIABLES
**********************/
static ll_dsc_t anim_ll;
static uint32_t last_task_run;
static bool anim_del_global_flag = false;
static anim_path_t anim_path_lin[] =
{64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192};
static anim_path_t anim_path_step[] =
{64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192,};
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Init. the animation module
*/
void anim_init(void)
{
ll_init(&anim_ll, sizeof(anim_t));
last_task_run = systick_get();
ptask_create(anim_task, LV_REFR_PERIOD, PTASK_PRIO_MID, NULL);
}
/**
* Create an animation
* @param anim_p an initialized 'anim_t' variable. Not required after call.
*/
void anim_create(anim_t * anim_p)
{
/*Add the new animation to the animation linked list*/
anim_t * new_anim = ll_ins_head(&anim_ll);
dm_assert(new_anim);
/*Initialize the animation descriptor*/
anim_p->playback_now = 0;
memcpy(new_anim, anim_p, sizeof(anim_t));
/*Set the start value*/
if(new_anim->fp != NULL) new_anim->fp(new_anim->var, new_anim->start);
}
/**
* Delete an animation for a variable with a given animatior function
* @param var pointer to variable
* @param fp a function pointer which is animating 'var',
* or NULL to ignore it and delete all animation with 'var
* @return true: at least 1 animation is deleted, false: no animation is deleted
*/
bool anim_del(void * var, anim_fp_t fp)
{
bool del = false;
anim_t * a;
anim_t * a_next;
a = ll_get_head(&anim_ll);
while(a != NULL) {
/*'a' might be deleted, so get the next object while 'a' is valid*/
a_next = ll_get_next(&anim_ll, a);
if(a->var == var && (a->fp == fp || fp == NULL)) {
ll_rem(&anim_ll, a);
dm_free(a);
del = true;
anim_del_global_flag = true;
}
a = a_next;
}
return del;
}
/**
* Calculate the time of an animation with a given speed and the start and end values
* @param speed speed of animation in unit/sec
* @param start start value of the animation
* @param end end value of the animation
* @return the required time [ms] for the animation with the given parameters
*/
uint16_t anim_speed_to_time(uint16_t speed, int32_t start, int32_t end)
{
int32_t d = MATH_ABS((int32_t) start - end);
uint16_t time = (int32_t)((int32_t)(d * 1000) / speed);
if(time == 0) {
time++;
}
return time;
}
/**
* Get a predefine animation path
* @param name name of the path from 'anim_path_name_t'
* @return pointer to the path array
*/
anim_path_t * anim_get_path(anim_path_name_t name)
{
switch (name) {
case ANIM_PATH_LIN:
return anim_path_lin;
break;
case ANIM_PATH_STEP:
return anim_path_step;
break;
default:
return NULL;
break;
}
}
/**********************
* STATIC FUNCTIONS
**********************/
/**
* Periodically handle the animations.
* @param param unused
*/
static void anim_task (void * param)
{
uint32_t elaps;
elaps = systick_elaps(last_task_run);
anim_t * a;
anim_t * a_next;
a = ll_get_head(&anim_ll);
while(a != NULL) {
/*'a' might be deleted, so get the next object while 'a' is valid*/
a_next = ll_get_next(&anim_ll, a);
a->act_time += elaps;
if(a->act_time >= 0) {
if(a->act_time > a->time) a->act_time = a->time;
/* Get the index of the path array based on the elapsed time*/
uint8_t path_i;
if(a->time == a->act_time) {
path_i = ANIM_PATH_LENGTH - 1; /*Use the last value id the time fully elapsed*/
} else {
path_i = a->act_time * (ANIM_PATH_LENGTH - 1) / a->time;
}
/* Get the new value which will be proportional to the current element of 'path_p'
* and the 'start' and 'end' values*/
int32_t new_val;
new_val = (int32_t)(a->path[path_i] - ANIM_PATH_START) * (a->end - a->start);
new_val = new_val >> ANIM_PATH_NORM_SHIFT;
new_val += a->start;
if(a->fp != NULL) a->fp(a->var, new_val); /*Apply the calculated value*/
/*If the time is elapsed the animation is ready*/
if(a->act_time >= a->time) {
bool invalid;
invalid = anim_ready_handler(a);
if(invalid != false) {
a_next = ll_get_head(&anim_ll); /*a_next might be invalid if animation delete occurred*/
}
}
}
a = a_next;
}
last_task_run = systick_get();
}
/**
* Called when an animation is ready to do the necessary thinks
* e.g. repeat, play back, delete etc.
* @param a pointer to an animation descriptor
* @return true: animation delete occurred
* */
static bool anim_ready_handler(anim_t * a)
{
bool invalid = false;
/*Delete the animation if
* - no repeat and no play back (simple one shot animation)
* - no repeat, play back is enabled and play back is ready */
if((a->repeat == 0 && a->playback == 0) ||
(a->repeat == 0 && a->playback == 1 && a->playback_now == 1)) {
void (*cb) (void *) = a->end_cb;
void * p = a->var;
ll_rem(&anim_ll, a);
dm_free(a);
/*Call the callback function at the end*/
/* Check if an animation is deleted in the cb function
* if yes then the caller function has to know this*/
anim_del_global_flag = false;
if(cb != NULL) cb(p);
invalid = anim_del_global_flag;
}
/*If the animation is not deleted then restart it*/
else {
a->act_time = - a->repeat_pause; /*Restart the animation*/
/*Swap the start and end values in play back mode*/
if(a->playback != 0) {
/*If now turning back use the 'playback_pause*/
if(a->playback_now == 0) a->act_time = - a->playback_pause;
/*Toggle the play back state*/
a->playback_now = a->playback_now == 0 ? 1: 0;
/*Swap the start and end values*/
int32_t tmp;
tmp = a->start;
a->start = a->end;
a->end = tmp;
}
}
return invalid;
}

View File

@ -1,110 +0,0 @@
/**
* @file anim.h
*
*/
#ifndef ANIM_H
#define ANIM_H
/*********************
* INCLUDES
*********************/
#include "lvgl/lvgl.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
typedef enum
{
ANIM_PATH_LIN,
ANIM_PATH_STEP,
}anim_path_name_t;
typedef uint8_t anim_path_t;
typedef void (*anim_fp_t)(void *, int32_t);
typedef void (*anim_cb_t)(void *);
typedef struct
{
void * var; /*Variable to animate*/
anim_fp_t fp; /*Animator function*/
anim_cb_t end_cb; /*Call it when the animation is ready*/
anim_path_t * path; /*An array with the steps of animations*/
int32_t start; /*Start value*/
int32_t end; /*End value*/
int16_t time; /*Animation time in ms*/
int16_t act_time; /*Current time in animation. Set to negative to make delay.*/
uint16_t playback_pause; /*Wait before play back*/
uint16_t repeat_pause; /*Wait before repeat*/
uint8_t playback :1; /*When the animation is ready play it back*/
uint8_t repeat :1; /*Repeat the animation infinitely*/
/*Animation system use these - user shouldn't set*/
uint8_t playback_now :1; /*Play back is in progress*/
}anim_t;
/*Example initialization
anim_t a;
a.var = obj;
a.start = lv_obj_get_height(obj);
a.end = new_height;
a.fp = (anim_fp_t)lv_obj_set_height;
a.path = anim_get_path(ANIM_PATH_LIN);
a.end_cb = NULL;
a.act_time = 0;
a.time = 200;
a.playback = 0;
a.playback_pause = 0;
a.repeat = 0;
a.repeat_pause = 0;
*/
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Init. the animation module
*/
void anim_init(void);
/**
* Create an animation
* @param anim_p an initialized 'anim_t' variable. Not required after call.
*/
void anim_create(anim_t * anim_p);
/**
* Delete an animation for a variable with a given animatior function
* @param var pointer to variable
* @param fp a function pointer which is animating 'var',
* or NULL to ignore it and delete all animation with 'var
* @return true: at least 1 animation is deleted, false: no animation is deleted
*/
bool anim_del(void * var, anim_fp_t fp);
/**
* Calculate the time of an animation with a given speed and the start and end values
* @param speed speed of animation in unit/sec
* @param start start value of the animation
* @param end end value of the animation
* @return the required time [ms] for the animation with the given parameters
*/
uint16_t anim_speed_to_time(uint16_t speed, int32_t start, int32_t end);
/**
* Get a predefine animation path
* @param name name of the path from 'anim_path_name_t'
* @return pointer to the path array
*/
anim_path_t * anim_get_path(anim_path_name_t name);
/**********************
* MACROS
**********************/
#endif

View File

@ -1,233 +0,0 @@
/**
* @file 2d.c
*
*/
/*********************
* INCLUDES
*********************/
#include <lvgl/lv_misc/area.h>
#include "misc/math/math_base.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Initialize an area
* @param area_p pointer to an area
* @param x1 left coordinate of the area
* @param y1 top coordinate of the area
* @param x2 right coordinate of the area
* @param y2 bottom coordinate of the area
*/
void area_set(area_t * area_p, cord_t x1, cord_t y1, cord_t x2, cord_t y2)
{
area_p->x1 = x1;
area_p->y1 = y1;
area_p->x2 = x2;
area_p->y2 = y2;
}
/**
* Set the width of an area
* @param area_p pointer to an area
* @param w the new width of the area (w == 1 makes x1 == x2)
*/
void area_set_width(area_t * area_p, cord_t w)
{
area_p->x2 = area_p->x1 + w - 1;
}
/**
* Set the height of an area
* @param area_p pointer to an area
* @param h the new height of the area (h == 1 makes y1 == y2)
*/
void area_set_height(area_t * area_p, cord_t h)
{
area_p->y2 = area_p->y1 + h - 1;
}
/**
* Set the position of an area (width and height will be kept)
* @param area_p pointer to an area
* @param x the new x coordinate of the area
* @param y the new y coordinate of the area
*/
void area_set_pos(area_t * area_p, cord_t x, cord_t y)
{
cord_t w = area_get_width(area_p);
cord_t h = area_get_height(area_p);
area_p->x1 = x;
area_p->y1 = y;
area_set_width(area_p, w);
area_set_height(area_p, h);
}
/**
* Return with area of an area (x * y)
* @param area_p pointer to an area
* @return size of area
*/
uint32_t area_get_size(const area_t * area_p)
{
uint32_t size;
size = (uint32_t)(area_p->x2 - area_p->x1 + 1) *
(area_p->y2 - area_p->y1 + 1);
return size;
}
/**
* Get the common parts of two areas
* @param res_p pointer to an area, the result will be stored her
* @param a1_p pointer to the first area
* @param a2_p pointer to the second area
* @return false: the two area has NO common parts, res_p is invalid
*/
bool area_union(area_t * res_p, const area_t * a1_p, const area_t * a2_p)
{
/* Get the smaller area from 'a1_p' and 'a2_p' */
res_p->x1 = MATH_MAX(a1_p->x1, a2_p->x1);
res_p->y1 = MATH_MAX(a1_p->y1, a2_p->y1);
res_p->x2 = MATH_MIN(a1_p->x2, a2_p->x2);
res_p->y2 = MATH_MIN(a1_p->y2, a2_p->y2);
/*If x1 or y1 greater then x2 or y2 then the areas union is empty*/
bool union_ok = true;
if((res_p->x1 > res_p->x2) ||
(res_p->y1 > res_p->y2))
{
union_ok = false;
}
return union_ok;
}
/**
* Join two areas into a third which involves the other two
* @param res_p pointer to an area, the result will be stored here
* @param a1_p pointer to the first area
* @param a2_p pointer to the second area
*/
void area_join(area_t * a_res_p, const area_t * a1_p, const area_t * a2_p)
{
a_res_p->x1 = MATH_MIN(a1_p->x1, a2_p->x1);
a_res_p->y1 = MATH_MIN(a1_p->y1, a2_p->y1);
a_res_p->x2 = MATH_MAX(a1_p->x2, a2_p->x2);
a_res_p->y2 = MATH_MAX(a1_p->y2, a2_p->y2);
}
/**
* Check if a point is on an area
* @param a_p pointer to an area
* @param p_p pointer to a point
* @return false:the point is out of the area
*/
bool area_is_point_on(const area_t * a_p, const point_t * p_p)
{
bool is_on = false;
if((p_p->x >= a_p->x1 && p_p->x <= a_p->x2) &&
((p_p->y >= a_p->y1 && p_p->y <= a_p->y2)))
{
is_on = true;
}
return is_on;
}
/**
* Check if two area has common parts
* @param a1_p pointer to an area.
* @param a2_p pointer to an other area
* @return false: a1_p and a2_p has no common parts
*/
bool area_is_on(const area_t * a1_p, const area_t * a2_p)
{
/*Two area are on each other if... */
point_t p;
/*a2 left-top corner is on a1*/
p.x = a2_p->x1;
p.y = a2_p->y1;
if(area_is_point_on(a1_p, &p)) return true;
/*a2 right-top corner is on a1*/
p.x = a2_p->x1;
p.y = a2_p->y1;
if(area_is_point_on(a1_p, &p)) return true;
/*a2 left-bottom corner is on a1*/
p.x = a2_p->x1;
p.y = a2_p->y2;
if(area_is_point_on(a1_p, &p)) return true;
/*a2 right-bottom corner is on a1*/
p.x = a2_p->x2;
p.y = a2_p->y2;
if(area_is_point_on(a1_p, &p)) return true;
/*a2 is horizontally bigger then a1 and covers it*/
if((a2_p->x1 <= a1_p->x1 && a2_p->x2 >= a1_p->x2) && /*a2 hor. cover a1?*/
((a2_p->y1 <= a1_p->y1 && a2_p->y1 >= a1_p->y2) || /*upper edge is on a1?*/
(a2_p->y2 <= a1_p->y1 && a2_p->y2 >= a1_p->y2) ||/* or lower edge is on a1?*/
(a2_p->y1 <= a1_p->y1 && a2_p->y2 >= a1_p->y2))) /*or a2 vert bigger then a1*/
return true;
/*a2 is vertically bigger then a1 and covers it*/
if((a2_p->y1 <= a1_p->y1 && a2_p->y2 >= a1_p->y2) && /*a2 vert. cover a1?*/
((a2_p->x1 <= a1_p->x1 && a2_p->x1 >= a1_p->x2) || /*left edge is on a1?*/
(a2_p->x2 <= a1_p->x1 && a2_p->x2 >= a1_p->x2) ||/* or right edge is on a1?*/
(a2_p->x1 <= a1_p->x1 && a2_p->x2 >= a1_p->x2))) /*or a2 hor. bigger then a1*/
return true;
/*Else no cover*/
return false;
}
/**
* Check if an area is fully on an other
* @param ain_p pointer to an area which could be on aholder_p
* @param aholder pointer to an area which could involve ain_p
* @return
*/
bool area_is_in(const area_t * ain_p, const area_t * aholder_p)
{
bool is_in = false;
if(ain_p->x1 >= aholder_p->x1 &&
ain_p->y1 >= aholder_p->y1 &&
ain_p->x2 <= aholder_p->x2 &&
ain_p->y2 <= aholder_p->y2)
{
is_in = true;
}
return is_in;
}
/**********************
* STATIC FUNCTIONS
**********************/

View File

@ -1,158 +0,0 @@
/**
* @file area.h
*
*/
#ifndef AREA_H
#define AREA_H
/*********************
* INCLUDES
*********************/
#include "lv_conf.h"
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
typedef LV_CORD_TYPE cord_t;
typedef struct
{
cord_t x;
cord_t y;
}point_t;
typedef struct
{
cord_t x1;
cord_t y1;
cord_t x2;
cord_t y2;
}area_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Initialize an area
* @param area_p pointer to an area
* @param x1 left coordinate of the area
* @param y1 top coordinate of the area
* @param x2 right coordinate of the area
* @param y2 bottom coordinate of the area
*/
void area_set(area_t * area_p, cord_t x1, cord_t y1, cord_t x2, cord_t y2);
/**
* Copy an area
* @param dest pointer to the destination area
* @param src pointer to the source area
*/
static void inline area_cpy(area_t * dest, const area_t * src)
{
memcpy(dest, src, sizeof(area_t));
}
/**
* Get the width of an area
* @param area_p pointer to an area
* @return the width of the area (if x1 == x2 -> width = 1)
*/
static inline cord_t area_get_width(const area_t * area_p)
{
return area_p->x2 - area_p->x1 + 1;
}
/**
* Get the height of an area
* @param area_p pointer to an area
* @return the height of the area (if y1 == y2 -> height = 1)
*/
static inline cord_t area_get_height(const area_t * area_p)
{
return area_p->y2 - area_p->y1 + 1;
}
/**
* Set the width of an area
* @param area_p pointer to an area
* @param w the new width of the area (w == 1 makes x1 == x2)
*/
void area_set_width(area_t * area_p, cord_t w);
/**
* Set the height of an area
* @param area_p pointer to an area
* @param h the new height of the area (h == 1 makes y1 == y2)
*/
void area_set_height(area_t * area_p, cord_t h);
/**
* Set the position of an area (width and height will be kept)
* @param area_p pointer to an area
* @param x the new x coordinate of the area
* @param y the new y coordinate of the area
*/
void area_set_pos(area_t * area_p, cord_t x, cord_t y);
/**
* Return with area of an area (x * y)
* @param area_p pointer to an area
* @return size of area
*/
uint32_t area_get_size(const area_t * area_p);
/**
* Get the common parts of two areas
* @param res_p pointer to an area, the result will be stored her
* @param a1_p pointer to the first area
* @param a2_p pointer to the second area
* @return false: the two area has NO common parts, res_p is invalid
*/
bool area_union(area_t * res_p, const area_t * a1_p, const area_t * a2_p);
/**
* Join two areas into a third which involves the other two
* @param res_p pointer to an area, the result will be stored here
* @param a1_p pointer to the first area
* @param a2_p pointer to the second area
*/
void area_join(area_t * a_res_p, const area_t * a1_p, const area_t * a2_p);
/**
* Check if a point is on an area
* @param a_p pointer to an area
* @param p_p pointer to a point
* @return false:the point is out of the area
*/
bool area_is_point_on(const area_t * a_p, const point_t * p_p);
/**
* Check if two area has common parts
* @param a1_p pointer to an area.
* @param a2_p pointer to an other area
* @return false: a1_p and a2_p has no common parts
*/
bool area_is_on(const area_t * a1_p, const area_t * a2_p);
/**
* Check if an area is fully on an other
* @param ain_p pointer to an area which could be on aholder_p
* @param aholder pointer to an area which could involve ain_p
* @return
*/
bool area_is_in(const area_t * ain_p, const area_t * aholder_p);
/**********************
* MACROS
**********************/
#endif

View File

@ -1,79 +0,0 @@
/**
* @file circ.c
* Circle drawing algorithm (with Bresenham)
* Only a 1/8 circle is calculated. Use CIRC_OCT1_X, CIRC_OCT1_Y macros to get
* the other octets.
*/
/*********************
* INCLUDES
*********************/
#include <lvgl/lv_misc/area.h>
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Initialize the circle drawing
* @param c pointer to a point. The coordinates will be calculated here
* @param tmp point to a variable. It will store temporary data
* @param radius radius of the circle
*/
void circ_init(point_t * c, cord_t * tmp, cord_t radius)
{
c->x = radius;
c->y = 0;
*tmp = 1 - radius;
}
/**
* Test the circle drawing is ready or not
* @param c same as in circ_init
* @return true if the circle is not ready yet
*/
bool circ_cont(point_t * c)
{
return c->y <= c->x ? true : false;
}
/**
* Get the next point from the circle
* @param c same as in circ_init. The next point stored here.
* @param tmp same as in circ_init.
*/
void circ_next(point_t * c, cord_t * tmp)
{
c->y++;
if (*tmp <= 0) {
(*tmp) += 2 * c->y + 1; // Change in decision criterion for y -> y+1
} else {
c->x--;
(*tmp) += 2 * (c->y - c->x) + 1; // Change for y -> y+1, x -> x-1
}
}
/**********************
* STATIC FUNCTIONS
**********************/

View File

@ -1,70 +0,0 @@
/**
* @file circ.h
*
*/
#ifndef CIRC_H
#define CIRC_H
/*********************
* INCLUDES
*********************/
#include <lvgl/lv_misc/area.h>
#include <stddef.h>
/*********************
* DEFINES
*********************/
#define CIRC_OCT1_X(p) (p.x)
#define CIRC_OCT1_Y(p) (p.y)
#define CIRC_OCT2_X(p) (p.y)
#define CIRC_OCT2_Y(p) (p.x)
#define CIRC_OCT3_X(p) (-p.y)
#define CIRC_OCT3_Y(p) (p.x)
#define CIRC_OCT4_X(p) (-p.x)
#define CIRC_OCT4_Y(p) (p.y)
#define CIRC_OCT5_X(p) (-p.x)
#define CIRC_OCT5_Y(p) (-p.y)
#define CIRC_OCT6_X(p) (-p.y)
#define CIRC_OCT6_Y(p) (-p.x)
#define CIRC_OCT7_X(p) (p.y)
#define CIRC_OCT7_Y(p) (-p.x)
#define CIRC_OCT8_X(p) (p.x)
#define CIRC_OCT8_Y(p) (-p.y)
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Initialize the circle drawing
* @param c pointer to a point. The coordinates will be calculated here
* @param tmp point to a variable. It will store temporary data
* @param radius radius of the circle
*/
void circ_init(point_t * c, cord_t * tmp, cord_t radius);
/**
* Test the circle drawing is ready or not
* @param c same as in circ_init
* @return true if the circle is not ready yet
*/
bool circ_cont(point_t * c);
/**
* Get the next point from the circle
* @param c same as in circ_init. The next point stored here.
* @param tmp same as in circ_init.
*/
void circ_next(point_t * c, cord_t * tmp);
/**********************
* MACROS
**********************/
#endif

View File

@ -1,163 +0,0 @@
/**
* @file font.c
*
*/
/*********************
* INCLUDES
*********************/
#include <lvgl/lv_misc/fonts/symbol_30.h>
#include <stddef.h>
#include "font.h"
#include "fonts/dejavu_8.h"
#include "fonts/dejavu_10.h"
#include "fonts/dejavu_14.h"
#include "fonts/dejavu_20.h"
#include "fonts/dejavu_30.h"
#include "fonts/dejavu_40.h"
#include "fonts/dejavu_60.h"
#include "fonts/dejavu_80.h"
#include "fonts/symbol_30.h"
#include "fonts/symbol_60.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Get the font from its id
* @param font_id: the id of a font (an element of font_types_t enum)
* @return pointer to a font descriptor
*/
const font_t * font_get(font_types_t font_id)
{
const font_t * font_p = NULL;
switch(font_id)
{
#if USE_FONT_DEJAVU_8 != 0
case FONT_DEJAVU_8:
font_p = dejavu_8_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_10 != 0
case FONT_DEJAVU_10:
font_p = dejavu_10_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_14 != 0
case FONT_DEJAVU_14:
font_p = dejavu_14_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_20 != 0
case FONT_DEJAVU_20:
font_p = dejavu_20_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_30 != 0
case FONT_DEJAVU_30:
font_p = dejavu_30_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_40 != 0
case FONT_DEJAVU_40:
font_p = dejavu_40_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_60 != 0
case FONT_DEJAVU_60:
font_p = dejavu_60_get_dsc();
break;
#endif
#if USE_FONT_DEJAVU_80 != 0
case FONT_DEJAVU_80:
font_p = dejavu_80_get_dsc();
break;
#endif
#if USE_FONT_SYMBOL_30 != 0
case FONT_SYMBOL_30:
font_p = symbol_30_get_dsc();
break;
#endif
#if USE_FONT_SYMBOL_60 != 0
case FONT_SYMBOL_60:
font_p = symbol_60_get_dsc();
break;
#endif
default:
font_p = NULL;
}
return font_p;
}
/**
* Return with the bitmap of a font.
* @param font_p pointer to a font
* @param letter a letter
* @return pointer to the bitmap of the letter
*/
const uint8_t * font_get_bitmap(const font_t * font_p, uint8_t letter)
{
if(letter < font_p->start_ascii || letter >= font_p->start_ascii + font_p->letter_cnt) return NULL;
uint32_t index = (letter - font_p->start_ascii) * font_p->height_row * font_p->width_byte;
return &font_p->bitmaps_a[index];
}
/**
* Get the width of a letter in a font
* @param font_p pointer to a font
* @param letter a letter
* @return the width of a letter
*/
uint8_t font_get_width(const font_t * font_p, uint8_t letter)
{
if(letter < font_p->start_ascii) return 0;
letter -= font_p->start_ascii;
uint8_t w = 0;
if(letter < font_p->letter_cnt) {
w = font_p->fixed_width != 0 ? font_p->fixed_width :
font_p->width_bit_a[letter];
}
return w;
}
/**********************
* STATIC FUNCTIONS
**********************/

View File

@ -1,115 +0,0 @@
/**
* @file font.h
*
*/
#ifndef FONT_H
#define FONT_H
/*********************
* INCLUDES
*********************/
#include "lv_conf.h"
#include <stdint.h>
#include <stddef.h>
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
typedef enum
{
#if USE_FONT_DEJAVU_8 != 0
FONT_DEJAVU_8,
#endif
#if USE_FONT_DEJAVU_10 != 0
FONT_DEJAVU_10,
#endif
#if USE_FONT_DEJAVU_14 != 0
FONT_DEJAVU_14,
#endif
#if USE_FONT_DEJAVU_20 != 0
FONT_DEJAVU_20,
#endif
#if USE_FONT_DEJAVU_30 != 0
FONT_DEJAVU_30,
#endif
#if USE_FONT_DEJAVU_40 != 0
FONT_DEJAVU_40,
#endif
#if USE_FONT_DEJAVU_60 != 0
FONT_DEJAVU_60,
#endif
#if USE_FONT_DEJAVU_80 != 0
FONT_DEJAVU_80,
#endif
#if USE_FONT_SYMBOL_30 != 0
FONT_SYMBOL_30,
#endif
#if USE_FONT_SYMBOL_60 != 0
FONT_SYMBOL_60,
#endif
FONT_TYPE_NUM,
}font_types_t;
typedef struct
{
uint8_t letter_cnt;
uint8_t start_ascii;
uint8_t width_byte;
uint8_t height_row;
uint8_t fixed_width;
const uint8_t * width_bit_a;
const uint8_t * bitmaps_a;
}font_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Get the font from its id
* @param font_id: the id of a font (an element of font_types_t enum)
* @return pointer to a font descriptor
*/
const font_t * font_get(font_types_t font_id);
/**
* Return with the bitmap of a font.
* @param font_p pointer to a font
* @param letter a letter
* @return pointer to the bitmap of the letter
*/
const uint8_t * font_get_bitmap(const font_t * font_p, uint8_t letter);
/**
* Get the height of a font
* @param font_p pointer to a font
* @return the height of a font
*/
static inline uint8_t font_get_height(const font_t * font_p)
{
return font_p->height_row;
}
/**
* Get the width of a letter in a font
* @param font_p pointer to a font
* @param letter a letter
* @return the width of a letter
*/
uint8_t font_get_width(const font_t * font_p, uint8_t letter);
/**********************
* MACROS
**********************/
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_10_H
#define DEJAVU_10_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_10 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_10_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_14_H
#define DEJAVU_14_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_14 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_14_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_20_H
#define DEJAVU_20_H
/*Use ISO8859-1 encoding in the IDE*/
#include "misc_conf.h"
#if USE_FONT_DEJAVU_20 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_20_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_30_H
#define DEJAVU_30_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_30 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_30_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_40_H
#define DEJAVU_40_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_40 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_40_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_60_H
#define DEJAVU_60_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_60 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_60_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
#ifndef DEJAVU_8_H
#define DEJAVU_8_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_8 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_8_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +0,0 @@
#ifndef DEJAVU_80_H
#define DEJAVU_80_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_DEJAVU_80 != 0
#include <stdint.h>
#include "../font.h"
const font_t * dejavu_80_get_dsc(void);
#endif
#endif

View File

@ -1,867 +0,0 @@
#include "lv_conf.h"
#if USE_FONT_SYMBOL_30 != 0
#include <stdint.h>
#include "../font.h"
static const uint8_t symbol_30_bitmaps[3120] =
{
// ASCII: 97, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x03, 0xff, 0xff, 0x00, // ------OOOOOOOOOOOOOOOOOO------..
0x07, 0xff, 0xff, 0x80, // -----OOOOOOOOOOOOOOOOOOOO-----..
0x07, 0xff, 0xff, 0x80, // -----OOOOOOOOOOOOOOOOOOOO-----..
0x07, 0xff, 0xff, 0x80, // -----OOOOOOOOOOOOOOOOOOOO-----..
0x0f, 0xff, 0xff, 0xc0, // ----OOOOOOOOOOOOOOOOOOOOOO----..
0x0f, 0xff, 0xff, 0xc0, // ----OOOOOOOOOOOOOOOOOOOOOO----..
0x0f, 0xff, 0xff, 0xc0, // ----OOOOOOOOOOOOOOOOOOOOOO----..
0x1f, 0xff, 0xff, 0xe0, // ---OOOOOOOOOOOOOOOOOOOOOOOO---..
0x1f, 0xff, 0xff, 0xe0, // ---OOOOOOOOOOOOOOOOOOOOOOOO---..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x7f, 0xff, 0xff, 0xf8, // -OOOOOOOOOOOOOOOOOOOOOOOOOOOO-..
0x7f, 0xff, 0xff, 0xf8, // -OOOOOOOOOOOOOOOOOOOOOOOOOOOO-..
0x7f, 0xff, 0xff, 0xf8, // -OOOOOOOOOOOOOOOOOOOOOOOOOOOO-..
0xff, 0xff, 0xff, 0xfc, // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO..
0xff, 0xff, 0xff, 0xfc, // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO..
0xff, 0xff, 0xff, 0xfc, // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO..
0xe0, 0x00, 0x00, 0x1c, // OOO------------------------OOO..
0x60, 0x00, 0x00, 0x18, // -OO------------------------OO-..
0x60, 0x00, 0x03, 0x18, // -OO-------------------OO---OO-..
0x60, 0x00, 0x03, 0x18, // -OO-------------------OO---OO-..
0x70, 0x00, 0x00, 0x38, // -OOO----------------------OOO-..
0x30, 0x00, 0x00, 0x30, // --OO----------------------OO--..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 98, char width: 26
0xff, 0xfe, 0x40, 0x00, // OOOOOOOOOOOOOOO--O--------......
0xff, 0xfe, 0x60, 0x00, // OOOOOOOOOOOOOOO--OO-------......
0xff, 0xfe, 0x70, 0x00, // OOOOOOOOOOOOOOO--OOO------......
0xff, 0xfe, 0x78, 0x00, // OOOOOOOOOOOOOOO--OOOO-----......
0xff, 0xfe, 0x7c, 0x00, // OOOOOOOOOOOOOOO--OOOOO----......
0xff, 0xfe, 0x7e, 0x00, // OOOOOOOOOOOOOOO--OOOOOO---......
0xff, 0xfe, 0x7f, 0x00, // OOOOOOOOOOOOOOO--OOOOOOO--......
0xff, 0xfe, 0x7f, 0x80, // OOOOOOOOOOOOOOO--OOOOOOOO-......
0xff, 0xfe, 0x00, 0x00, // OOOOOOOOOOOOOOO-----------......
0xff, 0xff, 0x00, 0x00, // OOOOOOOOOOOOOOOO----------......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xfe, 0x00, 0x1f, 0xc0, // OOOOOOO------------OOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0x80, // OOOOOOOOOOOOOOOOOOOOOOOOO-......
// ASCII: 99, char width: 32
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x3f, 0xe0, 0x00, 0x00, // --OOOOOOOOO---------------------
0x7f, 0xf0, 0x00, 0x00, // -OOOOOOOOOOO--------------------
0xff, 0xf8, 0x00, 0x00, // OOOOOOOOOOOOO-------------------
0xff, 0xf8, 0x00, 0x00, // OOOOOOOOOOOOO-------------------
0xff, 0xff, 0xff, 0x00, // OOOOOOOOOOOOOOOOOOOOOOOO--------
0xff, 0xff, 0xff, 0x80, // OOOOOOOOOOOOOOOOOOOOOOOOO-------
0xff, 0xff, 0xff, 0x80, // OOOOOOOOOOOOOOOOOOOOOOOOO-------
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO------
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO------
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO------
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO------
0xff, 0x80, 0x00, 0x00, // OOOOOOOOO-----------------------
0xfe, 0x00, 0x00, 0x00, // OOOOOOO-------------------------
0xfc, 0x3f, 0xff, 0xff, // OOOOOO----OOOOOOOOOOOOOOOOOOOOOO
0xf8, 0xff, 0xff, 0xfe, // OOOOO---OOOOOOOOOOOOOOOOOOOOOOO-
0xf1, 0xff, 0xff, 0xfe, // OOOO---OOOOOOOOOOOOOOOOOOOOOOOO-
0xf3, 0xff, 0xff, 0xfc, // OOOO--OOOOOOOOOOOOOOOOOOOOOOOO--
0xe7, 0xff, 0xff, 0xf8, // OOO--OOOOOOOOOOOOOOOOOOOOOOOO---
0xcf, 0xff, 0xff, 0xf0, // OO--OOOOOOOOOOOOOOOOOOOOOOOO----
0x8f, 0xff, 0xff, 0xe0, // O---OOOOOOOOOOOOOOOOOOOOOOO-----
0x1f, 0xff, 0xff, 0xe0, // ---OOOOOOOOOOOOOOOOOOOOOOOO-----
0x3f, 0xff, 0xff, 0xc0, // --OOOOOOOOOOOOOOOOOOOOOOOO------
0x7f, 0xff, 0xff, 0x80, // -OOOOOOOOOOOOOOOOOOOOOOOO-------
0x7f, 0xff, 0xfe, 0x00, // -OOOOOOOOOOOOOOOOOOOOOO---------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
// ASCII: 100, char width: 24
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0xff, 0x00, 0x00, // --------OOOOOOOO--------........
0x01, 0xff, 0x80, 0x00, // -------OOOOOOOOOO-------........
0x03, 0x81, 0x80, 0x00, // ------OOO------OO-------........
0x03, 0x01, 0xc0, 0x00, // ------OO-------OOO------........
0xff, 0xff, 0xff, 0x00, // OOOOOOOOOOOOOOOOOOOOOOOO........
0xff, 0xff, 0xff, 0x00, // OOOOOOOOOOOOOOOOOOOOOOOO........
0x30, 0x00, 0x1c, 0x00, // --OO---------------OOO--........
0x30, 0x00, 0x1c, 0x00, // --OO---------------OOO--........
0x30, 0x00, 0x1c, 0x00, // --OO---------------OOO--........
0x30, 0x00, 0x1c, 0x00, // --OO---------------OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x33, 0x99, 0x9c, 0x00, // --OO--OOO--OO--OO--OOO--........
0x30, 0x00, 0x1c, 0x00, // --OO---------------OOO--........
0x30, 0x00, 0x1c, 0x00, // --OO---------------OOO--........
0x38, 0x00, 0x18, 0x00, // --OOO--------------OO---........
0x1f, 0xff, 0xf8, 0x00, // ---OOOOOOOOOOOOOOOOOO---........
0x1f, 0xff, 0xf0, 0x00, // ---OOOOOOOOOOOOOOOOO----........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
// ASCII: 101, char width: 26
0x00, 0x00, 0x00, 0x00, // --------------------------......
0xff, 0xff, 0xe0, 0x00, // OOOOOOOOOOOOOOOOOOO-------......
0xff, 0xff, 0xf0, 0x00, // OOOOOOOOOOOOOOOOOOOO------......
0xcf, 0xe1, 0xb8, 0x00, // OO--OOOOOOO----OO-OOO-----......
0xcf, 0xe1, 0x9c, 0x00, // OO--OOOOOOO----OO--OOO----......
0xcf, 0xe1, 0x8e, 0x00, // OO--OOOOOOO----OO---OOO---......
0xcf, 0xe1, 0x87, 0x00, // OO--OOOOOOO----OO----OOO--......
0xcf, 0xe1, 0x83, 0x80, // OO--OOOOOOO----OO-----OOO-......
0xcf, 0xe1, 0x81, 0xc0, // OO--OOOOOOO----OO------OOO......
0xcf, 0xe1, 0x81, 0xc0, // OO--OOOOOOO----OO------OOO......
0xcf, 0xff, 0x81, 0xc0, // OO--OOOOOOOOOOOOO------OOO......
0xc7, 0xff, 0x81, 0xc0, // OO---OOOOOOOOOOOO------OOO......
0xc0, 0x00, 0x01, 0xc0, // OO---------------------OOO......
0xc0, 0x00, 0x01, 0xc0, // OO---------------------OOO......
0xc0, 0x00, 0x01, 0xc0, // OO---------------------OOO......
0xc0, 0x00, 0x01, 0xc0, // OO---------------------OOO......
0xc7, 0xff, 0xf9, 0xc0, // OO---OOOOOOOOOOOOOOOO--OOO......
0xcf, 0xff, 0xfd, 0xc0, // OO--OOOOOOOOOOOOOOOOOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xce, 0x00, 0x1d, 0xc0, // OO--OOO------------OOO-OOO......
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO......
0xff, 0xff, 0xff, 0x80, // OOOOOOOOOOOOOOOOOOOOOOOOO-......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
// ASCII: 102, char width: 26
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x38, 0x00, // ------------------OOO-----......
0x00, 0x00, 0x7c, 0x00, // -----------------OOOOO----......
0x00, 0x00, 0xfe, 0x00, // ----------------OOOOOOO---......
0x00, 0x01, 0xff, 0x00, // ---------------OOOOOOOOO--......
0x00, 0x00, 0xff, 0x80, // ----------------OOOOOOOOO-......
0x00, 0x06, 0x7f, 0x80, // -------------OO--OOOOOOOO-......
0x00, 0x0f, 0x3f, 0x80, // ------------OOOO--OOOOOOO-......
0x00, 0x1f, 0x9f, 0x80, // -----------OOOOOO--OOOOOO-......
0x00, 0x3f, 0xcf, 0x00, // ----------OOOOOOOO--OOOO--......
0x00, 0x7b, 0xe6, 0x00, // ---------OOOO-OOOOO--OO---......
0x00, 0xf7, 0xf0, 0x00, // --------OOOO-OOOOOOO------......
0x01, 0xef, 0xf8, 0x00, // -------OOOO-OOOOOOOOO-----......
0x03, 0xdf, 0xf0, 0x00, // ------OOOO-OOOOOOOOO------......
0x07, 0xbf, 0xe0, 0x00, // -----OOOO-OOOOOOOOO-------......
0x0f, 0x7f, 0xc0, 0x00, // ----OOOO-OOOOOOOOO--------......
0x1e, 0xff, 0x80, 0x00, // ---OOOO-OOOOOOOOO---------......
0x3d, 0xff, 0x00, 0x00, // --OOOO-OOOOOOOOO----------......
0x7b, 0xfe, 0x00, 0x00, // -OOOO-OOOOOOOOO-----------......
0xff, 0xfc, 0x00, 0x00, // OOOOOOOOOOOOOO------------......
0xe7, 0xf8, 0x00, 0x00, // OOO--OOOOOOOO-------------......
0xc3, 0xf0, 0x00, 0x00, // OO----OOOOOO--------------......
0xc1, 0xe0, 0x00, 0x00, // OO-----OOOO---------------......
0xf1, 0xc0, 0x00, 0x00, // OOOO---OOO----------------......
0xf1, 0xc0, 0x00, 0x00, // OOOO---OOO----------------......
0xff, 0x80, 0x00, 0x00, // OOOOOOOOO-----------------......
0xff, 0x00, 0x00, 0x00, // OOOOOOOO------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
// ASCII: 103, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x03, 0xc0, // ----------------------OOOO----..
0x00, 0x00, 0x07, 0xe0, // ---------------------OOOOOO---..
0x00, 0x00, 0x0f, 0xf0, // --------------------OOOOOOOO--..
0x00, 0x00, 0x0f, 0xf0, // --------------------OOOOOOOO--..
0x00, 0x00, 0x1f, 0xf0, // -------------------OOOOOOOOO--..
0x00, 0x00, 0x3f, 0xe0, // ------------------OOOOOOOOO---..
0x06, 0x00, 0x7f, 0xc0, // -----OO----------OOOOOOOOO----..
0x0f, 0x00, 0xff, 0x80, // ----OOOO--------OOOOOOOOO-----..
0x1f, 0x81, 0xff, 0x00, // ---OOOOOO------OOOOOOOOO------..
0x3f, 0xc3, 0xfe, 0x00, // --OOOOOOOO----OOOOOOOOO-------..
0x3f, 0xe7, 0xfc, 0x00, // --OOOOOOOOO--OOOOOOOOO--------..
0x1f, 0xff, 0xf8, 0x00, // ---OOOOOOOOOOOOOOOOOO---------..
0x0f, 0xff, 0xf0, 0x00, // ----OOOOOOOOOOOOOOOO----------..
0x07, 0xff, 0xe0, 0x00, // -----OOOOOOOOOOOOOO-----------..
0x03, 0xff, 0xc0, 0x00, // ------OOOOOOOOOOOO------------..
0x01, 0xff, 0x80, 0x00, // -------OOOOOOOOOO-------------..
0x00, 0xff, 0x00, 0x00, // --------OOOOOOOO--------------..
0x00, 0x7e, 0x00, 0x00, // ---------OOOOOO---------------..
0x00, 0x3c, 0x00, 0x00, // ----------OOOO----------------..
0x00, 0x18, 0x00, 0x00, // -----------OO-----------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 104, char width: 24
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x0e, 0x00, 0x60, 0x00, // ----OOO----------OO-----........
0x0f, 0x00, 0xf0, 0x00, // ----OOOO--------OOOO----........
0x1f, 0x81, 0xf8, 0x00, // ---OOOOOO------OOOOOO---........
0x3f, 0xc3, 0xfc, 0x00, // --OOOOOOOO----OOOOOOOO--........
0x3f, 0xe7, 0xfc, 0x00, // --OOOOOOOOO--OOOOOOOOO--........
0x1f, 0xff, 0xf8, 0x00, // ---OOOOOOOOOOOOOOOOOO---........
0x0f, 0xff, 0xf0, 0x00, // ----OOOOOOOOOOOOOOOO----........
0x07, 0xff, 0xe0, 0x00, // -----OOOOOOOOOOOOOO-----........
0x03, 0xff, 0xc0, 0x00, // ------OOOOOOOOOOOO------........
0x01, 0xff, 0x80, 0x00, // -------OOOOOOOOOO-------........
0x01, 0xff, 0x80, 0x00, // -------OOOOOOOOOO-------........
0x03, 0xff, 0xc0, 0x00, // ------OOOOOOOOOOOO------........
0x07, 0xff, 0xe0, 0x00, // -----OOOOOOOOOOOOOO-----........
0x0f, 0xff, 0xf0, 0x00, // ----OOOOOOOOOOOOOOOO----........
0x1f, 0xff, 0xf8, 0x00, // ---OOOOOOOOOOOOOOOOOO---........
0x3f, 0xe7, 0xfc, 0x00, // --OOOOOOOOO--OOOOOOOOO--........
0x3f, 0xc3, 0xfc, 0x00, // --OOOOOOOO----OOOOOOOO--........
0x3f, 0x81, 0xf8, 0x00, // --OOOOOOO------OOOOOO---........
0x1f, 0x00, 0xf0, 0x00, // ---OOOOO--------OOOO----........
0x0e, 0x00, 0x60, 0x00, // ----OOO----------OO-----........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
// ASCII: 105, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x0c, 0x00, 0x00, 0xc0, // ----OO------------------OO----..
0x1e, 0x00, 0x01, 0xe0, // ---OOOO----------------OOOO---..
0x3f, 0x00, 0x03, 0xf0, // --OOOOOO--------------OOOOOO--..
0x3f, 0x80, 0x07, 0xf8, // --OOOOOOO------------OOOOOOOO-..
0x7f, 0xc0, 0x0f, 0xf0, // -OOOOOOOOO----------OOOOOOOO--..
0x3f, 0xe0, 0x1f, 0xf0, // --OOOOOOOOO--------OOOOOOOOO--..
0x1f, 0xf0, 0x3f, 0xe0, // ---OOOOOOOOO------OOOOOOOOO---..
0x0f, 0xf8, 0x7f, 0xc0, // ----OOOOOOOOO----OOOOOOOOO----..
0x07, 0xfc, 0xff, 0x80, // -----OOOOOOOOO--OOOOOOOOO-----..
0x03, 0xff, 0xff, 0x00, // ------OOOOOOOOOOOOOOOOOO------..
0x01, 0xff, 0xfe, 0x00, // -------OOOOOOOOOOOOOOOO-------..
0x00, 0xff, 0xfc, 0x00, // --------OOOOOOOOOOOOOO--------..
0x00, 0x7f, 0xf8, 0x00, // ---------OOOOOOOOOOOO---------..
0x00, 0x3f, 0xf0, 0x00, // ----------OOOOOOOOOO----------..
0x00, 0x1f, 0xe0, 0x00, // -----------OOOOOOOO-----------..
0x00, 0x0f, 0xc0, 0x00, // ------------OOOOOO------------..
0x00, 0x07, 0x80, 0x00, // -------------OOOO-------------..
0x00, 0x03, 0x00, 0x00, // --------------OO--------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 106, char width: 21
0x00, 0x03, 0xc0, 0x00, // --------------OOOO---...........
0x00, 0x07, 0xe0, 0x00, // -------------OOOOOO--...........
0x00, 0x0f, 0xf0, 0x00, // ------------OOOOOOOO-...........
0x00, 0x1f, 0xf0, 0x00, // -----------OOOOOOOOO-...........
0x00, 0x3f, 0xe0, 0x00, // ----------OOOOOOOOO--...........
0x00, 0x7f, 0xc0, 0x00, // ---------OOOOOOOOO---...........
0x00, 0xff, 0x80, 0x00, // --------OOOOOOOOO----...........
0x01, 0xff, 0x00, 0x00, // -------OOOOOOOOO-----...........
0x03, 0xfe, 0x00, 0x00, // ------OOOOOOOOO------...........
0x07, 0xfc, 0x00, 0x00, // -----OOOOOOOOO-------...........
0x0f, 0xf8, 0x00, 0x00, // ----OOOOOOOOO--------...........
0x0f, 0xf0, 0x00, 0x00, // ----OOOOOOOO---------...........
0x1f, 0xe0, 0x00, 0x00, // ---OOOOOOOO----------...........
0x3f, 0xe0, 0x00, 0x00, // --OOOOOOOOO----------...........
0x0f, 0xf0, 0x00, 0x00, // ----OOOOOOOO---------...........
0x0f, 0xf8, 0x00, 0x00, // ----OOOOOOOOO--------...........
0x07, 0xfc, 0x00, 0x00, // -----OOOOOOOOO-------...........
0x03, 0xfe, 0x00, 0x00, // ------OOOOOOOOO------...........
0x01, 0xff, 0x00, 0x00, // -------OOOOOOOOO-----...........
0x00, 0xff, 0x80, 0x00, // --------OOOOOOOOO----...........
0x00, 0x7f, 0xc0, 0x00, // ---------OOOOOOOOO---...........
0x00, 0x3f, 0xe0, 0x00, // ----------OOOOOOOOO--...........
0x00, 0x1f, 0xf0, 0x00, // -----------OOOOOOOOO-...........
0x00, 0x0f, 0xf0, 0x00, // ------------OOOOOOOO-...........
0x00, 0x07, 0xe0, 0x00, // -------------OOOOOO--...........
0x00, 0x03, 0xc0, 0x00, // --------------OOOO---...........
0x00, 0x01, 0x80, 0x00, // ---------------OO----...........
0x00, 0x00, 0x00, 0x00, // ---------------------...........
0x00, 0x00, 0x00, 0x00, // ---------------------...........
0x00, 0x00, 0x00, 0x00, // ---------------------...........
// ASCII: 107, char width: 21
0x1e, 0x00, 0x00, 0x00, // ---OOOO--------------...........
0x3f, 0x00, 0x00, 0x00, // --OOOOOO-------------...........
0x3f, 0x80, 0x00, 0x00, // --OOOOOOO------------...........
0x7f, 0xc0, 0x00, 0x00, // -OOOOOOOOO-----------...........
0x3f, 0xe0, 0x00, 0x00, // --OOOOOOOOO----------...........
0x1f, 0xf0, 0x00, 0x00, // ---OOOOOOOOO---------...........
0x0f, 0xf8, 0x00, 0x00, // ----OOOOOOOOO--------...........
0x07, 0xfc, 0x00, 0x00, // -----OOOOOOOOO-------...........
0x03, 0xfe, 0x00, 0x00, // ------OOOOOOOOO------...........
0x01, 0xff, 0x00, 0x00, // -------OOOOOOOOO-----...........
0x00, 0xff, 0x80, 0x00, // --------OOOOOOOOO----...........
0x00, 0x7f, 0xc0, 0x00, // ---------OOOOOOOOO---...........
0x00, 0x3f, 0xe0, 0x00, // ----------OOOOOOOOO--...........
0x00, 0x3f, 0xe0, 0x00, // ----------OOOOOOOOO--...........
0x00, 0x7f, 0xc0, 0x00, // ---------OOOOOOOOO---...........
0x00, 0xff, 0x80, 0x00, // --------OOOOOOOOO----...........
0x01, 0xff, 0x00, 0x00, // -------OOOOOOOOO-----...........
0x03, 0xfe, 0x00, 0x00, // ------OOOOOOOOO------...........
0x07, 0xfc, 0x00, 0x00, // -----OOOOOOOOO-------...........
0x0f, 0xf8, 0x00, 0x00, // ----OOOOOOOOO--------...........
0x1f, 0xf0, 0x00, 0x00, // ---OOOOOOOOO---------...........
0x1f, 0xe0, 0x00, 0x00, // ---OOOOOOOO----------...........
0x3f, 0xc0, 0x00, 0x00, // --OOOOOOOO-----------...........
0x7f, 0x80, 0x00, 0x00, // -OOOOOOOO------------...........
0x3f, 0x00, 0x00, 0x00, // --OOOOOO-------------...........
0x1e, 0x00, 0x00, 0x00, // ---OOOO--------------...........
0x0c, 0x00, 0x00, 0x00, // ----OO---------------...........
0x00, 0x00, 0x00, 0x00, // ---------------------...........
0x00, 0x00, 0x00, 0x00, // ---------------------...........
0x00, 0x00, 0x00, 0x00, // ---------------------...........
// ASCII: 108, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 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, // --------------OO--------------..
0x00, 0x07, 0x80, 0x00, // -------------OOOO-------------..
0x00, 0x0f, 0xc0, 0x00, // ------------OOOOOO------------..
0x00, 0x1f, 0xe0, 0x00, // -----------OOOOOOOO-----------..
0x00, 0x3f, 0xf0, 0x00, // ----------OOOOOOOOOO----------..
0x00, 0x7f, 0xf8, 0x00, // ---------OOOOOOOOOOOO---------..
0x00, 0xff, 0xfc, 0x00, // --------OOOOOOOOOOOOOO--------..
0x01, 0xff, 0xfe, 0x00, // -------OOOOOOOOOOOOOOOO-------..
0x03, 0xff, 0xff, 0x00, // ------OOOOOOOOOOOOOOOOOO------..
0x07, 0xfc, 0xff, 0x80, // -----OOOOOOOOO--OOOOOOOOO-----..
0x0f, 0xf8, 0x7f, 0xc0, // ----OOOOOOOOO----OOOOOOOOO----..
0x1f, 0xf0, 0x3f, 0xe0, // ---OOOOOOOOO------OOOOOOOOO---..
0x3f, 0xe0, 0x1f, 0xf0, // --OOOOOOOOO--------OOOOOOOOO--..
0x3f, 0xc0, 0x0f, 0xf0, // --OOOOOOOO----------OOOOOOOO--..
0x7f, 0x80, 0x07, 0xf8, // -OOOOOOOO------------OOOOOOOO-..
0x3f, 0x00, 0x03, 0xf0, // --OOOOOO--------------OOOOOO--..
0x1e, 0x00, 0x01, 0xe0, // ---OOOO----------------OOOO---..
0x0c, 0x00, 0x00, 0xc0, // ----OO------------------OO----..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 109, char width: 17
0x01, 0x80, 0x00, 0x00, // -------OO--------...............
0x01, 0xc0, 0x00, 0x00, // -------OOO-------...............
0x01, 0xe0, 0x00, 0x00, // -------OOOO------...............
0x01, 0xf0, 0x00, 0x00, // -------OOOOO-----...............
0x01, 0xf8, 0x00, 0x00, // -------OOOOOO----...............
0x01, 0xfc, 0x00, 0x00, // -------OOOOOOO---...............
0x21, 0xde, 0x00, 0x00, // --O----OOO-OOOO--...............
0x71, 0xcf, 0x00, 0x00, // -OOO---OOO--OOOO-...............
0x79, 0xcf, 0x80, 0x00, // -OOOO--OOO--OOOOO...............
0x3d, 0xde, 0x00, 0x00, // --OOOO-OOO-OOOO--...............
0x1f, 0xfc, 0x00, 0x00, // ---OOOOOOOOOOO---...............
0x0f, 0xf8, 0x00, 0x00, // ----OOOOOOOOO----...............
0x07, 0xf0, 0x00, 0x00, // -----OOOOOOO-----...............
0x03, 0xe0, 0x00, 0x00, // ------OOOOO------...............
0x01, 0xe0, 0x00, 0x00, // -------OOOO------...............
0x03, 0xf0, 0x00, 0x00, // ------OOOOOO-----...............
0x07, 0xf8, 0x00, 0x00, // -----OOOOOOOO----...............
0x0f, 0xfc, 0x00, 0x00, // ----OOOOOOOOOO---...............
0x1d, 0xde, 0x00, 0x00, // ---OOO-OOO-OOOO--...............
0x39, 0xcf, 0x00, 0x00, // --OOO--OOO--OOOO-...............
0x71, 0xc7, 0x80, 0x00, // -OOO---OOO---OOOO...............
0x71, 0xce, 0x00, 0x00, // -OOO---OOO--OOO--...............
0x01, 0xfc, 0x00, 0x00, // -------OOOOOOO---...............
0x01, 0xf8, 0x00, 0x00, // -------OOOOOO----...............
0x01, 0xf8, 0x00, 0x00, // -------OOOOOO----...............
0x01, 0xf0, 0x00, 0x00, // -------OOOOO-----...............
0x01, 0xe0, 0x00, 0x00, // -------OOOO------...............
0x01, 0xc0, 0x00, 0x00, // -------OOO-------...............
0x01, 0x80, 0x00, 0x00, // -------OO--------...............
0x00, 0x00, 0x00, 0x00, // -----------------...............
// ASCII: 110, char width: 17
0x0f, 0xe0, 0x00, 0x00, // ----OOOOOOO------...............
0x1c, 0x70, 0x00, 0x00, // ---OOO---OOO-----...............
0x38, 0x38, 0x00, 0x00, // --OOO-----OOO----...............
0x38, 0x18, 0x00, 0x00, // --OOO------OO----...............
0x30, 0x1b, 0x80, 0x00, // --OO-------OO-OOO...............
0x30, 0x1b, 0x80, 0x00, // --OO-------OO-OOO...............
0x30, 0x18, 0x00, 0x00, // --OO-------OO----...............
0x30, 0x18, 0x00, 0x00, // --OO-------OO----...............
0x33, 0x9b, 0x80, 0x00, // --OO--OOO--OO-OOO...............
0x33, 0x9b, 0x80, 0x00, // --OO--OOO--OO-OOO...............
0x33, 0x98, 0x00, 0x00, // --OO--OOO--OO----...............
0x33, 0x98, 0x00, 0x00, // --OO--OOO--OO----...............
0x33, 0x98, 0x00, 0x00, // --OO--OOO--OO----...............
0x33, 0x9b, 0x80, 0x00, // --OO--OOO--OO-OOO...............
0x33, 0x9b, 0x80, 0x00, // --OO--OOO--OO-OOO...............
0x33, 0x98, 0x00, 0x00, // --OO--OOO--OO----...............
0x33, 0x98, 0x00, 0x00, // --OO--OOO--OO----...............
0x33, 0x98, 0x00, 0x00, // --OO--OOO--OO----...............
0x73, 0x9c, 0x00, 0x00, // -OOO--OOO--OOO---...............
0x63, 0x8c, 0x00, 0x00, // -OO---OOO---OO---...............
0xe7, 0xce, 0x00, 0x00, // OOO--OOOOO--OOO--...............
0xcf, 0xe6, 0x00, 0x00, // OO--OOOOOOO--OO--...............
0xcf, 0xe6, 0x00, 0x00, // OO--OOOOOOO--OO--...............
0xcf, 0xe6, 0x00, 0x00, // OO--OOOOOOO--OO--...............
0xe7, 0xce, 0x00, 0x00, // OOO--OOOOO--OOO--...............
0xe3, 0x8c, 0x00, 0x00, // OOO---OOO---OO---...............
0x70, 0x1c, 0x00, 0x00, // -OOO-------OOO---...............
0x38, 0x38, 0x00, 0x00, // --OOO-----OOO----...............
0x1f, 0xf0, 0x00, 0x00, // ---OOOOOOOOO-----...............
0x07, 0xc0, 0x00, 0x00, // -----OOOOO-------...............
// ASCII: 111, char width: 24
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x06, 0x00, // ---------------------OO-........
0x00, 0x00, 0x1f, 0x00, // -------------------OOOOO........
0x00, 0x00, 0x7e, 0x00, // -----------------OOOOOO-........
0x00, 0x01, 0xfe, 0x00, // ---------------OOOOOOOO-........
0x00, 0x07, 0xfc, 0x00, // -------------OOOOOOOOO--........
0x00, 0x1f, 0xfc, 0x00, // -----------OOOOOOOOOOO--........
0x00, 0x7f, 0xf8, 0x00, // ---------OOOOOOOOOOOO---........
0x01, 0xff, 0xf8, 0x00, // -------OOOOOOOOOOOOOO---........
0x07, 0xff, 0xf0, 0x00, // -----OOOOOOOOOOOOOOO----........
0x1f, 0xff, 0xf0, 0x00, // ---OOOOOOOOOOOOOOOOO----........
0x7f, 0xff, 0xe0, 0x00, // -OOOOOOOOOOOOOOOOOO-----........
0xff, 0xff, 0xe0, 0x00, // OOOOOOOOOOOOOOOOOOO-----........
0xff, 0xff, 0xc0, 0x00, // OOOOOOOOOOOOOOOOOO------........
0x00, 0x1f, 0xc0, 0x00, // -----------OOOOOOO------........
0x00, 0x1f, 0x80, 0x00, // -----------OOOOOO-------........
0x00, 0x1f, 0x80, 0x00, // -----------OOOOOO-------........
0x00, 0x1f, 0x00, 0x00, // -----------OOOOO--------........
0x00, 0x1f, 0x00, 0x00, // -----------OOOOO--------........
0x00, 0x1e, 0x00, 0x00, // -----------OOOO---------........
0x00, 0x1e, 0x00, 0x00, // -----------OOOO---------........
0x00, 0x1c, 0x00, 0x00, // -----------OOO----------........
0x00, 0x1c, 0x00, 0x00, // -----------OOO----------........
0x00, 0x18, 0x00, 0x00, // -----------OO-----------........
0x00, 0x18, 0x00, 0x00, // -----------OO-----------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
// ASCII: 112, char width: 30
0x00, 0x07, 0x80, 0x00, // -------------OOOO-------------..
0x00, 0x0f, 0xc0, 0x00, // ------------OOOOOO------------..
0x00, 0x0f, 0xc0, 0x00, // ------------OOOOOO------------..
0x00, 0x1f, 0xe0, 0x00, // -----------OOOOOOOO-----------..
0x00, 0x1f, 0xe0, 0x00, // -----------OOOOOOOO-----------..
0x00, 0x3f, 0xf0, 0x00, // ----------OOOOOOOOOO----------..
0x00, 0x3f, 0xf0, 0x00, // ----------OOOOOOOOOO----------..
0x00, 0x7f, 0xf8, 0x00, // ---------OOOOOOOOOOOO---------..
0x00, 0xf8, 0x7c, 0x00, // --------OOOOO----OOOOO--------..
0x00, 0xf8, 0x7c, 0x00, // --------OOOOO----OOOOO--------..
0x01, 0xf8, 0x7e, 0x00, // -------OOOOOO----OOOOOO-------..
0x01, 0xf8, 0x7e, 0x00, // -------OOOOOO----OOOOOO-------..
0x03, 0xf8, 0x7f, 0x00, // ------OOOOOOO----OOOOOOO------..
0x03, 0xf8, 0x7f, 0x00, // ------OOOOOOO----OOOOOOO------..
0x07, 0xf8, 0x7f, 0x80, // -----OOOOOOOO----OOOOOOOO-----..
0x07, 0xf8, 0x7f, 0x80, // -----OOOOOOOO----OOOOOOOO-----..
0x0f, 0xff, 0xff, 0xc0, // ----OOOOOOOOOOOOOOOOOOOOOO----..
0x0f, 0xff, 0xff, 0xc0, // ----OOOOOOOOOOOOOOOOOOOOOO----..
0x1f, 0xf8, 0x7f, 0xe0, // ---OOOOOOOOOO----OOOOOOOOOO---..
0x1f, 0xf8, 0x7f, 0xe0, // ---OOOOOOOOOO----OOOOOOOOOO---..
0x3f, 0xf8, 0x7f, 0xf0, // --OOOOOOOOOOO----OOOOOOOOOOO--..
0x7f, 0xf8, 0x7f, 0xf8, // -OOOOOOOOOOOO----OOOOOOOOOOOO-..
0x7f, 0xf8, 0x7f, 0xf8, // -OOOOOOOOOOOO----OOOOOOOOOOOO-..
0xff, 0xff, 0xff, 0xfc, // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO..
0xff, 0xff, 0xff, 0xfc, // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO..
0xff, 0xff, 0xff, 0xfc, // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO..
0x7f, 0xff, 0xff, 0xf8, // -OOOOOOOOOOOOOOOOOOOOOOOOOOOO-..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 113, char width: 24
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x7f, 0x00, 0x00, // ---------OOOOOOO--------........
0x03, 0xff, 0xc0, 0x00, // ------OOOOOOOOOOOO------........
0x07, 0xff, 0xf0, 0x00, // -----OOOOOOOOOOOOOOO----........
0x0f, 0xff, 0xf8, 0x00, // ----OOOOOOOOOOOOOOOOO---........
0x1f, 0xe3, 0xfc, 0x00, // ---OOOOOOOO---OOOOOOOO--........
0x3f, 0xc3, 0xfc, 0x00, // --OOOOOOOO----OOOOOOOO--........
0x7f, 0xc3, 0xfe, 0x00, // -OOOOOOOOO----OOOOOOOOO-........
0x7f, 0xe3, 0xfe, 0x00, // -OOOOOOOOOO---OOOOOOOOO-........
0x7f, 0xff, 0xff, 0x00, // -OOOOOOOOOOOOOOOOOOOOOOO........
0xff, 0xff, 0xff, 0x00, // OOOOOOOOOOOOOOOOOOOOOOOO........
0xff, 0xe3, 0xff, 0x00, // OOOOOOOOOOO---OOOOOOOOOO........
0xff, 0xe3, 0xff, 0x00, // OOOOOOOOOOO---OOOOOOOOOO........
0xff, 0xe3, 0xff, 0x00, // OOOOOOOOOOO---OOOOOOOOOO........
0xff, 0xe3, 0xff, 0x00, // OOOOOOOOOOO---OOOOOOOOOO........
0xff, 0xe3, 0xff, 0x00, // OOOOOOOOOOO---OOOOOOOOOO........
0xff, 0xe3, 0xff, 0x00, // OOOOOOOOOOO---OOOOOOOOOO........
0x7f, 0xe3, 0xff, 0x00, // -OOOOOOOOOO---OOOOOOOOOO........
0x7f, 0xe3, 0xfe, 0x00, // -OOOOOOOOOO---OOOOOOOOO-........
0x7f, 0xe3, 0xfe, 0x00, // -OOOOOOOOOO---OOOOOOOOO-........
0x3f, 0xe3, 0xfc, 0x00, // --OOOOOOOOO---OOOOOOOO--........
0x1f, 0xe3, 0xfc, 0x00, // ---OOOOOOOO---OOOOOOOO--........
0x0f, 0xff, 0xf8, 0x00, // ----OOOOOOOOOOOOOOOOO---........
0x07, 0xff, 0xf0, 0x00, // -----OOOOOOOOOOOOOOO----........
0x03, 0xff, 0xc0, 0x00, // ------OOOOOOOOOOOO------........
0x00, 0x7f, 0x00, 0x00, // ---------OOOOOOO--------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
0x00, 0x00, 0x00, 0x00, // ------------------------........
// ASCII: 114, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x7f, 0xff, 0xff, 0xc0, // -OOOOOOOOOOOOOOOOOOOOOOOOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0xf0, 0x00, 0x01, 0xe0, // OOOO-------------------OOOO---..
0xe6, 0x00, 0x01, 0xf0, // OOO--OO----------------OOOOO--..
0xe7, 0x00, 0x01, 0xf8, // OOO--OOO---------------OOOOOO-..
0xe7, 0x00, 0x01, 0xfc, // OOO--OOO---------------OOOOOOO..
0xe7, 0x00, 0x01, 0xfc, // OOO--OOO---------------OOOOOOO..
0xe7, 0x00, 0x01, 0xfc, // OOO--OOO---------------OOOOOOO..
0xe7, 0x00, 0x01, 0xfc, // OOO--OOO---------------OOOOOOO..
0xe7, 0x00, 0x01, 0xfc, // OOO--OOO---------------OOOOOOO..
0xe7, 0x00, 0x01, 0xfc, // OOO--OOO---------------OOOOOOO..
0xe7, 0x00, 0x01, 0xf8, // OOO--OOO---------------OOOOOO-..
0xe6, 0x00, 0x01, 0xf0, // OOO--OO----------------OOOOO--..
0xe0, 0x00, 0x01, 0xe0, // OOO--------------------OOOO---..
0xf0, 0x00, 0x01, 0xc0, // OOOO-------------------OOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0x7f, 0xff, 0xff, 0x80, // -OOOOOOOOOOOOOOOOOOOOOOOO-----..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 115, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x7f, 0xff, 0xff, 0xc0, // -OOOOOOOOOOOOOOOOOOOOOOOOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0xf0, 0x00, 0x01, 0xe0, // OOOO-------------------OOOO---..
0xe6, 0x30, 0x01, 0xf0, // OOO--OO---OO-----------OOOOO--..
0xe7, 0x78, 0x01, 0xf8, // OOO--OOO-OOOO----------OOOOOO-..
0xe7, 0x78, 0x01, 0xfc, // OOO--OOO-OOOO----------OOOOOOO..
0xe7, 0x78, 0x01, 0xfc, // OOO--OOO-OOOO----------OOOOOOO..
0xe7, 0x78, 0x01, 0xfc, // OOO--OOO-OOOO----------OOOOOOO..
0xe7, 0x78, 0x01, 0xfc, // OOO--OOO-OOOO----------OOOOOOO..
0xe7, 0x78, 0x01, 0xfc, // OOO--OOO-OOOO----------OOOOOOO..
0xe7, 0x78, 0x01, 0xfc, // OOO--OOO-OOOO----------OOOOOOO..
0xe7, 0x78, 0x01, 0xf8, // OOO--OOO-OOOO----------OOOOOO-..
0xe6, 0x30, 0x01, 0xf0, // OOO--OO---OO-----------OOOOO--..
0xe0, 0x00, 0x01, 0xe0, // OOO--------------------OOOO---..
0xf0, 0x00, 0x01, 0xc0, // OOOO-------------------OOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0x7f, 0xff, 0xff, 0x80, // -OOOOOOOOOOOOOOOOOOOOOOOO-----..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 116, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x7f, 0xff, 0xff, 0xc0, // -OOOOOOOOOOOOOOOOOOOOOOOOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0xf0, 0x00, 0x01, 0xe0, // OOOO-------------------OOOO---..
0xe6, 0x33, 0x81, 0xf0, // OOO--OO---OO--OOO------OOOOO--..
0xe7, 0x7b, 0x81, 0xf8, // OOO--OOO-OOOO-OOO------OOOOOO-..
0xe7, 0x7b, 0x81, 0xfc, // OOO--OOO-OOOO-OOO------OOOOOOO..
0xe7, 0x7b, 0x81, 0xfc, // OOO--OOO-OOOO-OOO------OOOOOOO..
0xe7, 0x7b, 0x81, 0xfc, // OOO--OOO-OOOO-OOO------OOOOOOO..
0xe7, 0x7b, 0x81, 0xfc, // OOO--OOO-OOOO-OOO------OOOOOOO..
0xe7, 0x7b, 0x81, 0xfc, // OOO--OOO-OOOO-OOO------OOOOOOO..
0xe7, 0x7b, 0x81, 0xfc, // OOO--OOO-OOOO-OOO------OOOOOOO..
0xe7, 0x7b, 0x81, 0xf8, // OOO--OOO-OOOO-OOO------OOOOOO-..
0xe6, 0x33, 0x81, 0xf0, // OOO--OO---OO--OOO------OOOOO--..
0xe0, 0x00, 0x01, 0xe0, // OOO--------------------OOOO---..
0xf0, 0x00, 0x01, 0xc0, // OOOO-------------------OOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0x7f, 0xff, 0xff, 0x80, // -OOOOOOOOOOOOOOOOOOOOOOOO-----..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 117, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x7f, 0xff, 0xff, 0xc0, // -OOOOOOOOOOOOOOOOOOOOOOOOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0xf0, 0x00, 0x01, 0xe0, // OOOO-------------------OOOO---..
0xe6, 0x33, 0x9d, 0xf0, // OOO--OO---OO--OOO--OOO-OOOOO--..
0xe7, 0x7b, 0x9d, 0xf8, // OOO--OOO-OOOO-OOO--OOO-OOOOOO-..
0xe7, 0x7b, 0x9d, 0xfc, // OOO--OOO-OOOO-OOO--OOO-OOOOOOO..
0xe7, 0x7b, 0x9d, 0xfc, // OOO--OOO-OOOO-OOO--OOO-OOOOOOO..
0xe7, 0x7b, 0x9d, 0xfc, // OOO--OOO-OOOO-OOO--OOO-OOOOOOO..
0xe7, 0x7b, 0x9d, 0xfc, // OOO--OOO-OOOO-OOO--OOO-OOOOOOO..
0xe7, 0x7b, 0x9d, 0xfc, // OOO--OOO-OOOO-OOO--OOO-OOOOOOO..
0xe7, 0x7b, 0x9d, 0xfc, // OOO--OOO-OOOO-OOO--OOO-OOOOOOO..
0xe7, 0x7b, 0x9d, 0xf8, // OOO--OOO-OOOO-OOO--OOO-OOOOOO-..
0xe6, 0x33, 0x99, 0xf0, // OOO--OO---OO--OOO--OO--OOOOO--..
0xe0, 0x00, 0x01, 0xe0, // OOO--------------------OOOO---..
0xf0, 0x00, 0x01, 0xc0, // OOOO-------------------OOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0x7f, 0xff, 0xff, 0x80, // -OOOOOOOOOOOOOOOOOOOOOOOO-----..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 118, char width: 30
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x7f, 0xff, 0xff, 0xc0, // -OOOOOOOOOOOOOOOOOOOOOOOOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0xf0, 0x00, 0x01, 0xe0, // OOOO-------------------OOOO---..
0xe7, 0xff, 0xfd, 0xf0, // OOO--OOOOOOOOOOOOOOOOO-OOOOO--..
0xe7, 0xff, 0xfd, 0xf8, // OOO--OOOOOOOOOOOOOOOOO-OOOOOO-..
0xe7, 0xf7, 0xfd, 0xfc, // OOO--OOOOOOO-OOOOOOOOO-OOOOOOO..
0xe7, 0xe3, 0xfd, 0xfc, // OOO--OOOOOO---OOOOOOOO-OOOOOOO..
0xe7, 0xc3, 0xfd, 0xfc, // OOO--OOOOO----OOOOOOOO-OOOOOOO..
0xe7, 0x70, 0x7d, 0xfc, // OOO--OOO-OOO-----OOOOO-OOOOOOO..
0xe7, 0xf8, 0xfd, 0xfc, // OOO--OOOOOOOO---OOOOOO-OOOOOOO..
0xe7, 0xff, 0xfd, 0xfc, // OOO--OOOOOOOOOOOOOOOOO-OOOOOOO..
0xe7, 0xff, 0xfd, 0xf8, // OOO--OOOOOOOOOOOOOOOOO-OOOOOO-..
0xe7, 0xff, 0xfd, 0xf0, // OOO--OOOOOOOOOOOOOOOOO-OOOOO--..
0xe0, 0x00, 0x01, 0xe0, // OOO--------------------OOOO---..
0xf0, 0x00, 0x01, 0xc0, // OOOO-------------------OOO----..
0xff, 0xff, 0xff, 0xc0, // OOOOOOOOOOOOOOOOOOOOOOOOOO----..
0x7f, 0xff, 0xff, 0x80, // -OOOOOOOOOOOOOOOOOOOOOOOO-----..
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
0x00, 0x00, 0x00, 0x00, // ------------------------------..
// ASCII: 119, char width: 30
0x00, 0x7f, 0xf8, 0x00, // ---------OOOOOOOOOOOO---------..
0x01, 0xf0, 0x3e, 0x00, // -------OOOOO------OOOOO-------..
0x07, 0xc0, 0x0f, 0x80, // -----OOOOO----------OOOOO-----..
0x0f, 0xc0, 0x0f, 0xc0, // ----OOOOOO----------OOOOOO----..
0x1f, 0xe0, 0x1f, 0xe0, // ---OOOOOOOO--------OOOOOOOO---..
0x1f, 0xe0, 0x1f, 0xe0, // ---OOOOOOOO--------OOOOOOOO---..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x7f, 0xf0, 0x7f, 0xf8, // -OOOOOOOOOOO-----OOOOOOOOOOOO-..
0x67, 0xe0, 0x1f, 0x98, // -OO--OOOOOO--------OOOOOO--OO-..
0xe3, 0xc0, 0x0f, 0x1c, // OOO---OOOO----------OOOO---OOO..
0xe1, 0x80, 0x06, 0x1c, // OOO----OO------------OO----OOO..
0xc1, 0x80, 0x06, 0x0c, // OO-----OO------------OO-----OO..
0xc3, 0x80, 0x07, 0x0c, // OO----OOO------------OOO----OO..
0xc3, 0x80, 0x07, 0x0c, // OO----OOO------------OOO----OO..
0xc3, 0x80, 0x07, 0x0c, // OO----OOO------------OOO----OO..
0xc1, 0x80, 0x06, 0x0c, // OO-----OO------------OO-----OO..
0xe1, 0x80, 0x06, 0x1c, // OOO----OO------------OO----OOO..
0xe3, 0xc0, 0x0f, 0x1c, // OOO---OOOO----------OOOO---OOO..
0x67, 0xe0, 0x1f, 0x98, // -OO--OOOOOO--------OOOOOO--OO-..
0x7f, 0xf8, 0x7f, 0xf8, // -OOOOOOOOOOOO----OOOOOOOOOOOO-..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x3f, 0xff, 0xff, 0xf0, // --OOOOOOOOOOOOOOOOOOOOOOOOOO--..
0x1f, 0xe0, 0x1f, 0xe0, // ---OOOOOOOO--------OOOOOOOO---..
0x1f, 0xe0, 0x1f, 0xe0, // ---OOOOOOOO--------OOOOOOOO---..
0x0f, 0xc0, 0x0f, 0xc0, // ----OOOOOO----------OOOOOO----..
0x07, 0xc0, 0x07, 0x80, // -----OOOOO-----------OOOO-----..
0x01, 0xf0, 0x3e, 0x00, // -------OOOOO------OOOOO-------..
0x00, 0x7f, 0xf8, 0x00, // ---------OOOOOOOOOOOO---------..
0x00, 0x1f, 0xe0, 0x00, // -----------OOOOOOOO-----------..
// ASCII: 120, char width: 26
0x00, 0x1e, 0x00, 0x00, // -----------OOOO-----------......
0x00, 0x1e, 0x00, 0x00, // -----------OOOO-----------......
0x00, 0x1e, 0x00, 0x00, // -----------OOOO-----------......
0x00, 0x1e, 0x00, 0x00, // -----------OOOO-----------......
0x07, 0x1e, 0x38, 0x00, // -----OOO---OOOO---OOO-----......
0x0f, 0x9e, 0x7c, 0x00, // ----OOOOO--OOOO--OOOOO----......
0x1f, 0x9e, 0x7e, 0x00, // ---OOOOOO--OOOO--OOOOOO---......
0x3f, 0x1e, 0x3f, 0x00, // --OOOOOO---OOOO---OOOOOO--......
0x7e, 0x1e, 0x1f, 0x00, // -OOOOOO----OOOO----OOOOO--......
0x7c, 0x1e, 0x0f, 0x80, // -OOOOO-----OOOO-----OOOOO-......
0x78, 0x1e, 0x0f, 0x80, // -OOOO------OOOO-----OOOOO-......
0xf8, 0x1e, 0x07, 0x80, // OOOOO------OOOO------OOOO-......
0xf8, 0x1e, 0x07, 0xc0, // OOOOO------OOOO------OOOOO......
0xf0, 0x1c, 0x07, 0xc0, // OOOO-------OOO-------OOOOO......
0xf0, 0x00, 0x07, 0xc0, // OOOO-----------------OOOOO......
0xf0, 0x00, 0x07, 0xc0, // OOOO-----------------OOOOO......
0xf8, 0x00, 0x07, 0xc0, // OOOOO----------------OOOOO......
0xf8, 0x00, 0x07, 0x80, // OOOOO----------------OOOO-......
0x78, 0x00, 0x0f, 0x80, // -OOOO---------------OOOOO-......
0x7c, 0x00, 0x0f, 0x80, // -OOOOO--------------OOOOO-......
0x3e, 0x00, 0x1f, 0x00, // --OOOOO------------OOOOO--......
0x3f, 0x00, 0x3f, 0x00, // --OOOOOO----------OOOOOO--......
0x1f, 0xc0, 0xfe, 0x00, // ---OOOOOOO------OOOOOOO---......
0x0f, 0xff, 0xfc, 0x00, // ----OOOOOOOOOOOOOOOOOO----......
0x07, 0xff, 0xf8, 0x00, // -----OOOOOOOOOOOOOOOO-----......
0x01, 0xff, 0xe0, 0x00, // -------OOOOOOOOOOOO-------......
0x00, 0x7f, 0x80, 0x00, // ---------OOOOOOOO---------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
// ASCII: 121, char width: 26
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x3e, 0x00, 0x00, // ----------OOOOO-----------......
0x00, 0x3f, 0x00, 0x00, // ----------OOOOOO----------......
0x06, 0x3f, 0x18, 0x00, // -----OO---OOOOOO---OO-----......
0x0f, 0x3f, 0x3c, 0x00, // ----OOOO--OOOOOO--OOOO----......
0x1f, 0xff, 0xfe, 0x00, // ---OOOOOOOOOOOOOOOOOOOO---......
0x3f, 0xff, 0xfe, 0x00, // --OOOOOOOOOOOOOOOOOOOOO---......
0x1f, 0xff, 0xfe, 0x00, // ---OOOOOOOOOOOOOOOOOOOO---......
0x1f, 0xff, 0xfc, 0x00, // ---OOOOOOOOOOOOOOOOOOO----......
0x0f, 0xff, 0xfc, 0x00, // ----OOOOOOOOOOOOOOOOOO----......
0x0f, 0xe1, 0xfc, 0x00, // ----OOOOOOO----OOOOOOO----......
0x3f, 0xc0, 0xff, 0x00, // --OOOOOOOO------OOOOOOOO--......
0xff, 0x80, 0x7f, 0xc0, // OOOOOOOOO--------OOOOOOOOO......
0xff, 0x80, 0x7f, 0xc0, // OOOOOOOOO--------OOOOOOOOO......
0xff, 0x80, 0x7f, 0xc0, // OOOOOOOOO--------OOOOOOOOO......
0xff, 0x80, 0x7f, 0xc0, // OOOOOOOOO--------OOOOOOOOO......
0x7f, 0xc0, 0xff, 0x00, // -OOOOOOOOO------OOOOOOOO--......
0x0f, 0xe1, 0xfc, 0x00, // ----OOOOOOO----OOOOOOO----......
0x0f, 0xff, 0xfc, 0x00, // ----OOOOOOOOOOOOOOOOOO----......
0x1f, 0xff, 0xfc, 0x00, // ---OOOOOOOOOOOOOOOOOOO----......
0x1f, 0xff, 0xfe, 0x00, // ---OOOOOOOOOOOOOOOOOOOO---......
0x3f, 0xff, 0xff, 0x00, // --OOOOOOOOOOOOOOOOOOOOOO--......
0x1f, 0xff, 0xfe, 0x00, // ---OOOOOOOOOOOOOOOOOOOO---......
0x0f, 0x3f, 0x3c, 0x00, // ----OOOO--OOOOOO--OOOO----......
0x06, 0x3f, 0x18, 0x00, // -----OO---OOOOOO---OO-----......
0x00, 0x3f, 0x00, 0x00, // ----------OOOOOO----------......
0x00, 0x3e, 0x00, 0x00, // ----------OOOOO-----------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
0x00, 0x00, 0x00, 0x00, // --------------------------......
// ASCII: 122, char width: 34
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x0f, 0xfc, 0x00, // ------------OOOOOOOOOO----------
0x00, 0xff, 0xff, 0xc0, // --------OOOOOOOOOOOOOOOOOO------
0x03, 0xff, 0xff, 0xf0, // ------OOOOOOOOOOOOOOOOOOOOOO----
0x0f, 0xff, 0xff, 0xfc, // ----OOOOOOOOOOOOOOOOOOOOOOOOOO--
0x1f, 0xf8, 0x03, 0xff, // ---OOOOOOOOOO---------OOOOOOOOOO
0x7f, 0xc0, 0x00, 0x7f, // -OOOOOOOOO---------------OOOOOOO
0x7f, 0x07, 0xf8, 0x1f, // -OOOOOOO-----OOOOOOOO------OOOOO
0x7c, 0x3f, 0xff, 0x0f, // -OOOOO----OOOOOOOOOOOOOO----OOOO
0x18, 0xff, 0xff, 0xc3, // ---OO---OOOOOOOOOOOOOOOOOO----OO
0x01, 0xff, 0xff, 0xe0, // -------OOOOOOOOOOOOOOOOOOOO-----
0x03, 0xfc, 0x0f, 0xf8, // ------OOOOOOOO------OOOOOOOOO---
0x07, 0xf0, 0x03, 0xf8, // -----OOOOOOO----------OOOOOOO---
0x03, 0xc0, 0x00, 0xf0, // ------OOOO--------------OOOO----
0x01, 0x83, 0xf0, 0x60, // -------OO-----OOOOOO-----OO-----
0x00, 0x1f, 0xfe, 0x00, // -----------OOOOOOOOOOOO---------
0x00, 0x3f, 0xff, 0x80, // ----------OOOOOOOOOOOOOOO-------
0x00, 0x3f, 0xff, 0x00, // ----------OOOOOOOOOOOOOO--------
0x00, 0x1e, 0x0e, 0x00, // -----------OOOO-----OOO---------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x01, 0xe0, 0x00, // ---------------OOOO-------------
0x00, 0x03, 0xf0, 0x00, // --------------OOOOOO------------
0x00, 0x01, 0xe0, 0x00, // ---------------OOOO-------------
0x00, 0x00, 0xc0, 0x00, // ----------------OO--------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
0x00, 0x00, 0x00, 0x00, // --------------------------------
};
static const uint8_t symbol_30_widths[26] =
{
30, 26, 32, 24, 26, 26, 30, 24,
30, 21, 21, 30, 17, 17, 24, 30,
24, 30, 30, 30, 30, 30, 30, 26,
26, 34,
};
static const font_t symbol_30_dsc =
{
26, // Letter count
97, // First ascii code
4, // Letters width (bytes)
30, // Letters height (row)
0, // Fixed width or 0 if variable
symbol_30_widths,
symbol_30_bitmaps
};
const font_t * symbol_30_get_dsc(void)
{
return &symbol_30_dsc;
}
#endif

View File

@ -1,16 +0,0 @@
#ifndef SYMBOL_30_H
#define SYMBOL_30_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_SYMBOL_30 != 0
#include <stdint.h>
#include "../font.h"
const font_t * symbol_30_get_dsc(void);
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +0,0 @@
#ifndef SYMBOL_60_H
#define SYMBOL_60_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_SYMBOL_60 != 0
#include <stdint.h>
#include "../font.h"
const font_t * symbol_60_get_dsc(void);
#endif
#endif

View File

@ -1,39 +0,0 @@
#ifndef SYMBOL_DEF_H
#define SYMBOL_DEF_H
/*Use ISO8859-1 encoding in the IDE*/
#include "lv_conf.h"
#if USE_FONT_SYMBOL_30 != 0 || USE_FONT_SYMBOL_60 != 0
#define SYMBOL_DRIVE "a"
#define SYMBOL_FILE "b"
#define SYMBOL_FOLDER "c"
#define SYMBOL_DELETE "d"
#define SYMBOL_SAVE "e"
#define SYMBOL_EDIT "f"
#define SYMBOL_OK "g"
#define SYMBOL_CLOSE "h"
#define SYMBOL_DOWN "i"
#define SYMBOL_LEFT "j"
#define SYMBOL_RIGHT "k"
#define SYMBOL_UP "l"
#define SYMBOL_BT "m"
#define SYMBOL_THERM "n"
#define SYMBOL_GPS "o"
#define SYMBOL_WARN "p"
#define SYMBOL_INFO "q"
#define SYMBOL_BATT1 "r"
#define SYMBOL_BATT2 "s"
#define SYMBOL_BATT3 "t"
#define SYMBOL_BATT4 "u"
#define SYMBOL_BATTCH "v"
#define SYMBOL_HELP "w"
#define SYMBOL_POWER "x"
#define SYMBOL_SETUP "y"
#define SYMBOL_WIFI "z"
#endif
#endif /*SYMBOL_DEF_H*/

View File

@ -1,265 +0,0 @@
/**
* @file font.c
*
*/
/*********************
* INCLUDES
*********************/
#include "text.h"
#include "misc/math/math_base.h"
/*********************
* DEFINES
*********************/
#define TXT_NO_BREAK_FOUND UINT16_MAX
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static bool txt_is_break_char(char letter);
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Get size of a text
* @param size_res pointer to a 'point_t' variable to store the result
* @param text pointer to a text
* @param font pinter to font of the text
* @param letter_space letter space of the text
* @param line_space line space of the text
* @param flags settings for the text from 'txt_flag_t' enum
* @param max_width max with of the text (break the lines to fit this size) Set LV_CORD_MAX to avoid line breaks
*/
void txt_get_size(point_t * size_res, const char * text, const font_t * font,
uint16_t letter_space, uint16_t line_space, cord_t max_width, txt_flag_t flag)
{
size_res->x = 0;
size_res->y = 0;
if(text == NULL) return;
if(font == NULL) return;
uint32_t line_start = 0;
uint32_t new_line_start = 0;
cord_t act_line_length;
uint8_t letter_height = font_get_height(font) >> LV_FONT_ANTIALIAS;
/*Calc. the height and longest line*/
while (text[line_start] != '\0')
{
new_line_start += txt_get_next_line(&text[line_start], font, letter_space, max_width, flag);
size_res->y += letter_height ;
size_res->y += line_space;
/*Calculate the the longest line*/
act_line_length = txt_get_width(&text[line_start], new_line_start - line_start,
font, letter_space, flag);
size_res->x = MATH_MAX(act_line_length, size_res->x);
line_start = new_line_start;
}
if(line_start != 0 && (text[line_start - 1] == '\n' || text[line_start - 1] == '\r')) {
size_res->y += letter_height + line_space;
}
/*Correction with the last line space or set the height manually if the text is empty*/
if(size_res->y == 0) size_res->y = letter_height;
else size_res->y -= line_space;
}
/**
* Get the next line of text. Check line length and break chars too.
* @param txt a '\0' terminated string
* @param font pointer to a font
* @param letter_space letter space
* @param max_l max line length
* @param flags settings for the text from 'txt_flag_type' enum
* @return the index of the first char of the new line
*/
uint16_t txt_get_next_line(const char * txt, const font_t * font,
uint16_t letter_space, cord_t max_l, txt_flag_t flag)
{
if(txt == NULL) return 0;
if(font == NULL) return 0;
uint32_t i = 0;
cord_t act_l = 0;
uint16_t last_break = TXT_NO_BREAK_FOUND;
txt_cmd_state_t cmd_state = TXT_CMD_STATE_WAIT;
while(txt[i] != '\0') {
/*Handle the recolor command*/
if((flag & TXT_FLAG_RECOLOR) != 0) {
if(txt_is_cmd(&cmd_state, txt[i]) != false) {
i++; /*Skip the letter is it is part of a command*/
continue;
}
}
/*Check for new line chars*/
if(txt[i] == '\n' || txt[i] == '\r') {
/*Handle \n\r and \r\n as well*/
if(txt[i] == '\n' && txt[i + 1] == '\r') {
i++;
} else if(txt[i] == '\r' && txt[i + 1] == '\n') {
i++;
}
return i+1; /*Return with the first letter of the next line*/
} else { /*Check the actual length*/
act_l += font_get_width(font, txt[i]) >> LV_FONT_ANTIALIAS;
/*If the txt is too long then finish, this is the line end*/
if(act_l > max_l) {
/*If already a break character is found, then break there*/
if(last_break != TXT_NO_BREAK_FOUND && txt_is_break_char(txt[i]) == false) {
i = last_break;
}
while(txt[i] == ' ') i++;
/* Do not let to return without doing nothing.
* Find at least one character */
if(i == 0) i++;
return i;
}
/*If this char still can fit to this line then check if
* txt can be broken here later */
else if(txt_is_break_char(txt[i])) {
last_break = i;
last_break++;/*Go to the next char, the break char stays in this line*/
}
}
act_l += letter_space;
i++;
}
return i;
}
/**
* Give the length of a text with a given font
* @param txt a '\0' terminate string
* @param char_num number of characters in 'txt'
* @param font pointer to a font
* @param letter_space letter space
* @param flags settings for the text from 'txt_flag_t' enum
* @return length of a char_num long text
*/
cord_t txt_get_width(const char * txt, uint16_t char_num,
const font_t * font, uint16_t letter_space, txt_flag_t flag)
{
if(txt == NULL) return 0;
if(font == NULL) return 0;
uint16_t i;
cord_t len = 0;
txt_cmd_state_t cmd_state = TXT_CMD_STATE_WAIT;
if(char_num != 0) {
for(i = 0; i < char_num; i++) {
if((flag & TXT_FLAG_RECOLOR) != 0) {
if(txt_is_cmd(&cmd_state, txt[i]) != false) {
continue;
}
}
len += font_get_width(font, txt[i]) >> LV_FONT_ANTIALIAS;
len += letter_space;
}
/*Trim closing spaces */
for(i = char_num - 1; i > 0; i--) {
if(txt[i] == ' ') {
len -= font_get_width(font, txt[i]) >> LV_FONT_ANTIALIAS;
len -= letter_space;
} else {
break;
}
}
/*Correct the last letter space,
* because thee is no letter space after the last char*/
len -= letter_space;
}
return len;
}
/**
* Check next character in a string and decide if te character is part of the command or not
* @param state pointer to a txt_cmd_state_t variable which stores the current state of command processing
* @param c the current character
* @return true: the character is part of a command and should not be written,
* false: the character should be written
*/
bool txt_is_cmd(txt_cmd_state_t * state, char c)
{
bool ret = false;
if(c == TXT_RECOLOR_CMD) {
if(*state == TXT_CMD_STATE_WAIT) { /*Start char*/
*state = TXT_CMD_STATE_PAR;
ret = true;
} else if(*state == TXT_CMD_STATE_PAR) { /*Other start char in parameter is escaped cmd. char */
*state = TXT_CMD_STATE_WAIT;
}else if(*state == TXT_CMD_STATE_IN) { /*Command end */
*state = TXT_CMD_STATE_WAIT;
ret = true;
}
}
/*Skip the color parameter and wait the space after it*/
if(*state == TXT_CMD_STATE_PAR) {
if(c == ' ') {
*state = TXT_CMD_STATE_IN; /*After the parameter the text is in the command*/
}
ret = true;
}
return ret;
}
/**********************
* STATIC FUNCTIONS
**********************/
/**
* Test if char is break char or not (a text can broken here or not)
* @param letter a letter
* @return false: 'letter' is not break char
*/
static bool txt_is_break_char(char letter)
{
uint8_t i;
bool ret = false;
/*Compare the letter to TXT_BREAK_CHARS*/
for(i = 0; LV_TXT_BREAK_CHARS[i] != '\0'; i++) {
if(letter == LV_TXT_BREAK_CHARS[i]) {
ret = true; /*If match then it is break char*/
break;
}
}
return ret;
}

View File

@ -1,94 +0,0 @@
/**
* @file text.h
*
*/
#ifndef TEXT_H
#define TEXT_H
/*********************
* INCLUDES
*********************/
#include <lvgl/lv_misc/area.h>
#include <stdbool.h>
#include "font.h"
#include "area.h"
/*********************
* DEFINES
*********************/
#define TXT_RECOLOR_CMD '#'
/**********************
* TYPEDEFS
**********************/
typedef enum
{
TXT_FLAG_NONE = 0x00,
TXT_FLAG_RECOLOR = 0x01,
}txt_flag_t;
typedef enum
{
TXT_CMD_STATE_WAIT,
TXT_CMD_STATE_PAR,
TXT_CMD_STATE_IN,
}txt_cmd_state_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
/**
* Get size of a text
* @param size_res pointer to a 'point_t' variable to store the result
* @param text pointer to a text
* @param font pinter to font of the text
* @param letter_space letter space of the text
* @param line_space line space of the text
* @param flags settings for the text from 'txt_flag_t' enum
* @param max_width max with of the text (break the lines to fit this size) Set LV_CORD_MAX to avoid line breaks
*/
void txt_get_size(point_t * size_res, const char * text, const font_t * font,
uint16_t letter_space, uint16_t line_space, cord_t max_width, txt_flag_t flag);
/**
* Get the next line of text. Check line length and break chars too.
* @param txt a '\0' terminated string
* @param font_p pointer to a font
* @param letter_space letter space
* @param max_l max line length
* @param flags settings for the text from 'txt_flag_t' enum
* @return the index of the first char of the new line
*/
uint16_t txt_get_next_line(const char * txt, const font_t * font_p,
uint16_t letter_space, cord_t max_l, txt_flag_t flag);
/**
* Give the length of a text with a given font
* @param txt a '\0' terminate string
* @param char_num number of characters in 'txt'
* @param font_p pointer to a font
* @param letter_space letter space
* @param flags settings for the text from 'txt_flag_t' enum
* @return length of a char_num long text
*/
cord_t txt_get_width(const char * txt, uint16_t char_num,
const font_t * font_p, uint16_t letter_space, txt_flag_t flag);
/**
* Check next character in a string and decide if te character is part of the command or not
* @param state pointer to a txt_cmd_state_t variable which stores the current state of command processing
* @param c the current character
* @return true: the character is part of a command and should not be written,
* false: the character should be written
*/
bool txt_is_cmd(txt_cmd_state_t * state, char c);
/**********************
* MACROS
**********************/
#endif