Options
All
  • Public
  • Public/Protected
  • All
Menu

Class HackrfDevice

Reference to an open HackRF device

This is mostly a direct API to the USB interface. Call close when no longer needed.

Keep in mind some methods require a certain API version to be implemented by your device's firmware; this is noted in their documentation, and an USB_API_VERSION error will be thrown if you attempt to use them. usbApiVersion returns the version implemented by the firmware. It's strongly recommended to upgrade your device's firmware to the latest version to avoid problems and glitches.

This API does strict validation of passed integers (they should be integers and be in-range). Gains, in particular, will be rejected instead of rounded down to the nearest step.

Hierarchy

  • HackrfDevice

Index

Accessors

  • get open(): boolean
  • get streaming(): boolean
  • get usbApiVersion(): number
  • Version of the USB API implemented by the device's firmware

    In 0xAABB form (AA = major, BB = minor).

    Returns number

Device info Methods

  • getBoardPartIdSerialNo(): Promise<{ partId: [number, number]; serialNo: [number, number, number, number] }>
  • Returns Promise<{ partId: [number, number]; serialNo: [number, number, number, number] }>

  • getVersionString(): Promise<string>

Flash & CPLD Methods

  • cpld_write(data: Buffer, chunkSize?: number): Promise<void>
  • Put the radio in CPLD firmware upgrade mode and write the payload

    This throws if there's another stream in progress.

    The device will need to be reset after this.

    Parameters

    • data: Buffer
    • chunkSize: number = 512

    Returns Promise<void>

  • spiflash_clearStatus(): Promise<void>
  • spiflash_erase(): Promise<void>
  • spiflash_getStatus(): Promise<Buffer>
  • spiflash_read(address: number, length: number): Promise<Buffer>
  • spiflash_write(address: number, data: Buffer): Promise<void>

IC Methods

  • max2837_read(register: number): Promise<number>
  • max2837_write(register: number, value: number): Promise<void>
  • rffc5071_read(register: number): Promise<number>
  • rffc5071_write(register: number, value: number): Promise<void>
  • si5351c_read(register: number): Promise<number>
  • si5351c_write(register: number, value: number): Promise<void>

Main Methods

  • close(): Promise<void>
  • Release resources and close the USB device

    Unless the device is used until process exit, this must be called once when it's no longer needed.

    There must be no pending promises or an active stream when calling this. After return, no more methods should be called on this object.

    Returns Promise<void>

  • receive(callback: PollCallback, options?: StreamOptions): Promise<void>
  • Put the radio in RX mode and stream I/Q samples

    The supplied callback will be regularly called with an Int8Array buffer. Every two values of the buffer form an I/Q sample. The buffer may be overwritten later, so avoid storing any reference to it; instead make a copy of the data if needed.

    To request ending the stream, return false from the callback or use requestStop (the callback will no longer be called). Any transfer / callback error rejects the promise and cancels all transfers. The promise won't settle until all transfers are finished, regardless of whether the stream is ended or errored.

    This throws if there's another stream in progress.

    Parameters

    Returns Promise<void>

  • requestStop(): void
  • Requests stopping the active stream (if there is one)

    Calling this has the same effect as returning false the next time the callback gets called. Note that the stream doesn't finish instantly, you still need to wait for the promise to end. This is merely a convenience function.

    Returns void

  • reset(): Promise<void>
  • sweepReceive(callback: PollCallback, options?: StreamOptions): Promise<void>
  • Put the radio in sweep RX mode and stream I/Q samples

    Like receive, but with frequency sweep active. You should call initSweep first.

    Requires USB API 1.4.

    Parameters

    Returns Promise<void>

  • transmit(callback: PollCallback, options?: StreamOptions): Promise<void>
  • Put the radio in TX mode and stream I/Q samples

    The supplied callback will be regularly called with an Int8Array buffer to fill before return. Every two values of the buffer form an I/Q sample. Different buffers may be passed or reused, so avoid storing references to them after return.

    To request ending the stream, return false from the callback or use requestStop (the callback will no longer be called and the current buffer will not be transmitted). Any transfer / callback error rejects the promise and cancels all transfers. The promise won't settle until all transfers are finished, regardless of whether the stream is ended or errored.

    This throws if there's another stream in progress.

    Parameters

    Returns Promise<void>

  • Open the passed USB device

    This function does not validate the device, it's recommended to use the open module function instead of this function directly.

    Parameters

    • device: Device

      USB device (must not be open)

    Returns Promise<HackrfDevice>

