flash_addr_def.c /
/******************************************************************************
版权所有: 深圳市**科技有限公司
文件名: var_global.c
作者: wangdy
创建日期: 2020/06/29
描述: 全局变量
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/************************************头文件************************************/
#include <string.h>
#include "flash_addr_def.h"
/*************************************变量*************************************/
/*************************************函数*************************************/
flash_addr_def.h
/******************************************************************************
版权所有: 深圳**科技有限公司
文件名: flash_addr_def.h
作者: wangdy
创建日期: 2021/5/31
描述: 打印头控制
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/*********************************防止多次编译*********************************/
#ifndef _FLASH_ADDR_DEF_H
#define _FLASH_ADDR_DEF_H
/************************************头文件************************************/
#include <stdint.h>
#include <stdbool.h>
/************************************宏定义************************************/
//地址分布
//总flash 1M 0x1000000~0x1100000 共1mbit
//1000200 为boot起始地址
//1020000~1078000 为APP地址 共352k
//中间空余128k 1078000 ~ 1098000
//1098000~10F0000 为BACK地址 共352k
//10F0000~10F8000 为存储参数地址 共32k 存储参数用
//10F8000~1010000 为FRID预留地址 共32k
//-----------------------内部flash-----------------------------
//远程升级 做备份区处理
#define IAP_BACKUP_ADDR 0x1098000 //1090000~10F0000
#define IAP_BACKUP_FLAG_ADDR 0x10F0000 //10F0000~10F1000
//远程升级最大字节数
#define IAP_BACKUP_MAX_SIZE 0x58000 //352KB
#define IAP_APP_START_ADDR 0x1020000 //APP起始地址
#define IAP_APP_MAX_SIZE 0x58000 //352KB
//参数地址
//参数存储标记 倒数第1到倒数第4 擦除只能4K
#define PARA_STORE_START_BASE 0x10F7000
//蓝牙 参数存储标记 倒数第5 到倒数第8
#define BT_STORE_START_BASE 0x10F6000
//测试参数存储标记 倒数第9 到倒数第12
#define TEST_STORE_START_BASE 0x10F5000
//定标参数存储标记 倒数第13 到倒数第16
#define CALIBRATION_STORE_START_BASE 0x10F4000
//RFID 耗材ID存储标记
#define RFID_STORE_START_BASE 0x10F3000
/************************************结构体************************************/
/**********************************可导出变量**********************************/
/***********************************函数实现***********************************/
#endif
printerConfig.h /
/******************************************************************************
版权所有: 深圳**科技有限公司
文件名: config.h
作者: wangdy
创建日期: 2021/5/31
描述: 配置文件
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/*********************************防止多次编译*********************************/
#ifndef _PRINTER_USER_CONFIG_H
#define _PRINTER_USER_CONFIG_H
/************************************头文件************************************/
#include <stdint.h>
#include <stdbool.h>
/************************************宏定义************************************/
//---------------------------机型定义
//----------------------------通用定义
//usb info
#define USB_USER_VID 0x2E3C
#define USB_USER_PID 0x57FF
#define PRINTER_LINE_BYTES 12 //一行需要多少个字节数
#define MM_DOT 8 //1mm多少个像素
//参数定义
#define PRINTHEAD_HEATTIME_DEFAULT 100 //默认加热时间
#define PRINTHEAD_HEAVE_HEATTIME 130 //重加热时间
#define GAP_PRINT_BLANK 8 //间隙纸开始打印 要先走多少
#define PRINTHEAD_INVERSE_PIX 37 //后退多少个像素
#define PRINTHEAD_GAP_CUTTER_PIX 64 //56 //32 //48 //间隙纸 多退一点 避过间隙 (打印多份时第一份的回退距离,原来是52)
#define PRINTHEAD_CUTTUR_PIX 64//80 //64 //打印头到切刀(连续纸打印参数)
//112 //152 //128 //打印头到光耦 原来96 (多份打印时,份数>1时走纸到打印位)
#define PRINTHEAD_OPTICALCOUPLER_PIX 128 //120 //15.6mm
//184 //176 //168 //80 //144 //208 //224 //切刀到光耦 原来149 (多份打印时打最后一张或只打一份时,走纸到切刀位置)
#define PRINTHEAD_OPTICALCOUPLER_CUTTER 192 //25.1mm
//以下部分为按键走纸的宏定义-----------------------------------------------------------------------------------------------
#define PRINTHEAD_OPTICALCOUPLER_CALIBRATION_CUTTER 166 //切刀到光耦 18mm (走到撕纸处,双击定标用)
#define KEY_SHORT_PRESS_FEED_COUNT 800 //单击走纸距离最大值 (走纸超过这个值也强制停止)
#define PRINTHEAD_CHECK_PIX_INFO 200 //150 //提前多少像素(去检查间隙)OK 原来90
#define PRINT_BLANK_DEFAULT 1 //默认空余(8*N)
#define PAPER_CALIBRATION_MAX_PIX 800 //100MM 最大像素信息
#define PAPER_BACKAWAY_ENABLE 1 //后退标记信息
/**********************************可导出变量**********************************/
/***********************************函数实现***********************************/
#endif
var_global.c
/******************************************************************************
版权所有: 深圳市**科技有限公司
文件名: var_global.c
作者: wangdy
创建日期: 2020/06/29
描述: 全局变量
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/************************************头文件************************************/
#include <string.h>
#include "var_global.h"
#include "printerConfig.h"
#include "yc_otp.h"
#include <stdio.h>
/*************************************变量*************************************/
_PRINT_PAR Print_Par = {0};
_MACHINE_STATE Machine_State = MACHINE_WORK; //正常工作 状态
_MACHINE_DEBUG_INFO Machine_Debug_Info = {0}; //测试信息
GlobalMachineVarTypedef GlobleMachineVar = {0};
/*************************************函数*************************************/
/*******************************************************************************
* 名称: Get_MachineName
* 描述: 获取机器 名称
* 输入参数: 无
* 输出参数: 无
* 其它: 无
*******************************************************************************/
void Get_MachineName(uint8_t *addr)
{
uint8_t chip_id[6];
uint8_t bt_serial_id[4] = {0};
//读取芯片ID 用于生成序列号
read_chipid(chip_id);
//后缀信息get
sprintf((char *)&bt_serial_id[0],(char *)"%02X%02X",(char)chip_id[4],(char)chip_id[5]);
}
/*******************************************************************************
* 名称: Get_MachineName
* 描述: 获取机器序列号
* 输入参数: 无
* 输出参数: 无
* 其它: 无
*******************************************************************************/
void Get_SerialNumber(uint8_t *addr)
{
uint8_t chip_id[6];
//读取芯片ID 用于生成序列号
read_chipid(chip_id);
//后缀信息get
sprintf((char *)addr,(char *)"%02X%02X%02X%02X%02X",
(char)chip_id[0],
(char)chip_id[1],
(char)chip_id[2],
(char)chip_id[3],
(char)chip_id[4]
);
}
var_global.h
/******************************************************************************
版权所有: 深圳**科技有限公司
文件名: var_global.h
作者: wangdy
创建日期: 2021/5/31
描述: 打印头控制
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/*********************************防止多次编译*********************************/
#ifndef _VAR_GLOBAL_H
#define _VAR_GLOBAL_H
/************************************头文件************************************/
#include <stdint.h>
#include <stdbool.h>
#include "yc_timer.h"
/************************************宏定义************************************/
#define BATTERY_TEMPER_CHECK_ENABLE_FLAG 1 //允许电池温度检测
/************************************枚举************************************/
//用100us定时器做时基控制 根据目标转速,设置对应的定时器的数据
typedef enum
{
SPEED_1000RPM = 3, //1000RPM->3MS->30*100US 一拍
SPEED_1500RPM = 2, //1500RPM->2MS->20*100US 一拍
// SPEED_2000RPM = 15, //2000RPM->1.5MS->15*100US 一拍
// SPEED_2500RPM = 12, //2500RPM->1.2MS->12*100US 一拍
SPEED_3000RPM = 1, //3000RPM->1MS->10*100US 一拍
// SPEED_4500RPM = 7, //4500RPM->0.667MS->7*100US 一拍
}_MOTOR_SPPED_ENUM;
//当前机器状态
typedef enum
{
MACHINE_WORK = 1, //正常工作
MACHINE_UPDATE , //升级状态
// MACHINE_CALIBRATION, //校准模式
MACHINE_TEST , //测试模式
MACHINE_FEED_PAPER , //走纸
}_MACHINE_STATE;
//纸张的类型状态
typedef enum
{
PAPER_CONTINUE = 0, //连续纸
PAPER_BLACKLABLE, //黑标纸
PAPER_GAP, //间隙纸
PAPER_LOCATE_HOLE, //定位孔
PAPER_RFID, //RFID标签
PAPER_NONE = 0xFF, //无此类型纸
}PrintPaperTypeEnum;
/************************************结构体************************************/
#pragma pack(push)
#pragma pack(1)
//块数据信息
typedef struct
{
uint8_t BlockIndex; //第几个扇区
uint8_t WriteByteSum; //该 扇区写字节的长度
uint8_t WriteData[4]; //写入的有效数据
}_BLOCK_DATA_TYPE;
//打印机参数表
typedef struct
{
uint8_t NFCPassWd[6]; //设置NFC校验密码,密码固定为6位
uint8_t Firmware_ID; //Firmware版本ID
uint8_t Productor; //厂商
uint8_t PrinteName[10]; //打印机名称
uint8_t PrinteID[10]; //打印机序列号
uint8_t PrinteWordType[10]; //支持汉字类型
}_PRINT_PAR;
//debug信息
typedef struct
{
bool PrintDebugFlag;
}_MACHINE_DEBUG_INFO;
//机器信息
typedef struct
{
uint8_t DefaultGenMachineName[32]; //机器名称
uint8_t MachineSerialNumber[10]; //机器序列号
}GlobalMachineVarTypedef;
#pragma pack(pop)
/**********************************可导出变量**********************************/
extern _PRINT_PAR Print_Par;
extern _MACHINE_STATE Machine_State;
extern _MACHINE_DEBUG_INFO Machine_Debug_Info; //测试信息
extern GlobalMachineVarTypedef GlobleMachineVar; //通用机器变量
/***********************************函数实现***********************************/
void Get_MachineName(uint8_t *addr); //获取机器名称
void Get_SerialNumber(uint8_t *addr); //获取机器名称
#endif
var_pix_print.c ///
/******************************************************************************
版权所有: 深圳市**科技有限公司
文件名: var_global.c
作者: wangdy
创建日期: 2020/06/29
描述: 全局变量
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/************************************头文件************************************/
#include <string.h>
#include "var_pix_print.h"
#include "printerConfig.h"
/*************************************变量*************************************/
const uint8_t BitMap_DotLine_Line[PRINTER_LINE_BYTES] = {0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0};
/*************************************函数*************************************/
var_pix_print.h
/******************************************************************************
版权所有: 深圳**科技有限公司
文件名: var_pix_print.h
作者: wangdy
创建日期: 2023/2/25
描述: 打印头控制
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/*********************************防止多次编译*********************************/
#ifndef _VAR_PIX_PRINT_H
#define _VAR_PIX_PRINT_H
/************************************头文件************************************/
#include <stdint.h>
#include <stdbool.h>
#include "yc_timer.h"
#include "printerConfig.h"
/************************************宏定义************************************/
extern const uint8_t BitMap_DotLine_Line[PRINTER_LINE_BYTES];
/************************************枚举************************************/
/************************************结构体************************************/
/**********************************可导出变量**********************************/
/***********************************函数实现***********************************/
#endif
var_print_selftest_font.c ///
#include "var_print_selftest_font.h"
/*
点阵格式:阴码 取模方式:zhu列式 每行显示数据:12 取模:逆向
*/
static SelftTestInfoTypeDef SelfTestInfo = { 0
};
//需要打印的字符
PrintTestBufTypeDef PrintTest = {
.First_Line = "NAME: Q1_12345678",
.Second_Line = "MAC: 12.34.56.78.90",
.Third_Line = "POR: 80%",
.Fourth_Line = "VER: 02.002.CD0601",
};
//字模信息--ascii码
const FontAscii_24X24_TypeDef FontAscii_24X24[] = {
{' ',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /*" ",0*/},
{'!',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x77,0x1C,
0xF0,0x0F,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /*"!",0*/},
{'"',0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x00,
0x8C,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,/*""",1*/},
{'#',0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x83,0x1F,0x00,0xFF,0x01,0xF0,0x83,0x01,0x00,0x83,0x01,
0x00,0x83,0x01,0x00,0x83,0x01,0x00,0xFB,0x1F,0xF0,0x87,0x01,0x00,0x83,0x01,0x00,0x00,0x00,/*"#",2*/},
{'$',0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x07,0xC0,0x07,0x0F,0x60,0x0C,0x12,0x20,0x18,0x10,
0xF8,0xFF,0x7F,0x20,0x71,0x10,0xE0,0xE1,0x0F,0xC0,0x81,0x07,0x00,0x00,0x00,0x00,0x00,0x00,/*"$",3*/},
{'%',0xC0,0x07,0x00,0x30,0x18,0x00,0x10,0x10,0x18,0x30,0x18,0x07,0xC0,0xCF,0x00,0x00,0x38,0x00,
0x00,0xC6,0x07,0xC0,0x31,0x18,0x30,0x10,0x10,0x00,0x30,0x18,0x00,0xC0,0x07,0x00,0x00,0x00,/*"%",4*/},
{'&',0x00,0xC0,0x07,0x00,0xE0,0x0F,0xE0,0x17,0x18,0xF0,0x3F,0x10,0x10,0xF8,0x10,0xF0,0xC7,0x13,
0xE0,0x03,0x0F,0x00,0x08,0x0E,0x00,0xF8,0x19,0x00,0x08,0x10,0x00,0x08,0x10,0x00,0x00,0x0C,/*"&",5*/},
{'\'',0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x00,0x00,0x4C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",6*/},
{'(',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,
0x80,0x01,0x03,0x60,0x00,0x0C,0x10,0x00,0x10,0x08,0x00,0x20,0x04,0x00,0x40,0x00,0x00,0x00,/*"(",7*/},
{')',0x00,0x00,0x00,0x04,0x00,0x40,0x08,0x00,0x20,0x10,0x00,0x10,0x60,0x00,0x0C,0x80,0x01,0x03,
0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*")",8*/},
{'*',0x00,0x00,0x00,0x00,0x66,0x00,0x00,0x66,0x00,0x00,0x24,0x00,0x00,0x38,0x00,0x00,0x10,0x00,
0xC0,0xFF,0x03,0x80,0x18,0x00,0x00,0x3C,0x00,0x00,0x24,0x00,0x00,0x66,0x00,0x00,0x66,0x00,/*"*",9*/},
{'+',0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,
0x80,0xFF,0x03,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,/*"+",10*/},
{',',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x00,0x00,0x4C,0x00,0x00,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",11*/},
{'-',0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,
0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,/*"-",12*/},
{'.',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",13*/},
{'/',0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x38,0x00,0x00,0x0E,0x00,0x80,0x01,0x00,0x70,0x00,
0x00,0x1C,0x00,0x00,0x03,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,/*"/",14*/},
{'0',0x00,0x00,0x00,0x00,0xFE,0x01,0x80,0xFF,0x07,0xC0,0x01,0x0E,0x60,0x00,0x18,0x20,0x00,0x10,
0x20,0x00,0x10,0x60,0x00,0x18,0xC0,0x01,0x0E,0x80,0xFF,0x07,0x00,0xFE,0x01,0x00,0x00,0x00,/*"0",15*/},
{'1',0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x40,0x00,0x10,0x40,0x00,0x10,0xC0,0xFF,0x1F,
0xE0,0xFF,0x1F,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*"1",16*/},
{'2',0x00,0x00,0x00,0x80,0x03,0x18,0x40,0x03,0x1C,0x20,0x00,0x12,0x20,0x00,0x11,0x20,0xC0,0x10,
0x20,0x60,0x10,0x60,0x30,0x10,0xC0,0x1F,0x10,0x80,0x07,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,/*"2",17*/},
{'3',0x00,0x00,0x00,0xC0,0x01,0x0E,0xC0,0x01,0x0E,0x20,0x00,0x10,0x20,0x10,0x10,0x20,0x10,0x10,
0x60,0x18,0x10,0xC0,0x2F,0x18,0x80,0xE7,0x0F,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,/*"3",18*/},
{'4',0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xA0,0x00,0x00,0x98,0x00,0x00,0x84,0x00,0x00,0x83,0x10,
0x80,0x80,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x00,0x80,0x10,0x00,0x80,0x10,0x00,0x80,0x00,/*"4",19*/},
{'5',0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x3F,0x0B,0x20,0x10,0x10,0x20,0x08,0x10,0x20,0x08,0x10,
0x20,0x08,0x10,0x20,0x18,0x1C,0x20,0xF0,0x0F,0x20,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,/*"5",20*/},
{'6',0x00,0x00,0x00,0x00,0xFC,0x01,0x80,0xFF,0x07,0xC0,0x21,0x0C,0x40,0x10,0x18,0x20,0x08,0x10,
0x20,0x08,0x10,0x20,0x08,0x10,0xE0,0x18,0x08,0xC0,0xF0,0x0F,0x00,0xE0,0x03,0x00,0x00,0x00,/*"6",21*/},
{'7',0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x60,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x1F,
0x20,0xE0,0x1F,0x20,0x18,0x00,0x20,0x07,0x00,0xE0,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,/*"7",22*/},
{'8',0x00,0x00,0x00,0x80,0x83,0x07,0xC0,0xCF,0x0F,0x60,0x6C,0x08,0x20,0x18,0x10,0x20,0x10,0x10,
0x20,0x30,0x10,0x20,0x30,0x10,0x60,0x68,0x18,0xC0,0xCF,0x0F,0x80,0x83,0x07,0x00,0x00,0x00,/*"8",0*/},
{'9',0x00,0x00,0x00,0x00,0x1F,0x00,0xC0,0x3F,0x0C,0xC0,0x60,0x1C,0x20,0x40,0x10,0x20,0x40,0x10,
0x20,0x40,0x10,0x20,0x20,0x08,0xC0,0x10,0x0F,0x80,0xFF,0x03,0x00,0xFE,0x00,0x00,0x00,0x00,/*"9",24*/},
{':',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,
0x00,0x1C,0x1C,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*":",25*/},
{';',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xD8,
0x00,0x0C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*";",26*/},
{'<',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x28,0x00,0x00,0x44,0x00,0x00,0x82,0x00,
0x00,0x01,0x01,0x80,0x00,0x02,0x40,0x00,0x04,0x20,0x00,0x08,0x10,0x00,0x10,0x00,0x00,0x00,/*"<",27*/},
{'=',0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x44,0x00,
0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x44,0x00,0x00,0x00,0x00,/*"=",28*/},
{'>',0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x20,0x00,0x08,0x40,0x00,0x04,0x80,0x00,0x02,
0x00,0x01,0x01,0x00,0x82,0x00,0x00,0x44,0x00,0x00,0x28,0x00,0x00,0x10,0x00,0x00,0x00,0x00,/*">",29*/},
{'?',0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x40,0x06,0x00,0x40,0x00,0x00,0x20,0x00,0x1C,
0x20,0xE0,0x1C,0x20,0x10,0x1C,0x20,0x18,0x00,0x60,0x08,0x00,0xC0,0x0F,0x00,0x80,0x07,0x00,/*"?",30*/},
{'@',0x00,0x00,0x00,0x00,0xFE,0x00,0xC0,0xFF,0x07,0xE0,0x00,0x0E,0x20,0xF8,0x18,0x10,0xFF,0x11,
0x90,0x03,0x11,0x90,0xFC,0x11,0xA0,0x07,0x09,0x60,0x80,0x0C,0x80,0x7F,0x02,0x00,0x00,0x00,/*"@",31*/},
{'A',0x00,0x00,0x10,0x00,0x00,0x1C,0x00,0x80,0x13,0x00,0x78,0x10,0x80,0x47,0x00,0x60,0x40,0x00,
0xE0,0x41,0x00,0x00,0x5F,0x00,0x00,0xF0,0x11,0x00,0x80,0x1F,0x00,0x00,0x18,0x00,0x00,0x10,/*"A",32*/},
{'B',0x00,0x00,0x00,0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x10,0x10,0x20,0x10,0x10,
0x20,0x10,0x10,0x60,0x18,0x10,0xC0,0x2F,0x18,0xC0,0xE7,0x0F,0x00,0x80,0x07,0x00,0x00,0x00,/*"B",33*/},
{'C',0x00,0x00,0x00,0x00,0xFC,0x01,0x80,0xFF,0x07,0xC0,0x01,0x0E,0x40,0x00,0x18,0x20,0x00,0x10,
0x20,0x00,0x10,0x20,0x00,0x10,0x60,0x00,0x08,0xE0,0x00,0x0C,0x80,0x03,0x03,0x00,0x00,0x00,/*"C",34*/},
{'D',0x20,0x00,0x10,0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x00,0x10,0x20,0x00,0x10,
0x20,0x00,0x10,0x40,0x00,0x08,0xC0,0x01,0x0E,0x80,0xFF,0x07,0x00,0xFE,0x01,0x00,0x00,0x00,/*"D",35*/},
{'E',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x10,0x10,0x20,0x10,0x10,0x20,0x10,0x10,
0x20,0x10,0x10,0x20,0xFC,0x10,0x60,0x00,0x10,0x60,0x00,0x18,0x80,0x01,0x06,0x00,0x00,0x00,/*"E",36*/},
{'F',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x10,0x10,0x20,0x10,0x10,0x20,0x10,0x00,
0x20,0x10,0x00,0x20,0xFC,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,/*"F",37*/},
{'G',0x00,0x00,0x00,0x00,0xFC,0x01,0x80,0xFF,0x07,0xC0,0x01,0x0E,0x60,0x00,0x18,0x20,0x00,0x10,
0x20,0x40,0x10,0x20,0x40,0x10,0x40,0xC0,0x0F,0x80,0xC3,0x0F,0x00,0x40,0x00,0x00,0x40,0x00,/*"G",38*/},
{'H',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x10,0x10,0x00,0x10,0x00,0x00,0x10,0x00,
0x00,0x10,0x00,0x00,0x10,0x00,0x20,0x10,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x00,0x10,/*"H",39*/},
{'I',0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x20,0x00,0x10,0x20,0x00,0x10,0xE0,0xFF,0x1F,
0xE0,0xFF,0x1F,0x20,0x00,0x10,0x20,0x00,0x10,0x20,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*"I",40*/},
{'J',0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0xE0,0x20,0x00,0x80,0x20,0x00,0x80,0x20,0x00,0xC0,
0xE0,0xFF,0x7F,0xE0,0xFF,0x3F,0x20,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,/*"J",41*/},
{'K',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x30,0x10,0x00,0x0C,0x00,0x00,0x3A,0x00,
0xA0,0xE1,0x00,0xE0,0x80,0x13,0x60,0x00,0x1E,0x20,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x00,/*"K",42*/},
{'L',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x00,0x10,0x20,0x00,0x10,0x00,0x00,0x10,
0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x06,0x00,0x00,0x00,/*"L",43*/},
{'M',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0x0F,0x10,0x00,0xFF,0x00,0x00,0xE0,0x0F,0x00,0x80,0x07,
0x00,0x7C,0x00,0xC0,0x03,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x00,0x10,0x00,0x00,0x00,/*"M",44*/},
{'N',0x00,0x00,0x10,0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0x01,0x10,0x80,0x07,0x10,0x00,0x1E,0x00,
0x00,0x78,0x00,0x20,0xC0,0x03,0x20,0x00,0x0F,0xE0,0xFF,0x1F,0x20,0x00,0x00,0x20,0x00,0x00,/*"N",45*/},
{'O',0x00,0x00,0x00,0x00,0xFE,0x01,0x80,0xFF,0x07,0xC0,0x01,0x0E,0x60,0x00,0x18,0x20,0x00,0x10,
0x20,0x00,0x10,0x60,0x00,0x18,0xC0,0x00,0x0C,0x80,0xFF,0x07,0x00,0xFE,0x01,0x00,0x00,0x00,/*"O",46*/},
{'P',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x20,0x10,0x20,0x20,0x10,0x20,0x20,0x00,
0x20,0x20,0x00,0x20,0x30,0x00,0x40,0x10,0x00,0xC0,0x1F,0x00,0x80,0x0F,0x00,0x00,0x00,0x00,/*"P",47*/},
{'Q',0x00,0x00,0x00,0x00,0xFE,0x01,0x80,0xFF,0x07,0xC0,0x01,0x0E,0x60,0x00,0x19,0x20,0x00,0x11,
0x20,0x00,0x17,0x60,0x00,0x3C,0xC0,0x00,0x6C,0x80,0xFF,0x67,0x00,0xFE,0x21,0x00,0x00,0x00,/*"Q",48*/},
{'R',0x20,0x00,0x10,0xE0,0xFF,0x1F,0xE0,0xFF,0x1F,0x20,0x10,0x10,0x20,0x10,0x00,0x20,0x10,0x00,
0x20,0x70,0x00,0x20,0xD0,0x01,0x60,0x08,0x07,0xC0,0x0F,0x1E,0x80,0x07,0x18,0x00,0x00,0x10,/*"R",49*/},
{'S',0x00,0x00,0x00,0x80,0x07,0x07,0xC0,0x0F,0x0C,0x60,0x1C,0x08,0x20,0x18,0x10,0x20,0x38,0x10,
0x20,0x30,0x10,0x20,0x70,0x10,0x40,0xE0,0x18,0xE0,0xE1,0x0F,0x00,0x80,0x07,0x00,0x00,0x00,/*"S",50*/},
{'T',0x80,0x01,0x00,0x60,0x00,0x00,0x20,0x00,0x00,0x20,0x00,0x10,0x20,0x00,0x10,0xE0,0xFF,0x1F,
0xE0,0xFF,0x1F,0x20,0x00,0x10,0x20,0x00,0x10,0x20,0x00,0x00,0x60,0x00,0x00,0x80,0x01,0x00,/*"T",51*/},
{'U',0x00,0x00,0x00,0x20,0x00,0x00,0xE0,0xFF,0x07,0xE0,0xFF,0x0F,0x20,0x00,0x18,0x00,0x00,0x10,
0x00,0x00,0x10,0x00,0x00,0x10,0x20,0x00,0x08,0xE0,0xFF,0x07,0x20,0x00,0x00,0x00,0x00,0x00,/*"U",52*/},
{'V',0x20,0x00,0x00,0x60,0x00,0x00,0xE0,0x07,0x00,0x20,0x7E,0x00,0x00,0xE0,0x07,0x00,0x00,0x1E,
0x00,0x80,0x03,0x00,0x78,0x00,0xA0,0x07,0x00,0x60,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,/*"V",53*/},
{'W',0x20,0x00,0x00,0xE0,0x03,0x00,0x20,0xFF,0x00,0x00,0xC0,0x1F,0x20,0xC0,0x03,0x60,0x3C,0x00,
0xE0,0x3F,0x00,0x20,0xF0,0x1F,0x00,0x80,0x07,0x20,0x7C,0x00,0xE0,0x03,0x00,0x20,0x00,0x00,/*"W",54*/},
{'X',0x00,0x00,0x00,0x20,0x00,0x10,0x60,0x00,0x18,0xE0,0x01,0x16,0x20,0x87,0x01,0x00,0x7C,0x00,
0x00,0xE8,0x00,0x20,0x86,0x13,0xE0,0x01,0x1E,0x20,0x00,0x18,0x20,0x00,0x10,0x00,0x00,0x00,/*"X",55*/},
{'Y',0x20,0x00,0x00,0x60,0x00,0x00,0xE0,0x01,0x00,0x20,0x0F,0x10,0x00,0x3C,0x10,0x00,0xF8,0x1F,
0x00,0xE0,0x1F,0x00,0x18,0x10,0x20,0x06,0x10,0xA0,0x01,0x00,0x60,0x00,0x00,0x20,0x00,0x00,/*"Y",56*/},
{'Z',0x00,0x00,0x00,0x80,0x01,0x10,0xE0,0x00,0x1C,0x60,0x00,0x17,0x20,0x80,0x11,0x20,0x60,0x10,
0x20,0x18,0x10,0x20,0x06,0x10,0xA0,0x03,0x10,0xE0,0x00,0x18,0x20,0x00,0x06,0x00,0x00,0x00,/*"Z",57*/},
{'[',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x7F,
0x04,0x00,0x40,0x04,0x00,0x40,0x04,0x00,0x40,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,/*"[",58*/},
{']',0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x04,0x00,0x40,0x04,0x00,0x40,0x04,0x00,0x40,
0xFC,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"]",59*/},
{'^',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x02,0x00,0x00,
0x02,0x00,0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",60*/},
{'_',0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,
0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,0x00,0x00,0x80,/*"_",61*/},
{'`',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x08,0x00,0x00,
0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",62*/},
{'a',0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x98,0x1F,0x00,0x98,0x19,0x00,0x84,0x10,0x00,0x44,0x10,
0x00,0x44,0x10,0x00,0x44,0x08,0x00,0xFC,0x0F,0x00,0xF8,0x1F,0x00,0x00,0x10,0x00,0x00,0x18,/*"a",63*/},
{'b',0x00,0x00,0x00,0x20,0x00,0x00,0xE0,0xFF,0x1F,0xF0,0xFF,0x0F,0x00,0x18,0x08,0x00,0x08,0x10,
0x00,0x04,0x10,0x00,0x04,0x10,0x00,0x0C,0x18,0x00,0xF8,0x0F,0x00,0xF0,0x03,0x00,0x00,0x00,/*"b",64*/},
{'c',0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF8,0x0F,0x00,0x18,0x0C,0x00,0x04,0x10,0x00,0x04,0x10,
0x00,0x04,0x10,0x00,0x3C,0x10,0x00,0x38,0x08,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,/*"c",65*/},
{'d',0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF8,0x0F,0x00,0x1C,0x18,0x00,0x04,0x10,0x00,0x04,0x10,
0x20,0x04,0x10,0x20,0x08,0x08,0xE0,0xFF,0x1F,0xF0,0xFF,0x0F,0x00,0x00,0x08,0x00,0x00,0x00,/*"d",66*/},
{'e',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF8,0x0F,0x00,0x88,0x0C,0x00,0x84,0x10,
0x00,0x84,0x10,0x00,0x84,0x10,0x00,0x8C,0x10,0x00,0xF8,0x08,0x00,0xE0,0x04,0x00,0x00,0x00,/*"e",67*/},
{'f',0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x10,0x00,0x04,0x10,0x80,0xFF,0x1F,0xC0,0xFF,0x1F,
0x60,0x04,0x10,0x20,0x04,0x10,0x20,0x04,0x10,0xE0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,/*"f",68*/},
{'g',0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x7E,0x00,0xF8,0xCF,0x00,0x8C,0x85,0x00,0x04,0x85,
0x00,0x0C,0x8D,0x00,0xFC,0xCD,0x00,0xF4,0x78,0x00,0x0C,0x78,0x00,0x0C,0x00,0x00,0x00,0x00,/*"g",69*/},
{'h',0x00,0x00,0x00,0x20,0x00,0x10,0xE0,0xFF,0x1F,0xF0,0xFF,0x1F,0x00,0x08,0x10,0x00,0x04,0x00,
0x00,0x04,0x00,0x00,0x04,0x10,0x00,0xFC,0x1F,0x00,0xF8,0x1F,0x00,0x00,0x10,0x00,0x00,0x00,/*"h",70*/},
{'i',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x10,0x00,0x04,0x10,0x00,0x04,0x10,0x60,0xFC,0x1F,
0x60,0xFE,0x1F,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*"i",71*/},
{'j',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x04,0x80,0x00,0x04,0x80,
0x60,0x04,0xC0,0x60,0xFC,0x7F,0x60,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"j",72*/},
{'k',0x00,0x00,0x00,0x20,0x00,0x10,0xE0,0xFF,0x1F,0xF0,0xFF,0x1F,0x00,0x80,0x10,0x00,0x40,0x00,
0x00,0xE0,0x00,0x00,0x1C,0x13,0x00,0x04,0x1E,0x00,0x04,0x18,0x00,0x00,0x10,0x00,0x00,0x00,/*"k",73*/},
{'l',0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x20,0x00,0x10,0x20,0x00,0x10,0xE0,0xFF,0x1F,
0xF0,0xFF,0x1F,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,/*"l",74*/},
{'m',0x00,0x04,0x10,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x08,0x10,0x00,0x04,0x10,0x00,0xFC,0x1F,
0x00,0xF8,0x1F,0x00,0x08,0x10,0x00,0x04,0x10,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x10,/*"m",75*/},
{'n',0x00,0x00,0x00,0x00,0x04,0x10,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x08,0x10,0x00,0x04,0x00,
0x00,0x04,0x00,0x00,0x04,0x10,0x00,0xFC,0x1F,0x00,0xF8,0x1F,0x00,0x00,0x10,0x00,0x00,0x00,/*"n",76*/},
{'o',0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF0,0x0F,0x00,0x18,0x0C,0x00,0x0C,0x10,0x00,0x04,0x10,
0x00,0x04,0x10,0x00,0x0C,0x10,0x00,0x18,0x0C,0x00,0xF0,0x0F,0x00,0xE0,0x03,0x00,0x00,0x00,/*"o",77*/},
{'p',0x00,0x00,0x00,0x00,0x04,0x80,0x00,0xFC,0xFF,0x00,0xFC,0xFF,0x00,0x08,0x88,0x00,0x04,0x90,
0x00,0x04,0x10,0x00,0x04,0x10,0x00,0x0C,0x1C,0x00,0xF8,0x0F,0x00,0xF0,0x03,0x00,0x00,0x00,/*"p",78*/},
{'q',0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF8,0x0F,0x00,0x1C,0x18,0x00,0x04,0x10,0x00,0x04,0x10,
0x00,0x04,0x90,0x00,0x08,0x88,0x00,0xF8,0xFF,0x00,0xFC,0xFF,0x00,0x00,0x80,0x00,0x00,0x00,/*"q",79*/},
{'r',0x00,0x04,0x10,0x00,0x04,0x10,0x00,0x04,0x10,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x10,0x10,
0x00,0x08,0x10,0x00,0x04,0x10,0x00,0x04,0x00,0x00,0x1C,0x00,0x00,0x18,0x00,0x00,0x00,0x00,/*"r",80*/},
{'s',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x1E,0x00,0x78,0x18,0x00,0xCC,0x10,0x00,0xC4,0x10,
0x00,0x84,0x11,0x00,0x84,0x19,0x00,0x0C,0x1F,0x00,0x3C,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,/*"s",81*/},
{'t',0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0xFF,0x0F,0xC0,0xFF,0x1F,
0x00,0x04,0x10,0x00,0x04,0x10,0x00,0x04,0x10,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,/*"t",82*/},
{'u',0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xFC,0x0F,0x00,0xFE,0x1F,0x00,0x00,0x18,0x00,0x00,0x10,
0x00,0x00,0x10,0x00,0x04,0x08,0x00,0xFC,0x1F,0x00,0xFE,0x0F,0x00,0x00,0x08,0x00,0x00,0x00,/*"u",83*/},
{'v',0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xC4,0x03,0x00,0x00,0x1F,
0x00,0x00,0x0C,0x00,0x80,0x03,0x00,0x74,0x00,0x00,0x0C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,/*"v",84*/},
{'w',0x00,0x04,0x00,0x00,0x1C,0x00,0x00,0xF4,0x01,0x00,0x80,0x1F,0x00,0x04,0x0F,0x00,0xEC,0x00,
0x00,0xFC,0x00,0x00,0x84,0x0F,0x00,0x00,0x0F,0x00,0xE4,0x00,0x00,0x1C,0x00,0x00,0x04,0x00,/*"w",85*/},
{'x',0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x04,0x10,0x00,0x0C,0x1C,0x00,0x3C,0x12,0x00,0xE4,0x01,
0x00,0xC0,0x01,0x00,0x24,0x13,0x00,0x1C,0x1C,0x00,0x04,0x18,0x00,0x04,0x10,0x00,0x00,0x00,/*"x",86*/},
{'y',0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0xC0,0x00,0x3C,0x80,0x00,0xC4,0x81,0x00,0x00,0x7F,
0x00,0x00,0x0E,0x00,0xC4,0x01,0x00,0x3C,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x00,0x00,/*"y",87*/},
{'z',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x18,0x00,0x04,0x1E,0x00,0x04,0x13,0x00,0xC4,0x11,
0x00,0x74,0x10,0x00,0x1C,0x10,0x00,0x0C,0x18,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,/*"z",88*/},
{'{',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,
0x00,0x28,0x00,0xF8,0xC7,0x3F,0x04,0x00,0x40,0x04,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,/*"{",89*/},
{'|',0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"|",90*/},
{'}',0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x04,0x00,0x40,0xF8,0xC7,0x3F,0x00,0x28,0x00,
0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"}",91*/},
{'~',0x00,0x00,0x00,0x0C,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x04,0x00,0x00,
0x08,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,/*"~",92*/},
};
//获取4个字符的最长长度
static int findMax(int a, int b, int c, int d) {
int max_value = a;
if (b > max_value) {
max_value = b;
}
if (c > max_value) {
max_value = c;
}
if (d > max_value) {
max_value = d;
}
return max_value;
}
//打印自检数据复位
void ResetPrintSelfTestData(PrintTestBufTypeDef test){
SelfTestInfo.CurrentIndex = 0;
PrintTest = test;
memcpy((char *)&PrintTest,(char *)&test,sizeof(test));
SelfTestInfo.size_1 = strlen((char *)PrintTest.First_Line)*12;
SelfTestInfo.size_2 = strlen((char *)PrintTest.Second_Line)*12;
SelfTestInfo.size_3 = strlen((char *)PrintTest.Third_Line)*12;
SelfTestInfo.size_4 = strlen((char *)PrintTest.Fourth_Line)*12;
SelfTestInfo.max_size = findMax(SelfTestInfo.size_1,
SelfTestInfo.size_2,
SelfTestInfo.size_3,
SelfTestInfo.size_4);
}
//获取字模的起始地址
static bool getFontModelData(char ascii,uint8_t *data){
for(int i = 0; i<sizeof(FontAscii_24X24)/sizeof(FontAscii_24X24_TypeDef); i++){
if(FontAscii_24X24[i].FontIndex == ascii){
memcpy(data,FontAscii_24X24[i].FontImg,sizeof(FontAscii_24X24[i].FontImg));
return true;
}
}
return false;
}
//获取一行的打印数据
bool getPrintSelfTestData(SelfTestLineTypeDef *data){
uint8_t print_line_buf[36] = {0};
if(SelfTestInfo.CurrentIndex >= SelfTestInfo.max_size){
SelfTestInfo.CurrentIndex = SelfTestInfo.max_size - 1;
return false;
}
//combine
//第一行数据
if(SelfTestInfo.CurrentIndex < SelfTestInfo.size_1){
char cur_ascii = PrintTest.First_Line[SelfTestInfo.CurrentIndex/12]; //每12行 对应一个ascii码
if(getFontModelData(cur_ascii,print_line_buf)){ //寻找字模里面的数据信息
for(int i=0; i<3; i++){
data->LineData[9 + i] = print_line_buf[(SelfTestInfo.CurrentIndex%12)*3 + 2 - i];
}
}
}else{
for(int i=0; i<3; i++){
data->LineData[9 + i] = 0x00;
}
}
//第二行数据
if(SelfTestInfo.CurrentIndex < SelfTestInfo.size_2){
char cur_ascii = PrintTest.Second_Line[SelfTestInfo.CurrentIndex/12]; //每12行 对应一个ascii码
if(getFontModelData(cur_ascii,print_line_buf)){ //寻找字模里面的数据信息
for(int i=0; i<3; i++){
data->LineData[6 + i] = print_line_buf[(SelfTestInfo.CurrentIndex%12)*3 + 2 - i];
}
}
}else{
for(int i=0; i<3; i++){
data->LineData[6 + i] = 0x00;
}
}
//第三行数据
if(SelfTestInfo.CurrentIndex < SelfTestInfo.size_3){
char cur_ascii = PrintTest.Third_Line[SelfTestInfo.CurrentIndex/12]; //每12行 对应一个ascii码
if(getFontModelData(cur_ascii,print_line_buf)){ //寻找字模里面的数据信息
for(int i=0; i<3; i++){
data->LineData[3 + i] = print_line_buf[(SelfTestInfo.CurrentIndex%12)*3 + 2 - i];
}
}
}else{
for(int i=0; i<3; i++){
data->LineData[3 + i] = 0x00;
}
}
//第四行数据
if(SelfTestInfo.CurrentIndex < SelfTestInfo.size_4){
char cur_ascii = PrintTest.Fourth_Line[SelfTestInfo.CurrentIndex/12]; //每12行 对应一个ascii码
if(getFontModelData(cur_ascii,print_line_buf)){ //寻找字模里面的数据信息
for(int i=0; i<3; i++){
data->LineData[i] = print_line_buf[(SelfTestInfo.CurrentIndex%12)*3 + 2 - i];
}
}
}else{
for(int i=0; i<3; i++){
data->LineData[i] = 0x00;
}
}
SelfTestInfo.CurrentIndex++;
return true;
}
var_print_selftest_font.h //
/******************************************************************************
版权所有: 深圳**科技有限公司
文件名: var_pix_print.h
作者: wangdy
创建日期: 2023/2/25
描述: 打印头控制
其它:
修改历史: //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
序号 修改时间 修改人 修改内容
???? ????/??/?? ?????? 参考样式
******************************************************************************/
/*********************************防止多次编译*********************************/
#ifndef _VAR_PRINT_SELFTEST_FONT_H
#define _VAR_PRINT_SELFTEST_FONT_H
/************************************头文件************************************/
#include <stdint.h>
#include <stdbool.h>
#include "yc_timer.h"
#include "printerConfig.h"
/************************************宏定义************************************/
typedef struct{
uint8_t LineData[PRINTER_LINE_BYTES];
}SelfTestLineTypeDef;
typedef struct{
uint32_t CurrentIndex;
int size_1;
int size_2;
int size_3;
int size_4;
int max_size; //每12行 对应一个ascii码
}SelftTestInfoTypeDef;
typedef struct{
char FontIndex; //字节索引
uint8_t FontImg[36]; //字信息
}FontAscii_24X24_TypeDef;
typedef struct{
uint8_t First_Line[50];
uint8_t Second_Line[50];
uint8_t Third_Line[50];
uint8_t Fourth_Line[50];
}PrintTestBufTypeDef;
/************************************枚举************************************/
extern const SelfTestLineTypeDef SelfTestAllData[];
/************************************结构体************************************/
/**********************************可导出变量**********************************/
/***********************************函数实现***********************************/
void ResetPrintSelfTestData(PrintTestBufTypeDef test);
bool getPrintSelfTestData(SelfTestLineTypeDef *data);
#endif