From 167b2f520e648327e267cb49a70b628198b790e0 Mon Sep 17 00:00:00 2001 From: cuu Date: Sat, 21 May 2022 05:57:03 +0000 Subject: [PATCH 1/4] test thermal code --- .../thermal_printer/devterm_thermal_printer.c | 38 +++++++++---------- Code/thermal_printer/printer.c | 36 +++++++++++++----- Code/thermal_printer/printer.h | 4 +- 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/Code/thermal_printer/devterm_thermal_printer.c b/Code/thermal_printer/devterm_thermal_printer.c index a7fa540..201e30f 100644 --- a/Code/thermal_printer/devterm_thermal_printer.c +++ b/Code/thermal_printer/devterm_thermal_printer.c @@ -259,7 +259,7 @@ NULL cfg->img->revert_bits = 0; cfg->align = ALIGN_LEFT; - feed_pitch1(15, cfg->orient); + print_lines8(NULL,15, cfg->orient); cfg->align = ALIGN_CENTER; /* //selftest1 @@ -285,7 +285,7 @@ NULL } cfg->align = ALIGN_LEFT; - feed_pitch1(32, cfg->orient); + print_lines8(NULL,32, cfg->orient); //--------------------------------------------- @@ -308,7 +308,7 @@ NULL } parse_serial_stream(cfg, 10); // Serial.println(); - feed_pitch1(48, cfg->orient); + print_lines8(NULL,48, cfg->orient); } printer_set_font_mode(cfg, FONT_MODE_0); @@ -328,7 +328,7 @@ NULL } parse_serial_stream(cfg, 10); // Serial.println(); - feed_pitch1(48, cfg->orient); + print_lines8(NULL,48, cfg->orient); printer_set_font_mode(cfg, FONT_MODE_0); printer_set_font(cfg, 0); @@ -347,7 +347,7 @@ NULL } parse_serial_stream(cfg, 10); // Serial.println(); - feed_pitch1(28, cfg->orient); + print_lines8(NULL,28, cfg->orient); //------------------------------------------- @@ -368,7 +368,7 @@ NULL //------------------------------------------ label_print_f(cfg, "Firmware version:", 0.1, ""); - feed_pitch1(cfg->font->height, cfg->orient); + print_lines8(NULL,cfg->font->height, cfg->orient); //-------------------------------------------------------------- printer_set_font_mode(cfg, FONT_MODE_0); printer_set_font(cfg, 0); @@ -383,7 +383,7 @@ NULL //----------------------------------- // grid - /* + ENABLE_VH; for(ch = 0;ch <16;ch++){ if(ch%2==0) j = 0xff; @@ -401,9 +401,9 @@ NULL print_dots_8bit_split(cfg,(uint8_t*)buf,48); } } - */ + DISABLE_VH; //-------------------------------------------------------- - feed_pitch1(cfg->font->height * 2, cfg->orient); + print_lines8(NULL,cfg->font->height * 2, cfg->orient); } void printer_set_font_mode(CONFIG *cfg, int mode) { @@ -499,16 +499,16 @@ void parse_cmd(CONFIG *cfg, uint8_t *cmd, uint8_t cmdidx) { // ESC j n if (cmd[0] == ASCII_ESC && cmd[1] == 0x4a) { - if (print_lines8(cfg) == 0) { - feed_pitch1(cmd[2], cfg->orient); + if (print_lines8(cfg,0,0) == 0) { + print_lines8(NULL,cmd[2], cfg->orient); } reset_cmd(); } // ESC d n if (cmd[0] == ASCII_ESC && cmd[1] == 0x64) { - if (print_lines8(cfg) == 0) { - feed_pitch1(cmd[2] * cfg->font->height, cfg->orient); + if (print_lines8(cfg,0,0) == 0) { + print_lines8(NULL,cmd[2] * cfg->font->height, cfg->orient); } reset_cmd(); } @@ -712,14 +712,14 @@ void parse_serial_stream(CONFIG *cfg, uint8_t input_ch) { switch (input_ch) { case ASCII_LF: if (ser_cache.idx == 0) { - feed_pitch1(cfg->font->height, cfg->orient); + print_lines8(NULL,cfg->font->height, cfg->orient); } - print_lines8(cfg); + print_lines8(cfg,0,0); reset_cmd(); break; case ASCII_FF: - print_lines8(cfg); + print_lines8(cfg,0,0); reset_cmd(); break; case ASCII_DC2: @@ -777,9 +777,9 @@ void parse_serial_stream(CONFIG *cfg, uint8_t input_ch) { if (a >= MAX_DOTS) // got enough points to print { if (cfg->font->mode == FONT_MODE_1 && cfg->face != NULL ) { - print_lines_ft(cfg); + print_lines_ft(cfg,0,0); } else { - print_lines8(cfg); + print_lines8(cfg,0,0); } reset_cmd(); } @@ -840,7 +840,7 @@ void print_lowpower(CONFIG *cfg) { parse_serial_stream(cfg, 10); reset_cmd(); - feed_pitch1(128, cfg->orient); + print_lines8(NULL,128, cfg->orient); printer_set_font(cfg, 0); PRINTF("%s\n", msg); diff --git a/Code/thermal_printer/printer.c b/Code/thermal_printer/printer.c index dd2ca8a..75be66c 100644 --- a/Code/thermal_printer/printer.c +++ b/Code/thermal_printer/printer.c @@ -200,9 +200,11 @@ uint8_t feed_pitch1(uint64_t lines, uint8_t forward_backward) { restor &= 0x01; if (lines > 0) { + /* MOTOR_ENABLE1; MOTOR_ENABLE2; ENABLE_VH; + */ while (lines > 0) { motor_stepper_pos2(pos); /* 0.0625mm */ @@ -213,10 +215,11 @@ uint8_t feed_pitch1(uint64_t lines, uint8_t forward_backward) { lines--; } + /* MOTOR_DISABLE1; MOTOR_DISABLE2; DISABLE_VH; - + */ } else { return ERROR_FEED_PITCH; } @@ -268,7 +271,6 @@ void print_dots_8bit(CONFIG *cfg, uint8_t *Array, uint8_t characters, uint8_t i = 0, y = 0, MAX = MAXPIXELS; uint8_t blank; - ENABLE_VH; if (cfg->align == 0) { while ((i < characters) && (i < MAX)) { @@ -325,7 +327,6 @@ void print_dots_8bit(CONFIG *cfg, uint8_t *Array, uint8_t characters, feed_pitch1(feed_num, cfg->orient); - DISABLE_VH; return; } @@ -414,7 +415,8 @@ uint16_t get_serial_cache_font_width(CONFIG *cfg) { } // print with freetype font dots glyph -uint8_t print_lines_ft(CONFIG *cfg) { +uint8_t print_lines_ft(CONFIG *cfg,int lines,int bf) { + uint8_t i, j, k; int8_t w; uint8_t dot_line_data[MAXPIXELS]; @@ -427,7 +429,13 @@ uint8_t print_lines_ft(CONFIG *cfg) { int8_t left = ser_cache.idx; uint8_t rv; - + + if(cfg == NULL && lines > 0) { + ENABLE_VH; + feed_pitch1(lines,bf); + DISABLE_VH; + return 0; + } line_bits = cfg->margin.width; dot_line_idx = line_bits / 8; dot_line_bitsidx = line_bits % 8; @@ -587,10 +595,18 @@ uint8_t print_lines_ft(CONFIG *cfg) { } } -uint8_t print_lines8(CONFIG *cfg) { +uint8_t print_lines8(CONFIG *cfg,int lines,int backforward) { + + + if(lines > 0 && cfg == NULL ){ + ENABLE_VH; + feed_pitch1(lines,backforward); + DISABLE_VH; + return 0; + } if (cfg->font->mode == FONT_MODE_1 && cfg->face!=NULL) { - return print_lines_ft(cfg); + return print_lines_ft(cfg,0,0); } uint8_t i, j, k; int8_t w; @@ -635,6 +651,7 @@ uint8_t print_lines8(CONFIG *cfg) { lastj = 0; // DEBUG("left",left); + ENABLE_VH; while (left > 0) { i = lastidx; while (row < current_font.height) { @@ -737,7 +754,7 @@ uint8_t print_lines8(CONFIG *cfg) { // Serial.println("print ever"); free(data); - + DISABLE_VH; return rv; } @@ -755,7 +772,7 @@ uint8_t print_image8(CONFIG *cfg) { addr = 0; rv = IsPaper(); - + ENABLE_VH; while (y < height) { x = 0; while (x < cfg->img->width) { @@ -782,6 +799,7 @@ uint8_t print_image8(CONFIG *cfg) { cfg->img->num = 0; cfg->img->idx = 0; cfg->img->width = 0; + DISABLE_VH; return rv; } diff --git a/Code/thermal_printer/printer.h b/Code/thermal_printer/printer.h index b3c1269..7cc9344 100644 --- a/Code/thermal_printer/printer.h +++ b/Code/thermal_printer/printer.h @@ -31,8 +31,8 @@ uint16_t read_adc(char *); uint16_t temperature(); int glob_file(char *); uint16_t get_serial_cache_font_width(CONFIG *); -uint8_t print_lines_ft(CONFIG *); -uint8_t print_lines8(CONFIG *); +uint8_t print_lines_ft(CONFIG *,int ,int); +uint8_t print_lines8(CONFIG *,int,int); uint8_t invert_bit(uint8_t a); From c30acbcec518480aa750a32b2d700f09bf365e2d Mon Sep 17 00:00:00 2001 From: cuu Date: Sat, 21 May 2022 11:52:46 +0000 Subject: [PATCH 2/4] add ENABLE_VH in print_lines_ft --- Code/thermal_printer/devterm_thermal_printer.c | 2 +- Code/thermal_printer/printer.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Code/thermal_printer/devterm_thermal_printer.c b/Code/thermal_printer/devterm_thermal_printer.c index 201e30f..0a0909e 100644 --- a/Code/thermal_printer/devterm_thermal_printer.c +++ b/Code/thermal_printer/devterm_thermal_printer.c @@ -126,7 +126,7 @@ void init_printer() { } } - //default still FONT_MODE_0 + //default still FONT_MODE_0, comment out below 4 lines to enable unicode printing current_font.mode = FONT_MODE_0; current_font.width = 8; current_font.height = 16; diff --git a/Code/thermal_printer/printer.c b/Code/thermal_printer/printer.c index 75be66c..c568071 100644 --- a/Code/thermal_printer/printer.c +++ b/Code/thermal_printer/printer.c @@ -454,7 +454,7 @@ uint8_t print_lines_ft(CONFIG *cfg,int lines,int bf) { abs(cfg->face->descender) * current_font.height / cfg->face->units_per_EM; int dpx = 64; FT_Matrix matrix; - + ENABLE_VH; while (left > 0) { i = lastidx; row_cnt = 0; @@ -593,6 +593,8 @@ uint8_t print_lines_ft(CONFIG *cfg,int lines,int bf) { } */ } + DISABLE_VH; + } uint8_t print_lines8(CONFIG *cfg,int lines,int backforward) { @@ -604,8 +606,9 @@ uint8_t print_lines8(CONFIG *cfg,int lines,int backforward) { DISABLE_VH; return 0; } - + if (cfg->font->mode == FONT_MODE_1 && cfg->face!=NULL) { + return print_lines_ft(cfg,0,0); } uint8_t i, j, k; From 007ac586baf9825742f3daa2785636b60a7e1d41 Mon Sep 17 00:00:00 2001 From: cuu Date: Sat, 21 May 2022 23:56:29 +0000 Subject: [PATCH 3/4] IsPaper fix --- Code/thermal_printer/printer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/thermal_printer/printer.c b/Code/thermal_printer/printer.c index c568071..576dfbf 100644 --- a/Code/thermal_printer/printer.c +++ b/Code/thermal_printer/printer.c @@ -53,7 +53,6 @@ void clear_printer_buffer() { uint8_t IsPaper() { uint8_t status; uint8_t tmp; - return IS_PAPER; if (millis() - printer_vps_time > 10) { ENABLE_PEM; @@ -63,6 +62,7 @@ uint8_t IsPaper() { } else { status = NO_PAPER; PRINTF("Error:NO PAPER\n"); + DISABLE_VH; } DISABLE_PEM; @@ -72,6 +72,7 @@ uint8_t IsPaper() { if (tmp >= HOT) { PRINTF("Printer too Hot\n"); status |= HOT_PRINTER; + DISABLE_VH; } printer_temp_check = 0; @@ -132,7 +133,7 @@ uint8_t header_init() { */ printer_vps_time = 0; - printer_vps_last_status = IS_PAPER; + printer_vps_last_status = NO_PAPER; printer_temp_check = 0; glob_file(ADC_FILE_PAT); From a342f7532ee1bc5d5fdd5320cf62fb4abf2aa169 Mon Sep 17 00:00:00 2001 From: cuu Date: Mon, 23 May 2022 23:23:07 -0500 Subject: [PATCH 4/4] add accelerate for thermal printer --- Code/thermal_printer/config.h | 1 + Code/thermal_printer/printer.c | 32 +++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Code/thermal_printer/config.h b/Code/thermal_printer/config.h index c336ee4..61f431e 100644 --- a/Code/thermal_printer/config.h +++ b/Code/thermal_printer/config.h @@ -92,6 +92,7 @@ #define ENABLE_VH digitalWrite(VH_PIN, HIGH) #define DISABLE_VH digitalWrite(VH_PIN, LOW) +#define READ_VH digitalRead(VH_PIN) #define LATCH_ENABLE digitalWrite(LATCH_PIN, LOW) #define LATCH_DISABLE digitalWrite(LATCH_PIN, HIGH) diff --git a/Code/thermal_printer/printer.c b/Code/thermal_printer/printer.c index 576dfbf..cba76a9 100644 --- a/Code/thermal_printer/printer.c +++ b/Code/thermal_printer/printer.c @@ -26,6 +26,10 @@ static uint8_t printer_temp_check; static char adc_file_path[128]; +static unsigned int printer_last_pitch_time; +static uint8_t acc_time_idx; +static uint16_t acc_time[] = {5459,3459,2762,2314,2028,1828,1675,1553,1456,1374,1302,1242,1191,1144,1103,1065,1031,1000,970,940,910,880}; +#define ACCMAX 22 void printer_send_data8(uint8_t w) { /* digitalWrite(SPI1_NSS_PIN, LOW); // manually take CSN low for SPI_1 @@ -135,6 +139,8 @@ uint8_t header_init() { printer_vps_time = 0; printer_vps_last_status = NO_PAPER; printer_temp_check = 0; + printer_last_pitch_time = 0; + acc_time_idx = 0; glob_file(ADC_FILE_PAT); } @@ -159,7 +165,29 @@ void motor_stepper_pos2(uint8_t position) // forward { // position = 9 - position; // position = (position+1)/2; - delayMicroseconds(6700); + if(printer_last_pitch_time == 0) { + acc_time_idx = 0; + }else { + if( millis() - printer_last_pitch_time > 100 ) { + + if(READ_VH == LOW) { + acc_time_idx = 0; + }else{ + acc_time_idx ++; + if(acc_time_idx > ACCMAX-1) { + acc_time_idx = ACCMAX-1; + } + } + } else { + acc_time_idx ++; + if(acc_time_idx > ACCMAX-1) { + acc_time_idx = ACCMAX-1; + } + } + } + + printer_last_pitch_time = millis(); + delayMicroseconds(acc_time[acc_time_idx]); switch (position) { case 0: digitalWrite(PA_PIN, LOW); @@ -204,7 +232,6 @@ uint8_t feed_pitch1(uint64_t lines, uint8_t forward_backward) { /* MOTOR_ENABLE1; MOTOR_ENABLE2; - ENABLE_VH; */ while (lines > 0) { motor_stepper_pos2(pos); /* 0.0625mm */ @@ -219,7 +246,6 @@ uint8_t feed_pitch1(uint64_t lines, uint8_t forward_backward) { /* MOTOR_DISABLE1; MOTOR_DISABLE2; - DISABLE_VH; */ } else { return ERROR_FEED_PITCH;