From aab36292dbf6920a316450c36c4aed7a34359bf6 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 19 Sep 2013 22:37:36 -0700 Subject: [PATCH] Moved USB API for manipulating RF chip registers into separate files. --- firmware/hackrf_usb/Makefile | 1 + firmware/hackrf_usb/hackrf_usb.c | 118 +------------------- firmware/hackrf_usb/usb_api_register.c | 147 +++++++++++++++++++++++++ firmware/hackrf_usb/usb_api_register.h | 54 +++++++++ 4 files changed, 203 insertions(+), 117 deletions(-) create mode 100644 firmware/hackrf_usb/usb_api_register.c create mode 100644 firmware/hackrf_usb/usb_api_register.h diff --git a/firmware/hackrf_usb/Makefile b/firmware/hackrf_usb/Makefile index 491cd635..97c65daf 100644 --- a/firmware/hackrf_usb/Makefile +++ b/firmware/hackrf_usb/Makefile @@ -34,6 +34,7 @@ SRC = $(BINARY).c \ usb_device.c \ usb_endpoint.c \ usb_api_cpld.c \ + usb_api_register.c \ usb_api_spiflash.c \ ../common/usb_queue.c \ ../common/fault_handler.c \ diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index fb5eb0b6..9b622ab2 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -30,10 +30,8 @@ #include #include -#include #include #include -#include #include #include #include @@ -48,6 +46,7 @@ #include "usb_device.h" #include "usb_endpoint.h" #include "usb_api_cpld.h" +#include "usb_api_register.h" #include "usb_api_spiflash.h" #include "rf_path.h" @@ -139,81 +138,6 @@ usb_request_status_t usb_vendor_request_set_transceiver_mode( } } -usb_request_status_t usb_vendor_request_write_max2837( - usb_endpoint_t* const endpoint, - const usb_transfer_stage_t stage -) { - if( stage == USB_TRANSFER_STAGE_SETUP ) { - if( endpoint->setup.index < MAX2837_NUM_REGS ) { - if( endpoint->setup.value < MAX2837_DATA_REGS_MAX_VALUE ) { - max2837_reg_write(endpoint->setup.index, endpoint->setup.value); - usb_transfer_schedule_ack(endpoint->in); - return USB_REQUEST_STATUS_OK; - } - } - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; - } -} - -usb_request_status_t usb_vendor_request_read_max2837( - usb_endpoint_t* const endpoint, - const usb_transfer_stage_t stage -) { - if( stage == USB_TRANSFER_STAGE_SETUP ) { - if( endpoint->setup.index < MAX2837_NUM_REGS ) { - const uint16_t value = max2837_reg_read(endpoint->setup.index); - endpoint->buffer[0] = value & 0xff; - endpoint->buffer[1] = value >> 8; - usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 2, - NULL, NULL); - usb_transfer_schedule_ack(endpoint->out); - return USB_REQUEST_STATUS_OK; - } - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; - } -} - -usb_request_status_t usb_vendor_request_write_si5351c( - usb_endpoint_t* const endpoint, - const usb_transfer_stage_t stage -) { - if( stage == USB_TRANSFER_STAGE_SETUP ) { - if( endpoint->setup.index < 256 ) { - if( endpoint->setup.value < 256 ) { - si5351c_write_single(endpoint->setup.index, endpoint->setup.value); - usb_transfer_schedule_ack(endpoint->in); - return USB_REQUEST_STATUS_OK; - } - } - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; - } -} - -usb_request_status_t usb_vendor_request_read_si5351c( - usb_endpoint_t* const endpoint, - const usb_transfer_stage_t stage -) { - if( stage == USB_TRANSFER_STAGE_SETUP ) { - if( endpoint->setup.index < 256 ) { - const uint8_t value = si5351c_read_single(endpoint->setup.index); - endpoint->buffer[0] = value; - usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 1, - NULL, NULL); - usb_transfer_schedule_ack(endpoint->out); - return USB_REQUEST_STATUS_OK; - } - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; - } -} - usb_request_status_t usb_vendor_request_set_baseband_filter_bandwidth( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage @@ -230,46 +154,6 @@ usb_request_status_t usb_vendor_request_set_baseband_filter_bandwidth( } } -usb_request_status_t usb_vendor_request_write_rffc5071( - usb_endpoint_t* const endpoint, - const usb_transfer_stage_t stage -) { - if( stage == USB_TRANSFER_STAGE_SETUP ) - { - if( endpoint->setup.index < RFFC5071_NUM_REGS ) - { - rffc5071_reg_write(endpoint->setup.index, endpoint->setup.value); - usb_transfer_schedule_ack(endpoint->in); - return USB_REQUEST_STATUS_OK; - } - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; - } -} - -usb_request_status_t usb_vendor_request_read_rffc5071( - usb_endpoint_t* const endpoint, - const usb_transfer_stage_t stage -) { - uint16_t value; - if( stage == USB_TRANSFER_STAGE_SETUP ) - { - if( endpoint->setup.index < RFFC5071_NUM_REGS ) - { - value = rffc5071_reg_read(endpoint->setup.index); - endpoint->buffer[0] = value & 0xff; - endpoint->buffer[1] = value >> 8; - usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 2, - NULL, NULL); - usb_transfer_schedule_ack(endpoint->out); - return USB_REQUEST_STATUS_OK; - } - return USB_REQUEST_STATUS_STALL; - } else { - return USB_REQUEST_STATUS_OK; - } -} usb_request_status_t usb_vendor_request_read_board_id( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) { diff --git a/firmware/hackrf_usb/usb_api_register.c b/firmware/hackrf_usb/usb_api_register.c new file mode 100644 index 00000000..d822c924 --- /dev/null +++ b/firmware/hackrf_usb/usb_api_register.c @@ -0,0 +1,147 @@ +/* + * Copyright 2012 Jared Boone + * Copyright 2013 Benjamin Vernoux + * + * This file is part of HackRF. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "usb_api_register.h" + +#include +#include +#include +#include + +#include +#include + +usb_request_status_t usb_vendor_request_write_max2837( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + if( endpoint->setup.index < MAX2837_NUM_REGS ) { + if( endpoint->setup.value < MAX2837_DATA_REGS_MAX_VALUE ) { + max2837_reg_write(endpoint->setup.index, endpoint->setup.value); + usb_transfer_schedule_ack(endpoint->in); + return USB_REQUEST_STATUS_OK; + } + } + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + +usb_request_status_t usb_vendor_request_read_max2837( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + if( endpoint->setup.index < MAX2837_NUM_REGS ) { + const uint16_t value = max2837_reg_read(endpoint->setup.index); + endpoint->buffer[0] = value & 0xff; + endpoint->buffer[1] = value >> 8; + usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 2, + NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + return USB_REQUEST_STATUS_OK; + } + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + +usb_request_status_t usb_vendor_request_write_si5351c( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + if( endpoint->setup.index < 256 ) { + if( endpoint->setup.value < 256 ) { + si5351c_write_single(endpoint->setup.index, endpoint->setup.value); + usb_transfer_schedule_ack(endpoint->in); + return USB_REQUEST_STATUS_OK; + } + } + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + +usb_request_status_t usb_vendor_request_read_si5351c( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + if( endpoint->setup.index < 256 ) { + const uint8_t value = si5351c_read_single(endpoint->setup.index); + endpoint->buffer[0] = value; + usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 1, + NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + return USB_REQUEST_STATUS_OK; + } + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + +usb_request_status_t usb_vendor_request_write_rffc5071( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) + { + if( endpoint->setup.index < RFFC5071_NUM_REGS ) + { + rffc5071_reg_write(endpoint->setup.index, endpoint->setup.value); + usb_transfer_schedule_ack(endpoint->in); + return USB_REQUEST_STATUS_OK; + } + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + +usb_request_status_t usb_vendor_request_read_rffc5071( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +) { + uint16_t value; + if( stage == USB_TRANSFER_STAGE_SETUP ) + { + if( endpoint->setup.index < RFFC5071_NUM_REGS ) + { + value = rffc5071_reg_read(endpoint->setup.index); + endpoint->buffer[0] = value & 0xff; + endpoint->buffer[1] = value >> 8; + usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 2, + NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + return USB_REQUEST_STATUS_OK; + } + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} diff --git a/firmware/hackrf_usb/usb_api_register.h b/firmware/hackrf_usb/usb_api_register.h new file mode 100644 index 00000000..06eb8df7 --- /dev/null +++ b/firmware/hackrf_usb/usb_api_register.h @@ -0,0 +1,54 @@ +/* + * Copyright 2012 Jared Boone + * Copyright 2013 Benjamin Vernoux + * + * This file is part of HackRF. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __USB_API_REGISTER_H__ +#define __USB_API_REGISTER_H__ + +#include +#include + +usb_request_status_t usb_vendor_request_write_max2837( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); +usb_request_status_t usb_vendor_request_read_max2837( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); +usb_request_status_t usb_vendor_request_write_si5351c( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); +usb_request_status_t usb_vendor_request_read_si5351c( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); +usb_request_status_t usb_vendor_request_write_rffc5071( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); +usb_request_status_t usb_vendor_request_read_rffc5071( + usb_endpoint_t* const endpoint, + const usb_transfer_stage_t stage +); + +#endif /* end of include guard: __USB_API_REGISTER_H__ */