From 47805d1c3b5790e7eeea4d90fbdac6d5fad9a87f Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 21 Mar 2018 16:43:22 -0600 Subject: [PATCH 01/23] Set do_exit flag per device rather than globally --- host/libhackrf/src/hackrf.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index f097f92b..23d07fb2 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -111,6 +111,7 @@ struct hackrf_device { volatile bool streaming; /* volatile shared between threads (read only) */ void* rx_ctx; void* tx_ctx; + volatile bool do_exit; unsigned char buffer[TRANSFER_COUNT * TRANSFER_BUFFER_SIZE]; }; @@ -144,8 +145,6 @@ hackrf_usb_api_version_read(device, &usb_version); \ if(usb_version < version) \ return HACKRF_ERROR_USB_API_VERSION; -static volatile bool do_exit = false; - static const uint16_t hackrf_usb_vid = 0x1d50; static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b; static const uint16_t hackrf_one_usb_pid = 0x6089; @@ -155,9 +154,9 @@ static uint16_t open_devices = 0; static libusb_context* g_libusb_context = NULL; int last_libusb_error = LIBUSB_SUCCESS; -static void request_exit(void) +static void request_exit(hackrf_device* device) { - do_exit = true; + device->do_exit = true; } static int cancel_transfers(hackrf_device* device) @@ -570,7 +569,7 @@ static int hackrf_open_setup(libusb_device_handle* usb_device, hackrf_device** d lib_device->callback = NULL; lib_device->transfer_thread_started = false; lib_device->streaming = false; - do_exit = false; + lib_device->do_exit = false; result = allocate_transfers(lib_device); if( result != 0 ) @@ -1478,7 +1477,7 @@ static void* transfer_threadproc(void* arg) int error; struct timeval timeout = { 0, 500000 }; - while( (device->streaming) && (do_exit == false) ) + while( (device->streaming) && (device->do_exit == false) ) { error = libusb_handle_events_timeout(g_libusb_context, &timeout); if( (error != 0) && (error != LIBUSB_ERROR_INTERRUPTED) ) @@ -1509,12 +1508,12 @@ static void LIBUSB_CALL hackrf_libusb_transfer_callback(struct libusb_transfer* { if( libusb_submit_transfer(usb_transfer) < 0) { - request_exit(); + request_exit(device); }else { return; } }else { - request_exit(); + request_exit(device); } } else { /* Other cases LIBUSB_TRANSFER_NO_DEVICE @@ -1522,7 +1521,7 @@ static void LIBUSB_CALL hackrf_libusb_transfer_callback(struct libusb_transfer* LIBUSB_TRANSFER_STALL, LIBUSB_TRANSFER_OVERFLOW LIBUSB_TRANSFER_CANCELLED ... */ - request_exit(); /* Fatal error stop transfer */ + request_exit(device); /* Fatal error stop transfer */ } } @@ -1531,7 +1530,7 @@ static int kill_transfer_thread(hackrf_device* device) void* value; int result; - request_exit(); + request_exit(device); if( device->transfer_thread_started != false ) { @@ -1551,15 +1550,15 @@ static int kill_transfer_thread(hackrf_device* device) } static int create_transfer_thread(hackrf_device* device, - const uint8_t endpoint_address, - hackrf_sample_block_cb_fn callback) + const uint8_t endpoint_address, + hackrf_sample_block_cb_fn callback) { int result; if( device->transfer_thread_started == false ) { device->streaming = false; - do_exit = false; + device->do_exit = false; result = prepare_transfers( device, endpoint_address, @@ -1593,7 +1592,7 @@ int ADDCALL hackrf_is_streaming(hackrf_device* device) if( (device->transfer_thread_started == true) && (device->streaming == true) && - (do_exit == false) ) + (device->do_exit == false) ) { return HACKRF_TRUE; } else { From 6a3105452f542578e55b596c4c6038c598633ab2 Mon Sep 17 00:00:00 2001 From: Cassiano Aquino Date: Sat, 28 Apr 2018 00:48:07 +0100 Subject: [PATCH 02/23] Replacing xcode version to check travis build failure. --- .travis.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b129fc7e..a73deaf4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,16 +21,21 @@ matrix: - os: linux compiler: gcc - os: osx - osx_image: xcode7.3 + osx_image: xcode9.2 compiler: clang before_script: - export CFLAGS="-Wall -Wextra -Werror" before_install: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap PX4/homebrew-px4; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libusb fftw gcc-arm-none-eabi dfu-util; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade libusb openssl; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cask uninstall oclint; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew uninstall python; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew link openssl --force; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libusb fftw gcc-arm-none-eabi dfu-util python@2; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH=/usr/local/bin:$PATH; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then wget -O gcc-arm-none-eabi.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar xf gcc-arm-none-eabi.tar.bz2; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export PATH=$PATH:$PWD/gcc-arm-none-eabi-6-2017-q2-update/bin; fi From 5e9cad66363467fae93aec29679c041c03905047 Mon Sep 17 00:00:00 2001 From: Michael Ossmann Date: Mon, 30 Apr 2018 18:03:41 -0600 Subject: [PATCH 03/23] HackRF One: replaced U20 with Winbond W25Q80DVSSIG --- hardware/hackrf-one/baseband.sch | 4 ++-- hardware/hackrf-one/frontend.sch | 6 +++--- hardware/hackrf-one/hackrf-one.cmp | 2 +- hardware/hackrf-one/hackrf-one.kicad_pcb | 2 +- hardware/hackrf-one/hackrf-one.net | 4 ++-- hardware/hackrf-one/hackrf-one.pro | 12 +++++++++++- hardware/hackrf-one/hackrf-one.sch | 4 ++-- hardware/hackrf-one/mcu.sch | 8 ++++---- 8 files changed, 26 insertions(+), 16 deletions(-) diff --git a/hardware/hackrf-one/baseband.sch b/hardware/hackrf-one/baseband.sch index 72596e71..c203582e 100644 --- a/hardware/hackrf-one/baseband.sch +++ b/hardware/hackrf-one/baseband.sch @@ -36,9 +36,9 @@ $Descr User 17000 11000 encoding utf-8 Sheet 3 4 Title "HackRF One baseband" -Date "13 feb 2014" +Date "2018-04-17" Rev "" -Comp "Copyright 2012 Michael Ossmann" +Comp "Copyright 2012-2018 Michael Ossmann" Comment1 "License: GPL v2" Comment2 "" Comment3 "" diff --git a/hardware/hackrf-one/frontend.sch b/hardware/hackrf-one/frontend.sch index e64c3808..edb4f5f0 100644 --- a/hardware/hackrf-one/frontend.sch +++ b/hardware/hackrf-one/frontend.sch @@ -36,9 +36,9 @@ $Descr User 17000 11000 encoding utf-8 Sheet 2 4 Title "HackRF One frontend" -Date "13 feb 2014" +Date "2018-04-17" Rev "" -Comp "Copyright 2012 Michael Ossmann" +Comp "Copyright 2012-2018 Michael Ossmann" Comment1 "License: GPL v2" Comment2 "" Comment3 "" @@ -1539,7 +1539,7 @@ Text Label 14350 7350 1 40 ~ 0 TX_AMP_OUT Text Label 8500 8550 1 40 ~ 0 RX_AMP_OUT -Text Label 12300 9350 0 40 ~ 0 +Text Label 11850 9100 0 40 ~ 0 RX_AMP_IN $Comp L GND #PWR036 diff --git a/hardware/hackrf-one/hackrf-one.cmp b/hardware/hackrf-one/hackrf-one.cmp index 88f9592c..a291bfc7 100644 --- a/hardware/hackrf-one/hackrf-one.cmp +++ b/hardware/hackrf-one/hackrf-one.cmp @@ -2845,7 +2845,7 @@ EndCmp BeginCmp TimeStamp = /5037043E/4F825D1B; Reference = U20; -ValeurCmp = W25Q80BV; +ValeurCmp = W25Q80; IdModule = hackrf:GSG-SOIC8-208; EndCmp diff --git a/hardware/hackrf-one/hackrf-one.kicad_pcb b/hardware/hackrf-one/hackrf-one.kicad_pcb index 6ea68c82..f9b2bde3 100644 --- a/hardware/hackrf-one/hackrf-one.kicad_pcb +++ b/hardware/hackrf-one/hackrf-one.kicad_pcb @@ -9630,7 +9630,7 @@ (fp_text reference U20 (at 0 0 180) (layer F.SilkS) (effects (font (thickness 0.3048))) ) - (fp_text value W25Q80BV (at 0 0 180) (layer F.SilkS) hide + (fp_text value W25Q80 (at 0 0 180) (layer F.SilkS) hide (effects (font (thickness 0.3048))) ) (fp_circle (center -1.651 -1.651) (end -1.143 -1.651) (layer F.SilkS) (width 0.2032)) diff --git a/hardware/hackrf-one/hackrf-one.net b/hardware/hackrf-one/hackrf-one.net index 1fb1b32b..c52a5c2f 100644 --- a/hardware/hackrf-one/hackrf-one.net +++ b/hardware/hackrf-one/hackrf-one.net @@ -3452,11 +3452,11 @@ (sheetpath (names /mcu/usb/power/) (tstamps /5037043E/)) (tstamp 4F82F4C0)) (comp (ref U20) - (value W25Q80BV) + (value W25Q80) (footprint hackrf:GSG-SOIC8-208) (fields (field (name Manufacturer) Winbond) - (field (name "Part Number") W25Q80JVSSIQ) + (field (name "Part Number") W25Q80DVSSIG) (field (name Description) "IC FLASH 8MBIT 8SOIC")) (libsource (lib hackrf) (part W25Q80BV)) (sheetpath (names /mcu/usb/power/) (tstamps /5037043E/)) diff --git a/hardware/hackrf-one/hackrf-one.pro b/hardware/hackrf-one/hackrf-one.pro index d447a371..ed7df41b 100644 --- a/hardware/hackrf-one/hackrf-one.pro +++ b/hardware/hackrf-one/hackrf-one.pro @@ -1,4 +1,4 @@ -update=Wed 13 Jul 2016 05:14:22 PM MDT +update=Tue 17 Apr 2018 06:35:23 AM MDT version=1 last_client=kicad [cvpcb] @@ -77,3 +77,13 @@ LibName27=atmel LibName28=contrib LibName29=valves LibName30=hackrf +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName= +SpiceForceRefPrefix=0 +SpiceUseNetNumbers=0 +LabSize=60 diff --git a/hardware/hackrf-one/hackrf-one.sch b/hardware/hackrf-one/hackrf-one.sch index 35af03b8..c90bed21 100644 --- a/hardware/hackrf-one/hackrf-one.sch +++ b/hardware/hackrf-one/hackrf-one.sch @@ -36,9 +36,9 @@ $Descr User 17000 11000 encoding utf-8 Sheet 1 4 Title "HackRF One" -Date "13 feb 2014" +Date "2018-04-17" Rev "" -Comp "Copyright 2012 Michael Ossmann" +Comp "Copyright 2012-2018 Michael Ossmann" Comment1 "License: GPL v2" Comment2 "" Comment3 "" diff --git a/hardware/hackrf-one/mcu.sch b/hardware/hackrf-one/mcu.sch index 4f45fcd2..f93d4e91 100644 --- a/hardware/hackrf-one/mcu.sch +++ b/hardware/hackrf-one/mcu.sch @@ -36,9 +36,9 @@ $Descr User 17000 11000 encoding utf-8 Sheet 4 4 Title "HackRF One mcu/usb/power" -Date "13 feb 2014" +Date "2018-04-17" Rev "" -Comp "Copyright 2012 Michael Ossmann" +Comp "Copyright 2012-2018 Michael Ossmann" Comment1 "License: GPL v2" Comment2 "" Comment3 "" @@ -2088,11 +2088,11 @@ L W25Q80BV U20 U 1 1 4F825D1B P 9800 1450 F 0 "U20" H 9800 1200 60 0000 C CNN -F 1 "W25Q80JV" H 9800 1700 60 0000 C CNN +F 1 "W25Q80" H 9800 1700 60 0000 C CNN F 2 "hackrf:GSG-SOIC8-208" H 9800 1450 60 0001 C CNN F 3 "" H 9800 1450 60 0001 C CNN F 4 "Winbond" H 9800 1450 60 0001 C CNN "Manufacturer" -F 5 "W25Q80JVSSIQ" H 9800 1450 60 0001 C CNN "Part Number" +F 5 "W25Q80DVSSIG" H 9800 1450 60 0001 C CNN "Part Number" F 6 "IC FLASH 8MBIT 8SOIC" H 9800 1450 60 0001 C CNN "Description" 1 9800 1450 1 0 0 -1 From 8e21573cb719e74bfaeecaf39d1e5034f6bcd8f0 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Fri, 17 Aug 2018 15:29:13 -0600 Subject: [PATCH 04/23] Avoid brew warning about python deps while uninstalling --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a73deaf4..238a4968 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ before_install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade libusb openssl; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cask uninstall oclint; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew uninstall python; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew uninstall --ignore-dependencies python; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew link openssl --force; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libusb fftw gcc-arm-none-eabi dfu-util python@2; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH=/usr/local/bin:$PATH; fi From 540f86a5b0f23f4f724224331f616d08133ca66f Mon Sep 17 00:00:00 2001 From: bl4krat Date: Fri, 7 Sep 2018 04:25:19 +0100 Subject: [PATCH 05/23] Fixed operation of switch --list --- host/hackrf-tools/src/hackrf_operacake.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/hackrf-tools/src/hackrf_operacake.c b/host/hackrf-tools/src/hackrf_operacake.c index 01bd12a6..97a1883c 100644 --- a/host/hackrf-tools/src/hackrf_operacake.c +++ b/host/hackrf-tools/src/hackrf_operacake.c @@ -50,7 +50,7 @@ static void usage() { static struct option long_options[] = { { "device", no_argument, 0, 'd' }, { "address", no_argument, 0, 'o' }, - { "list", no_argument, 0, 'v' }, + { "list", no_argument, 0, 'l' }, { "help", no_argument, 0, 'h' }, { 0, 0, 0, 0 }, }; From 31b83ef42baf12bc3fe3a5a8d6eba426e6d9e2a2 Mon Sep 17 00:00:00 2001 From: Michael Ossmann Date: Fri, 21 Sep 2018 14:46:18 -0600 Subject: [PATCH 06/23] Opera Cake: pin header part selection --- hardware/operacake/operacake-cache.lib | 112 ++++++++++++------------- hardware/operacake/operacake.sch | 20 ++++- 2 files changed, 73 insertions(+), 59 deletions(-) diff --git a/hardware/operacake/operacake-cache.lib b/hardware/operacake/operacake-cache.lib index 0de6b682..2ed6ec8b 100644 --- a/hardware/operacake/operacake-cache.lib +++ b/hardware/operacake/operacake-cache.lib @@ -59,14 +59,10 @@ ENDDEF DEF C C 0 10 N Y 1 F N F0 "C" 25 100 50 H V L CNN F1 "C" 25 -100 50 H V L CNN -F2 "" 38 -150 50 H V C CNN -F3 "" 0 0 50 H V C CNN +F2 "" 38 -150 50 H I C CNN +F3 "" 0 0 50 H I C CNN $FPLIST - C? - C_????_* - C_???? - SMD*_c - Capacitor* + C_* $ENDFPLIST DRAW P 2 0 1 20 -80 -30 80 -30 N @@ -78,16 +74,17 @@ ENDDEF # # CONN_02X03 # -DEF CONN_02X03 P 0 1 Y N 1 F N -F0 "P" 0 200 50 H V C CNN +DEF CONN_02X03 J 0 1 Y N 1 F N +F0 "J" 0 200 50 H V C CNN F1 "CONN_02X03" 0 -200 50 H V C CNN -F2 "" 0 -1200 50 H V C CNN -F3 "" 0 -1200 50 H V C CNN +F2 "" 0 -1200 50 H I C CNN +F3 "" 0 -1200 50 H I C CNN $FPLIST - Pin_Header_Straight_2X03 - Pin_Header_Angled_2X03 - Socket_Strip_Straight_2X03 - Socket_Strip_Angled_2X03 + Pin_Header_Straight_2X* + Pin_Header_Angled_2X* + Socket_Strip_Straight_2X* + Socket_Strip_Angled_2X* + IDC_Header_Straight_* $ENDFPLIST DRAW S -100 -95 -50 -105 0 1 0 N @@ -108,16 +105,17 @@ ENDDEF # # CONN_02X08 # -DEF CONN_02X08 P 0 1 Y N 1 F N -F0 "P" 0 450 50 H V C CNN +DEF CONN_02X08 J 0 1 Y N 1 F N +F0 "J" 0 450 50 H V C CNN F1 "CONN_02X08" 0 0 50 V V C CNN -F2 "" 0 -1200 50 H V C CNN -F3 "" 0 -1200 50 H V C CNN +F2 "" 0 -1200 50 H I C CNN +F3 "" 0 -1200 50 H I C CNN $FPLIST - Pin_Header_Straight_2X08 - Pin_Header_Angled_2X08 - Socket_Strip_Straight_2X08 - Socket_Strip_Angled_2X08 + Pin_Header_Straight_2X* + Pin_Header_Angled_2X* + Socket_Strip_Straight_2X* + Socket_Strip_Angled_2X* + IDC_Header_Straight_* $ENDFPLIST DRAW S -100 -345 -50 -355 0 1 0 N @@ -158,16 +156,16 @@ ENDDEF # # CONN_02X11 # -DEF CONN_02X11 P 0 1 Y N 1 F N -F0 "P" 0 600 50 H V C CNN +DEF CONN_02X11 J 0 1 Y N 1 F N +F0 "J" 0 600 50 H V C CNN F1 "CONN_02X11" 0 0 50 V V C CNN -F2 "" 0 -1200 50 H V C CNN -F3 "" 0 -1200 50 H V C CNN +F2 "" 0 -1200 50 H I C CNN +F3 "" 0 -1200 50 H I C CNN $FPLIST - Pin_Header_Straight_2X11 - Pin_Header_Angled_2X11 - Socket_Strip_Straight_2X11 - Socket_Strip_Angled_2X11 + Pin_Header_Straight_2X* + Pin_Header_Angled_2X* + Socket_Strip_Straight_2X* + Socket_Strip_Angled_2X* $ENDFPLIST DRAW S -100 -495 -50 -505 0 1 0 N @@ -220,16 +218,17 @@ ENDDEF # # CONN_02X13 # -DEF CONN_02X13 P 0 1 Y N 1 F N -F0 "P" 0 700 50 H V C CNN +DEF CONN_02X13 J 0 1 Y N 1 F N +F0 "J" 0 700 50 H V C CNN F1 "CONN_02X13" 0 0 50 V V C CNN -F2 "" 0 -1150 50 H V C CNN -F3 "" 0 -1150 50 H V C CNN +F2 "" 0 -1150 50 H I C CNN +F3 "" 0 -1150 50 H I C CNN $FPLIST - Pin_Header_Straight_2X13 - Pin_Header_Angled_2X13 - Socket_Strip_Straight_2X13 - Socket_Strip_Angled_2X13 + Pin_Header_Straight_2X* + Pin_Header_Angled_2X* + Socket_Strip_Straight_2X* + Socket_Strip_Angled_2X* + IDC_Header_Straight_* $ENDFPLIST DRAW S -100 -595 -50 -605 0 1 0 N @@ -290,16 +289,17 @@ ENDDEF # # CONN_02X20 # -DEF CONN_02X20 P 0 1 Y N 1 F N -F0 "P" 0 1050 50 H V C CNN +DEF CONN_02X20 J 0 1 Y N 1 F N +F0 "J" 0 1050 50 H V C CNN F1 "CONN_02X20" 0 0 50 V V C CNN -F2 "" 0 -950 50 H V C CNN -F3 "" 0 -950 50 H V C CNN +F2 "" 0 -950 50 H I C CNN +F3 "" 0 -950 50 H I C CNN $FPLIST - Pin_Header_Straight_2X20 - Pin_Header_Angled_2X20 - Socket_Strip_Straight_2X20 - Socket_Strip_Angled_2X20 + Pin_Header_Straight_2X* + Pin_Header_Angled_2X* + Socket_Strip_Straight_2X* + Socket_Strip_Angled_2X* + IDC_Header_Straight_* $ENDFPLIST DRAW S -100 -945 -50 -955 0 1 0 N @@ -405,8 +405,8 @@ ENDDEF DEF GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GND" 0 -150 50 H V C CNN -F2 "" 0 0 50 H V C CNN -F3 "" 0 0 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N @@ -453,8 +453,8 @@ ENDDEF DEF LED D 0 40 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "LED" 0 -100 50 H V C CNN -F2 "" 0 0 50 H V C CNN -F3 "" 0 0 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN $FPLIST LED* $ENDFPLIST @@ -527,11 +527,11 @@ ENDDEF DEF R R 0 0 N Y 1 F N F0 "R" 80 0 50 V V C CNN F1 "R" 0 0 50 V V C CNN -F2 "" -70 0 50 V V C CNN -F3 "" 0 0 50 H V C CNN +F2 "" -70 0 50 V I C CNN +F3 "" 0 0 50 H I C CNN $FPLIST R_* - Resistor_* + R_* $ENDFPLIST DRAW S -40 -100 40 100 0 1 10 N @@ -600,8 +600,8 @@ ENDDEF DEF VCC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VCC" 0 150 50 H V C CNN -F2 "" 0 0 50 H V C CNN -F3 "" 0 0 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN DRAW C 0 75 25 0 1 0 N P 2 0 1 0 0 0 0 50 N diff --git a/hardware/operacake/operacake.sch b/hardware/operacake/operacake.sch index f458bc70..d7d2dcce 100644 --- a/hardware/operacake/operacake.sch +++ b/hardware/operacake/operacake.sch @@ -215,7 +215,9 @@ F 0 "P28" H 5550 10100 60 0000 C CNN F 1 "SD" V 5550 9500 60 0000 C CNN F 2 "gsg-modules:HEADER-2x11" H 5550 9500 60 0001 C CNN F 3 "" H 5550 9500 60 0001 C CNN -F 4 "DNP" H 5550 8850 60 0000 C CNN "Note" +F 4 "Samtec" H 5550 9500 60 0001 C CNN "Manufacturer" +F 5 "SSQ-111-03-G-D" H 5550 9500 60 0001 C CNN "Part Number" +F 6 "CONN RCPT .100\" 22POS DUAL GOLD" H 5550 9500 60 0001 C CNN "Description" 1 5550 9500 1 0 0 -1 $EndComp @@ -238,6 +240,9 @@ F 0 "P22" H 6700 10300 50 0000 C CNN F 1 "I2S" V 6700 9600 40 0000 C CNN F 2 "gsg-modules:HEADER-2x13" H 6700 9600 60 0001 C CNN F 3 "" H 6700 9600 60 0001 C CNN +F 4 "Samtec" H 6700 9600 60 0001 C CNN "Manufacturer" +F 5 "SSQ-113-03-G-D" H 6700 9600 60 0001 C CNN "Part Number" +F 6 "CONN RCPT .100\" 26POS DUAL GOLD" H 6700 9600 60 0001 C CNN "Description" 1 6700 9600 1 0 0 -1 $EndComp @@ -2102,6 +2107,9 @@ F 0 "P20" H 8300 10100 60 0000 C CNN F 1 "GPIO" V 8300 9500 50 0000 C CNN F 2 "gsg-modules:HEADER-2x11" H 8300 9500 60 0001 C CNN F 3 "" H 8300 9500 60 0001 C CNN +F 4 "Samtec" H 8300 9500 60 0001 C CNN "Manufacturer" +F 5 "SSQ-111-03-G-D" H 8300 9500 60 0001 C CNN "Part Number" +F 6 "CONN RCPT .100\" 22POS DUAL GOLD" H 8300 9500 60 0001 C CNN "Desciption" 1 8300 9500 1 0 0 -1 $EndComp @@ -2113,6 +2121,9 @@ F 0 "P1" H 7850 7450 50 0000 C CNN F 1 "ADDRESS" H 7850 7050 50 0000 C CNN F 2 "gsg-modules:HEADER-2x3" H 7850 6050 60 0001 C CNN F 3 "" H 7850 6050 60 0000 C CNN +F 4 "Omron" H 7850 7250 60 0001 C CNN "Manufacturer" +F 5 "XG8T-0631" H 7850 7250 60 0001 C CNN "Part Number" +F 6 "JUMPER PLUG 6POS DOUBLE ROW" H 7850 7250 60 0001 C CNN "Description" 1 7850 7250 1 0 0 -1 $EndComp @@ -2176,7 +2187,10 @@ F 0 "P9" H 4450 9750 50 0000 C CNN F 1 "BASEBAND" V 4450 9300 50 0000 C CNN F 2 "gsg-modules:HEADER-2x8" H 4450 8100 60 0001 C CNN F 3 "" H 4450 8100 60 0000 C CNN -F 4 "DNP" H 4450 8800 60 0000 C CNN "Note" +F 4 "Samtec" H 4450 9300 60 0001 C CNN "Manufacturer" +F 5 "SSQ-108-03-G-D" H 4450 9300 60 0001 C CNN "Part Number" +F 6 "CONN RCPT .100\" 16POS DUAL GOLD" H 4450 9300 60 0001 C CNN "Description" +F 7 "DNP" H 4450 8800 60 0000 C CNN "Note" 1 4450 9300 1 0 0 -1 $EndComp @@ -2293,7 +2307,7 @@ SCL Text Notes 1750 6650 0 40 ~ 0 test points Text Notes 9500 9900 0 40 ~ 0 -Quick mode: When enabled by !OE (U4 IO7), RF switches are\ncontrolled by GPIO instead of I2C. U4 IO2 through IO6 must\nbe configured as inputs. +Quick mode: When enabled by !OE (U4 IO7), RF switches are\ncontrolled by GPIO or SCT instead of I2C. U4 IO2 through IO6\nmust be configured as inputs. Text Notes 12900 8050 0 40 ~ 0 Control logic guarantees valid RF switch\nconfiguration and reduces the number\nof external control signals required. Text Notes 12700 2900 0 40 ~ 0 From 4c2146aa7a1302a0017e82c6729ec1141c2319f8 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 3 Oct 2018 11:58:15 -0600 Subject: [PATCH 07/23] Clean up opera cake range parsing code and improve error handling --- host/hackrf-tools/src/hackrf_operacake.c | 99 ++++++++++++++---------- 1 file changed, 57 insertions(+), 42 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_operacake.c b/host/hackrf-tools/src/hackrf_operacake.c index 97a1883c..aba8dd94 100644 --- a/host/hackrf-tools/src/hackrf_operacake.c +++ b/host/hackrf-tools/src/hackrf_operacake.c @@ -72,54 +72,64 @@ int parse_uint16(char* const s, uint16_t* const value) { } } -int parse_u16_range(char* s, hackrf_oc_range* range) { - int result = 0; - uint16_t tmp_port, port = 0; +int parse_port(char* str, uint8_t* port) { + uint16_t tmp_port; + int result; + if(str[0] == 'A' || str[0] == 'B') { + // The port was specified as a side and number eg. A1 or B3 + result = parse_uint16(str+1, &tmp_port); + if (result != HACKRF_SUCCESS) + return result; + + if(tmp_port >= 5 || tmp_port <= 0) { + fprintf(stderr, "invalid port: %s\n", str); + return HACKRF_ERROR_INVALID_PARAM; + } + + // Value was a valid port between 0-4 + if(str[0] == 'A') { + // A1=0, A2=1, A3=2, A4=3 + tmp_port -= 1; + } else { + // If B was specfied just add 4-1 ports + // B1=4, B2=5, B3=6, B4=7 + tmp_port += 3; + } + } else { + result = parse_uint16(str, &tmp_port); + if (result != HACKRF_SUCCESS) + return result; + } + *port = tmp_port & 0xFF; + // printf("Port: %d\n", *port); + return HACKRF_SUCCESS; +} + +int parse_range(char* s, hackrf_oc_range* range) { + int result; char *sep = strchr(s, ':'); if (!sep) return HACKRF_ERROR_INVALID_PARAM; + // Replace : separator to null terminate string for strtol() *sep = 0; + sep++; // Skip past the separator - char *sep2 = strchr(sep+1, ':'); + char *sep2 = strchr(sep, ':'); if (!sep2) return HACKRF_ERROR_INVALID_PARAM; + // Replace : separator to null terminate string for strtol() *sep2 = 0; + sep2++; // Skip past the separator result = parse_uint16(s, &range->freq_min); if (result != HACKRF_SUCCESS) return result; - result = parse_uint16(sep + 1, &range->freq_max); + result = parse_uint16(sep, &range->freq_max); if (result != HACKRF_SUCCESS) return result; - - sep2++; // Skip past the ':' - if(sep2[0] == 'A' || sep2[0] == 'B') { - // The port was specified as a side and number eg. A1 or B3 - if(sep2[1] > 0x30 && sep2[1] < 0x35) { - tmp_port = sep2[1] - 0x30; - if(tmp_port >= 5 || tmp_port <= 0) - return HACKRF_ERROR_INVALID_PARAM; - - // Value was a valid port between 0-4 - if(sep2[0] == 'A') { - // A1=0, A2=1, A3=2, A4=3 - port = (uint16_t) tmp_port-1; - } else { - // If B was specfied just add 4-1 ports - // B1=4, B2=5, B3=6, B4=7 - port = (uint16_t) tmp_port+3; - } - //printf("Setting port %c%c to port %d\n", sep2[0], sep2[1], (uint16_t)port); - } - } else { - result = parse_uint16(sep2, &port); - if (result != HACKRF_SUCCESS) - return result; - } - range->port = port & 0xFF; - - return HACKRF_SUCCESS; + result = parse_port(sep2, &(range->port)); + return result; } int main(int argc, char** argv) { @@ -156,7 +166,18 @@ int main(int argc, char** argv) { break; case 'f': - result = parse_u16_range(optarg, &ranges[range_idx]); + if(MAX_FREQ_RANGES == range_idx) { + fprintf(stderr, + "argument error: specify a maximum of %u frequency ranges.\n", + MAX_FREQ_RANGES); + usage(); + return EXIT_FAILURE; + } + result = parse_range(optarg, &ranges[range_idx]); + if (result != HACKRF_SUCCESS) { + fprintf(stderr, "failed to parse range\n"); + return EXIT_FAILURE; + } if(ranges[range_idx].freq_min >= ranges[range_idx].freq_max) { fprintf(stderr, "argument error: freq_max must be greater than freq_min.\n"); @@ -170,13 +191,7 @@ int main(int argc, char** argv) { usage(); return EXIT_FAILURE; } - if(MAX_FREQ_RANGES <= range_idx++) { - fprintf(stderr, - "argument error: specify a maximum of %u frequency ranges.\n", - MAX_FREQ_RANGES); - usage(); - return EXIT_FAILURE; - } + range_idx++; break; case 'a': @@ -243,7 +258,7 @@ int main(int argc, char** argv) { } if(range_idx) { - uint8_t range_bytes[MAX_FREQ_RANGES * 5]; + uint8_t range_bytes[MAX_FREQ_RANGES * sizeof(hackrf_oc_range)]; uint8_t ptr; for(i=0; i Date: Wed, 3 Oct 2018 14:13:59 -0600 Subject: [PATCH 08/23] match opera cake port designations to silkscreen - closed #531 --- host/hackrf-tools/src/hackrf_operacake.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_operacake.c b/host/hackrf-tools/src/hackrf_operacake.c index aba8dd94..810f2147 100644 --- a/host/hackrf-tools/src/hackrf_operacake.c +++ b/host/hackrf-tools/src/hackrf_operacake.c @@ -135,9 +135,9 @@ int parse_range(char* s, hackrf_oc_range* range) { int main(int argc, char** argv) { int opt; const char* serial_number = NULL; - int operacake_address = 0; - int port_a = 0; - int port_b = 0; + uint8_t operacake_address = 0; + uint8_t port_a = 0; + uint8_t port_b = 0; bool set_ports = false; bool list = false; uint8_t operacakes[8]; @@ -195,11 +195,19 @@ int main(int argc, char** argv) { break; case 'a': - port_a = atoi(optarg); + result = parse_port(optarg, &port_a); + if (result != HACKRF_SUCCESS) { + fprintf(stderr, "failed to parse port\n"); + return EXIT_FAILURE; + } break; case 'b': - port_b = atoi(optarg); + result = parse_port(optarg, &port_b); + if (result != HACKRF_SUCCESS) { + fprintf(stderr, "failed to parse port\n"); + return EXIT_FAILURE; + } break; case 'l': @@ -250,10 +258,14 @@ int main(int argc, char** argv) { } if(set_ports) { + if(((port_a<=3) && (port_b<=3)) || ((port_a>=4) && (port_b>=4))) { + fprintf(stderr, "Port A and B cannot be connected to the same side\n"); + return EXIT_FAILURE; + } result = hackrf_set_operacake_ports(device, operacake_address, port_a, port_b); if( result ) { printf("hackrf_set_operacake_ports() failed: %s (%d)\n", hackrf_error_name(result), result); - return -1; + return EXIT_FAILURE; } } From cd5de9fe688c670287daa1120f432c8920197ffe Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 10 Oct 2018 14:23:52 -0600 Subject: [PATCH 09/23] Travis OS X fixes (#534) * Try using default xcode to fix OS X builds * Remove libUSB install because it's pre-installed on Travis OS X containers * Remove oclint to allow fftw to install. No, really. --- .travis.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 238a4968..76610851 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,6 @@ matrix: - os: linux compiler: gcc - os: osx - osx_image: xcode9.2 compiler: clang before_script: @@ -29,13 +28,11 @@ before_script: before_install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap PX4/homebrew-px4; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew upgrade libusb openssl; fi + # Remove oclint because it conflicts with gcc, which fftw requires - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cask uninstall oclint; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew uninstall --ignore-dependencies python; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew link openssl --force; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libusb fftw gcc-arm-none-eabi dfu-util python@2; fi + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install fftw gcc-arm-none-eabi dfu-util; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH=/usr/local/bin:$PATH; fi + # Linux containers don't have access to the latest gcc-arm-none-eabi package - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then wget -O gcc-arm-none-eabi.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar xf gcc-arm-none-eabi.tar.bz2; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export PATH=$PATH:$PWD/gcc-arm-none-eabi-6-2017-q2-update/bin; fi From 953df27f263763bf531a74202bc83d30ed4528d6 Mon Sep 17 00:00:00 2001 From: Michael Ossmann Date: Tue, 30 Oct 2018 15:32:52 -0600 Subject: [PATCH 10/23] Opera Cake: updated port names on silkscreen --- hardware/operacake/operacake.kicad_pcb | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/hardware/operacake/operacake.kicad_pcb b/hardware/operacake/operacake.kicad_pcb index fa99863d..2f333715 100644 --- a/hardware/operacake/operacake.kicad_pcb +++ b/hardware/operacake/operacake.kicad_pcb @@ -4438,34 +4438,34 @@ (gr_text A0 (at 150.2 158.7) (layer F.SilkS) (effects (font (size 0.8 0.6) (thickness 0.1))) ) - (gr_text PB4 (at 173 113.725) (layer F.SilkS) + (gr_text B4 (at 173 113.725) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PB3 (at 173 126.1) (layer F.SilkS) + (gr_text B3 (at 173 126.1) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PB2 (at 167.5 138.475) (layer F.SilkS) + (gr_text B2 (at 167.5 138.475) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PB1 (at 167.5 150.85) (layer F.SilkS) + (gr_text B1 (at 167.5 150.85) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PB0 (at 173 163.25) (layer F.SilkS) + (gr_text B0 (at 173 163.25) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PA4 (at 67 113.75) (layer F.SilkS) + (gr_text A4 (at 67 113.75) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PA3 (at 67 126.125) (layer F.SilkS) + (gr_text A3 (at 67 126.125) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PA2 (at 67 138.5) (layer F.SilkS) + (gr_text A2 (at 67 138.5) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PA1 (at 67 150.875) (layer F.SilkS) + (gr_text A1 (at 67 150.875) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text PA0 (at 67 163.25) (layer F.SilkS) + (gr_text A0 (at 67 163.25) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) (gr_text J2 (at 96.25 167) (layer F.SilkS) @@ -4597,7 +4597,7 @@ (gr_text 1 (at 164.9 101.3) (layer C1F) (effects (font (size 1.016 1.016) (thickness 0.1778))) ) - (gr_text "4 October 2016" (at 113.58 111.17) (layer F.SilkS) + (gr_text "30 October 2018" (at 113.58 111.17) (layer F.SilkS) (effects (font (size 1.778 1.27) (thickness 0.3048))) ) (gr_text P9 (at 98.1 125.47) (layer F.SilkS) @@ -4629,7 +4629,7 @@ (gr_text P28 (at 119.5 143.25 90) (layer F.SilkS) (effects (font (size 1.016 0.762) (thickness 0.1905))) ) - (gr_text http://greatscottgadgets.com/hackrf/ (at 152.8878 171.2154) (layer F.SilkS) + (gr_text https://greatscottgadgets.com/hackrf/ (at 152.8878 171.2154) (layer F.SilkS) (effects (font (size 1.778 1.27) (thickness 0.3048))) ) From 982770b25b42d4d817124fb8d95ad6972ee77215 Mon Sep 17 00:00:00 2001 From: GravesJake Date: Wed, 7 Nov 2018 10:49:49 -0700 Subject: [PATCH 11/23] Add limited sweep mode --- host/hackrf-tools/src/hackrf_sweep.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_sweep.c b/host/hackrf-tools/src/hackrf_sweep.c index 8b038841..244efe65 100644 --- a/host/hackrf-tools/src/hackrf_sweep.c +++ b/host/hackrf-tools/src/hackrf_sweep.c @@ -106,6 +106,7 @@ int gettimeofday(struct timeval *tv, void* ignored) { #endif uint32_t num_samples = SAMPLES_PER_BLOCK; +uint32_t num_sweeps = 0; int num_ranges = 0; uint16_t frequencies[MAX_SWEEP_RANGES*2]; int step_count; @@ -179,6 +180,7 @@ uint32_t antenna_enable; bool binary_output = false; bool ifft_output = false; bool one_shot = false; +bool finite_mode = false; volatile bool sweep_started = false; int fftSize = 20; @@ -245,6 +247,9 @@ int rx_callback(hackrf_transfer* transfer) { if(one_shot) { do_exit = true; } + else if(finite_mode && sweep_count == num_sweeps) { + do_exit = true; + } } sweep_started = true; time_stamp = usb_transfer_time; @@ -352,6 +357,7 @@ static void usage() { fprintf(stderr, "\t[-n num_samples] # Number of samples per frequency, 8192-4294967296\n"); fprintf(stderr, "\t[-w bin_width] # FFT bin width (frequency resolution) in Hz\n"); fprintf(stderr, "\t[-1] # one shot mode\n"); + fprintf(stderr, "\t[-N num_sweeps] # Number of sweeps to perform\n"); fprintf(stderr, "\t[-B] # binary output\n"); fprintf(stderr, "\t[-I] # binary inverse FFT output\n"); fprintf(stderr, "\t-r filename # output file\n"); @@ -393,7 +399,7 @@ int main(int argc, char** argv) { uint32_t requested_fft_bin_width; - while( (opt = getopt(argc, argv, "a:f:p:l:g:d:n:w:1BIr:h?")) != EOF ) { + while( (opt = getopt(argc, argv, "a:f:p:l:g:d:n:N:w:1BIr:h?")) != EOF ) { result = HACKRF_SUCCESS; switch( opt ) { @@ -450,6 +456,11 @@ int main(int argc, char** argv) { result = parse_u32(optarg, &num_samples); break; + case 'N': + finite_mode = true; + result = parse_u32(optarg, &num_sweeps); + break; + case 'w': result = parse_u32(optarg, &requested_fft_bin_width); fftSize = DEFAULT_SAMPLE_RATE_HZ / requested_fft_bin_width; @@ -693,8 +704,9 @@ int main(int argc, char** argv) { fprintf(stderr, "Stop with Ctrl-C\n"); while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) { float time_difference; - sleep(1); - + // sleep(1); + usleep(50000); + gettimeofday(&time_now, NULL); time_difference = TimevalDiff(&time_now, &t_start); From 39062a7a7b61c017132c5febc9a7dca6aee88803 Mon Sep 17 00:00:00 2001 From: GravesJake Date: Wed, 7 Nov 2018 11:24:13 -0700 Subject: [PATCH 12/23] Remove usleep (incompatible with Windows) --- host/hackrf-tools/src/hackrf_sweep.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_sweep.c b/host/hackrf-tools/src/hackrf_sweep.c index 244efe65..a0a42755 100644 --- a/host/hackrf-tools/src/hackrf_sweep.c +++ b/host/hackrf-tools/src/hackrf_sweep.c @@ -704,8 +704,7 @@ int main(int argc, char** argv) { fprintf(stderr, "Stop with Ctrl-C\n"); while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) { float time_difference; - // sleep(1); - usleep(50000); + sleep(1); gettimeofday(&time_now, NULL); From c47f2b1162ac82ea74fbfefb89636ad82f512481 Mon Sep 17 00:00:00 2001 From: GravesJake Date: Wed, 7 Nov 2018 11:35:04 -0700 Subject: [PATCH 13/23] Add cross-platform support for sleeping for milliseconds --- host/hackrf-tools/src/hackrf_sweep.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/host/hackrf-tools/src/hackrf_sweep.c b/host/hackrf-tools/src/hackrf_sweep.c index a0a42755..3d4fd043 100644 --- a/host/hackrf-tools/src/hackrf_sweep.c +++ b/host/hackrf-tools/src/hackrf_sweep.c @@ -102,7 +102,9 @@ int gettimeofday(struct timeval *tv, void* ignored) { #define THROWAWAY_BLOCKS 2 #if defined _WIN32 - #define sleep(a) Sleep( (a*1000) ) + #define m_sleep(a) Sleep( (a) ) +#else + #define m_sleep(a) usleep((a*1000)) #endif uint32_t num_samples = SAMPLES_PER_BLOCK; @@ -704,7 +706,7 @@ int main(int argc, char** argv) { fprintf(stderr, "Stop with Ctrl-C\n"); while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) { float time_difference; - sleep(1); + m_sleep(50); gettimeofday(&time_now, NULL); From 82656b8f147d1779ee9e653d9c5d77ea6a5fa521 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Fri, 9 Nov 2018 22:10:16 -0700 Subject: [PATCH 14/23] HackRF Opera Cake - GPIO test mode --- firmware/common/operacake.c | 94 +++++++++++++++++++++++- firmware/common/operacake.h | 1 + firmware/hackrf_usb/hackrf_usb.c | 3 +- firmware/hackrf_usb/usb_api_operacake.c | 15 ++++ firmware/hackrf_usb/usb_api_operacake.h | 3 + host/hackrf-tools/src/hackrf_operacake.c | 94 ++++++++++++++++++++++-- host/libhackrf/src/hackrf.c | 25 +++++++ host/libhackrf/src/hackrf.h | 4 + 8 files changed, 230 insertions(+), 9 deletions(-) diff --git a/firmware/common/operacake.c b/firmware/common/operacake.c index 5154a890..8a047e14 100644 --- a/firmware/common/operacake.c +++ b/firmware/common/operacake.c @@ -21,7 +21,13 @@ #include "operacake.h" #include "hackrf_core.h" +#include "gpio.h" +#include "gpio_lpc.h" +#include +/* + * I2C Mode + */ #define OPERACAKE_PIN_OE(x) (x<<7) #define OPERACAKE_PIN_U2CTRL1(x) (x<<6) #define OPERACAKE_PIN_U2CTRL0(x) (x<<5) @@ -44,7 +50,7 @@ #define OPERACAKE_SAMESIDE OPERACAKE_PIN_U1CTRL(1) #define OPERACAKE_CROSSOVER OPERACAKE_PIN_U1CTRL(0) #define OPERACAKE_EN_LEDS (OPERACAKE_PIN_LEDEN2(1) | OPERACAKE_PIN_LEDEN2(0)) -#define OPERACAKE_GPIO_EN OPERACAKE_PIN_OE(0) +#define OPERACAKE_GPIO_ENABLE OPERACAKE_PIN_OE(0) #define OPERACAKE_GPIO_DISABLE OPERACAKE_PIN_OE(1) #define OPERACAKE_REG_INPUT 0x00 @@ -56,6 +62,10 @@ | OPERACAKE_PORT_A1 | OPERACAKE_PORT_B1 \ | OPERACAKE_EN_LEDS) #define OPERACAKE_CONFIG_ALL_OUTPUT (0x00) +// Leave LED bits as outputs +#define OPERACAKE_CONFIG_GPIO_INPUTS (0x7C) + +#define OPERACAKE_POLARITY_NORMAL (0x00) #define OPERACAKE_DEFAULT_ADDRESS 0x18 @@ -145,6 +155,9 @@ uint8_t operacake_set_ports(uint8_t address, uint8_t PA, uint8_t PB) { return 0; } +/* + * Opera Glasses + */ typedef struct { uint16_t freq_min; uint16_t freq_max; @@ -194,3 +207,82 @@ uint8_t operacake_set_range(uint32_t freq_mhz) { current_range = i; return 0; } + +/* + * GPIO + */ +uint16_t gpio_test(uint8_t address) +{ + uint8_t i, reg, bit_mask, gpio_mask = 0x1F; + uint16_t result = 0; + operacake_init(); + scu_pinmux(SCU_PINMUX_GPIO3_8, SCU_GPIO_FAST | SCU_CONF_FUNCTION0); + scu_pinmux(SCU_PINMUX_GPIO3_12, SCU_GPIO_FAST | SCU_CONF_FUNCTION0); + scu_pinmux(SCU_PINMUX_GPIO3_13, SCU_GPIO_FAST | SCU_CONF_FUNCTION0); + scu_pinmux(SCU_PINMUX_GPIO3_14, SCU_GPIO_FAST | SCU_CONF_FUNCTION0); + scu_pinmux(SCU_PINMUX_GPIO3_15, SCU_GPIO_FAST | SCU_CONF_FUNCTION0); + + static struct gpio_t gpio_pins[] = { + GPIO(3, 8), // u1ctrl IO2 + GPIO(3, 14), // u3ctrl0 IO3 + GPIO(3, 15), // u3ctrl1 IO4 + GPIO(3, 12), // u2ctrl0 IO5 + GPIO(3, 13) // u2ctrl1 IO6 + }; + // Setup I2C to put it in GPIO mode + reg = (OPERACAKE_GPIO_ENABLE | OPERACAKE_EN_LEDS); + operacake_write_reg(oc_bus, address, OPERACAKE_REG_OUTPUT, reg); + operacake_write_reg(oc_bus, address, OPERACAKE_REG_CONFIG, + OPERACAKE_CONFIG_GPIO_INPUTS); + operacake_write_reg(oc_bus, address, OPERACAKE_REG_POLARITY, + OPERACAKE_POLARITY_NORMAL); + // clear state + for(i=0; i<5; i++) { + gpio_output(&gpio_pins[i]); + gpio_write(&gpio_pins[i], 0); + } + // Test each pin separately + for(i=0; i<5; i++) { + // Set pin high + gpio_write(&gpio_pins[i], 1); + // check input + reg = operacake_read_reg(oc_bus, address, OPERACAKE_REG_INPUT); + reg >>= 2; + reg &= gpio_mask; + bit_mask = 1 << i; + result <<= 1; + if(!(reg & bit_mask)) { + // Is the correct bit set? + result |= 1; + } + result <<= 1; + if(reg & ~bit_mask) { + // Are any other bits set? + result |= 1; + } + result <<= 1; + // set pin low + gpio_write(&gpio_pins[i], 0); + // check input + reg = operacake_read_reg(oc_bus, address, OPERACAKE_REG_INPUT); + reg >>= 2; + reg &= gpio_mask; + bit_mask = 1 << i; + if(reg & bit_mask) { + // Is the correct bit clear? + result |= 1; + } + } + + // clean up + for(i=0; i<5; i++) { + gpio_input(&gpio_pins[i]); + } + + // Put it back in to I2C mode and set default pins + operacake_write_reg(oc_bus, address, OPERACAKE_REG_CONFIG, + OPERACAKE_CONFIG_ALL_OUTPUT); + operacake_write_reg(oc_bus, address, OPERACAKE_REG_OUTPUT, + OPERACAKE_DEFAULT_OUTPUT); + return result; +} diff --git a/firmware/common/operacake.h b/firmware/common/operacake.h index a07988cf..77acf08f 100644 --- a/firmware/common/operacake.h +++ b/firmware/common/operacake.h @@ -49,6 +49,7 @@ uint8_t operacake_init(void); uint8_t operacake_set_ports(uint8_t address, uint8_t PA, uint8_t PB); uint8_t operacake_add_range(uint16_t freq_min, uint16_t freq_max, uint8_t port); uint8_t operacake_set_range(uint32_t freq_mhz); +uint16_t gpio_test(uint8_t address); #ifdef __cplusplus } diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 5d0c6ea4..280ad4b2 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -92,7 +92,8 @@ static const usb_request_handler_fn vendor_request_handler[] = { usb_vendor_request_operacake_set_ranges, usb_vendor_request_set_clkout_enable, usb_vendor_request_spiflash_status, - usb_vendor_request_spiflash_clear_status + usb_vendor_request_spiflash_clear_status, + usb_vendor_request_operacake_gpio_test }; static const uint32_t vendor_request_handler_count = diff --git a/firmware/hackrf_usb/usb_api_operacake.c b/firmware/hackrf_usb/usb_api_operacake.c index 4901d900..ef49dc6f 100644 --- a/firmware/hackrf_usb/usb_api_operacake.c +++ b/firmware/hackrf_usb/usb_api_operacake.c @@ -74,3 +74,18 @@ usb_request_status_t usb_vendor_request_operacake_set_ranges( } return USB_REQUEST_STATUS_OK; } + +usb_request_status_t usb_vendor_request_operacake_gpio_test( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage) +{ + uint16_t test_result; + uint8_t address = endpoint->setup.value & 0xFF; + if (stage == USB_TRANSFER_STAGE_SETUP) { + test_result = gpio_test(address); + endpoint->buffer[0] = test_result & 0xff; + endpoint->buffer[1] = test_result >> 8; + usb_transfer_schedule_block(endpoint->in, &endpoint->buffer, 2, NULL, NULL); + usb_transfer_schedule_ack(endpoint->out); + } + return USB_REQUEST_STATUS_OK; +} diff --git a/firmware/hackrf_usb/usb_api_operacake.h b/firmware/hackrf_usb/usb_api_operacake.h index 73259aca..e6dfbec1 100644 --- a/firmware/hackrf_usb/usb_api_operacake.h +++ b/firmware/hackrf_usb/usb_api_operacake.h @@ -34,4 +34,7 @@ usb_request_status_t usb_vendor_request_operacake_set_ports( usb_request_status_t usb_vendor_request_operacake_set_ranges( usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage); +usb_request_status_t usb_vendor_request_operacake_gpio_test( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage); + #endif /* end of include guard: __USB_API_OPERACAKE_H__ */ diff --git a/host/hackrf-tools/src/hackrf_operacake.c b/host/hackrf-tools/src/hackrf_operacake.c index 810f2147..53bd754a 100644 --- a/host/hackrf-tools/src/hackrf_operacake.c +++ b/host/hackrf-tools/src/hackrf_operacake.c @@ -36,6 +36,9 @@ typedef int bool; #define FREQ_MAX_MHZ (7250) /* 7250 MHz */ #define MAX_FREQ_RANGES 8 +#define INVALID_ADDRESS 0xFF +#define INVALID_PORT 0xFF + static void usage() { printf("\nUsage:\n"); printf("\t-h, --help: this help\n"); @@ -45,12 +48,14 @@ static void usage() { printf("\t-b : set port B connection\n"); printf("\t-f : automatically assign for range in MHz\n"); printf("\t-l, --list: list available operacake boards\n"); + printf("\t-g, --gpio_test: test GPIO functionality of an opera cake\n"); } static struct option long_options[] = { { "device", no_argument, 0, 'd' }, { "address", no_argument, 0, 'o' }, { "list", no_argument, 0, 'l' }, + { "gpio_test", no_argument, 0, 'g' }, { "help", no_argument, 0, 'h' }, { 0, 0, 0, 0 }, }; @@ -135,11 +140,12 @@ int parse_range(char* s, hackrf_oc_range* range) { int main(int argc, char** argv) { int opt; const char* serial_number = NULL; - uint8_t operacake_address = 0; - uint8_t port_a = 0; - uint8_t port_b = 0; + uint8_t operacake_address = INVALID_ADDRESS; + uint8_t port_a = INVALID_PORT; + uint8_t port_b = INVALID_PORT; bool set_ports = false; bool list = false; + bool gpio_test = false; uint8_t operacakes[8]; uint8_t operacake_count = 0; int i = 0; @@ -154,7 +160,7 @@ int main(int argc, char** argv) { return -1; } - while( (opt = getopt_long(argc, argv, "d:o:a:b:lf:h?", long_options, &option_index)) != EOF ) { + while( (opt = getopt_long(argc, argv, "d:o:a:b:lf:hg?", long_options, &option_index)) != EOF ) { switch( opt ) { case 'd': serial_number = optarg; @@ -162,7 +168,6 @@ int main(int argc, char** argv) { case 'o': operacake_address = atoi(optarg); - set_ports = true; break; case 'f': @@ -200,6 +205,7 @@ int main(int argc, char** argv) { fprintf(stderr, "failed to parse port\n"); return EXIT_FAILURE; } + set_ports = true; break; case 'b': @@ -208,11 +214,17 @@ int main(int argc, char** argv) { fprintf(stderr, "failed to parse port\n"); return EXIT_FAILURE; } + set_ports = true; break; case 'l': list = true; break; + + case 'g': + gpio_test = true; + break; + case 'h': case '?': usage(); @@ -225,8 +237,14 @@ int main(int argc, char** argv) { } } - if(!(list || set_ports || range_idx)) { - fprintf(stderr, "Specify either list or address option.\n"); + if(!(list || set_ports || range_idx || gpio_test)) { + fprintf(stderr, "Specify either list, address, or GPIO test option.\n"); + usage(); + return EXIT_FAILURE; + } + + if((set_ports || gpio_test) && (operacake_address == INVALID_ADDRESS)) { + fprintf(stderr, "An address is required.\n"); usage(); return EXIT_FAILURE; } @@ -257,7 +275,69 @@ int main(int argc, char** argv) { printf("\n"); } + if(gpio_test) { + uint16_t test_result; + uint8_t reg, mask = 0x7; + result = hackrf_operacake_gpio_test(device, operacake_address, &test_result); + if (result != HACKRF_SUCCESS) { + fprintf(stderr, "hackrf_operacake_gpio_test() failed: %s (%d)\n", + hackrf_error_name(result), result); + return EXIT_FAILURE; + } + + if(test_result) { + fprintf(stderr, "GPIO test failed\n"); + fprintf(stderr, "Pin\tHigh\tShorts\tLow\n"); + reg = test_result & mask; + fprintf(stderr, "u2ctrl1\t%d\t%d\t%d\n", + (reg>>2) & 1, + (reg>>1) & 1, + reg & 1); + test_result >>= 3; + reg = test_result & mask; + fprintf(stderr, "u2ctrl0\t%d\t%d\t%d\n", + (reg>>2) & 1, + (reg>>1) & 1, + reg & 1); + test_result >>= 3; + reg = test_result & mask; + fprintf(stderr, "u3ctrl1\t%d\t%d\t%d\n", + (reg>>2) & 1, + (reg>>1) & 1, + reg & 1); + test_result >>= 3; + reg = test_result & mask; + fprintf(stderr, "u3ctrl0\t%d\t%d\t%d\n", + (reg>>2) & 1, + (reg>>1) & 1, + reg & 1); + test_result >>= 3; + reg = test_result & mask; + fprintf(stderr, "u1ctrl \t%d\t%d\t%d\n", + (reg>>2) & 1, + (reg>>1) & 1, + reg & 1); + } else { + fprintf(stderr, "GPIO test passed\n"); + } + } + if(set_ports) { + // Set other port to "don't care" if not set + if(port_a == INVALID_PORT) { + if(port_b >= 4) { + port_a = 0; + } else { + port_a = 4; + } + } + if(port_b == INVALID_PORT) { + if(port_a >= 4) { + port_b = 0; + } else { + port_b = 4; + } + } if(((port_a<=3) && (port_b<=3)) || ((port_a>=4) && (port_b>=4))) { fprintf(stderr, "Port A and B cannot be connected to the same side\n"); return EXIT_FAILURE; diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index 3da23019..a062e545 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -83,6 +83,7 @@ typedef enum { HACKRF_VENDOR_REQUEST_CLKOUT_ENABLE = 32, HACKRF_VENDOR_REQUEST_SPIFLASH_STATUS = 33, HACKRF_VENDOR_REQUEST_SPIFLASH_CLEAR_STATUS = 34, + HACKRF_VENDOR_REQUEST_OPERACAKE_GPIO_TEST = 35, } hackrf_vendor_request; #define USB_CONFIG_STANDARD 0x1 @@ -2080,6 +2081,30 @@ int ADDCALL hackrf_set_clkout_enable(hackrf_device* device, const uint8_t value) } } +int ADDCALL hackrf_operacake_gpio_test(hackrf_device* device, const uint8_t address, + uint16_t* test_result) +{ + USB_API_REQUIRED(device, 0x0103) + int result; + result = libusb_control_transfer( + device->usb_device, + LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, + HACKRF_VENDOR_REQUEST_OPERACAKE_GPIO_TEST, + address, + 0, + (unsigned char*)test_result, + 2, + 0 + ); + + if (result < 1) { + last_libusb_error = result; + return HACKRF_ERROR_LIBUSB; + } else { + return HACKRF_SUCCESS; + } +} + #ifdef __cplusplus } // __cplusplus defined. #endif diff --git a/host/libhackrf/src/hackrf.h b/host/libhackrf/src/hackrf.h index 476cc571..abd7debd 100644 --- a/host/libhackrf/src/hackrf.h +++ b/host/libhackrf/src/hackrf.h @@ -251,6 +251,10 @@ extern ADDAPI int ADDCALL hackrf_set_operacake_ranges(hackrf_device* device, extern ADDAPI int ADDCALL hackrf_set_clkout_enable(hackrf_device* device, const uint8_t value); +extern ADDAPI int ADDCALL hackrf_operacake_gpio_test(hackrf_device* device, + uint8_t address, + uint16_t* test_result); + #ifdef __cplusplus } // __cplusplus defined. #endif From abc7d68822655da7e1add05f995f5bd4de88f1a9 Mon Sep 17 00:00:00 2001 From: Michael Ossmann Date: Mon, 5 Nov 2018 13:27:41 -0700 Subject: [PATCH 15/23] Opera Cake: added INSERT attributes for SMD placements --- hardware/operacake/operacake.kicad_pcb | 99 +++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/hardware/operacake/operacake.kicad_pcb b/hardware/operacake/operacake.kicad_pcb index 2f333715..cf5fffc0 100644 --- a/hardware/operacake/operacake.kicad_pcb +++ b/hardware/operacake/operacake.kicad_pcb @@ -1,4 +1,4 @@ -(kicad_pcb (version 4) (host pcbnew 4.0.5+dfsg1-4) +(kicad_pcb (version 4) (host pcbnew 4.0.6) (general (links 598) @@ -517,6 +517,7 @@ (at 176.775 154.675) (path /57F102E7) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBG1 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -541,6 +542,7 @@ (at 176.775 155.9) (path /57F102F1) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBY1 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -565,6 +567,7 @@ (at 176.775 117.55) (path /57F10301) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBG4 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -589,6 +592,7 @@ (at 176.775 118.775) (path /57F1030A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBY4 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -613,6 +617,7 @@ (at 176.775 129.925) (path /57F102CF) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBG3 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -637,6 +642,7 @@ (at 176.775 131.15) (path /57F102D8) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBY3 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -661,6 +667,7 @@ (at 63.225 118.775 180) (path /57F0F0A3) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAY4 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -685,6 +692,7 @@ (at 63.225 117.55 180) (path /57F0F09A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAG4 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -709,6 +717,7 @@ (at 67.5 136.75 180) (path /57ED4222) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C1 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -729,6 +738,7 @@ (at 67.5 112 180) (path /57EF11C4) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C2 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -749,6 +759,7 @@ (at 167.5 136.75) (path /57EF1B35) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C3 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -769,6 +780,7 @@ (at 172.5 112) (path /57EF1B93) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C4 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -789,6 +801,7 @@ (at 67.5 149.125 180) (path /57EF0A53) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C5 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -809,6 +822,7 @@ (at 67.5 124.375 180) (path /57EF11F3) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C6 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -829,6 +843,7 @@ (at 167.5 149.525) (path /57EF1B65) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C7 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -849,6 +864,7 @@ (at 172.5 124.375) (path /57EF1BC2) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C8 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -869,6 +885,7 @@ (at 115.09248 165.8874 180) (path /57EDB85B) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C9 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -889,6 +906,7 @@ (at 123.87072 165.36416 180) (path /57EDC2D6) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C10 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -909,6 +927,7 @@ (at 67.5 161.5 180) (path /57ECFA66) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C11 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -929,6 +948,7 @@ (at 172.475 161.5) (path /57ED7255) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference C12 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -949,6 +969,7 @@ (at 69.1 136.2 90) (path /57ED4219) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D1 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -969,6 +990,7 @@ (at 69.1 111.5 90) (path /57EF11BB) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D2 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -989,6 +1011,7 @@ (at 165.9 136.3 90) (path /57EF1B2C) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D3 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1009,6 +1032,7 @@ (at 170.9 111.5 90) (path /57EF1B8A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D4 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1029,6 +1053,7 @@ (at 69.1 148.6 90) (path /57EF0A4A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D5 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1049,6 +1074,7 @@ (at 69.1 123.9 90) (path /57EF11EA) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D6 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1069,6 +1095,7 @@ (at 165.9 149 90) (path /57EF1B5C) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D7 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1089,6 +1116,7 @@ (at 170.9 123.9 90) (path /57EF1BB9) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D8 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1109,6 +1137,7 @@ (at 69.1 161 90) (path /57ECF9D2) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D9 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1129,6 +1158,7 @@ (at 170.9 161 90) (path /57ED724C) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference D10 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -1149,6 +1179,7 @@ (at 63.225 167.05 180) (path /57F14A76) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DA0 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1173,6 +1204,7 @@ (at 63.225 154.675 180) (path /57F0F080) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAG1 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1197,6 +1229,7 @@ (at 63.225 142.3 180) (path /57EFE38F) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAG2 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1221,6 +1254,7 @@ (at 63.225 129.925 180) (path /57F0CF06) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAG3 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1245,6 +1279,7 @@ (at 63.225 155.9 180) (path /57F0F08A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAY1 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1269,6 +1304,7 @@ (at 63.225 143.525 180) (path /57F0174D) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAY2 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1293,6 +1329,7 @@ (at 63.225 131.15 180) (path /57F0CF0F) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DAY3 (at 0.7112 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1317,6 +1354,7 @@ (at 176.775 167.05) (path /57F14A80) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DB0 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1341,6 +1379,7 @@ (at 176.775 142.3) (path /57F102B1) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBG2 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -1365,6 +1404,7 @@ (at 176.775 143.525) (path /57F102BB) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference DBY2 (at 0.7112 0) (layer F.SilkS) (effects (font (size 0.6096 0.508) (thickness 0.127))) ) @@ -2417,6 +2457,7 @@ (at 112.3188 130.048 90) (path /57F026AD) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R1 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2437,6 +2478,7 @@ (at 112.4966 124.968 90) (path /57F1320C) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R2 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2457,6 +2499,7 @@ (at 110.49 123.4694 270) (path /57F0E70A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R3 (at 0 0 270) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2477,6 +2520,7 @@ (at 110.4646 128.5748 270) (path /57F12932) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R4 (at 0 0 270) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2497,6 +2541,7 @@ (at 134.5 140.5 90) (path /57F1ECB2) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R5 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2517,6 +2562,7 @@ (at 136.5 140.5 90) (path /57F1EEC6) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R6 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2577,6 +2623,7 @@ (at 131.5 139.5) (path /57F40DD9) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R9 (at 0 0) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2597,6 +2644,7 @@ (at 130.74396 133.91388) (path /57F3C15B) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R10 (at 0 0) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2617,6 +2665,7 @@ (at 140.589 128.79324) (path /57F42B49) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R11 (at 0 0) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2637,6 +2686,7 @@ (at 130.77 106.8236) (path /57F4A26A) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R12 (at 0 0) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2657,6 +2707,7 @@ (at 125.5 126 90) (path /57F4A395) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R13 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2677,6 +2728,7 @@ (at 134.77 106.8236) (path /57F4A4C3) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R14 (at 0 0) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2697,6 +2749,7 @@ (at 138.7 121.7 180) (path /57F4A5F4) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R15 (at 0 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2717,6 +2770,7 @@ (at 117.336777 136.475619 180) (path /57F4A728) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R16 (at 0 0 180) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2737,6 +2791,7 @@ (at 150.2 149.6 90) (path /57F381DD) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R17 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2757,6 +2812,7 @@ (at 152.7 149.6 90) (path /57F40B96) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R18 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2777,6 +2833,7 @@ (at 155.2 149.6 90) (path /57F40CBA) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R19 (at 0 0 90) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -2797,6 +2854,7 @@ (at 128.1 135.8 270) (path /57FC84C7) (solder_mask_margin 0.1016) + (attr smd) (fp_text reference R20 (at 0 0 270) (layer F.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524))) ) @@ -3238,6 +3296,7 @@ (path /57ED7D40) (solder_mask_margin 0.07112) (clearance 0.1524) + (attr smd) (fp_text reference U1 (at 0 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.2))) ) @@ -3296,6 +3355,7 @@ (module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D867) (at 83 130.5625) (path /57ED2FAA) + (attr smd) (fp_text reference U2 (at 0 0.5) (layer F.SilkS) (effects (font (size 0.6 0.5) (thickness 0.1))) ) @@ -3342,6 +3402,7 @@ (module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D87A) (at 157 130.5625 180) (path /57EF1C07) + (attr smd) (fp_text reference U3 (at 0 0.5 180) (layer F.SilkS) (effects (font (size 0.6 0.5) (thickness 0.1))) ) @@ -3388,6 +3449,7 @@ (module gsg-modules:TSSOP16 (layer C1F) (tedit 5605DC3A) (tstamp 57F1D88E) (at 136 134 90) (path /57F3AE6E) + (attr smd) (fp_text reference U4 (at 1.3 0 180) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) @@ -3436,6 +3498,7 @@ (module gsg-modules:TSSOP20 (layer C1F) (tedit 57F1CC68) (tstamp 57F1D8AB) (at 145 122 180) (path /57F25F57) + (attr smd) (fp_text reference U5 (at 1.3 0 270) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) @@ -3492,6 +3555,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8B5) (at 117.336777 128.975619 90) (path /57FC9246) + (attr smd) (fp_text reference U6 (at 0 -0.18 90) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3520,6 +3584,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8BF) (at 117.336777 123.975619 90) (path /57FCC959) + (attr smd) (fp_text reference U7 (at 0 -0.18 90) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3548,6 +3613,7 @@ (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D8C8) (at 127.7506 109.5596 90) (path /57EEFD9C) + (attr smd) (fp_text reference U8 (at 0 -0.18 90) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.1))) ) @@ -3574,6 +3640,7 @@ (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D8D1) (at 134.5298 109.4778 270) (path /57EF9417) + (attr smd) (fp_text reference U9 (at 0 -0.18 270) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.1))) ) @@ -3600,6 +3667,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8DB) (at 127.95504 113.32464 180) (path /57EF011E) + (attr smd) (fp_text reference U10 (at 0 -0.18 180) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3628,6 +3696,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8E5) (at 132.05968 113.3856 180) (path /57EF9429) + (attr smd) (fp_text reference U11 (at 0 -0.18 180) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3656,6 +3725,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8EF) (at 127.83312 119.60352 180) (path /57EF3F5A) + (attr smd) (fp_text reference U12 (at 0 -0.18 180) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3684,6 +3754,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8F9) (at 132.0546 119.61876 180) (path /57EF9432) + (attr smd) (fp_text reference U13 (at 0 -0.18 180) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3712,6 +3783,7 @@ (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D902) (at 128 127 180) (path /57EEFEA7) + (attr smd) (fp_text reference U14 (at 0 -0.18 180) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.1))) ) @@ -3738,6 +3810,7 @@ (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D90B) (at 132 127 180) (path /57EF9420) + (attr smd) (fp_text reference U15 (at 0 -0.18 180) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.1))) ) @@ -3764,6 +3837,7 @@ (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D915) (at 117.336777 133.975619 90) (path /57EEFF63) + (attr smd) (fp_text reference U16 (at 0 -0.18 90) (layer F.SilkS) (effects (font (size 0.4 0.5) (thickness 0.12))) ) @@ -3992,6 +4066,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 595A86A8) (tstamp 595A7CE9) (at 85.344 132.588 270) (path /5950597B) + (attr smd) (fp_text reference C13 (at 0 0 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4011,6 +4086,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CEF) (at 80.1116 131.7244 270) (path /59506EAE) + (attr smd) (fp_text reference C14 (at 0 0.0508 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4030,6 +4106,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CF5) (at 80.0862 129.4638 270) (path /59506764) + (attr smd) (fp_text reference C15 (at 0 0.0508 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4049,6 +4126,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CFB) (at 85.598 128.9558 180) (path /59505F07) + (attr smd) (fp_text reference C16 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4068,6 +4146,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D01) (at 116.4082 167.7416 270) (path /59504505) + (attr smd) (fp_text reference C17 (at 0 0.0508 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4087,6 +4166,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D07) (at 123.5964 167.6908 270) (path /59504CB0) + (attr smd) (fp_text reference C18 (at 0 0.0508 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4106,6 +4186,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D0D) (at 154.13736 129.3114 90) (path /59503551) + (attr smd) (fp_text reference C19 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4125,6 +4206,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D13) (at 159.6136 129.4638 90) (path /59501F48) + (attr smd) (fp_text reference C20 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4144,6 +4226,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D19) (at 159.6136 131.7244 90) (path /595027F2) + (attr smd) (fp_text reference C21 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4163,6 +4246,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D1F) (at 154.1526 131.79552 90) (path /59503203) + (attr smd) (fp_text reference C22 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4182,6 +4266,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D25) (at 113.87328 129.32664 90) (path /5950507B) + (attr smd) (fp_text reference C23 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4201,6 +4286,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D2B) (at 124.41174 110.74146 90) (path /5950ECBD) + (attr smd) (fp_text reference C24 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4220,6 +4306,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D31) (at 127.3556 116.8527) (path /5950F8F8) + (attr smd) (fp_text reference C25 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4239,6 +4326,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D37) (at 127.29972 123.18492) (path /5951F244) + (attr smd) (fp_text reference C26 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4258,6 +4346,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D3D) (at 128.1684 130.302) (path /595200CF) + (attr smd) (fp_text reference C27 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4277,6 +4366,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D43) (at 113.9571 123.72594 270) (path /595064F7) + (attr smd) (fp_text reference C28 (at 0 0.0508 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4296,6 +4386,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D49) (at 137.8077 108.28782 270) (path /5950C936) + (attr smd) (fp_text reference C29 (at 0 0.0508 270) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4315,6 +4406,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D4F) (at 131.76504 117.30228) (path /595103E6) + (attr smd) (fp_text reference C30 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4334,6 +4426,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D55) (at 132.52704 123.14428 180) (path /5951FCE0) + (attr smd) (fp_text reference C31 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4353,6 +4446,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D5B) (at 132.02412 129.98196) (path /5951FEC9) + (attr smd) (fp_text reference C32 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4372,6 +4466,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D61) (at 113.67262 134.69112 90) (path /5953EF33) + (attr smd) (fp_text reference C33 (at 0 0.0508 90) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4391,6 +4486,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123B3) (at 132.03936 131.38912) (path /59D87D2E) + (attr smd) (fp_text reference C34 (at 0 0.0508) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) @@ -4410,6 +4506,7 @@ (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123BD) (at 141.53388 126.49962 180) (path /59D88437) + (attr smd) (fp_text reference C35 (at 0 0.0508 180) (layer F.SilkS) (effects (font (size 0.4064 0.4064) (thickness 0.1016))) ) From 20b351916e4076378a890a23db07199ff72686dd Mon Sep 17 00:00:00 2001 From: w0xel Date: Mon, 19 Nov 2018 16:04:27 +0100 Subject: [PATCH 16/23] Fix compile with fftw3f not in system dir --- host/hackrf-tools/src/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/host/hackrf-tools/src/CMakeLists.txt b/host/hackrf-tools/src/CMakeLists.txt index 40f11dc0..ee2dbb94 100644 --- a/host/hackrf-tools/src/CMakeLists.txt +++ b/host/hackrf-tools/src/CMakeLists.txt @@ -24,6 +24,8 @@ set(INSTALL_DEFAULT_BINDIR "bin" CACHE STRING "Appended to CMAKE_INSTALL_PREFIX") find_package(FFTW REQUIRED) +include_directories(${FFTW_INCLUDE_DIRS}) +link_directories(${FFTW_LIBRARY_DIRS}) SET(TOOLS hackrf_transfer From f8062a809598f606d44720b72dc1f99984c864e5 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Thu, 29 Nov 2018 11:37:01 -0700 Subject: [PATCH 17/23] Remove oclint travis line because it's no longer installed by default --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 76610851..d6aa41c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,8 +28,6 @@ before_script: before_install: - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap PX4/homebrew-px4; fi - # Remove oclint because it conflicts with gcc, which fftw requires - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew cask uninstall oclint; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install fftw gcc-arm-none-eabi dfu-util; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH=/usr/local/bin:$PATH; fi # Linux containers don't have access to the latest gcc-arm-none-eabi package From 7ac0251eb6092d684d7e1f4b48a1c6af9f174a7a Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 5 Dec 2018 11:49:33 -0700 Subject: [PATCH 18/23] Switch to xenial build platform (no more containers) --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d6aa41c9..8f568eaf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,7 @@ language: c cache: apt -sudo: false -dist: trusty +dist: xenial os: - linux From 9da826e9ef6f3a7db0cad4b42b31b9cbba494722 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 5 Dec 2018 18:45:26 -0700 Subject: [PATCH 19/23] Add Windows build art(e|i)facts (#561) This includes: * Cmake clean up - thanks @Qyriad * Windows binaries saved after each appveyor build * A bump to the Visual Studio version that we use to build it * An appveyor cygwin script for building firmware, it doesn't work but it seems like someone might pick it up and make it work, or blow it away if we switch to Travis firmware artefacts --- appveyor.yml | 21 ++++++++++++++++++++- firmware/CMakeLists.txt | 2 +- firmware/appveyor.sh | 14 ++++++++++++++ firmware/blinky/CMakeLists.txt | 2 +- firmware/hackrf-common.cmake | 4 ++-- firmware/hackrf_usb/CMakeLists.txt | 2 +- firmware/toolchain-arm-cortex-m.cmake | 7 +++---- 7 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 firmware/appveyor.sh diff --git a/appveyor.yml b/appveyor.yml index 14cb55e3..d8d99e9e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -os: Visual Studio 2015 +os: Visual Studio 2017 clone_depth: 1 configuration: @@ -7,18 +7,25 @@ configuration: init: - C:\"Program Files (x86)"\"Microsoft Visual Studio 14.0"\VC\vcvarsall.bat %PLATFORM% install: + # Dependencies for libHackRF - appveyor DownloadFile "https://github.com/libusb/libusb/releases/download/v1.0.22/libusb-1.0.22.7z" -FileName "C:\libusb.7z" - 7z x -y "C:\libusb.7z" -o"C:\libusb" - appveyor DownloadFile "http://mirrors.kernel.org/sourceware/pthreads-win32/pthreads-w32-2-9-1-release.zip" -FileName "C:\pthreads-w32-release.zip" - 7z x -y "C:\pthreads-w32-release.zip" -o"C:\pthreads" - appveyor DownloadFile "http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip" -FileName "C:\pkg-config_win32.zip" - 7z x -y "C:\pkg-config_win32.zip" -o"C:\pkg-config" + # FFTW for hackrf_sweep - curl -fsS -o "C:\fftw-3.3.5.zip" "ftp://ftp.fftw.org/pub/fftw/fftw-3.3.5-dll64.zip" - 7z x -y "C:\fftw-3.3.5.zip" -o"C:\fftw" - cd c:\fftw - ps: lib /machine:x64 /def:libfftw3f-3.def + # ARM GCC for firmware builds + # - appveyor DownloadFile "https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-win32.zip" -FileName "C:\gcc-arm-none-eabi-win32.zip" + # - 7z x -y "C:\gcc-arm-none-eabi-win32.zip" -o"C:\gcc-arm-none-eabi" + # - set PATH=%PATH%;c:\gcc-arm-none-eabi\bin build_script: + # Host library and tools - mkdir c:\projects\hackrf\host\build - cd c:\projects\hackrf\host\build - cmake -G "Visual Studio 14 2015 Win64" \ @@ -31,3 +38,15 @@ build_script: -DFFTW_LIBRARIES=C:\fftw\libfftw3f-3.lib \ .. - msbuild HackRF.sln /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + # Firmware + # - cd c:\projects\hackrf\ + # - git submodule init + # - git submodule update + # - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER && firmware/appveyor.sh"' + +after_build: + - 7z a %APPVEYOR_BUILD_FOLDER%\HackRF-Windows-%APPVEYOR_REPO_COMMIT%.zip %APPVEYOR_BUILD_FOLDER%\host\build\libhackrf\src\Release\* %APPVEYOR_BUILD_FOLDER%\host\build\hackrf-tools\src\Release\* + +artifacts: + - path: HackRF-Windows-%APPVEYOR_REPO_COMMIT%.zip + name: HackRF-Windows-%APPVEYOR_REPO_COMMIT% diff --git a/firmware/CMakeLists.txt b/firmware/CMakeLists.txt index 90fbda84..c458b7f1 100644 --- a/firmware/CMakeLists.txt +++ b/firmware/CMakeLists.txt @@ -20,7 +20,7 @@ # Top directory CMake project for HackRF firmware -cmake_minimum_required(VERSION 2.8.9) +cmake_minimum_required(VERSION 3.1.3) set(CMAKE_TOOLCHAIN_FILE toolchain-arm-cortex-m.cmake) project (hackrf_firmware_all C) diff --git a/firmware/appveyor.sh b/firmware/appveyor.sh new file mode 100644 index 00000000..99901c9e --- /dev/null +++ b/firmware/appveyor.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +/usr/bin/env python -m ensurepip +/usr/bin/env python -m pip install pyyaml + +cd firmware/libopencm3 +export SRCLIBDIR='c:\projects\hackrf\firmware\libopencm3\lib\' +make lib/lpc43xx/m0 +make lib/lpc43xx/m4 +cd .. +mkdir build-hackrf-one +cd build-hackrf-one +cmake -G "Unix Makefiles" .. +make VERBOSE=1 diff --git a/firmware/blinky/CMakeLists.txt b/firmware/blinky/CMakeLists.txt index c887b0e0..dfecc320 100644 --- a/firmware/blinky/CMakeLists.txt +++ b/firmware/blinky/CMakeLists.txt @@ -19,7 +19,7 @@ # Boston, MA 02110-1301, USA. # -cmake_minimum_required(VERSION 2.8.9) +cmake_minimum_required(VERSION 3.1.3) set(CMAKE_TOOLCHAIN_FILE ../toolchain-arm-cortex-m.cmake) project(blinky C) diff --git a/firmware/hackrf-common.cmake b/firmware/hackrf-common.cmake index 8a456e04..fed1de96 100644 --- a/firmware/hackrf-common.cmake +++ b/firmware/hackrf-common.cmake @@ -70,7 +70,7 @@ SET(LDSCRIPT_M4_DFU "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld SET(LDSCRIPT_M0 "-T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M0_memory.ld -Tlibopencm3_lpc43xx_m0.ld") -SET(CFLAGS_COMMON "-Os -g3 -Wall -Wextra ${HACKRF_OPTS} ${COMMON_FLAGS} -fno-common -MD") +SET(CFLAGS_COMMON "-Os -g3 -Wall -Wextra ${HACKRF_OPTS} -fno-common -MD") SET(LDFLAGS_COMMON "-nostartfiles -Wl,--gc-sections") if(V STREQUAL "1") @@ -80,7 +80,7 @@ endif() SET(CPUFLAGS_M0 "-mthumb -mcpu=cortex-m0 -mfloat-abi=soft") SET(CFLAGS_M0 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M0} -DLPC43XX_M0") SET(CXXFLAGS_M0 "-std=gnu++0x ${CFLAGS_COMMON} ${CPUFLAGS_M0} -DLPC43XX_M0") -SET(LDFLAGS_M0 "${LDFLAGS_COMMON} ${CPUFLAGS_M0} ${LDSCRIPT_M0} -Xlinker -Map=m0.map --specs=nano.specs") +SET(LDFLAGS_M0 "${LDFLAGS_COMMON} ${CPUFLAGS_M0} ${LDSCRIPT_M0} -Xlinker -Map=m0.map") SET(CPUFLAGS_M4 "-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16") SET(CFLAGS_M4 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4") diff --git a/firmware/hackrf_usb/CMakeLists.txt b/firmware/hackrf_usb/CMakeLists.txt index 73e84d20..820ec089 100644 --- a/firmware/hackrf_usb/CMakeLists.txt +++ b/firmware/hackrf_usb/CMakeLists.txt @@ -18,7 +18,7 @@ # Boston, MA 02110-1301, USA. # -cmake_minimum_required(VERSION 2.8.9) +cmake_minimum_required(VERSION 3.1.3) set(CMAKE_TOOLCHAIN_FILE ../toolchain-arm-cortex-m.cmake) project(hackrf_usb C) diff --git a/firmware/toolchain-arm-cortex-m.cmake b/firmware/toolchain-arm-cortex-m.cmake index 65ddb1c4..dc9caf9e 100644 --- a/firmware/toolchain-arm-cortex-m.cmake +++ b/firmware/toolchain-arm-cortex-m.cmake @@ -22,10 +22,9 @@ set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_PROCESSOR arm) -include(CMakeForceCompiler) - -CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) -CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU) +set(CMAKE_C_COMPILER arm-none-eabi-gcc) +set(CMAKE_CXX_COMPILER arm-none-eabi-g++) +set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs") execute_process( COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.a From 7ebd2a3b5a6852c419db775e8b7a77ce0614541b Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 5 Dec 2018 18:49:10 -0700 Subject: [PATCH 20/23] Travis clean up (#562) Tidy Travis dependency installation --- .travis.yml | 56 ++++++++++++++++++++++------------------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8f568eaf..d23747e2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,40 +1,37 @@ language: c -cache: apt - -dist: xenial - -os: - - linux - - osx - -compiler: - - gcc - - clang - matrix: - exclude: - - os: linux - - os: osx include: - os: linux compiler: gcc + cache: apt + dist: xenial + - os: osx compiler: clang -before_script: - - export CFLAGS="-Wall -Wextra -Werror" +addons: + apt: + packages: + - libusb-1.0-0-dev + - libfftw3-dev + - dfu-util + - gcc-arm-none-eabi + - libnewlib-arm-none-eabi + - python-yaml + + homebrew: + taps: PX4/homebrew-px4 + packages: + - fftw + - gcc-arm-none-eabi + - dfu-util before_install: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap PX4/homebrew-px4; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install fftw gcc-arm-none-eabi dfu-util; fi - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH=/usr/local/bin:$PATH; fi - # Linux containers don't have access to the latest gcc-arm-none-eabi package - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then wget -O gcc-arm-none-eabi.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then tar xf gcc-arm-none-eabi.tar.bz2; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export PATH=$PATH:$PWD/gcc-arm-none-eabi-6-2017-q2-update/bin; fi - # For virtualenv(?) reasons we can't apt-get install python-yaml - - pip install PyYAML + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pip install PyYAML; fi + +before_script: + - export CFLAGS="-Wall -Wextra -Werror" script: - mkdir host/build @@ -56,10 +53,3 @@ script: - cd ../build-rad1o - cmake -DBOARD=RAD1O .. - make - -addons: - apt: - packages: - - libusb-1.0-0-dev - - libfftw3-dev - - dfu-util From 9da5b3ea8c670797754d1766778fabd42be05593 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Wed, 5 Dec 2018 19:23:52 -0700 Subject: [PATCH 21/23] Install g++ libs for arm embedded (#563) --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d23747e2..7a6555db 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,7 @@ addons: - dfu-util - gcc-arm-none-eabi - libnewlib-arm-none-eabi + - libstdc++-arm-none-eabi-newlib - python-yaml homebrew: From 847d00d77029a8a775241f74bf2822438d7c7aa4 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Tue, 18 Dec 2018 14:42:41 -0700 Subject: [PATCH 22/23] Fix typo in still in use error message --- host/libhackrf/src/hackrf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/host/libhackrf/src/hackrf.c b/host/libhackrf/src/hackrf.c index a36f9af5..322bb448 100644 --- a/host/libhackrf/src/hackrf.c +++ b/host/libhackrf/src/hackrf.c @@ -1736,7 +1736,7 @@ const char* ADDCALL hackrf_error_name(enum hackrf_error errcode) return "feature not supported by installed firmware"; case HACKRF_ERROR_NOT_LAST_DEVICE: - return "some hackrf is sill in use"; + return "one or more HackRFs still in use"; case HACKRF_ERROR_OTHER: return "unspecified error"; From 454e32b8c8124cc8b47673883e2e6dac3177a314 Mon Sep 17 00:00:00 2001 From: Dominic Spill Date: Thu, 20 Dec 2018 20:38:10 -0700 Subject: [PATCH 23/23] Travis artefacts (#564) * Try artefacts deployed to gh_pages * Try to use gh_pages from the travis_artefacts branch * Try deploying to a different repo * Try to organise files deployed to github pages * Test pushing a local dir to master * Try pushing to original repo * Be verbose so I can debug it * Setting env variables * Oops, environment variables aren't what I thought * Try to push to nightly repo * Remove unused cp command * Copy firmware to archive directory * Fix pathing to artefacts * Use TRAVIS_BUID_DIR instead of assuming path * Use mkdir -p to ensure directories exist * Put / back in to CPLD path * Move repo to GSG * Switch to master branch * Add nightly deployment * Fix escaping in sed command * Allow firmware version styring to be overridden * Fix some sed commands.... * Switch to master branch for builds --- .travis.yml | 50 ++++++++++++++++++++++++++++++++---- firmware/hackrf-common.cmake | 31 ++++++++++++---------- tools/deploy-nightly.sh | 48 ++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 19 deletions(-) create mode 100644 tools/deploy-nightly.sh diff --git a/.travis.yml b/.travis.yml index 7a6555db..7cee0156 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,14 @@ matrix: - os: osx compiler: clang +env: + global: + - SHORT_COMMIT_HASH=`git rev-parse --short HEAD` + - VERSION_STRING=nightly-$SHORT_COMMIT_HASH + - BUILD_NAME="HackRF-`date +%Y-%m-%d`-$SHORT_COMMIT_HASH" + - ARTEFACT_BASE=$TRAVIS_BUILD_DIR/artefacts/ + - ARTEFACT_PATH=$ARTEFACT_BASE/$BUILD_NAME + addons: apt: packages: @@ -35,15 +43,19 @@ before_script: - export CFLAGS="-Wall -Wextra -Werror" script: + # Host code - mkdir host/build - cd host/build - cmake .. - make - - cd ../.. - - mkdir firmware/build-hackrf-one - - mkdir firmware/build-jawbreaker - - mkdir firmware/build-rad1o - - cd firmware/libopencm3 + # Firmware + # Set version string + - cd ../../firmware + - sed -e "s/\#set(VERSION.*/set(VERSION \"$VERSION_STRING\")/" -i".bak" hackrf-common.cmake + - mkdir build-hackrf-one + - mkdir build-jawbreaker + - mkdir build-rad1o + - cd libopencm3 - make - cd ../build-hackrf-one - cmake .. @@ -54,3 +66,31 @@ script: - cd ../build-rad1o - cmake -DBOARD=RAD1O .. - make + +after_success: + # Construct archive for deploying to ubertooth-nightlies + - mkdir -p $ARTEFACT_PATH/firmware-bin/ + # Export HackRF git repo + - cd $TRAVIS_BUILD_DIR/ + - git archive --format=tar HEAD | (cd $ARTEFACT_PATH && tar xf -) + # Set version string + - sed -e "s/\#set(RELEASE.*/set(RELEASE \"$VERSION_STRING\")/" -i".bak" $ARTEFACT_PATH/host/cmake/set_release.cmake + # Copy firmware to firmware-bin directory + - cd $TRAVIS_BUILD_DIR/firmware/ + - cp cpld/sgpio_if/default.xsvf $ARTEFACT_PATH/firmware-bin/hackrf_cpld_default.xsvf + - cp build-hackrf-one/hackrf_usb/hackrf_usb.bin $ARTEFACT_PATH/firmware-bin/hackrf_one_usb.bin + - cp build-hackrf-one/hackrf_usb/hackrf_usb.dfu $ARTEFACT_PATH/firmware-bin/hackrf_one_usb.dfu + - cp build-jawbreaker/hackrf_usb/hackrf_usb.bin $ARTEFACT_PATH/firmware-bin/hackrf_jawbreaker_usb.bin + - cp build-jawbreaker/hackrf_usb/hackrf_usb.dfu $ARTEFACT_PATH/firmware-bin/hackrf_jawbreaker_usb.dfu + - cp build-rad1o/hackrf_usb/hackrf_usb.bin $ARTEFACT_PATH/firmware-bin/rad1o_usb.bin + - cp build-rad1o/hackrf_usb/hackrf_usb.dfu $ARTEFACT_PATH/firmware-bin/rad1o_usb.dfu + # Build the archive + - cd $ARTEFACT_BASE + - tar -cJvf $ARTEFACT_BASE/$BUILD_NAME.tar.xz $BUILD_NAME + +deploy: + provider: script + skip-cleanup: true + script: bash $TRAVIS_BUILD_DIR/tools/deploy-nightly.sh + on: + branch: master diff --git a/firmware/hackrf-common.cmake b/firmware/hackrf-common.cmake index fed1de96..5af882d1 100644 --- a/firmware/hackrf-common.cmake +++ b/firmware/hackrf-common.cmake @@ -34,19 +34,22 @@ SET(LIBOPENCM3 ${PATH_HACKRF_FIRMWARE}/libopencm3) include(${PATH_HACKRF_FIRMWARE}/dfu-util.cmake) -execute_process( - COMMAND git log -n 1 --format=%h - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - RESULT_VARIABLE GIT_VERSION_FOUND - ERROR_QUIET - OUTPUT_VARIABLE GIT_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE -) -if (GIT_VERSION_FOUND) - set(VERSION "unknown") -else (GIT_VERSION_FOUND) - set(VERSION ${GIT_VERSION}) -endif (GIT_VERSION_FOUND) +#set(VERSION "") +if (NOT DEFINED VERSION) + execute_process( + COMMAND git log -n 1 --format=%h + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + RESULT_VARIABLE GIT_VERSION_FOUND + ERROR_QUIET + OUTPUT_VARIABLE GIT_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if (GIT_VERSION_FOUND) + set(VERSION "unknown") + else (GIT_VERSION_FOUND) + set(VERSION "git-${GIT_VERSION}") + endif (GIT_VERSION_FOUND) +endif() if(NOT DEFINED BOARD) set(BOARD HACKRF_ONE) @@ -62,7 +65,7 @@ if(NOT DEFINED SRC_M0) set(SRC_M0 "${PATH_HACKRF_FIRMWARE_COMMON}/m0_sleep.c") endif() -SET(HACKRF_OPTS "-D${BOARD} -DLPC43XX -D${MCU_PARTNO} -DTX_ENABLE -D'VERSION_STRING=\"git-${VERSION}\"'") +SET(HACKRF_OPTS "-D${BOARD} -DLPC43XX -D${MCU_PARTNO} -DTX_ENABLE -D'VERSION_STRING=\"${VERSION}\"'") SET(LDSCRIPT_M4 "-T${PATH_HACKRF_FIRMWARE_COMMON}/${MCU_PARTNO}_M4_memory.ld -Tlibopencm3_lpc43xx_rom_to_ram.ld -T${PATH_HACKRF_FIRMWARE_COMMON}/LPC43xx_M4_M0_image_from_text.ld") diff --git a/tools/deploy-nightly.sh b/tools/deploy-nightly.sh new file mode 100644 index 00000000..4a0ded5a --- /dev/null +++ b/tools/deploy-nightly.sh @@ -0,0 +1,48 @@ +#!/bin/bash +REPO=greatscottgadgets/hackrf-nightly +PUBLICATION_BRANCH=master +# set -x +cd $HOME +# Checkout the branch +git clone --branch=$PUBLICATION_BRANCH https://${GITHUB_TOKEN}@github.com/$REPO.git publish +cd publish +# Update pages +cp $ARTEFACT_BASE/$BUILD_NAME.tar.xz . +# Write index page +cd $TRAVIS_BUILD_DIR +COMMITS=`git log --oneline | awk '{print $1}'` +cd $HOME/publish +echo " + + + + HackRF Nightly Builds + + +

HackRF Nightly Builds

+" > index.html + +URL=https://greatscottgadgets.github.io/hackrf-nightly + +for commit in $COMMITS; do + FILENAME=`find . -maxdepth 1 -name "*-$commit.tar.xz"` + if [ "$FILENAME" != "" ]; then + FN=${FILENAME:2} + echo "$FN
" >> index.html + fi + +done + +echo " + +" >> index.html + +# Commit and push latest version +git add $BUILD_NAME.tar.xz index.html +git config user.name "Travis" +git config user.email "travis@travis-ci.org" +git commit -m "Build products for $SHORT_COMMIT_HASH, built on $TRAVIS_OS_NAME, log: $TRAVIS_BUILD_WEB_URL" +if [ "$?" != "0" ]; then + echo "Looks like the commit failed" +fi +git push -fq origin $PUBLICATION_BRANCH \ No newline at end of file