mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-12 10:18:49 +01:00
Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
a3e3e94949
@ -167,12 +167,13 @@
|
||||
#define PRINT_STATE 0
|
||||
#define ESC_STATE 1
|
||||
#define GET_IMAGE 2
|
||||
#define GET_GRAY_IMAGE 3
|
||||
|
||||
#define ALIGN_LEFT 0
|
||||
#define ALIGN_CENTER 1
|
||||
#define ALIGN_RIGHT 2
|
||||
|
||||
#define IMAGE_MAX 9224
|
||||
#define IMAGE_MAX (9224*64)
|
||||
|
||||
#define BITS8 8
|
||||
|
||||
|
||||
@ -683,6 +683,23 @@ void parse_cmd(CONFIG *cfg, uint8_t *cmd, uint8_t cmdidx) {
|
||||
cmd_idx = 0;
|
||||
ser_cache.idx = 0;
|
||||
}
|
||||
// GS v 1 p wL wH hL hH d1…dk
|
||||
if (cmd[0] == ASCII_GS && cmd[1] == 118 && cmd[2] == 49) {
|
||||
uint16_t width = cmd[4] + cmd[5] * 256;
|
||||
uint16_t height = cmd[6] + cmd[7] * 256;
|
||||
uint16_t k;
|
||||
k = width * height;
|
||||
if (k <= IMAGE_MAX) {
|
||||
cfg->state = GET_GRAY_IMAGE;
|
||||
cfg->img->num = k;
|
||||
cfg->img->idx = 0;
|
||||
cfg->img->width = width;
|
||||
cfg->img->need_print = 1;
|
||||
}
|
||||
// do not reset_cmd()
|
||||
cmd_idx = 0;
|
||||
ser_cache.idx = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -700,6 +717,16 @@ void parse_serial_stream(CONFIG *cfg, uint8_t input_ch) {
|
||||
reset_cmd();
|
||||
cfg->state = PRINT_STATE;
|
||||
}
|
||||
} else if (cfg->state == GET_GRAY_IMAGE) {
|
||||
cfg->img->cache[cfg->img->idx] = input_ch;
|
||||
cfg->img->idx++;
|
||||
if (cfg->img->idx >= cfg->img->num) { // image full
|
||||
if (cfg->img->need_print == 1) {
|
||||
print_gray_image8(cfg);
|
||||
}
|
||||
reset_cmd();
|
||||
cfg->state = PRINT_STATE;
|
||||
}
|
||||
} else if (cfg->state == ESC_STATE) {
|
||||
cmd[cmd_idx] = input_ch;
|
||||
cmd_idx++;
|
||||
|
||||
@ -340,7 +340,7 @@ void print_dots_8bit(CONFIG *cfg, uint8_t *Array, uint8_t characters,
|
||||
|
||||
while (y < STB_NUMBER) {
|
||||
|
||||
while (i < 10) {
|
||||
while (i < cfg->density) {
|
||||
|
||||
digitalWrite(STBx[y], HIGH);
|
||||
delayus(HEAT_TIME + cfg->density * 46);
|
||||
@ -837,6 +837,68 @@ uint8_t print_image8(CONFIG *cfg) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
uint8_t print_gray_image8(CONFIG *cfg) {
|
||||
|
||||
uint16_t height;
|
||||
uint16_t x, y, addr;
|
||||
|
||||
uint8_t rv;
|
||||
uint8_t LinePixels[MAXPIXELS];
|
||||
|
||||
uint8_t maxchars = PRINTER_BITS / 8;
|
||||
height = cfg->img->num / cfg->img->width;
|
||||
y = 0;
|
||||
addr = 0;
|
||||
// gray print uses 4 colors with following convention
|
||||
// 3N+0th line has cfg->density/4
|
||||
// 3N+1th line has cfg->density/2
|
||||
// 3N+2th line has cfg->density
|
||||
// white pixels should be unset in all 3 lines
|
||||
uint8_t density = cfg->density;
|
||||
uint8_t feed_pitch = cfg->feed_pitch;
|
||||
rv = IsPaper();
|
||||
ENABLE_VH;
|
||||
while (y < height) {
|
||||
x = 0;
|
||||
while (x < cfg->img->width) {
|
||||
addr = x + y * cfg->img->width;
|
||||
|
||||
if (cfg->img->revert_bits > 0) // LSB
|
||||
LinePixels[x] = invert_bit(cfg->img->cache[addr]);
|
||||
else
|
||||
LinePixels[x] = cfg->img->cache[addr];
|
||||
|
||||
x++;
|
||||
}
|
||||
rv = IsPaper();
|
||||
if (rv == IS_PAPER) {
|
||||
if (y % 3 == 0) {
|
||||
cfg->density = density / 4;
|
||||
cfg->feed_pitch = 0;
|
||||
}
|
||||
if (y % 3 == 1) {
|
||||
cfg->density = density / 2;
|
||||
cfg->feed_pitch = 0;
|
||||
}
|
||||
if (y % 3 == 2) {
|
||||
cfg->density = density;
|
||||
cfg->feed_pitch = feed_pitch;
|
||||
}
|
||||
print_dots_8bit_split(cfg, LinePixels, x);
|
||||
delayus(HEAT_TIME*2);
|
||||
}
|
||||
y++;
|
||||
}
|
||||
cfg->img->need_print = 0;
|
||||
|
||||
cfg->img->num = 0;
|
||||
cfg->img->idx = 0;
|
||||
cfg->img->width = 0;
|
||||
DISABLE_VH;
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
void print_cut_line(CONFIG *cfg) {
|
||||
uint8_t bs, i;
|
||||
|
||||
|
||||
@ -37,6 +37,7 @@ uint8_t print_lines8(CONFIG *,int,int);
|
||||
uint8_t invert_bit(uint8_t a);
|
||||
|
||||
uint8_t print_image8(CONFIG *);
|
||||
uint8_t print_gray_image8(CONFIG *);
|
||||
void print_cut_line(CONFIG *);
|
||||
|
||||
void printer_set_font_mode(CONFIG *cfg, int);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user