sunmi-device-sdk
Version:
JavaScript SDK for Sunmi card readers and printers
225 lines (181 loc) • 5.84 kB
JavaScript
/**
* 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
};