From 9120e0b7baaea5c788b5aa549a928f4709225b88 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 19 Sep 2013 22:45:38 -0700 Subject: [PATCH] Extracted USB API for board information into separate files. --- firmware/hackrf_usb/Makefile | 1 + firmware/hackrf_usb/hackrf_usb.c | 70 +----------------- firmware/hackrf_usb/usb_api_board_info.c | 93 ++++++++++++++++++++++++ firmware/hackrf_usb/usb_api_board_info.h | 43 +++++++++++ 4 files changed, 138 insertions(+), 69 deletions(-) create mode 100644 firmware/hackrf_usb/usb_api_board_info.c create mode 100644 firmware/hackrf_usb/usb_api_board_info.h diff --git a/firmware/hackrf_usb/Makefile b/firmware/hackrf_usb/Makefile index 97c65daf..73a2ea14 100644 --- a/firmware/hackrf_usb/Makefile +++ b/firmware/hackrf_usb/Makefile @@ -33,6 +33,7 @@ SRC = $(BINARY).c \ usb_descriptor.c \ usb_device.c \ usb_endpoint.c \ + usb_api_board_info.c \ usb_api_cpld.c \ usb_api_register.c \ usb_api_spiflash.c \ diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 9b622ab2..113b839d 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -34,7 +34,6 @@ #include #include #include -#include #include "usb.h" #include "usb_type.h" @@ -45,6 +44,7 @@ #include "usb_device.h" #include "usb_endpoint.h" +#include "usb_api_board_info.h" #include "usb_api_cpld.h" #include "usb_api_register.h" #include "usb_api_spiflash.h" @@ -56,8 +56,6 @@ static volatile transceiver_mode_t transceiver_mode = TRANSCEIVER_MODE_OFF; -char version_string[] = VERSION_STRING; - typedef struct { uint32_t freq_mhz; uint32_t freq_hz; @@ -154,30 +152,6 @@ usb_request_status_t usb_vendor_request_set_baseband_filter_bandwidth( } } -usb_request_status_t usb_vendor_request_read_board_id( - usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) -{ - if (stage == USB_TRANSFER_STAGE_SETUP) { - endpoint->buffer[0] = BOARD_ID; - usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 1, NULL, NULL); - usb_transfer_schedule_ack(endpoint->out); - } - return USB_REQUEST_STATUS_OK; -} - -usb_request_status_t usb_vendor_request_read_version_string( - usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) -{ - uint8_t length; - - if (stage == USB_TRANSFER_STAGE_SETUP) { - length = (uint8_t)strlen(version_string); - usb_transfer_schedule_block(endpoint->in, version_string, length, NULL, NULL); - usb_transfer_schedule_ack(endpoint->out); - } - return USB_REQUEST_STATUS_OK; -} - usb_request_status_t usb_vendor_request_set_freq( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) @@ -245,48 +219,6 @@ usb_request_status_t usb_vendor_request_set_amp_enable( } } -typedef struct { - uint32_t part_id[2]; - uint32_t serial_no[4]; -} read_partid_serialno_t; - -usb_request_status_t usb_vendor_request_read_partid_serialno( - usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) -{ - uint8_t length; - read_partid_serialno_t read_partid_serialno; - iap_cmd_res_t iap_cmd_res; - - if (stage == USB_TRANSFER_STAGE_SETUP) - { - /* Read IAP Part Number Identification */ - iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_PART_ID_NO; - iap_cmd_call(&iap_cmd_res); - if(iap_cmd_res.status_res.status_ret != CMD_SUCCESS) - return USB_REQUEST_STATUS_STALL; - - read_partid_serialno.part_id[0] = iap_cmd_res.status_res.iap_result[0]; - read_partid_serialno.part_id[1] = iap_cmd_res.status_res.iap_result[1]; - - /* Read IAP Serial Number Identification */ - iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_SERIAL_NO; - iap_cmd_call(&iap_cmd_res); - if(iap_cmd_res.status_res.status_ret != CMD_SUCCESS) - return USB_REQUEST_STATUS_STALL; - - read_partid_serialno.serial_no[0] = iap_cmd_res.status_res.iap_result[0]; - read_partid_serialno.serial_no[1] = iap_cmd_res.status_res.iap_result[1]; - read_partid_serialno.serial_no[2] = iap_cmd_res.status_res.iap_result[2]; - read_partid_serialno.serial_no[3] = iap_cmd_res.status_res.iap_result[3]; - - length = (uint8_t)sizeof(read_partid_serialno_t); - usb_transfer_schedule_block(endpoint->in, &read_partid_serialno, length, - NULL, NULL); - usb_transfer_schedule_ack(endpoint->out); - } - return USB_REQUEST_STATUS_OK; -} - usb_request_status_t usb_vendor_request_set_lna_gain( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) diff --git a/firmware/hackrf_usb/usb_api_board_info.c b/firmware/hackrf_usb/usb_api_board_info.c new file mode 100644 index 00000000..7cad222f --- /dev/null +++ b/firmware/hackrf_usb/usb_api_board_info.c @@ -0,0 +1,93 @@ +/* + * 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_board_info.h" + +#include +#include +#include + +#include +#include + +char version_string[] = VERSION_STRING; + +usb_request_status_t usb_vendor_request_read_board_id( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) +{ + if (stage == USB_TRANSFER_STAGE_SETUP) { + endpoint->buffer[0] = BOARD_ID; + usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 1, NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + } + return USB_REQUEST_STATUS_OK; +} + +usb_request_status_t usb_vendor_request_read_version_string( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) +{ + uint8_t length; + + if (stage == USB_TRANSFER_STAGE_SETUP) { + length = (uint8_t)strlen(version_string); + usb_transfer_schedule_block(endpoint->in, version_string, length, NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + } + return USB_REQUEST_STATUS_OK; +} + +usb_request_status_t usb_vendor_request_read_partid_serialno( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) +{ + uint8_t length; + read_partid_serialno_t read_partid_serialno; + iap_cmd_res_t iap_cmd_res; + + if (stage == USB_TRANSFER_STAGE_SETUP) + { + /* Read IAP Part Number Identification */ + iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_PART_ID_NO; + iap_cmd_call(&iap_cmd_res); + if(iap_cmd_res.status_res.status_ret != CMD_SUCCESS) + return USB_REQUEST_STATUS_STALL; + + read_partid_serialno.part_id[0] = iap_cmd_res.status_res.iap_result[0]; + read_partid_serialno.part_id[1] = iap_cmd_res.status_res.iap_result[1]; + + /* Read IAP Serial Number Identification */ + iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_SERIAL_NO; + iap_cmd_call(&iap_cmd_res); + if(iap_cmd_res.status_res.status_ret != CMD_SUCCESS) + return USB_REQUEST_STATUS_STALL; + + read_partid_serialno.serial_no[0] = iap_cmd_res.status_res.iap_result[0]; + read_partid_serialno.serial_no[1] = iap_cmd_res.status_res.iap_result[1]; + read_partid_serialno.serial_no[2] = iap_cmd_res.status_res.iap_result[2]; + read_partid_serialno.serial_no[3] = iap_cmd_res.status_res.iap_result[3]; + + length = (uint8_t)sizeof(read_partid_serialno_t); + usb_transfer_schedule_block(endpoint->in, &read_partid_serialno, length, + NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + } + return USB_REQUEST_STATUS_OK; +} diff --git a/firmware/hackrf_usb/usb_api_board_info.h b/firmware/hackrf_usb/usb_api_board_info.h new file mode 100644 index 00000000..90a76cb9 --- /dev/null +++ b/firmware/hackrf_usb/usb_api_board_info.h @@ -0,0 +1,43 @@ +/* + * 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_BOARD_INFO_H__ +#define __USB_API_BOARD_INFO_H__ + +#include + +#include +#include + +typedef struct { + uint32_t part_id[2]; + uint32_t serial_no[4]; +} read_partid_serialno_t; + +usb_request_status_t usb_vendor_request_read_board_id( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage); +usb_request_status_t usb_vendor_request_read_version_string( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage); +usb_request_status_t usb_vendor_request_read_partid_serialno( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage); + +#endif /* end of include guard: __USB_API_BOARD_INFO_H__ */