From bee537dc013ab4349d3637f695038d7b297f880b Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sat, 15 Jun 2013 01:01:51 +0200 Subject: [PATCH 1/7] firmware: rffc frac, if gain --- firmware/common/rffc5071.c | 20 +++++++++++++------- firmware/hackrf_usb/hackrf_usb.c | 14 +++++++++++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/firmware/common/rffc5071.c b/firmware/common/rffc5071.c index e5a0c3e8..52fde498 100644 --- a/firmware/common/rffc5071.c +++ b/firmware/common/rffc5071.c @@ -454,7 +454,9 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { uint8_t fbkdiv; uint16_t n; uint16_t tune_freq; - + uint16_t p1nmsb; + uint8_t p1nlsb; + LOG("# config_synth_int\n"); /* Calculate n_lo */ @@ -481,8 +483,12 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { set_RFFC5071_PLLCPL(2); } - n = (fvco / fbkdiv) / REF_FREQ; - tune_freq = 50*n*fbkdiv/lodiv; + uint64_t tmp_n = ((uint64_t)fvco << 29ULL) / (fbkdiv*REF_FREQ) ; + n = tmp_n >> 29ULL; + p1nmsb = (tmp_n >> 13ULL) & 0xffff; + p1nlsb = (tmp_n >> 5ULL) & 0xff; + + tune_freq = REF_FREQ*tmp_n*fbkdiv/lodiv / (1 << 29); LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq=%d\n", lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq); @@ -490,15 +496,15 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { set_RFFC5071_P1LODIV(n_lo); set_RFFC5071_P1N(n); set_RFFC5071_P1PRESC(fbkdiv >> 1); - set_RFFC5071_P1NMSB(0); - set_RFFC5071_P1NLSB(0); + set_RFFC5071_P1NMSB(p1nmsb); + set_RFFC5071_P1NLSB(p1nlsb); /* Path 2 */ set_RFFC5071_P2LODIV(n_lo); set_RFFC5071_P2N(n); set_RFFC5071_P2PRESC(fbkdiv >> 1); - set_RFFC5071_P2NMSB(0); - set_RFFC5071_P2NLSB(0); + set_RFFC5071_P2NMSB(p1nmsb); + set_RFFC5071_P2NLSB(p1nlsb); rffc5071_regs_commit(); diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 83524804..737bf08a 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -96,7 +96,7 @@ void update_switches(void) #define MIN_HP_FREQ_MHZ (2700) #define MAX_HP_FREQ_MHZ (6800) -#define MAX2837_FREQ_NOMINAL_HZ (2600000000) +static uint32_t MAX2837_FREQ_NOMINAL_HZ=2600000000; #define MAX2837_FREQ_NOMINAL_MHZ (MAX2837_FREQ_NOMINAL_HZ / FREQ_ONE_MHZ) /* @@ -812,6 +812,17 @@ usb_request_status_t usb_vendor_request_set_txvga_gain( return USB_REQUEST_STATUS_OK; } +usb_request_status_t usb_vendor_request_set_if_freq( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + MAX2837_FREQ_NOMINAL_HZ = (uint32_t)endpoint->setup.index * 1000 * 1000; + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + static const usb_request_handler_fn vendor_request_handler[] = { NULL, usb_vendor_request_set_transceiver_mode, @@ -835,6 +846,7 @@ static const usb_request_handler_fn vendor_request_handler[] = { usb_vendor_request_set_lna_gain, usb_vendor_request_set_vga_gain, usb_vendor_request_set_txvga_gain, + usb_vendor_request_set_if_freq, }; static const uint32_t vendor_request_handler_count = From 3c7bc948f189e0c15311a3bdabea6463a4133708 Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sat, 15 Jun 2013 01:24:26 +0200 Subject: [PATCH 2/7] lib: if freq --- host/libhackrf/src/hackrf.c | 29 +++++++++++++++++++++++++++++ host/libhackrf/src/hackrf.h | 1 + 2 files changed, 30 insertions(+) diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index 4dcc9302..7e36dc55 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -64,6 +64,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_IF_FREQ = 22, } hackrf_vendor_request; typedef enum { @@ -958,6 +959,34 @@ int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value) } } +int ADDCALL hackrf_set_if_freq(hackrf_device* device, const uint32_t freq_mhz) +{ + int result; + + if(freq_mhz < 2300 || freq_mhz > 2700) + { + return HACKRF_ERROR_INVALID_PARAM; + } + + result = libusb_control_transfer( + device->usb_device, + LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, + HACKRF_VENDOR_REQUEST_SET_IF_FREQ, + 0, + freq_mhz, + NULL, + 0, + 0 + ); + + if( result != 0 ) + { + return HACKRF_ERROR_LIBUSB; + } else { + return HACKRF_SUCCESS; + } +} + static void* transfer_threadproc(void* arg) { hackrf_device* device = (hackrf_device*)arg; diff --git a/host/libhackrf/src/hackrf.h b/host/libhackrf/src/hackrf.h index b79c7499..18671061 100644 --- a/host/libhackrf/src/hackrf.h +++ b/host/libhackrf/src/hackrf.h @@ -128,6 +128,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_if_freq(hackrf_device* device, const uint32_t freq_mhz); /* currently 8-20Mhz - either as a fraction, i.e. freq 20000000hz divider 2 -> 10Mhz or as plain old 10000000hz (double) preferred rates are 8, 10, 12.5, 16, 20Mhz due to less jitter */ From a6696de1d2475697886907ad6f0f3bbf9ac401df Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sat, 15 Jun 2013 10:36:53 +0200 Subject: [PATCH 3/7] fw: ack --- firmware/hackrf_usb/hackrf_usb.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 737bf08a..35173a7e 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -817,10 +817,9 @@ usb_request_status_t usb_vendor_request_set_if_freq( ) { if( stage == USB_TRANSFER_STAGE_SETUP ) { MAX2837_FREQ_NOMINAL_HZ = (uint32_t)endpoint->setup.index * 1000 * 1000; - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; + usb_endpoint_schedule_ack(endpoint->in); } + return USB_REQUEST_STATUS_OK; } static const usb_request_handler_fn vendor_request_handler[] = { From 8063bd82079e5e0a11173deb2a50873f70901461 Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sat, 15 Jun 2013 12:00:25 +0200 Subject: [PATCH 4/7] firmware: if precision --- firmware/common/rffc5071.c | 15 ++++++++------- firmware/common/rffc5071.h | 2 +- firmware/hackrf_usb/hackrf_usb.c | 18 +++++++++--------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/firmware/common/rffc5071.c b/firmware/common/rffc5071.c index 52fde498..483d5180 100644 --- a/firmware/common/rffc5071.c +++ b/firmware/common/rffc5071.c @@ -448,12 +448,12 @@ void rffc5071_enable(void) { #define REF_FREQ 50 /* configure frequency synthesizer in integer mode (lo in MHz) */ -uint16_t rffc5071_config_synth_int(uint16_t lo) { +uint32_t rffc5071_config_synth_int(uint16_t lo) { uint8_t lodiv; uint16_t fvco; uint8_t fbkdiv; uint16_t n; - uint16_t tune_freq; + uint32_t tune_freq_hz; uint16_t p1nmsb; uint8_t p1nlsb; @@ -488,8 +488,9 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { p1nmsb = (tmp_n >> 13ULL) & 0xffff; p1nlsb = (tmp_n >> 5ULL) & 0xff; - tune_freq = REF_FREQ*tmp_n*fbkdiv/lodiv / (1 << 29); - LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq=%d\n", + //~ tune_freq = REF_FREQ*tmp_n*fbkdiv/lodiv / (1 << 29); + tune_freq_hz = (uint32_t)(REF_FREQ*tmp_n*fbkdiv/lodiv * 1000*1000 / (1 << 29ULL)); + LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq_hz=%d\n", lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq); /* Path 1 */ @@ -508,15 +509,15 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { rffc5071_regs_commit(); - return tune_freq; + return tune_freq_hz; } /* !!!!!!!!!!! hz is currently ignored !!!!!!!!!!! * * Tuning is rounded down to the nearest 25MHz or 50MHz depending on * frequency requsted. Actual tuned value in MHz is returned. */ -uint16_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz) { - uint16_t tune_freq; +uint32_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz) { + uint32_t tune_freq; // Fractional tuning unimplemented, 'hz' ignored hz=hz; diff --git a/firmware/common/rffc5071.h b/firmware/common/rffc5071.h index f55bf9a7..8b5c5675 100644 --- a/firmware/common/rffc5071.h +++ b/firmware/common/rffc5071.h @@ -71,7 +71,7 @@ extern void rffc5071_regs_commit(void); * tune frequency (MHz) is returned. Expect requested freq to be * rounded down to the nearest multiple of 25MHz or 50MHz, depending * internal calculations. */ -extern uint16_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz); +extern uint32_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz); /* Set up rx only, tx only, or full duplex. Chip should be disabled * before _tx, _rx, or _rxtx are called. */ diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 35173a7e..d59b9599 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -109,7 +109,7 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) bool success; uint32_t RFFC5071_freq_mhz; uint32_t MAX2837_freq_hz; - uint32_t real_RFFC5071_freq_mhz; + uint32_t real_RFFC5071_freq_hz; uint32_t tmp_hz; success = true; @@ -122,13 +122,13 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz; /* Set Freq and read real freq */ - real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); - if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz) + real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); + if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ) { - tmp_hz = -((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + tmp_hz = -(RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz); }else { - tmp_hz = ((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + tmp_hz = (real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ); } MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz; max2837_set_frequency(MAX2837_freq_hz); @@ -148,13 +148,13 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ; /* Set Freq and read real freq */ - real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); - if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz) + real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); + if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ) { - tmp_hz = ((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + tmp_hz = (RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz); }else { - tmp_hz = -((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + tmp_hz = -(real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ); } MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz; max2837_set_frequency(MAX2837_freq_hz); From 3f6c91a5db619a3590fdd9df4bd6b1fe43183096 Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sat, 15 Jun 2013 12:33:12 +0200 Subject: [PATCH 5/7] firmware: automagically update freq when changing the if freq --- firmware/hackrf_usb/hackrf_usb.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index d59b9599..f34d797a 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -99,6 +99,7 @@ void update_switches(void) static uint32_t MAX2837_FREQ_NOMINAL_HZ=2600000000; #define MAX2837_FREQ_NOMINAL_MHZ (MAX2837_FREQ_NOMINAL_HZ / FREQ_ONE_MHZ) +uint32_t freq_mhz_cache=100, freq_hz_cache=0; /* * Set freq/tuning between 5MHz to 6800 MHz (less than 16bits really used) * hz between 0 to 999999 Hz (not checked) @@ -169,6 +170,8 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) /* Error freq_mhz too low */ success = false; } + freq_mhz_cache = freq_mhz; + freq_hz_cache = freq_hz; return success; } @@ -817,6 +820,7 @@ usb_request_status_t usb_vendor_request_set_if_freq( ) { if( stage == USB_TRANSFER_STAGE_SETUP ) { MAX2837_FREQ_NOMINAL_HZ = (uint32_t)endpoint->setup.index * 1000 * 1000; + set_freq(freq_mhz_cache, freq_hz_cache); usb_endpoint_schedule_ack(endpoint->in); } return USB_REQUEST_STATUS_OK; From 839a1a170f6bb2c1b34e34a13c0dbfa415e7d3b3 Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sun, 16 Jun 2013 19:08:59 +0200 Subject: [PATCH 6/7] fw: dc offset correction fix pins b7 & b6 are floating, disable re-triggering selecting a different HPC_STOP fixes the dc offset drift disabling and enabling rx/tx after tuning triggers the dc offset correction --- firmware/common/max2837.c | 4 ++++ firmware/hackrf_usb/hackrf_usb.c | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/firmware/common/max2837.c b/firmware/common/max2837.c index 26189d43..c3d6d5cf 100644 --- a/firmware/common/max2837.c +++ b/firmware/common/max2837.c @@ -141,6 +141,10 @@ void max2837_setup(void) set_MAX2837_TXVGA_GAIN_MSB_SPI_EN(1); //set_MAX2837_TXVGA_GAIN(0x3f); /* maximum attenuation */ set_MAX2837_TXVGA_GAIN(0x00); /* minimum attenuation */ + set_MAX2837_VGAMUX_enable(1); + set_MAX2837_VGA_EN(1); + set_MAX2837_HPC_RXGAIN_EN(0); + set_MAX2837_HPC_STOP(MAX2837_STOP_1K); set_MAX2837_LNAgain_SPI_EN(1); set_MAX2837_LNAgain(MAX2837_LNAgain_MAX); /* maximum gain */ set_MAX2837_VGAgain_SPI_EN(1); diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index f34d797a..200d284e 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -115,6 +115,7 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) success = true; + gpio_clear(PORT_XCVR_ENABLE, (PIN_XCVR_RXENABLE | PIN_XCVR_TXENABLE)); if(freq_mhz >= MIN_LP_FREQ_MHZ) { if(freq_mhz < MAX_LP_FREQ_MHZ) @@ -170,6 +171,11 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) /* Error freq_mhz too low */ success = false; } + if(transceiver_mode == TRANSCEIVER_MODE_RX) + gpio_set(PORT_XCVR_ENABLE, PIN_XCVR_RXENABLE); + else if(transceiver_mode == TRANSCEIVER_MODE_TX) + gpio_set(PORT_XCVR_ENABLE, PIN_XCVR_TXENABLE); + freq_mhz_cache = freq_mhz; freq_hz_cache = freq_hz; return success; From b33f534da07dfe9382f70ad43e6e0d330f347ed0 Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Mon, 17 Jun 2013 12:32:12 +0200 Subject: [PATCH 7/7] firmware, lib: update comments, doc --- firmware/common/rffc5071.c | 10 ++-------- firmware/common/rffc5071.h | 7 ++----- firmware/hackrf_usb/hackrf_usb.c | 4 ++-- firmware/sgpio-rx/sgpio-rx.c | 2 +- host/libhackrf/src/hackrf.h | 2 ++ 5 files changed, 9 insertions(+), 16 deletions(-) diff --git a/firmware/common/rffc5071.c b/firmware/common/rffc5071.c index 483d5180..ad77eccc 100644 --- a/firmware/common/rffc5071.c +++ b/firmware/common/rffc5071.c @@ -512,16 +512,10 @@ uint32_t rffc5071_config_synth_int(uint16_t lo) { return tune_freq_hz; } -/* !!!!!!!!!!! hz is currently ignored !!!!!!!!!!! - * - * Tuning is rounded down to the nearest 25MHz or 50MHz depending on - * frequency requsted. Actual tuned value in MHz is returned. */ -uint32_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz) { +/* !!!!!!!!!!! hz is currently ignored !!!!!!!!!!! */ +uint32_t rffc5071_set_frequency(uint16_t mhz) { uint32_t tune_freq; - // Fractional tuning unimplemented, 'hz' ignored - hz=hz; - rffc5071_disable(); tune_freq = rffc5071_config_synth_int(mhz); rffc5071_enable(); diff --git a/firmware/common/rffc5071.h b/firmware/common/rffc5071.h index 8b5c5675..510cf510 100644 --- a/firmware/common/rffc5071.h +++ b/firmware/common/rffc5071.h @@ -67,11 +67,8 @@ extern void rffc5071_reg_write(uint8_t r, uint16_t v); * provided routines for those operations. */ extern void rffc5071_regs_commit(void); -/* Set frequency (MHz). The 'hz' field is currently ignored. Actual - * tune frequency (MHz) is returned. Expect requested freq to be - * rounded down to the nearest multiple of 25MHz or 50MHz, depending - * internal calculations. */ -extern uint32_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz); +/* Set frequency (MHz). */ +extern uint32_t rffc5071_set_frequency(uint16_t mhz); /* Set up rx only, tx only, or full duplex. Chip should be disabled * before _tx, _rx, or _rxtx are called. */ diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 200d284e..e4cd3da3 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -124,7 +124,7 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz; /* Set Freq and read real freq */ - real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); + real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz); if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ) { tmp_hz = -(RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz); @@ -150,7 +150,7 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ; /* Set Freq and read real freq */ - real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); + real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz); if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ) { tmp_hz = (RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz); diff --git a/firmware/sgpio-rx/sgpio-rx.c b/firmware/sgpio-rx/sgpio-rx.c index a9270a5c..61c33604 100644 --- a/firmware/sgpio-rx/sgpio-rx.c +++ b/firmware/sgpio-rx/sgpio-rx.c @@ -104,7 +104,7 @@ int main(void) { switchctrl = (SWITCHCTRL_AMP_BYPASS | SWITCHCTRL_HP); #endif rffc5071_rx(switchctrl); - rffc5071_set_frequency(500, 0); // 500 MHz, 0 Hz (Hz ignored) + rffc5071_set_frequency(500); // 500 MHz max2837_set_frequency(freq); max2837_start(); diff --git a/host/libhackrf/src/hackrf.h b/host/libhackrf/src/hackrf.h index 18671061..08317ec2 100644 --- a/host/libhackrf/src/hackrf.h +++ b/host/libhackrf/src/hackrf.h @@ -128,6 +128,8 @@ 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); + +/* range 2300-2700 Mhz */ extern ADDAPI int ADDCALL hackrf_set_if_freq(hackrf_device* device, const uint32_t freq_mhz); /* currently 8-20Mhz - either as a fraction, i.e. freq 20000000hz divider 2 -> 10Mhz or as plain old 10000000hz (double)