mirror of
https://github.com/MultiMote/niimbluelib.git
synced 2025-03-16 19:41:01 +03:00
Add B21 print task
This commit is contained in:
parent
8514380849
commit
517d08b820
@ -351,7 +351,7 @@ export class Abstraction {
|
||||
await this.send(PacketGenerator.printerReset());
|
||||
}
|
||||
|
||||
public async waitUntilPrintFinishedV1(pagesToPrint: number, timeoutMs: number = 5_000): Promise<void> {
|
||||
public async waitUntilPrintFinishedByPageIndex(pagesToPrint: number, timeoutMs: number = 5_000): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const listener = (evt: PacketReceivedEvent) => {
|
||||
if (evt.packet.command === ResponseCommandId.In_PrinterPageIndex) {
|
||||
@ -393,7 +393,7 @@ export class Abstraction {
|
||||
* @param pagesToPrint Total pages to print.
|
||||
* @param pollIntervalMs Poll interval in milliseconds.
|
||||
*/
|
||||
public async waitUntilPrintFinishedV2(pagesToPrint: number, pollIntervalMs: number = 300): Promise<void> {
|
||||
public async waitUntilPrintFinishedByStatusPoll(pagesToPrint: number, pollIntervalMs: number = 300): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
this.client.dispatchTypedEvent("printprogress", new PrintProgressEvent(1, pagesToPrint, 0, 0));
|
||||
|
||||
@ -418,8 +418,44 @@ export class Abstraction {
|
||||
});
|
||||
}
|
||||
|
||||
public async printEnd(): Promise<void> {
|
||||
await this.send(PacketGenerator.printEnd());
|
||||
/**
|
||||
* Poll printer every {@link pollIntervalMs} and resolve when printer pages equals {@link pagesToPrint}.
|
||||
*
|
||||
* printprogress event is firing during this process.
|
||||
*
|
||||
* PrintEnd call is not needed after this functions is done running.
|
||||
*
|
||||
* @param pagesToPrint Total pages to print.
|
||||
* @param pollIntervalMs Poll interval in milliseconds.
|
||||
*/
|
||||
public async waitUntilPrintFinishedByPrintEndPoll(pagesToPrint: number, pollIntervalMs: number = 500): Promise<void> {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
this.client.dispatchTypedEvent("printprogress", new PrintProgressEvent(1, pagesToPrint, 0, 0));
|
||||
|
||||
this.statusPollTimer = setInterval(() => {
|
||||
this.printEnd()
|
||||
.then((printEndDone: boolean) => {
|
||||
if(!printEndDone) {
|
||||
this.client.dispatchTypedEvent("printprogress", new PrintProgressEvent(1, pagesToPrint, 0, 0));
|
||||
} else {
|
||||
this.client.dispatchTypedEvent("printprogress", new PrintProgressEvent(pagesToPrint, pagesToPrint, 100, 100));
|
||||
clearInterval(this.statusPollTimer);
|
||||
resolve();
|
||||
}
|
||||
})
|
||||
.catch((e: unknown) => {
|
||||
clearInterval(this.statusPollTimer);
|
||||
reject(e as Error);
|
||||
});
|
||||
}, pollIntervalMs ?? 500);
|
||||
});
|
||||
}
|
||||
|
||||
/** False returned when printEnd refused */
|
||||
public async printEnd(): Promise<boolean> {
|
||||
const response = await this.send(PacketGenerator.printEnd());
|
||||
Validators.u8ArrayLengthEquals(response.data, 1);
|
||||
return response.data[0] === 1;
|
||||
}
|
||||
|
||||
public newPrintTask(name: PrintTaskName, options?: PrintOptions): AbstractPrintTask {
|
||||
|
@ -23,7 +23,7 @@ export class B1PrintTask extends AbstractPrintTask {
|
||||
}
|
||||
|
||||
override waitForFinished(): Promise<void> {
|
||||
return this.abstraction.waitUntilPrintFinishedV2(
|
||||
return this.abstraction.waitUntilPrintFinishedByStatusPoll(
|
||||
this.printOptions.totalPages ?? 1,
|
||||
this.printOptions.statusPollIntervalMs
|
||||
);
|
||||
|
33
src/print_tasks/B21V1PrintTask.ts
Normal file
33
src/print_tasks/B21V1PrintTask.ts
Normal file
@ -0,0 +1,33 @@
|
||||
import { EncodedImage } from "../image_encoder";
|
||||
import { LabelType, PacketGenerator } from "../packets";
|
||||
import { AbstractPrintTask } from "./AbstractPrintTask";
|
||||
|
||||
export class B21V1PrintTask extends AbstractPrintTask {
|
||||
override printInit(): Promise<void> {
|
||||
return this.abstraction.sendAll([
|
||||
PacketGenerator.setDensity(this.printOptions.density ?? 2),
|
||||
PacketGenerator.setLabelType(this.printOptions.labelType ?? LabelType.WithGaps),
|
||||
PacketGenerator.printStart(),
|
||||
]);
|
||||
}
|
||||
|
||||
override async printPage(image: EncodedImage, quantity?: number): Promise<void> {
|
||||
this.checkAddPage(quantity ?? 1);
|
||||
|
||||
for (let i = 0; i < (quantity ?? 1); i++) {
|
||||
await this.abstraction.sendAll([
|
||||
PacketGenerator.pageStart(),
|
||||
PacketGenerator.setPageSizeV2(image.rows, image.cols),
|
||||
...PacketGenerator.writeImageData(image, this.printheadPixels()),
|
||||
PacketGenerator.pageEnd(),
|
||||
], this.printOptions.pageTimeoutMs);
|
||||
}
|
||||
}
|
||||
|
||||
override waitForFinished(): Promise<void> {
|
||||
return this.abstraction.waitUntilPrintFinishedByPrintEndPoll(
|
||||
this.printOptions.totalPages ?? 1,
|
||||
this.printOptions.statusPollIntervalMs
|
||||
);
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ export class D110PrintTask extends AbstractPrintTask {
|
||||
}
|
||||
|
||||
override waitForFinished(): Promise<void> {
|
||||
return this.abstraction.waitUntilPrintFinishedV2(
|
||||
return this.abstraction.waitUntilPrintFinishedByStatusPoll(
|
||||
this.printOptions.totalPages ?? 1,
|
||||
this.printOptions.statusPollIntervalMs
|
||||
);
|
||||
|
@ -25,7 +25,7 @@ export class OldD11PrintTask extends AbstractPrintTask {
|
||||
}
|
||||
|
||||
override waitForFinished(): Promise<void> {
|
||||
return this.abstraction.waitUntilPrintFinishedV1(
|
||||
return this.abstraction.waitUntilPrintFinishedByPageIndex(
|
||||
this.printOptions.totalPages ?? 1,
|
||||
this.printOptions.statusTimeoutMs
|
||||
);
|
||||
|
@ -23,7 +23,7 @@ export class V5PrintTask extends AbstractPrintTask {
|
||||
}
|
||||
|
||||
override waitForFinished(): Promise<void> {
|
||||
return this.abstraction.waitUntilPrintFinishedV2(
|
||||
return this.abstraction.waitUntilPrintFinishedByStatusPoll(
|
||||
this.printOptions.totalPages ?? 1,
|
||||
this.printOptions.statusPollIntervalMs
|
||||
);
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { PrinterModel as M } from "../printer_models";
|
||||
import { B1PrintTask } from "./B1PrintTask";
|
||||
import { B21V1PrintTask } from "./B21V1PrintTask";
|
||||
import { D110PrintTask } from "./D110PrintTask";
|
||||
import { OldD11PrintTask } from "./OldD11PrintTask";
|
||||
import { V5PrintTask } from "./V5PrintTask";
|
||||
@ -8,6 +9,7 @@ export const printTasks = {
|
||||
D11_OLD: OldD11PrintTask,
|
||||
D110: D110PrintTask,
|
||||
B1: B1PrintTask,
|
||||
B21_V1: B21V1PrintTask,
|
||||
V5: V5PrintTask,
|
||||
};
|
||||
|
||||
@ -16,7 +18,8 @@ export type PrintTaskName = keyof typeof printTasks;
|
||||
export const printTaskNames = Object.keys(printTasks) as PrintTaskName[];
|
||||
|
||||
export const modelPrintTasks: Partial<Record<PrintTaskName, M[]>> = {
|
||||
D11_OLD: [M.D11, M.D11S, M.B21_L2B, M.B21, M.B21_PRO, M.B21_C2B],
|
||||
D11_OLD: [M.D11, M.D11S],
|
||||
B21_V1: [M.B21, M.B21_L2B, M.B21_C2B],
|
||||
D110: [M.B21S, M.B21S_C2B, M.D110],
|
||||
B1: [M.D11_H, M.D110_M, M.B1],
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user