UNPKG

marklife-label-printer-web-kit

Version:

JavaScript library for BLE label printing with Marklife printers

325 lines (288 loc) 7.26 kB
"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 };