add lock mode for thermal printer when battery is low

This commit is contained in:
cuu 2021-05-29 17:14:43 +08:00
parent 4e06a6e213
commit ddd21b4d62
2 changed files with 33 additions and 12 deletions

View File

@ -121,9 +121,10 @@
#define ADC_FILE_PAT "/sys/bus/iio/devices/iio:device*/in_voltage_raw" #define ADC_FILE_PAT "/sys/bus/iio/devices/iio:device*/in_voltage_raw"
#define HEAT_TIME 100 // heat time,better not greater than 1000,300-1000 0-f #define HEAT_TIME 100 // heat time + (0-f)*46
#define BAT_CAP "/sys/class/power_supply/axp20x-battery/capacity" #define BAT_CAP "/sys/class/power_supply/axp20x-battery/capacity"
#define BAT_THRESHOLD 14 // %14 battery = low power
#define int16 uint16_t #define int16 uint16_t
#define int8 uint8_t #define int8 uint8_t

View File

@ -118,7 +118,7 @@ void init_printer(){
g_config.state = PRINT_STATE; g_config.state = PRINT_STATE;
g_config.img = &img_cache; g_config.img = &img_cache;
g_config.density = 0; g_config.density = 6;
g_config.feed_pitch = 2; g_config.feed_pitch = 2;
g_config.max_pts = 2; g_config.max_pts = 2;
@ -222,7 +222,7 @@ NULL
}; };
cfg->density = 4; cfg->density = 6;
k = (os120_width/8)*os120_height; k = (os120_width/8)*os120_height;
memcpy(cfg->img->cache,os120_bits,k); memcpy(cfg->img->cache,os120_bits,k);
@ -697,17 +697,31 @@ int bat_cap_to_pts(CONFIG*cfg,int bat) {
void print_lowpower(CONFIG*cfg) { void print_lowpower(CONFIG*cfg) {
int i; int i;
char*msg = "low power,please charge"; char*msg = "Low Power,please charge";
reset_cmd(); reset_cmd();
for(i=0;i<strlen(url);i++) { printer_set_font(cfg,4);
for(i=0;i<strlen(msg);i++) {
parse_serial_stream(cfg,msg[i]); parse_serial_stream(cfg,msg[i]);
} }
parse_serial_stream(cfg,10); parse_serial_stream(cfg,10);
reset_cmd(); reset_cmd();
for(i=0;i<strlen(msg);i++) {
parse_serial_stream(cfg,msg[i]);
}
parse_serial_stream(cfg,10);
reset_cmd();
feed_pitch1(128,cfg->orient);
printer_set_font(cfg,0);
PRINTF("%s\n",msg);
} }
int check_battery(CONFIG*cfg){ int check_battery(CONFIG*cfg){
@ -723,15 +737,17 @@ int check_battery(CONFIG*cfg){
if( bat_cap < 0){ if( bat_cap < 0){
cfg->max_pts = 1;//no battery ,so set to the slowest cfg->max_pts = 1;//no battery ,so set to the slowest
cfg->lock = 0;// unlock printer anyway cfg->lock = 0;// unlock printer anyway
PRINTF("no battery,slowest printing\n");
} }
if(bat_cap >=0 && bat_cap < 90) { if(bat_cap >=0 && bat_cap <= BAT_THRESHOLD) {
if(cfg->lock == 0) { if(cfg->lock == 0) {
print_lowpower(cfg); print_lowpower(cfg);
} }
cfg->lock =1; cfg->lock =1;
PRINTF("printer locked\n");
reset_cmd(); // clear all serial_cache reset_cmd(); // clear all serial_cache
}else { }else {
@ -744,6 +760,10 @@ int check_battery(CONFIG*cfg){
} }
if(cfg->lock == 1) {
reset_cmd();
}
return 0; return 0;
} }
@ -770,10 +790,10 @@ void loop() {
g_config.fp = fp; g_config.fp = fp;
while(1) while(1)
{ {
fread(readbuf,1, 1,fp);
check_battery(&g_config); check_battery(&g_config);
if(g_config.lock ==0) { if(g_config.lock ==0) {
fread(readbuf,1, 1,fp);
//printf("read %x",readbuf[0]); //printf("read %x",readbuf[0]);
if(g_config.state == PRINT_STATE) { if(g_config.state == PRINT_STATE) {
if(readbuf[0] == ASCII_TAB) { if(readbuf[0] == ASCII_TAB) {
@ -783,7 +803,7 @@ void loop() {
} else {//not a tab } else {//not a tab
parse_serial_stream(&g_config,readbuf[0]); parse_serial_stream(&g_config,readbuf[0]);
} }
} else { //cfg->state == PRINT_STATE } else { //g_config.state == PRINT_STATE
parse_serial_stream(&g_config,readbuf[0]); parse_serial_stream(&g_config,readbuf[0]);
} }
} }