rfid-silion-compat
v0.1.0
Published
WebAssembly bindings for the Silion RFID reader API (Web Serial).
Readme
rfid-silion-compat (JavaScript/TypeScript)
WebAssembly bindings for the Silion RFID reader API (Web Serial).
This package exposes a high-level class, SilionReader, for browser apps.
Install
npm install rfid-silion-compatRuntime Requirements
- A browser with Web Serial support
- A user gesture (for example, button click) before calling
SilionReader.connect(...) - HTTPS (or
http://localhost) because Web Serial requires a secure context - Browser runtime only (not a Node.js runtime package)
WebAssembly Deployment Considerations
- Always call and await
init()before creating a reader instance. - Ensure the
.wasmasset is copied and served as a static file by your bundler/deployment. - Serve
.wasmfiles with MIME typeapplication/wasm. - In SSR frameworks (for example, Next.js), load and use this package only on the client side.
- If you use a strict CSP, allow the wasm fetch path and any wasm execution settings required by your target browsers.
Quick Start
import init, { SilionReader, bytesToHex } from "rfid-silion-compat";
await init();
// Must be called from a user gesture handler in browsers.
const reader = await SilionReader.connect(115200);
const version = await reader.getVersion();
console.log("Firmware:", version.firmwareVersion);
const tag = await reader.singleTagInventory(
1000,
{ type: "disabled" },
{ rssi: true, antennaId: true }
);
console.log("EPC:", bytesToHex(tag.epcId));Main API
SilionReader.connect(baudRate: number): Promise<SilionReader>reader.getVersion(): Promise<any>reader.getCurrentRegion(): Promise<{ name: string }>reader.setCurrentRegion({ name }): Promise<void>reader.singleTagInventory(timeoutMs, selectOption, metadataFlags?): Promise<any>reader.readTagData(timeoutMs, selectOption, metadataFlags, memBank, readAddressWords, wordCount): Promise<any>reader.startInventory(embeddedCommand?): Promise<void>reader.recvInventoryMessage(): Promise<any>reader.stopInventory(): Promise<void>reader.close(): Promise<void>
Helper exports:
bytesToHex(data: Uint8Array | number[]): stringarrayToBytes(values: number[]): Uint8Array
Typed Input Shapes
The generated typings include these input types:
MetadataFlagsInputRegionCodeInput({ name: "NorthAmerica" | "China1" | "Europe" | "China2" | "FullFrequencyBand" })MemBankInput({ name: "Reserved" | "Epc" | "Tid" | "User" })SelectOption
SelectOption is a discriminated union using type:
type SelectOption =
| { type: "disabled" }
| { type: "passwordOnly" }
| { type: "epc"; selectLengthBits: number; selectData: Uint8Array | number[]; invert: boolean }
| { type: "tid"; selectAddress: number; selectLengthBits: number; selectData: Uint8Array | number[]; invert: boolean }
| { type: "userMemory"; selectAddress: number; selectLengthBits: number; selectData: Uint8Array | number[]; invert: boolean }
| { type: "epcBank"; selectAddress: number; selectLengthBits: number; selectData: Uint8Array | number[]; invert: boolean };Notes
startInventory()switches the reader into async inventory mode.- While inventory is running, use
recvInventoryMessage()to consume pushed messages. - Call
stopInventory()before command-mode operations that require normal transact flow. close()will stop inventory first if needed.
Source
See the Rust bindings implementation in src/web_bindings.rs in the main repository.
License
Licensed under either of:
- MIT license (LICENSE-MIT)
- Apache License, Version 2.0 (LICENSE-APACHE)