Opera Cake Methods

  • getOperacakeBoards(): Promise<number[]>
  • Retrieve list of Opera Cake board addresses (uint8, terminated by 0)

    Requires USB API 1.2.

    Returns Promise<number[]>

  • operacakeGpioTest(address: number): Promise<Buffer>
  • Test GPIO functionality of an Opera Cake

    Returns test result (uint16)

    Requires USB API 1.3.

    Parameters

    • address: number

    Returns Promise<Buffer>

  • setOperacakeRanges(ranges: Buffer): Promise<void>

Radio control Methods

  • initSweep(ranges: [number, number][], numBytes: number, stepWidth: number, offset: number, style: SweepStyle): Promise<void>
  • Initialize sweep mode

    Requires USB API 1.2.

    Parameters

    • ranges: [number, number][]

      is a list of [start, stop] pairs of frequencies in MHz, no more than MAX_SWEEP_RANGES entries.

    • numBytes: number

      the number of sample bytes to capture after each tuning.

    • stepWidth: number

      the width in Hz of the tuning step.

    • offset: number

      number of Hz added to every tuning frequency. Use to select center frequency based on the expected usable bandwidth.

    • style: SweepStyle

    Returns Promise<void>

  • setAmpEnable(value: boolean): Promise<void>
  • Enable / disable RX/TX RF external amplifier

    Parameters

    • value: boolean

    Returns Promise<void>

  • setAntennaEnable(value: boolean): Promise<void>
  • Antenna port power control

    Parameters

    • value: boolean

    Returns Promise<void>

  • setBasebandFilterBandwidth(freqHz: number): Promise<void>
  • Set baseband filter bandwidth in Hz

    Possible values: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz

    Parameters

    • freqHz: number

    Returns Promise<void>

  • setClkoutEnable(value: boolean): Promise<void>
  • Enable / disable clock output through CLKOUT

    Requires USB API 1.3.

    Parameters

    • value: boolean

    Returns Promise<void>

  • setFrequency(freqHz: number): Promise<void>
  • Set the tuning frequency

    Parameters

    • freqHz: number

    Returns Promise<void>

  • setFrequencyExplicit(iFreqHz: number, loFreqHz: number, path: RfPathFilter): Promise<void>
  • Set the tuning frequency (raw version)

    Parameters

    • iFreqHz: number

      intermediate frequency

    • loFreqHz: number

      front-end local oscillator frequency

    • path: RfPathFilter

      image rejection filter path

    Returns Promise<void>

  • setHwSyncMode(value: boolean): Promise<void>
  • Enable / disable hardware sync

    Multiple boards can be made to syncronize their USB transfers through a GPIO connection between them.

    Requires USB API 1.2.

    Parameters

    • value: boolean

    Returns Promise<void>

  • setLnaGain(gainDb: number): Promise<void>
  • Set RX LNA (IF) gain, 0-40dB in 8dB steps

    Parameters

    • gainDb: number

    Returns Promise<void>

  • setSampleRate(freqHz: number): Promise<void>
  • Set the sample rate

    For anti-aliasing, the baseband filter bandwidth is automatically set to the widest available setting that is no more than 75% of the sample rate. This happens every time the sample rate is set. If you want to override the baseband filter selection, you must do so after setting the sample rate.

    Parameters

    • freqHz: number

      frequency in Hz, 2-20MHz (double)

    Returns Promise<void>

  • setSampleRateManual(freqHz: number, divider: number): Promise<void>
  • Set the sample rate (raw version)

    You should probably use setSampleRate instead of this function.

    For anti-aliasing, the baseband filter bandwidth is automatically set to the widest available setting that is no more than 75% of the sample rate. This happens every time the sample rate is set. If you want to override the baseband filter selection, you must do so after setting the sample rate.

    2-20Mhz - as a fraction, i.e. freq 20000000 divider 2 -> 10Mhz

    Parameters

    • freqHz: number
    • divider: number

    Returns Promise<void>

  • setTxVgaGain(gainDb: number): Promise<void>
  • Set TX VGA (IF) gain, 0-47dB in 1dB steps

    Parameters

    • gainDb: number

    Returns Promise<void>

  • setUiEnable(value: boolean): Promise<void>
  • Enable / disable PortaPack display

    Requires USB API 1.4.

    Parameters

    • value: boolean

    Returns Promise<void>

  • setVgaGain(gainDb: number): Promise<void>
  • Set RX VGA (baseband) gain, 0-62dB in 2dB steps

    Parameters

    • gainDb: number

    Returns Promise<void>

Generated using TypeDoc