Browse Source

Merge branch 'thermal_fix1'

cuu 1 year ago
parent
commit
25d70e43f9

+ 1 - 0
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)

+ 20 - 20
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;
@@ -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);

+ 63 - 15
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
@@ -53,7 +57,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 +66,7 @@ uint8_t IsPaper() {
     } else {
       status = NO_PAPER;
       PRINTF("Error:NO PAPER\n");
+      DISABLE_VH;
     }
     DISABLE_PEM;
 
@@ -72,6 +76,7 @@ uint8_t IsPaper() {
       if (tmp >= HOT) {
         PRINTF("Printer too Hot\n");
         status |= HOT_PRINTER;
+	DISABLE_VH;
       }
 
       printer_temp_check = 0;
@@ -132,8 +137,10 @@ uint8_t header_init() {
   */
 
   printer_vps_time = 0;
-  printer_vps_last_status = IS_PAPER;
+  printer_vps_last_status = NO_PAPER;
   printer_temp_check = 0;
+  printer_last_pitch_time = 0;
+  acc_time_idx  = 0;
 
   glob_file(ADC_FILE_PAT);
 }
@@ -158,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);
@@ -200,9 +229,10 @@ 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 +243,10 @@ 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 +298,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 +354,6 @@ void print_dots_8bit(CONFIG *cfg, uint8_t *Array, uint8_t characters,
 
   feed_pitch1(feed_num, cfg->orient);
 
-  DISABLE_VH;
 
   return;
 }
@@ -414,7 +442,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 +456,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;
@@ -446,7 +481,7 @@ uint8_t print_lines_ft(CONFIG *cfg) {
       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;
@@ -585,12 +620,23 @@ uint8_t print_lines_ft(CONFIG *cfg) {
     }
     */
   }
+  DISABLE_VH;
+
 }
 
-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 +681,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 +784,7 @@ uint8_t print_lines8(CONFIG *cfg) {
   // Serial.println("print ever");
 
   free(data);
-
+  DISABLE_VH;
   return rv;
 }
 
@@ -755,7 +802,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 +829,7 @@ uint8_t print_image8(CONFIG *cfg) {
   cfg->img->num = 0;
   cfg->img->idx = 0;
   cfg->img->width = 0;
+  DISABLE_VH;
 
   return rv;
 }

+ 2 - 2
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);