From 233c56c79d92467b90f510b73394dd8774739353 Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Wed, 29 May 2013 00:14:24 +0200 Subject: [PATCH] libhackrf/firmware: merge txvga gain into one gain range of 0-47 --- firmware/common/max2837.c | 15 ++++++++------- firmware/common/max2837.h | 2 +- firmware/hackrf_usb/hackrf_usb.c | 4 +--- host/libhackrf/src/hackrf.c | 4 ++-- host/libhackrf/src/hackrf.h | 8 +++++++- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/firmware/common/max2837.c b/firmware/common/max2837.c index 1b5dbc87..26189d43 100644 --- a/firmware/common/max2837.c +++ b/firmware/common/max2837.c @@ -407,13 +407,14 @@ bool max2837_set_vga_gain(const uint32_t gain_db) { return true; } -bool max2837_set_txvga_gain(const uint32_t gain_db, const uint32_t plus16) { - uint16_t val = 31-gain_db; - if(gain_db > 31)/* 0b111111 mind the bit 6 weigth*/ - return false; - - if(!plus16) - val |= 0x20; /* +16db */ +bool max2837_set_txvga_gain(const uint32_t gain_db) { + uint16_t val=0; + if(gain_db <16){ + val = 31-gain_db; + val |= (1 << 5); // bit6: 16db + } else{ + val = 31-(gain_db-16); + } set_MAX2837_TXVGA_GAIN(val); max2837_reg_commit(29); diff --git a/firmware/common/max2837.h b/firmware/common/max2837.h index 065f0959..4c7d4f1e 100644 --- a/firmware/common/max2837.h +++ b/firmware/common/max2837.h @@ -47,7 +47,7 @@ extern void max2837_set_frequency(uint32_t freq); bool max2837_set_lpf_bandwidth(const uint32_t bandwidth_hz); bool max2837_set_lna_gain(const uint32_t gain_db); bool max2837_set_vga_gain(const uint32_t gain_db); -bool max2837_set_txvga_gain(const uint32_t gain_db, const uint32_t plus16); +bool max2837_set_txvga_gain(const uint32_t gain_db); extern void max2837_tx(void); extern void max2837_rx(void); diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 14b16f5d..83059efa 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -790,9 +790,7 @@ usb_request_status_t usb_vendor_request_set_txvga_gain( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) { if( stage == USB_TRANSFER_STAGE_SETUP ) { - const uint8_t value = max2837_set_txvga_gain( - endpoint->setup.index, endpoint->setup.value); - + const uint8_t value = max2837_set_txvga_gain(endpoint->setup.index); endpoint->buffer[0] = value; usb_endpoint_schedule(endpoint->in, &endpoint->buffer, 1); usb_endpoint_schedule_ack(endpoint->out); diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index f81db94a..44855a3f 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -857,7 +857,7 @@ int ADDCALL hackrf_set_vga_gain(hackrf_device* device, uint32_t value) } } -int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value, uint32_t plus16db) +int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value) { int result; @@ -870,7 +870,7 @@ int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value, uint32_ device->usb_device, LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, HACKRF_VENDOR_REQUEST_SET_TXVGA_GAIN, - plus16db, + 0, value, NULL, 0, diff --git a/host/libhackrf/src/hackrf.h b/host/libhackrf/src/hackrf.h index bc1b5e60..14968319 100644 --- a/host/libhackrf/src/hackrf.h +++ b/host/libhackrf/src/hackrf.h @@ -130,13 +130,19 @@ extern ADDAPI int ADDCALL hackrf_version_string_read(hackrf_device* device, char extern ADDAPI int ADDCALL hackrf_set_freq(hackrf_device* device, const uint64_t freq_hz); +/* external amp, bool on/off */ extern ADDAPI int ADDCALL hackrf_set_amp_enable(hackrf_device* device, const uint8_t value); extern ADDAPI int ADDCALL hackrf_board_partid_serialno_read(hackrf_device* device, read_partid_serialno_t* read_partid_serialno); +/* range 0-40 step 8db */ extern ADDAPI int ADDCALL hackrf_set_lna_gain(hackrf_device* device, uint32_t value); + +/* range 0-62 step 2db */ extern ADDAPI int ADDCALL hackrf_set_vga_gain(hackrf_device* device, uint32_t value); -extern ADDAPI int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value, uint32_t plus16db); + +/* range 0-47 step 1db */ +extern ADDAPI int ADDCALL hackrf_set_txvga_gain(hackrf_device* device, uint32_t value); extern ADDAPI const char* ADDCALL hackrf_error_name(enum hackrf_error errcode); extern ADDAPI const char* ADDCALL hackrf_board_id_name(enum hackrf_board_id board_id);