From cd7da974d5b6dc65d06abc6346f192ea33adbf9c Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Thu, 6 Jun 2013 14:09:11 +0200 Subject: [PATCH] lib: fractional sample rates --- host/libhackrf/src/hackrf.c | 37 +++++++++++++++++++++++++++++++++++++ host/libhackrf/src/hackrf.h | 1 + 2 files changed, 38 insertions(+) diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index 67c2d97b..d8e5721c 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -57,6 +57,7 @@ typedef enum { HACKRF_VENDOR_REQUEST_SET_LNA_GAIN = 19, HACKRF_VENDOR_REQUEST_SET_VGA_GAIN = 20, HACKRF_VENDOR_REQUEST_SET_TXVGA_GAIN = 21, + HACKRF_VENDOR_REQUEST_SET_FRACRATE = 22, } hackrf_vendor_request; typedef enum { @@ -754,6 +755,42 @@ int ADDCALL hackrf_set_freq(hackrf_device* device, const uint64_t freq_hz) } } + +typedef struct { + float freq_mhz; +} set_fracrate_params_t; + + +int ADDCALL hackrf_set_fracrate(hackrf_device* device, const float freq_mhz) +{ + uint32_t l_freq_mhz; + uint32_t l_freq_hz; + set_fracrate_params_t set_fracrate_params; + uint8_t length; + int result; + + set_fracrate_params.freq_mhz = freq_mhz; + length = sizeof(set_fracrate_params_t); + + result = libusb_control_transfer( + device->usb_device, + LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, + HACKRF_VENDOR_REQUEST_SET_FRACRATE, + 0, + 0, + (unsigned char*)&set_fracrate_params, + length, + 0 + ); + + if (result < length) + { + return HACKRF_ERROR_LIBUSB; + } else { + return HACKRF_SUCCESS; + } +} + int ADDCALL hackrf_set_amp_enable(hackrf_device* device, const uint8_t value) { int result; diff --git a/host/libhackrf/src/hackrf.h b/host/libhackrf/src/hackrf.h index 14968319..96d2dcf6 100644 --- a/host/libhackrf/src/hackrf.h +++ b/host/libhackrf/src/hackrf.h @@ -129,6 +129,7 @@ extern ADDAPI int ADDCALL hackrf_board_id_read(hackrf_device* device, uint8_t* v extern ADDAPI int ADDCALL hackrf_version_string_read(hackrf_device* device, char* version, uint8_t length); extern ADDAPI int ADDCALL hackrf_set_freq(hackrf_device* device, const uint64_t freq_hz); +extern ADDAPI int ADDCALL hackrf_set_fracrate(hackrf_device* device, const float freq_mhz); /* external amp, bool on/off */ extern ADDAPI int ADDCALL hackrf_set_amp_enable(hackrf_device* device, const uint8_t value);