UNPKG

sunmi-device-sdk

Version:

JavaScript SDK for Sunmi card readers and printers

225 lines (181 loc) 5.84 kB
/** * Basic Usage Examples for Sunmi Device SDK * * This can be used in Cordova, React Native, or Capacitor apps */ // Import the SDK const { SunmiCardReader, SunmiPrinter, PrintAlignment } = require('@sunmi/device-sdk'); // ============================================================ // CARD READER EXAMPLES // ============================================================ async function readMifareCard() { try { console.log('Waiting for card...'); // Start reading - supports multiple card types const card = await SunmiCardReader.startReadCard(['mifare', 'ic']); console.log('Card detected!', card); // For Mifare cards, read specific blocks if (card.cardType === 'mifare') { // Authenticate with default key const block = 4; const defaultKey = 'FFFFFFFFFFFF'; await SunmiCardReader.authMifare(defaultKey, 'A', block); console.log('Authentication successful'); // Read the block const data = await SunmiCardReader.readBlockMifare(block); console.log('Block data:', data); } } catch (error) { console.error('Card reading failed:', error); } } async function writeMifareCard() { try { // Wait for card await SunmiCardReader.startReadCard(['mifare']); // Authenticate await SunmiCardReader.authMifare('FFFFFFFFFFFF', 'A', 4); // Write 16 bytes (hex string) const dataToWrite = '48656C6C6F2053756E6D692100000000'; // "Hello Sunmi!" + padding await SunmiCardReader.writeBlockMifare(4, dataToWrite); console.log('Write successful!'); } catch (error) { console.error('Write failed:', error); } } // ============================================================ // PRINTER EXAMPLES // ============================================================ async function printSimpleReceipt() { try { // Initialize printer await SunmiPrinter.init(); // Check if printer exists const hasPrinter = await SunmiPrinter.hasPrinter(); if (!hasPrinter) { console.error('No printer found!'); return; } // Print header await SunmiPrinter.setAlignment(1); // CENTER await SunmiPrinter.setFontSize(28); await SunmiPrinter.printText('MY STORE'); await SunmiPrinter.setFontSize(20); await SunmiPrinter.printText('123 Main Street'); await SunmiPrinter.feedPaper(1); // Print items await SunmiPrinter.setAlignment(0); // LEFT await SunmiPrinter.printColumns( ['Coffee', '3.50'], [20, 10], [0, 2] // LEFT, RIGHT ); await SunmiPrinter.printColumns( ['Croissant', '2.50'], [20, 10], [0, 2] ); // Print total await SunmiPrinter.feedPaper(1); await SunmiPrinter.setFontSize(24); await SunmiPrinter.printColumns( ['TOTAL', '$6.00'], [20, 10], [0, 2] ); // Feed paper and finish await SunmiPrinter.feedPaper(3); console.log('Receipt printed!'); } catch (error) { console.error('Print failed:', error); } } async function printQRCodeTicket() { try { await SunmiPrinter.init(); // Center align await SunmiPrinter.setAlignment(1); // Title await SunmiPrinter.setFontSize(28); await SunmiPrinter.printText('EVENT TICKET'); await SunmiPrinter.feedPaper(1); // Event details await SunmiPrinter.setFontSize(20); await SunmiPrinter.printText('Concert Name'); await SunmiPrinter.printText('Date: Oct 10, 2025'); await SunmiPrinter.feedPaper(1); // QR code for ticket validation await SunmiPrinter.printQRCode( 'TICKET-ABC123-EVENT456', 8, // module size 1 // error correction level ); await SunmiPrinter.feedPaper(2); await SunmiPrinter.printText('Scan at entrance'); await SunmiPrinter.feedPaper(3); console.log('Ticket printed!'); } catch (error) { console.error('Print failed:', error); } } async function printWithLogo() { try { await SunmiPrinter.init(); // Print logo (base64 encoded image) const logoBase64 = 'iVBORw0KGgoAAAANS...'; // Your logo in base64 await SunmiPrinter.setAlignment(1); // CENTER await SunmiPrinter.printBitmap(logoBase64, 200, 100); await SunmiPrinter.feedPaper(1); await SunmiPrinter.printText('Welcome!'); await SunmiPrinter.feedPaper(3); } catch (error) { console.error('Print failed:', error); } } async function getPrinterInfo() { try { await SunmiPrinter.init(); const serial = await SunmiPrinter.getSerialNumber(); const version = await SunmiPrinter.getVersion(); console.log('Printer Serial:', serial); console.log('Printer Version:', version); } catch (error) { console.error('Failed to get printer info:', error); } } // ============================================================ // MONITORING PRINTER STATUS // ============================================================ function monitorPrinterStatus() { SunmiPrinter.startStatusListener((status) => { console.log('Printer status changed:', status); switch(status) { case 'OUT_OF_PAPER': alert('Please add paper!'); break; case 'COVER_OPEN': alert('Please close printer cover'); break; case 'ERROR': alert('Printer error!'); break; case 'NORMAL': console.log('Printer is ready'); break; } }); // Stop listening after some time setTimeout(() => { SunmiPrinter.stopStatusListener(); }, 60000); // Stop after 1 minute } // Export functions for use in your app module.exports = { readMifareCard, writeMifareCard, printSimpleReceipt, printQRCodeTicket, printWithLogo, getPrinterInfo, monitorPrinterStatus };