marklife-label-printer-web-kit
Version:
JavaScript library for BLE label printing with Marklife printers
325 lines (288 loc) • 7.26 kB
JavaScript
"use strict";
const { Buffer } = require("buffer");
// ==========================================
// SECTION 1: PRINT CONTROL (Protocol 0x1F)
// ==========================================
/**
* Start Print Job
* Java: {0x1F, 0xC0, 0x01, 0x00}
* @returns {Buffer} The command buffer.
*/
function startPrintjob() {
return Buffer.from([0x1F, 0xC0, 0x01, 0x00]);
}
/**
* Stop Print Job
* Java: {0x1F, 0xC0, 0x01, 0x01}
* @returns {Buffer} The command buffer.
*/
function stopPrintjob() {
return Buffer.from([0x1F, 0xC0, 0x01, 0x01]);
}
/**
* Set Bluetooth Communication Type
* Java: setBTType -> {0x1F, 0xB2, 0x00}
* Should be called after connecting.
* @returns {Buffer} The command buffer.
*/
function setBTType() {
return Buffer.from([0x1F, 0xB2, 0x00]);
}
/**
* Automatic Position Adjustment (Feed/Retract)
* @param {number} mode
* 0x50: Feed/Cut (Align End)
* 0x51: Retract/Align (Align Start)
* @returns {Buffer} The command buffer.
*/
function adjustPositionAuto(mode) {
// Java: {0x1F, 0x11, model}
return Buffer.from([0x1F, 0x11, mode]);
}
/**
* Manual Position Adjustment (Specific Distance)
* @param {number} mode
* 0x00: Forward (pixels)
* 0x01: Forward (mm)
* 0x10: Backward (pixels)
* 0x11: Backward (mm)
* @param {number} distance Distance to move
* @returns {Buffer} The command buffer.
*/
function adjustPosition(mode, distance) {
// Java: {0x1F, 0x11, model, distH, distL}
const distH = Math.floor(distance / 256);
const distL = distance % 256;
return Buffer.from([0x1F, 0x11, mode, distH, distL]);
}
/**
* Printer Location (Search for Gap/BlackMark)
* @param {number} mode 0x10: None, 0x20: Gap (Label), 0x30: Black Mark
* @returns {Buffer} The command buffer.
*/
function printerLocation(mode) {
// Java: {0x1F, 0x12, model, 0x00}
return Buffer.from([0x1F, 0x12, mode, 0x00]);
}
/**
* Automatic Location (Calibrate)
* Java: {0x0C}
* @returns {Buffer} The command buffer.
*/
function printerLocationAuto() {
return Buffer.from([0x0C]);
}
// ==========================================
// SECTION 2: CONFIGURATION (Protocol 0x1F)
// ==========================================
/**
* Set Paper Type
* @param {number} type
* 0x10: Continuous
* 0x20: Label (Gap)
* 0x30: Black Mark
* @returns {Buffer} The command buffer.
*/
function setPaperType(type) {
// Java: {0x1F, 0x80, 0x01, type}
return Buffer.from([0x1F, 0x80, 0x01, type]);
}
/**
* Get Current Paper Type
* Java: {0x1F, 0x80, 0x00}
* @returns {Buffer} The command buffer.
*/
function getPaperType() {
return Buffer.from([0x1F, 0x80, 0x00]);
}
/**
* Set Print Density (Darkness)
* @param {number} level Level from 1 to 15 (Suggested 2-5)
* @returns {Buffer} The command buffer.
*/
function setDensity(level) {
// Java: {0x1F, 0x70, 0x01, level}
const safeLevel = Math.max(1, Math.min(level, 15));
return Buffer.from([0x1F, 0x70, 0x01, safeLevel]);
}
/**
* Get Current Density
* Java: {0x1F, 0x70, 0x00}
* @returns {Buffer} The command buffer.
*/
function getDensity() {
return Buffer.from([0x1F, 0x70, 0x00]);
}
/**
* Set Print Speed
* @param {number} level
* 0: Low
* 1: Medium
* 2: High
* @returns {Buffer} The command buffer.
*/
function setSpeed(level) {
// Java: {0x1F, 0x60, 0x01, level} (We use model=0x01 for set)
return Buffer.from([0x1F, 0x60, 0x01, level]);
}
/**
* Get Current Speed
* Java: {0x1F, 0x60, 0x00}
* @returns {Buffer} The command buffer.
*/
function getSpeed() {
return Buffer.from([0x1F, 0x60, 0x00]);
}
// ==========================================
// SECTION 3: UTILITIES AND MAINTENANCE
// ==========================================
/**
* Print Self-Test Page (Self Check)
* Java: {0x1F, 0x40}
* @returns {Buffer} The command buffer.
*/
function selfCheck() {
return Buffer.from([0x1F, 0x40]);
}
/**
* Reset Factory Data
* Java: {0x1F, 0x50, 0xBE}
* @returns {Buffer} The command buffer.
*/
function resetFactoryData() {
return Buffer.from([0x1F, 0x50, 0xBE]);
}
/**
* Learn Paper (Intelligent Calibration)
* Java: {0x1F, 0x30, 0x60}
* @returns {Buffer} The command buffer.
*/
function learnPaper() {
return Buffer.from([0x1F, 0x30, 0x60]);
}
/**
* Get Sensor Value
* @param {number} model
* 0x00: Temperature
* 0x01: Voltage
* 0x02: Reflection (Opto)
* @returns {Buffer} The command buffer.
*/
function getSensorValue(model) {
// Java: {0x1F, 0x30, model}
return Buffer.from([0x1F, 0x30, model]);
}
/**
* Enter BOOT Mode (Use with caution)
* Java: {0x1F, 0xA0, 0xBE, 0x66, 0x88}
* @returns {Buffer} The command buffer.
*/
function intoBoot() {
return Buffer.from([0x1F, 0xA0, 0xBE, 0x66, 0x88]);
}
// ==========================================
// SECTION 4: STATUS QUERIES (Protocol 0x10)
// ==========================================
/**
* Query General Status
* Java: {0x1F, 0x20, 0x00} (Note: Uses 0x1F, unlike others below)
* @returns {Buffer} The command buffer.
*/
function printerStatus() {
return Buffer.from([0x1F, 0x20, 0x00]);
}
/**
* Get Battery Level (%)
* Java: {0x10, 0xFF, 0x50, 0xF1}
* @returns {Buffer} The command buffer.
*/
function getPrinterBatteryVol() {
return Buffer.from([0x10, 0xFF, 0x50, 0xF1]);
}
/**
* Get Firmware Version
* Java: {0x10, 0xFF, 0x20, 0xF1}
* @returns {Buffer} The command buffer.
*/
function getPrinterVersion() {
return Buffer.from([0x10, 0xFF, 0x20, 0xF1]);
}
/**
* Get Serial Number (SN)
* Java: {0x10, 0xFF, 0x20, 0xF2}
* @returns {Buffer} The command buffer.
*/
function getPrinterSN() {
return Buffer.from([0x10, 0xFF, 0x20, 0xF2]);
}
/**
* Get Printer Model
* Java: {0x10, 0xFF, 0x20, 0xF0}
* @returns {Buffer} The command buffer.
*/
function getPrinterModel() {
return Buffer.from([0x10, 0xFF, 0x20, 0xF0]);
}
/**
* Get Bluetooth MAC Address
* Java: {0x10, 0xFF, 0x30, 0x11}
* @returns {Buffer} The command buffer.
*/
function getPrinterMac() {
return Buffer.from([0x10, 0xFF, 0x30, 0x11]);
}
// ==========================================
// SECTION 5: TIME CONFIGURATION (Protocol 0x10)
// ==========================================
/**
* Set Auto-Shutdown Time
* @param {number} minutes Minutes before shutdown
* @returns {Buffer} The command buffer.
*/
function setShutTime(minutes) {
// Java: {0x10, 0xFF, 0x12, timeH, timeL}
const timeH = Math.floor(minutes / 256);
const timeL = minutes % 256;
return Buffer.from([0x10, 0xFF, 0x12, timeH, timeL]);
}
/**
* Get Auto-Shutdown Time
* @returns {Buffer} The command buffer.
*/
function getShutTime() {
return Buffer.from([0x10, 0xFF, 0x13]);
}
// Export all functions
module.exports = {
// Control
startPrintjob,
stopPrintjob,
setBTType,
adjustPositionAuto,
adjustPosition,
printerLocation,
printerLocationAuto,
// Config
setPaperType,
getPaperType,
setDensity,
getDensity,
setSpeed,
getSpeed,
// Maintenance
selfCheck,
resetFactoryData,
learnPaper,
getSensorValue,
intoBoot,
// Queries
printerStatus,
getPrinterBatteryVol,
getPrinterVersion,
getPrinterSN,
getPrinterModel,
getPrinterMac,
// Time
setShutTime,
getShutTime
};