HID Scanner
🔦 Node.js Library for HID Code Scanner
Installation
# install as a cli
npm i @yelo/hid-scanner --build-from-source --driver=libusb -g
# or install as a dependency
npm i @yelo/hid-scanner --build-from-source --driver=libusb --save
Usage
CLI Usage
Basic
-
Execute:
hid-scanner
-
Scan QRCode with your scanner!
List devices
hid-scanner --devices
Use another hid device (with other product name)
hid-scanner <product-name>
e.g.:
hid-scanner "MY SUPERB HID PRODUCT"
More information
hid-scanner --help
Library Usage
const { Scanner } = require('@yelo/hid-scanner')
const scanner = new Scanner('SM-2D PRODUCT HID KBW')
/**
* or:
* const scanner = new Scanner(Scanner.devices()[0])
*/
let string = ''
scanner.on('key', (event) => {
const { name, char } = event
if (!char) {
console.log(`Press: ${name}`)
return
}
if (char === '\n') {
console.info(`Input: ${string}`)
string = ''
return
}
string += char
})
Key Event Struct
- name, the key name
- char, the character to be typed in
- raw, the raw HID Usage ID (HEX)
Development
Local installation for Linux
-
libsub
is requiredsudo apt install libusb-1.0-0 libusb-1.0-0-dev
see https://github.com/node-hid/node-hid/#compiling-from-source
-
Build from source
npm install --build-from-source --driver=libusb
-
Link to global
npm link
Testing
npm test
Generate HEX fixture for testing
./test/helpers/generate-hex.js <product-name>
e.g.:
./test/helpers/generate-hex.js > ./test/fixtures/0.hex.txt
Keymap
The keymap file is automatically generated with: https://source.android.com/devices/input/keyboard-devices.html#hid-keyboard-and-keypad-page-0x07
Generate keymap
npm run generate-keymap
or see all commands by executing:
./scripts/keymap-generator.js --help
References
- https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2
- https://source.android.com/devices/input/keyboard-devices.html
- https://github.com/node-hid/node-hid/issues/228
- https://www.usb.org/document-library/hid-usage-tables-112
License
MIT © yelo, 2019 - present