diff --git a/.travis.yml b/.travis.yml index b129fc7e..7cee0156 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,52 +1,61 @@ language: c -cache: apt - -sudo: false -dist: trusty - -os: - - linux - - osx - -compiler: - - gcc - - clang - matrix: - exclude: - - os: linux - - os: osx include: - os: linux compiler: gcc + cache: apt + dist: xenial + - os: osx - osx_image: xcode7.3 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: + - libusb-1.0-0-dev + - libfftw3-dev + - dfu-util + - gcc-arm-none-eabi + - libnewlib-arm-none-eabi + - libstdc++-arm-none-eabi-newlib + - python-yaml + + homebrew: + taps: PX4/homebrew-px4 + packages: + - fftw + - gcc-arm-none-eabi + - dfu-util + +before_install: + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pip install PyYAML; fi + 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" == "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 - 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 .. @@ -58,9 +67,30 @@ script: - cmake -DBOARD=RAD1O .. - make -addons: - apt: - packages: - - libusb-1.0-0-dev - - libfftw3-dev - - dfu-util +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/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/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-common.cmake b/firmware/hackrf-common.cmake index baa77b78..2782bda5 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) @@ -70,7 +73,7 @@ if(NOT DEFINED SRC_M0) set(SRC_M0 "${PATH_HACKRF_FIRMWARE_COMMON}/m0_sleep.c") endif() -SET(HACKRF_OPTS "-D${BOARD} -DUSER_INTERFACE_${USER_INTERFACE} -DLPC43XX -D${MCU_PARTNO} -DTX_ENABLE -D'VERSION_STRING=\"git-${VERSION}\"'") +SET(HACKRF_OPTS "-D${BOARD} -DUSER_INTERFACE_${USER_INTERFACE} -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") @@ -78,7 +81,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") @@ -88,7 +91,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/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/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 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 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.kicad_pcb b/hardware/operacake/operacake.kicad_pcb index fa99863d..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))) ) @@ -4438,34 +4535,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 +4694,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 +4726,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))) ) 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 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 diff --git a/host/hackrf-tools/src/hackrf_operacake.c b/host/hackrf-tools/src/hackrf_operacake.c index 01bd12a6..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, 'v' }, + { "list", no_argument, 0, 'l' }, + { "gpio_test", no_argument, 0, 'g' }, { "help", no_argument, 0, 'h' }, { 0, 0, 0, 0 }, }; @@ -72,64 +77,75 @@ 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) { int opt; const char* serial_number = NULL; - int operacake_address = 0; - int port_a = 0; - int 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; @@ -144,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; @@ -152,11 +168,21 @@ int main(int argc, char** argv) { case 'o': operacake_address = atoi(optarg); - set_ports = true; 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,26 +196,35 @@ 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': - port_a = atoi(optarg); + result = parse_port(optarg, &port_a); + if (result != HACKRF_SUCCESS) { + fprintf(stderr, "failed to parse port\n"); + return EXIT_FAILURE; + } + set_ports = true; 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; + } + set_ports = true; break; case 'l': list = true; break; + + case 'g': + gpio_test = true; + break; + case 'h': case '?': usage(); @@ -202,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; } @@ -234,16 +275,82 @@ 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; + } 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; } } 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; ido_exit = true; } static int cancel_transfers(hackrf_device* device) @@ -568,7 +568,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 +1478,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 +1509,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 +1522,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 +1531,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 +1551,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 +1593,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 { @@ -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"; @@ -2080,6 +2080,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 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