hackrf.js
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-rc1 • Public • Published

hackrf.js

JS port of libhackrf using usb. This module allows you to control HackRF devices (i.e. HackRF One, Jawbreaker, Rad1o) from Node.js.

Keep in mind this is mostly a direct API to the USB interface, so it's low level.

npm install hackrf.js

💡 Examples  •  📚 API reference

Usage

Use listDevices to list HackRF devices, or open to open the first device:

import { listDevices, open, UsbBoardId } from 'hackrf.js'
 
for await (const info of listDevices()) {
    console.log(`Found ${UsbBoardId[info.usbBoardId]}`)
    console.log(`Serial: ${info.serialNumber}`)
}
 
const device = await open()

To select among multiple devices, open can take a serial number or suffix:

const device = await open('41fa')

If successful, a HackrfDevice instance is returned. Then you'd usually configure the parameters:

await device.setSampleRate(20e6)  // 20 Msps
await device.setFrequency(2451e6) // tune to 2.451 GHz
await device.setAmpEnable(false)  // RF amplifier = off
// for RX only
await device.setLnaGain(8)        // IF gain = 8dB
await device.setVgaGain(12)       // BB gain = 12dB
// for TX only
await device.setTxVgaGain(8)      // IF gain = 8dB

Finally, use receive, sweepReceive or transmit to start streaming I/Q samples. These methods accept a callback that receives an Int8Array to fill (TX) or read (RX):

await device.receive(array => {
    // TODO: Process the samples in `array`
    // - Every 2 items form an I/Q sample
    // - int8 means the range is -128 to +127
})

The array's buffer may be reused (overwritten) later, so avoid storing any references to it. Instead, copy the data somewhere else. To request ending the stream, return false from the callback (or call device.requestStop() which has the same effect).

If you no longer need the device, you must call device.close() to release it (the GC will not do this automatically). This is not needed if the process is going to exit.

See the reference for the full API.

Readme

Keywords

Package Sidebar

Install

npm i hackrf.js

Weekly Downloads

0

Version

1.0.0-rc1

License

MIT

Unpacked Size

95.7 kB

Total Files

15

Last publish

Collaborators

  • mildsunrise