Merge from mossmann/master

This commit is contained in:
Jared Boone
2018-12-27 14:56:29 -08:00
30 changed files with 720 additions and 224 deletions

View File

@ -1,52 +1,61 @@
language: c language: c
cache: apt
sudo: false
dist: trusty
os:
- linux
- osx
compiler:
- gcc
- clang
matrix: matrix:
exclude:
- os: linux
- os: osx
include: include:
- os: linux - os: linux
compiler: gcc compiler: gcc
cache: apt
dist: xenial
- os: osx - os: osx
osx_image: xcode7.3
compiler: clang 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: before_script:
- export CFLAGS="-Wall -Wextra -Werror" - 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: script:
# Host code
- mkdir host/build - mkdir host/build
- cd host/build - cd host/build
- cmake .. - cmake ..
- make - make
- cd ../.. # Firmware
- mkdir firmware/build-hackrf-one # Set version string
- mkdir firmware/build-jawbreaker - cd ../../firmware
- mkdir firmware/build-rad1o - sed -e "s/\#set(VERSION.*/set(VERSION \"$VERSION_STRING\")/" -i".bak" hackrf-common.cmake
- cd firmware/libopencm3 - mkdir build-hackrf-one
- mkdir build-jawbreaker
- mkdir build-rad1o
- cd libopencm3
- make - make
- cd ../build-hackrf-one - cd ../build-hackrf-one
- cmake .. - cmake ..
@ -58,9 +67,30 @@ script:
- cmake -DBOARD=RAD1O .. - cmake -DBOARD=RAD1O ..
- make - make
addons: after_success:
apt: # Construct archive for deploying to ubertooth-nightlies
packages: - mkdir -p $ARTEFACT_PATH/firmware-bin/
- libusb-1.0-0-dev # Export HackRF git repo
- libfftw3-dev - cd $TRAVIS_BUILD_DIR/
- dfu-util - 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

View File

@ -1,4 +1,4 @@
os: Visual Studio 2015 os: Visual Studio 2017
clone_depth: 1 clone_depth: 1
configuration: configuration:
@ -7,18 +7,25 @@ configuration:
init: init:
- C:\"Program Files (x86)"\"Microsoft Visual Studio 14.0"\VC\vcvarsall.bat %PLATFORM% - C:\"Program Files (x86)"\"Microsoft Visual Studio 14.0"\VC\vcvarsall.bat %PLATFORM%
install: 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" - 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" - 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" - 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" - 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" - 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" - 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" - 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" - 7z x -y "C:\fftw-3.3.5.zip" -o"C:\fftw"
- cd c:\fftw - cd c:\fftw
- ps: lib /machine:x64 /def:libfftw3f-3.def - 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: build_script:
# Host library and tools
- mkdir c:\projects\hackrf\host\build - mkdir c:\projects\hackrf\host\build
- cd c:\projects\hackrf\host\build - cd c:\projects\hackrf\host\build
- cmake -G "Visual Studio 14 2015 Win64" \ - cmake -G "Visual Studio 14 2015 Win64" \
@ -31,3 +38,15 @@ build_script:
-DFFTW_LIBRARIES=C:\fftw\libfftw3f-3.lib \ -DFFTW_LIBRARIES=C:\fftw\libfftw3f-3.lib \
.. ..
- msbuild HackRF.sln /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" - 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%

View File

@ -20,7 +20,7 @@
# Top directory CMake project for HackRF firmware # 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) set(CMAKE_TOOLCHAIN_FILE toolchain-arm-cortex-m.cmake)
project (hackrf_firmware_all C) project (hackrf_firmware_all C)

14
firmware/appveyor.sh Normal file
View File

@ -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

View File

@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA. # 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) set(CMAKE_TOOLCHAIN_FILE ../toolchain-arm-cortex-m.cmake)
project(blinky C) project(blinky C)

View File

@ -21,7 +21,13 @@
#include "operacake.h" #include "operacake.h"
#include "hackrf_core.h" #include "hackrf_core.h"
#include "gpio.h"
#include "gpio_lpc.h"
#include <libopencm3/lpc43xx/scu.h>
/*
* I2C Mode
*/
#define OPERACAKE_PIN_OE(x) (x<<7) #define OPERACAKE_PIN_OE(x) (x<<7)
#define OPERACAKE_PIN_U2CTRL1(x) (x<<6) #define OPERACAKE_PIN_U2CTRL1(x) (x<<6)
#define OPERACAKE_PIN_U2CTRL0(x) (x<<5) #define OPERACAKE_PIN_U2CTRL0(x) (x<<5)
@ -44,7 +50,7 @@
#define OPERACAKE_SAMESIDE OPERACAKE_PIN_U1CTRL(1) #define OPERACAKE_SAMESIDE OPERACAKE_PIN_U1CTRL(1)
#define OPERACAKE_CROSSOVER OPERACAKE_PIN_U1CTRL(0) #define OPERACAKE_CROSSOVER OPERACAKE_PIN_U1CTRL(0)
#define OPERACAKE_EN_LEDS (OPERACAKE_PIN_LEDEN2(1) | OPERACAKE_PIN_LEDEN2(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_GPIO_DISABLE OPERACAKE_PIN_OE(1)
#define OPERACAKE_REG_INPUT 0x00 #define OPERACAKE_REG_INPUT 0x00
@ -56,6 +62,10 @@
| OPERACAKE_PORT_A1 | OPERACAKE_PORT_B1 \ | OPERACAKE_PORT_A1 | OPERACAKE_PORT_B1 \
| OPERACAKE_EN_LEDS) | OPERACAKE_EN_LEDS)
#define OPERACAKE_CONFIG_ALL_OUTPUT (0x00) #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 #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; return 0;
} }
/*
* Opera Glasses
*/
typedef struct { typedef struct {
uint16_t freq_min; uint16_t freq_min;
uint16_t freq_max; uint16_t freq_max;
@ -194,3 +207,82 @@ uint8_t operacake_set_range(uint32_t freq_mhz) {
current_range = i; current_range = i;
return 0; 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;
}

View File

@ -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_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_add_range(uint16_t freq_min, uint16_t freq_max, uint8_t port);
uint8_t operacake_set_range(uint32_t freq_mhz); uint8_t operacake_set_range(uint32_t freq_mhz);
uint16_t gpio_test(uint8_t address);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -34,6 +34,8 @@ SET(LIBOPENCM3 ${PATH_HACKRF_FIRMWARE}/libopencm3)
include(${PATH_HACKRF_FIRMWARE}/dfu-util.cmake) include(${PATH_HACKRF_FIRMWARE}/dfu-util.cmake)
#set(VERSION "")
if (NOT DEFINED VERSION)
execute_process( execute_process(
COMMAND git log -n 1 --format=%h COMMAND git log -n 1 --format=%h
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
@ -45,8 +47,9 @@ execute_process(
if (GIT_VERSION_FOUND) if (GIT_VERSION_FOUND)
set(VERSION "unknown") set(VERSION "unknown")
else (GIT_VERSION_FOUND) else (GIT_VERSION_FOUND)
set(VERSION ${GIT_VERSION}) set(VERSION "git-${GIT_VERSION}")
endif (GIT_VERSION_FOUND) endif (GIT_VERSION_FOUND)
endif()
if(NOT DEFINED BOARD) if(NOT DEFINED BOARD)
set(BOARD HACKRF_ONE) set(BOARD HACKRF_ONE)
@ -70,7 +73,7 @@ if(NOT DEFINED SRC_M0)
set(SRC_M0 "${PATH_HACKRF_FIRMWARE_COMMON}/m0_sleep.c") set(SRC_M0 "${PATH_HACKRF_FIRMWARE_COMMON}/m0_sleep.c")
endif() 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") 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(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") SET(LDFLAGS_COMMON "-nostartfiles -Wl,--gc-sections")
if(V STREQUAL "1") if(V STREQUAL "1")
@ -88,7 +91,7 @@ endif()
SET(CPUFLAGS_M0 "-mthumb -mcpu=cortex-m0 -mfloat-abi=soft") SET(CPUFLAGS_M0 "-mthumb -mcpu=cortex-m0 -mfloat-abi=soft")
SET(CFLAGS_M0 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M0} -DLPC43XX_M0") SET(CFLAGS_M0 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M0} -DLPC43XX_M0")
SET(CXXFLAGS_M0 "-std=gnu++0x ${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(CPUFLAGS_M4 "-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16")
SET(CFLAGS_M4 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4") SET(CFLAGS_M4 "-std=gnu99 ${CFLAGS_COMMON} ${CPUFLAGS_M4} -DLPC43XX_M4")

View File

@ -18,7 +18,7 @@
# Boston, MA 02110-1301, USA. # 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) set(CMAKE_TOOLCHAIN_FILE ../toolchain-arm-cortex-m.cmake)
project(hackrf_usb C) project(hackrf_usb C)

View File

@ -92,7 +92,8 @@ static const usb_request_handler_fn vendor_request_handler[] = {
usb_vendor_request_operacake_set_ranges, usb_vendor_request_operacake_set_ranges,
usb_vendor_request_set_clkout_enable, usb_vendor_request_set_clkout_enable,
usb_vendor_request_spiflash_status, 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 = static const uint32_t vendor_request_handler_count =

View File

@ -74,3 +74,18 @@ usb_request_status_t usb_vendor_request_operacake_set_ranges(
} }
return USB_REQUEST_STATUS_OK; 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;
}

View File

@ -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_request_status_t usb_vendor_request_operacake_set_ranges(
usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage); 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__ */ #endif /* end of include guard: __USB_API_OPERACAKE_H__ */

View File

@ -22,10 +22,9 @@ set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_SYSTEM_PROCESSOR arm)
include(CMakeForceCompiler) set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs")
CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU)
execute_process( execute_process(
COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.a COMMAND ${CMAKE_C_COMPILER} -print-file-name=libc.a

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8 encoding utf-8
Sheet 3 4 Sheet 3 4
Title "HackRF One baseband" Title "HackRF One baseband"
Date "13 feb 2014" Date "2018-04-17"
Rev "" Rev ""
Comp "Copyright 2012 Michael Ossmann" Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2" Comment1 "License: GPL v2"
Comment2 "" Comment2 ""
Comment3 "" Comment3 ""

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8 encoding utf-8
Sheet 2 4 Sheet 2 4
Title "HackRF One frontend" Title "HackRF One frontend"
Date "13 feb 2014" Date "2018-04-17"
Rev "" Rev ""
Comp "Copyright 2012 Michael Ossmann" Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2" Comment1 "License: GPL v2"
Comment2 "" Comment2 ""
Comment3 "" Comment3 ""
@ -1539,7 +1539,7 @@ Text Label 14350 7350 1 40 ~ 0
TX_AMP_OUT TX_AMP_OUT
Text Label 8500 8550 1 40 ~ 0 Text Label 8500 8550 1 40 ~ 0
RX_AMP_OUT RX_AMP_OUT
Text Label 12300 9350 0 40 ~ 0 Text Label 11850 9100 0 40 ~ 0
RX_AMP_IN RX_AMP_IN
$Comp $Comp
L GND #PWR036 L GND #PWR036

View File

@ -2845,7 +2845,7 @@ EndCmp
BeginCmp BeginCmp
TimeStamp = /5037043E/4F825D1B; TimeStamp = /5037043E/4F825D1B;
Reference = U20; Reference = U20;
ValeurCmp = W25Q80BV; ValeurCmp = W25Q80;
IdModule = hackrf:GSG-SOIC8-208; IdModule = hackrf:GSG-SOIC8-208;
EndCmp EndCmp

View File

@ -9630,7 +9630,7 @@
(fp_text reference U20 (at 0 0 180) (layer F.SilkS) (fp_text reference U20 (at 0 0 180) (layer F.SilkS)
(effects (font (thickness 0.3048))) (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))) (effects (font (thickness 0.3048)))
) )
(fp_circle (center -1.651 -1.651) (end -1.143 -1.651) (layer F.SilkS) (width 0.2032)) (fp_circle (center -1.651 -1.651) (end -1.143 -1.651) (layer F.SilkS) (width 0.2032))

View File

@ -3452,11 +3452,11 @@
(sheetpath (names /mcu/usb/power/) (tstamps /5037043E/)) (sheetpath (names /mcu/usb/power/) (tstamps /5037043E/))
(tstamp 4F82F4C0)) (tstamp 4F82F4C0))
(comp (ref U20) (comp (ref U20)
(value W25Q80BV) (value W25Q80)
(footprint hackrf:GSG-SOIC8-208) (footprint hackrf:GSG-SOIC8-208)
(fields (fields
(field (name Manufacturer) Winbond) (field (name Manufacturer) Winbond)
(field (name "Part Number") W25Q80JVSSIQ) (field (name "Part Number") W25Q80DVSSIG)
(field (name Description) "IC FLASH 8MBIT 8SOIC")) (field (name Description) "IC FLASH 8MBIT 8SOIC"))
(libsource (lib hackrf) (part W25Q80BV)) (libsource (lib hackrf) (part W25Q80BV))
(sheetpath (names /mcu/usb/power/) (tstamps /5037043E/)) (sheetpath (names /mcu/usb/power/) (tstamps /5037043E/))

View File

@ -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 version=1
last_client=kicad last_client=kicad
[cvpcb] [cvpcb]
@ -77,3 +77,13 @@ LibName27=atmel
LibName28=contrib LibName28=contrib
LibName29=valves LibName29=valves
LibName30=hackrf LibName30=hackrf
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=
SpiceForceRefPrefix=0
SpiceUseNetNumbers=0
LabSize=60

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8 encoding utf-8
Sheet 1 4 Sheet 1 4
Title "HackRF One" Title "HackRF One"
Date "13 feb 2014" Date "2018-04-17"
Rev "" Rev ""
Comp "Copyright 2012 Michael Ossmann" Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2" Comment1 "License: GPL v2"
Comment2 "" Comment2 ""
Comment3 "" Comment3 ""

View File

@ -36,9 +36,9 @@ $Descr User 17000 11000
encoding utf-8 encoding utf-8
Sheet 4 4 Sheet 4 4
Title "HackRF One mcu/usb/power" Title "HackRF One mcu/usb/power"
Date "13 feb 2014" Date "2018-04-17"
Rev "" Rev ""
Comp "Copyright 2012 Michael Ossmann" Comp "Copyright 2012-2018 Michael Ossmann"
Comment1 "License: GPL v2" Comment1 "License: GPL v2"
Comment2 "" Comment2 ""
Comment3 "" Comment3 ""
@ -2088,11 +2088,11 @@ L W25Q80BV U20
U 1 1 4F825D1B U 1 1 4F825D1B
P 9800 1450 P 9800 1450
F 0 "U20" H 9800 1200 60 0000 C CNN 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 2 "hackrf:GSG-SOIC8-208" H 9800 1450 60 0001 C CNN
F 3 "" 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 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" F 6 "IC FLASH 8MBIT 8SOIC" H 9800 1450 60 0001 C CNN "Description"
1 9800 1450 1 9800 1450
1 0 0 -1 1 0 0 -1

View File

@ -59,14 +59,10 @@ ENDDEF
DEF C C 0 10 N Y 1 F N DEF C C 0 10 N Y 1 F N
F0 "C" 25 100 50 H V L CNN F0 "C" 25 100 50 H V L CNN
F1 "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 F2 "" 38 -150 50 H I C CNN
F3 "" 0 0 50 H V C CNN F3 "" 0 0 50 H I C CNN
$FPLIST $FPLIST
C? C_*
C_????_*
C_????
SMD*_c
Capacitor*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
P 2 0 1 20 -80 -30 80 -30 N P 2 0 1 20 -80 -30 80 -30 N
@ -78,16 +74,17 @@ ENDDEF
# #
# CONN_02X03 # CONN_02X03
# #
DEF CONN_02X03 P 0 1 Y N 1 F N DEF CONN_02X03 J 0 1 Y N 1 F N
F0 "P" 0 200 50 H V C CNN F0 "J" 0 200 50 H V C CNN
F1 "CONN_02X03" 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 F2 "" 0 -1200 50 H I C CNN
F3 "" 0 -1200 50 H V C CNN F3 "" 0 -1200 50 H I C CNN
$FPLIST $FPLIST
Pin_Header_Straight_2X03 Pin_Header_Straight_2X*
Pin_Header_Angled_2X03 Pin_Header_Angled_2X*
Socket_Strip_Straight_2X03 Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X03 Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
S -100 -95 -50 -105 0 1 0 N S -100 -95 -50 -105 0 1 0 N
@ -108,16 +105,17 @@ ENDDEF
# #
# CONN_02X08 # CONN_02X08
# #
DEF CONN_02X08 P 0 1 Y N 1 F N DEF CONN_02X08 J 0 1 Y N 1 F N
F0 "P" 0 450 50 H V C CNN F0 "J" 0 450 50 H V C CNN
F1 "CONN_02X08" 0 0 50 V V C CNN F1 "CONN_02X08" 0 0 50 V V C CNN
F2 "" 0 -1200 50 H V C CNN F2 "" 0 -1200 50 H I C CNN
F3 "" 0 -1200 50 H V C CNN F3 "" 0 -1200 50 H I C CNN
$FPLIST $FPLIST
Pin_Header_Straight_2X08 Pin_Header_Straight_2X*
Pin_Header_Angled_2X08 Pin_Header_Angled_2X*
Socket_Strip_Straight_2X08 Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X08 Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
S -100 -345 -50 -355 0 1 0 N S -100 -345 -50 -355 0 1 0 N
@ -158,16 +156,16 @@ ENDDEF
# #
# CONN_02X11 # CONN_02X11
# #
DEF CONN_02X11 P 0 1 Y N 1 F N DEF CONN_02X11 J 0 1 Y N 1 F N
F0 "P" 0 600 50 H V C CNN F0 "J" 0 600 50 H V C CNN
F1 "CONN_02X11" 0 0 50 V V C CNN F1 "CONN_02X11" 0 0 50 V V C CNN
F2 "" 0 -1200 50 H V C CNN F2 "" 0 -1200 50 H I C CNN
F3 "" 0 -1200 50 H V C CNN F3 "" 0 -1200 50 H I C CNN
$FPLIST $FPLIST
Pin_Header_Straight_2X11 Pin_Header_Straight_2X*
Pin_Header_Angled_2X11 Pin_Header_Angled_2X*
Socket_Strip_Straight_2X11 Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X11 Socket_Strip_Angled_2X*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
S -100 -495 -50 -505 0 1 0 N S -100 -495 -50 -505 0 1 0 N
@ -220,16 +218,17 @@ ENDDEF
# #
# CONN_02X13 # CONN_02X13
# #
DEF CONN_02X13 P 0 1 Y N 1 F N DEF CONN_02X13 J 0 1 Y N 1 F N
F0 "P" 0 700 50 H V C CNN F0 "J" 0 700 50 H V C CNN
F1 "CONN_02X13" 0 0 50 V V C CNN F1 "CONN_02X13" 0 0 50 V V C CNN
F2 "" 0 -1150 50 H V C CNN F2 "" 0 -1150 50 H I C CNN
F3 "" 0 -1150 50 H V C CNN F3 "" 0 -1150 50 H I C CNN
$FPLIST $FPLIST
Pin_Header_Straight_2X13 Pin_Header_Straight_2X*
Pin_Header_Angled_2X13 Pin_Header_Angled_2X*
Socket_Strip_Straight_2X13 Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X13 Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
S -100 -595 -50 -605 0 1 0 N S -100 -595 -50 -605 0 1 0 N
@ -290,16 +289,17 @@ ENDDEF
# #
# CONN_02X20 # CONN_02X20
# #
DEF CONN_02X20 P 0 1 Y N 1 F N DEF CONN_02X20 J 0 1 Y N 1 F N
F0 "P" 0 1050 50 H V C CNN F0 "J" 0 1050 50 H V C CNN
F1 "CONN_02X20" 0 0 50 V V C CNN F1 "CONN_02X20" 0 0 50 V V C CNN
F2 "" 0 -950 50 H V C CNN F2 "" 0 -950 50 H I C CNN
F3 "" 0 -950 50 H V C CNN F3 "" 0 -950 50 H I C CNN
$FPLIST $FPLIST
Pin_Header_Straight_2X20 Pin_Header_Straight_2X*
Pin_Header_Angled_2X20 Pin_Header_Angled_2X*
Socket_Strip_Straight_2X20 Socket_Strip_Straight_2X*
Socket_Strip_Angled_2X20 Socket_Strip_Angled_2X*
IDC_Header_Straight_*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
S -100 -945 -50 -955 0 1 0 N S -100 -945 -50 -955 0 1 0 N
@ -405,8 +405,8 @@ ENDDEF
DEF GND #PWR 0 0 Y Y 1 F P DEF GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN F0 "#PWR" 0 -250 50 H I C CNN
F1 "GND" 0 -150 50 H V C CNN F1 "GND" 0 -150 50 H V C CNN
F2 "" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H V C CNN F3 "" 0 0 50 H I C CNN
DRAW DRAW
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 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 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 DEF LED D 0 40 Y N 1 F N
F0 "D" 0 100 50 H V C CNN F0 "D" 0 100 50 H V C CNN
F1 "LED" 0 -100 50 H V C CNN F1 "LED" 0 -100 50 H V C CNN
F2 "" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H V C CNN F3 "" 0 0 50 H I C CNN
$FPLIST $FPLIST
LED* LED*
$ENDFPLIST $ENDFPLIST
@ -527,11 +527,11 @@ ENDDEF
DEF R R 0 0 N Y 1 F N DEF R R 0 0 N Y 1 F N
F0 "R" 80 0 50 V V C CNN F0 "R" 80 0 50 V V C CNN
F1 "R" 0 0 50 V V C CNN F1 "R" 0 0 50 V V C CNN
F2 "" -70 0 50 V V C CNN F2 "" -70 0 50 V I C CNN
F3 "" 0 0 50 H V C CNN F3 "" 0 0 50 H I C CNN
$FPLIST $FPLIST
R_* R_*
Resistor_* R_*
$ENDFPLIST $ENDFPLIST
DRAW DRAW
S -40 -100 40 100 0 1 10 N S -40 -100 40 100 0 1 10 N
@ -600,8 +600,8 @@ ENDDEF
DEF VCC #PWR 0 0 Y Y 1 F P DEF VCC #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN F0 "#PWR" 0 -150 50 H I C CNN
F1 "VCC" 0 150 50 H V C CNN F1 "VCC" 0 150 50 H V C CNN
F2 "" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H V C CNN F3 "" 0 0 50 H I C CNN
DRAW DRAW
C 0 75 25 0 1 0 N C 0 75 25 0 1 0 N
P 2 0 1 0 0 0 0 50 N P 2 0 1 0 0 0 0 50 N

View File

@ -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 (general
(links 598) (links 598)
@ -517,6 +517,7 @@
(at 176.775 154.675) (at 176.775 154.675)
(path /57F102E7) (path /57F102E7)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG1 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBG1 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -541,6 +542,7 @@
(at 176.775 155.9) (at 176.775 155.9)
(path /57F102F1) (path /57F102F1)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY1 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBY1 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -565,6 +567,7 @@
(at 176.775 117.55) (at 176.775 117.55)
(path /57F10301) (path /57F10301)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG4 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBG4 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -589,6 +592,7 @@
(at 176.775 118.775) (at 176.775 118.775)
(path /57F1030A) (path /57F1030A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY4 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBY4 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -613,6 +617,7 @@
(at 176.775 129.925) (at 176.775 129.925)
(path /57F102CF) (path /57F102CF)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG3 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBG3 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -637,6 +642,7 @@
(at 176.775 131.15) (at 176.775 131.15)
(path /57F102D8) (path /57F102D8)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY3 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBY3 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -661,6 +667,7 @@
(at 63.225 118.775 180) (at 63.225 118.775 180)
(path /57F0F0A3) (path /57F0F0A3)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY4 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAY4 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -685,6 +692,7 @@
(at 63.225 117.55 180) (at 63.225 117.55 180)
(path /57F0F09A) (path /57F0F09A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG4 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAG4 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -709,6 +717,7 @@
(at 67.5 136.75 180) (at 67.5 136.75 180)
(path /57ED4222) (path /57ED4222)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C1 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C1 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -729,6 +738,7 @@
(at 67.5 112 180) (at 67.5 112 180)
(path /57EF11C4) (path /57EF11C4)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C2 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C2 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -749,6 +759,7 @@
(at 167.5 136.75) (at 167.5 136.75)
(path /57EF1B35) (path /57EF1B35)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C3 (at 0 0.0508) (layer F.SilkS) (fp_text reference C3 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -769,6 +780,7 @@
(at 172.5 112) (at 172.5 112)
(path /57EF1B93) (path /57EF1B93)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C4 (at 0 0.0508) (layer F.SilkS) (fp_text reference C4 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -789,6 +801,7 @@
(at 67.5 149.125 180) (at 67.5 149.125 180)
(path /57EF0A53) (path /57EF0A53)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C5 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C5 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -809,6 +822,7 @@
(at 67.5 124.375 180) (at 67.5 124.375 180)
(path /57EF11F3) (path /57EF11F3)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C6 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C6 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -829,6 +843,7 @@
(at 167.5 149.525) (at 167.5 149.525)
(path /57EF1B65) (path /57EF1B65)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C7 (at 0 0.0508) (layer F.SilkS) (fp_text reference C7 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -849,6 +864,7 @@
(at 172.5 124.375) (at 172.5 124.375)
(path /57EF1BC2) (path /57EF1BC2)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C8 (at 0 0.0508) (layer F.SilkS) (fp_text reference C8 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -869,6 +885,7 @@
(at 115.09248 165.8874 180) (at 115.09248 165.8874 180)
(path /57EDB85B) (path /57EDB85B)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C9 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C9 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -889,6 +906,7 @@
(at 123.87072 165.36416 180) (at 123.87072 165.36416 180)
(path /57EDC2D6) (path /57EDC2D6)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C10 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C10 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -909,6 +927,7 @@
(at 67.5 161.5 180) (at 67.5 161.5 180)
(path /57ECFA66) (path /57ECFA66)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C11 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C11 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -929,6 +948,7 @@
(at 172.475 161.5) (at 172.475 161.5)
(path /57ED7255) (path /57ED7255)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference C12 (at 0 0.0508) (layer F.SilkS) (fp_text reference C12 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -949,6 +969,7 @@
(at 69.1 136.2 90) (at 69.1 136.2 90)
(path /57ED4219) (path /57ED4219)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D1 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D1 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -969,6 +990,7 @@
(at 69.1 111.5 90) (at 69.1 111.5 90)
(path /57EF11BB) (path /57EF11BB)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D2 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D2 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -989,6 +1011,7 @@
(at 165.9 136.3 90) (at 165.9 136.3 90)
(path /57EF1B2C) (path /57EF1B2C)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D3 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D3 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1009,6 +1032,7 @@
(at 170.9 111.5 90) (at 170.9 111.5 90)
(path /57EF1B8A) (path /57EF1B8A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D4 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D4 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1029,6 +1053,7 @@
(at 69.1 148.6 90) (at 69.1 148.6 90)
(path /57EF0A4A) (path /57EF0A4A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D5 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D5 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1049,6 +1074,7 @@
(at 69.1 123.9 90) (at 69.1 123.9 90)
(path /57EF11EA) (path /57EF11EA)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D6 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D6 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1069,6 +1095,7 @@
(at 165.9 149 90) (at 165.9 149 90)
(path /57EF1B5C) (path /57EF1B5C)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D7 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D7 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1089,6 +1116,7 @@
(at 170.9 123.9 90) (at 170.9 123.9 90)
(path /57EF1BB9) (path /57EF1BB9)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D8 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D8 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1109,6 +1137,7 @@
(at 69.1 161 90) (at 69.1 161 90)
(path /57ECF9D2) (path /57ECF9D2)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D9 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D9 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1129,6 +1158,7 @@
(at 170.9 161 90) (at 170.9 161 90)
(path /57ED724C) (path /57ED724C)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference D10 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference D10 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -1149,6 +1179,7 @@
(at 63.225 167.05 180) (at 63.225 167.05 180)
(path /57F14A76) (path /57F14A76)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DA0 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DA0 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1173,6 +1204,7 @@
(at 63.225 154.675 180) (at 63.225 154.675 180)
(path /57F0F080) (path /57F0F080)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG1 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAG1 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1197,6 +1229,7 @@
(at 63.225 142.3 180) (at 63.225 142.3 180)
(path /57EFE38F) (path /57EFE38F)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG2 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAG2 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1221,6 +1254,7 @@
(at 63.225 129.925 180) (at 63.225 129.925 180)
(path /57F0CF06) (path /57F0CF06)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAG3 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAG3 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1245,6 +1279,7 @@
(at 63.225 155.9 180) (at 63.225 155.9 180)
(path /57F0F08A) (path /57F0F08A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY1 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAY1 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1269,6 +1304,7 @@
(at 63.225 143.525 180) (at 63.225 143.525 180)
(path /57F0174D) (path /57F0174D)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY2 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAY2 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1293,6 +1329,7 @@
(at 63.225 131.15 180) (at 63.225 131.15 180)
(path /57F0CF0F) (path /57F0CF0F)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DAY3 (at 0.7112 0 180) (layer F.SilkS) (fp_text reference DAY3 (at 0.7112 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1317,6 +1354,7 @@
(at 176.775 167.05) (at 176.775 167.05)
(path /57F14A80) (path /57F14A80)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DB0 (at 0.7112 0) (layer F.SilkS) (fp_text reference DB0 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1341,6 +1379,7 @@
(at 176.775 142.3) (at 176.775 142.3)
(path /57F102B1) (path /57F102B1)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBG2 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBG2 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -1365,6 +1404,7 @@
(at 176.775 143.525) (at 176.775 143.525)
(path /57F102BB) (path /57F102BB)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference DBY2 (at 0.7112 0) (layer F.SilkS) (fp_text reference DBY2 (at 0.7112 0) (layer F.SilkS)
(effects (font (size 0.6096 0.508) (thickness 0.127))) (effects (font (size 0.6096 0.508) (thickness 0.127)))
) )
@ -2417,6 +2457,7 @@
(at 112.3188 130.048 90) (at 112.3188 130.048 90)
(path /57F026AD) (path /57F026AD)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R1 (at 0 0 90) (layer F.SilkS) (fp_text reference R1 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2437,6 +2478,7 @@
(at 112.4966 124.968 90) (at 112.4966 124.968 90)
(path /57F1320C) (path /57F1320C)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R2 (at 0 0 90) (layer F.SilkS) (fp_text reference R2 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2457,6 +2499,7 @@
(at 110.49 123.4694 270) (at 110.49 123.4694 270)
(path /57F0E70A) (path /57F0E70A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R3 (at 0 0 270) (layer F.SilkS) (fp_text reference R3 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2477,6 +2520,7 @@
(at 110.4646 128.5748 270) (at 110.4646 128.5748 270)
(path /57F12932) (path /57F12932)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R4 (at 0 0 270) (layer F.SilkS) (fp_text reference R4 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2497,6 +2541,7 @@
(at 134.5 140.5 90) (at 134.5 140.5 90)
(path /57F1ECB2) (path /57F1ECB2)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R5 (at 0 0 90) (layer F.SilkS) (fp_text reference R5 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2517,6 +2562,7 @@
(at 136.5 140.5 90) (at 136.5 140.5 90)
(path /57F1EEC6) (path /57F1EEC6)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R6 (at 0 0 90) (layer F.SilkS) (fp_text reference R6 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2577,6 +2623,7 @@
(at 131.5 139.5) (at 131.5 139.5)
(path /57F40DD9) (path /57F40DD9)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R9 (at 0 0) (layer F.SilkS) (fp_text reference R9 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2597,6 +2644,7 @@
(at 130.74396 133.91388) (at 130.74396 133.91388)
(path /57F3C15B) (path /57F3C15B)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R10 (at 0 0) (layer F.SilkS) (fp_text reference R10 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2617,6 +2665,7 @@
(at 140.589 128.79324) (at 140.589 128.79324)
(path /57F42B49) (path /57F42B49)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R11 (at 0 0) (layer F.SilkS) (fp_text reference R11 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2637,6 +2686,7 @@
(at 130.77 106.8236) (at 130.77 106.8236)
(path /57F4A26A) (path /57F4A26A)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R12 (at 0 0) (layer F.SilkS) (fp_text reference R12 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2657,6 +2707,7 @@
(at 125.5 126 90) (at 125.5 126 90)
(path /57F4A395) (path /57F4A395)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R13 (at 0 0 90) (layer F.SilkS) (fp_text reference R13 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2677,6 +2728,7 @@
(at 134.77 106.8236) (at 134.77 106.8236)
(path /57F4A4C3) (path /57F4A4C3)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R14 (at 0 0) (layer F.SilkS) (fp_text reference R14 (at 0 0) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2697,6 +2749,7 @@
(at 138.7 121.7 180) (at 138.7 121.7 180)
(path /57F4A5F4) (path /57F4A5F4)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R15 (at 0 0 180) (layer F.SilkS) (fp_text reference R15 (at 0 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2717,6 +2770,7 @@
(at 117.336777 136.475619 180) (at 117.336777 136.475619 180)
(path /57F4A728) (path /57F4A728)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R16 (at 0 0 180) (layer F.SilkS) (fp_text reference R16 (at 0 0 180) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2737,6 +2791,7 @@
(at 150.2 149.6 90) (at 150.2 149.6 90)
(path /57F381DD) (path /57F381DD)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R17 (at 0 0 90) (layer F.SilkS) (fp_text reference R17 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2757,6 +2812,7 @@
(at 152.7 149.6 90) (at 152.7 149.6 90)
(path /57F40B96) (path /57F40B96)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R18 (at 0 0 90) (layer F.SilkS) (fp_text reference R18 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2777,6 +2833,7 @@
(at 155.2 149.6 90) (at 155.2 149.6 90)
(path /57F40CBA) (path /57F40CBA)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R19 (at 0 0 90) (layer F.SilkS) (fp_text reference R19 (at 0 0 90) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -2797,6 +2854,7 @@
(at 128.1 135.8 270) (at 128.1 135.8 270)
(path /57FC84C7) (path /57FC84C7)
(solder_mask_margin 0.1016) (solder_mask_margin 0.1016)
(attr smd)
(fp_text reference R20 (at 0 0 270) (layer F.SilkS) (fp_text reference R20 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.6096 0.6096) (thickness 0.1524))) (effects (font (size 0.6096 0.6096) (thickness 0.1524)))
) )
@ -3238,6 +3296,7 @@
(path /57ED7D40) (path /57ED7D40)
(solder_mask_margin 0.07112) (solder_mask_margin 0.07112)
(clearance 0.1524) (clearance 0.1524)
(attr smd)
(fp_text reference U1 (at 0 0 180) (layer F.SilkS) (fp_text reference U1 (at 0 0 180) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.2))) (effects (font (size 1 1) (thickness 0.2)))
) )
@ -3296,6 +3355,7 @@
(module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D867) (module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D867)
(at 83 130.5625) (at 83 130.5625)
(path /57ED2FAA) (path /57ED2FAA)
(attr smd)
(fp_text reference U2 (at 0 0.5) (layer F.SilkS) (fp_text reference U2 (at 0 0.5) (layer F.SilkS)
(effects (font (size 0.6 0.5) (thickness 0.1))) (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) (module gsg-modules:SKY13322-375LF (layer C1F) (tedit 57F1C8D1) (tstamp 57F1D87A)
(at 157 130.5625 180) (at 157 130.5625 180)
(path /57EF1C07) (path /57EF1C07)
(attr smd)
(fp_text reference U3 (at 0 0.5 180) (layer F.SilkS) (fp_text reference U3 (at 0 0.5 180) (layer F.SilkS)
(effects (font (size 0.6 0.5) (thickness 0.1))) (effects (font (size 0.6 0.5) (thickness 0.1)))
) )
@ -3388,6 +3449,7 @@
(module gsg-modules:TSSOP16 (layer C1F) (tedit 5605DC3A) (tstamp 57F1D88E) (module gsg-modules:TSSOP16 (layer C1F) (tedit 5605DC3A) (tstamp 57F1D88E)
(at 136 134 90) (at 136 134 90)
(path /57F3AE6E) (path /57F3AE6E)
(attr smd)
(fp_text reference U4 (at 1.3 0 180) (layer F.SilkS) (fp_text reference U4 (at 1.3 0 180) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15))) (effects (font (size 1 1) (thickness 0.15)))
) )
@ -3436,6 +3498,7 @@
(module gsg-modules:TSSOP20 (layer C1F) (tedit 57F1CC68) (tstamp 57F1D8AB) (module gsg-modules:TSSOP20 (layer C1F) (tedit 57F1CC68) (tstamp 57F1D8AB)
(at 145 122 180) (at 145 122 180)
(path /57F25F57) (path /57F25F57)
(attr smd)
(fp_text reference U5 (at 1.3 0 270) (layer F.SilkS) (fp_text reference U5 (at 1.3 0 270) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15))) (effects (font (size 1 1) (thickness 0.15)))
) )
@ -3492,6 +3555,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8B5) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8B5)
(at 117.336777 128.975619 90) (at 117.336777 128.975619 90)
(path /57FC9246) (path /57FC9246)
(attr smd)
(fp_text reference U6 (at 0 -0.18 90) (layer F.SilkS) (fp_text reference U6 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (effects (font (size 0.4 0.5) (thickness 0.12)))
) )
@ -3520,6 +3584,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8BF) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8BF)
(at 117.336777 123.975619 90) (at 117.336777 123.975619 90)
(path /57FCC959) (path /57FCC959)
(attr smd)
(fp_text reference U7 (at 0 -0.18 90) (layer F.SilkS) (fp_text reference U7 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (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) (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D8C8)
(at 127.7506 109.5596 90) (at 127.7506 109.5596 90)
(path /57EEFD9C) (path /57EEFD9C)
(attr smd)
(fp_text reference U8 (at 0 -0.18 90) (layer F.SilkS) (fp_text reference U8 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1))) (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) (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D8D1)
(at 134.5298 109.4778 270) (at 134.5298 109.4778 270)
(path /57EF9417) (path /57EF9417)
(attr smd)
(fp_text reference U9 (at 0 -0.18 270) (layer F.SilkS) (fp_text reference U9 (at 0 -0.18 270) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1))) (effects (font (size 0.4 0.5) (thickness 0.1)))
) )
@ -3600,6 +3667,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8DB) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8DB)
(at 127.95504 113.32464 180) (at 127.95504 113.32464 180)
(path /57EF011E) (path /57EF011E)
(attr smd)
(fp_text reference U10 (at 0 -0.18 180) (layer F.SilkS) (fp_text reference U10 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (effects (font (size 0.4 0.5) (thickness 0.12)))
) )
@ -3628,6 +3696,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8E5) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8E5)
(at 132.05968 113.3856 180) (at 132.05968 113.3856 180)
(path /57EF9429) (path /57EF9429)
(attr smd)
(fp_text reference U11 (at 0 -0.18 180) (layer F.SilkS) (fp_text reference U11 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (effects (font (size 0.4 0.5) (thickness 0.12)))
) )
@ -3656,6 +3725,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8EF) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8EF)
(at 127.83312 119.60352 180) (at 127.83312 119.60352 180)
(path /57EF3F5A) (path /57EF3F5A)
(attr smd)
(fp_text reference U12 (at 0 -0.18 180) (layer F.SilkS) (fp_text reference U12 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (effects (font (size 0.4 0.5) (thickness 0.12)))
) )
@ -3684,6 +3754,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8F9) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D8F9)
(at 132.0546 119.61876 180) (at 132.0546 119.61876 180)
(path /57EF9432) (path /57EF9432)
(attr smd)
(fp_text reference U13 (at 0 -0.18 180) (layer F.SilkS) (fp_text reference U13 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (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) (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D902)
(at 128 127 180) (at 128 127 180)
(path /57EEFEA7) (path /57EEFEA7)
(attr smd)
(fp_text reference U14 (at 0 -0.18 180) (layer F.SilkS) (fp_text reference U14 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1))) (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) (module gsg-modules:SOT353-1 (layer C1F) (tedit 57E1C050) (tstamp 57F1D90B)
(at 132 127 180) (at 132 127 180)
(path /57EF9420) (path /57EF9420)
(attr smd)
(fp_text reference U15 (at 0 -0.18 180) (layer F.SilkS) (fp_text reference U15 (at 0 -0.18 180) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.1))) (effects (font (size 0.4 0.5) (thickness 0.1)))
) )
@ -3764,6 +3837,7 @@
(module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D915) (module gsg-modules:SOT363 (layer C1F) (tedit 5099C1B1) (tstamp 57F1D915)
(at 117.336777 133.975619 90) (at 117.336777 133.975619 90)
(path /57EEFF63) (path /57EEFF63)
(attr smd)
(fp_text reference U16 (at 0 -0.18 90) (layer F.SilkS) (fp_text reference U16 (at 0 -0.18 90) (layer F.SilkS)
(effects (font (size 0.4 0.5) (thickness 0.12))) (effects (font (size 0.4 0.5) (thickness 0.12)))
) )
@ -3992,6 +4066,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 595A86A8) (tstamp 595A7CE9) (module gsg-modules:0402 (layer C1F) (tedit 595A86A8) (tstamp 595A7CE9)
(at 85.344 132.588 270) (at 85.344 132.588 270)
(path /5950597B) (path /5950597B)
(attr smd)
(fp_text reference C13 (at 0 0 270) (layer F.SilkS) (fp_text reference C13 (at 0 0 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4011,6 +4086,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CEF) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CEF)
(at 80.1116 131.7244 270) (at 80.1116 131.7244 270)
(path /59506EAE) (path /59506EAE)
(attr smd)
(fp_text reference C14 (at 0 0.0508 270) (layer F.SilkS) (fp_text reference C14 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4030,6 +4106,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CF5) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CF5)
(at 80.0862 129.4638 270) (at 80.0862 129.4638 270)
(path /59506764) (path /59506764)
(attr smd)
(fp_text reference C15 (at 0 0.0508 270) (layer F.SilkS) (fp_text reference C15 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4049,6 +4126,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CFB) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7CFB)
(at 85.598 128.9558 180) (at 85.598 128.9558 180)
(path /59505F07) (path /59505F07)
(attr smd)
(fp_text reference C16 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C16 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4068,6 +4146,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D01) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D01)
(at 116.4082 167.7416 270) (at 116.4082 167.7416 270)
(path /59504505) (path /59504505)
(attr smd)
(fp_text reference C17 (at 0 0.0508 270) (layer F.SilkS) (fp_text reference C17 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4087,6 +4166,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D07) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D07)
(at 123.5964 167.6908 270) (at 123.5964 167.6908 270)
(path /59504CB0) (path /59504CB0)
(attr smd)
(fp_text reference C18 (at 0 0.0508 270) (layer F.SilkS) (fp_text reference C18 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4106,6 +4186,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D0D) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D0D)
(at 154.13736 129.3114 90) (at 154.13736 129.3114 90)
(path /59503551) (path /59503551)
(attr smd)
(fp_text reference C19 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C19 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4125,6 +4206,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D13) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D13)
(at 159.6136 129.4638 90) (at 159.6136 129.4638 90)
(path /59501F48) (path /59501F48)
(attr smd)
(fp_text reference C20 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C20 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4144,6 +4226,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D19) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D19)
(at 159.6136 131.7244 90) (at 159.6136 131.7244 90)
(path /595027F2) (path /595027F2)
(attr smd)
(fp_text reference C21 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C21 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4163,6 +4246,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D1F) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D1F)
(at 154.1526 131.79552 90) (at 154.1526 131.79552 90)
(path /59503203) (path /59503203)
(attr smd)
(fp_text reference C22 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C22 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4182,6 +4266,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D25) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D25)
(at 113.87328 129.32664 90) (at 113.87328 129.32664 90)
(path /5950507B) (path /5950507B)
(attr smd)
(fp_text reference C23 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C23 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4201,6 +4286,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D2B) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D2B)
(at 124.41174 110.74146 90) (at 124.41174 110.74146 90)
(path /5950ECBD) (path /5950ECBD)
(attr smd)
(fp_text reference C24 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C24 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4220,6 +4306,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D31) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D31)
(at 127.3556 116.8527) (at 127.3556 116.8527)
(path /5950F8F8) (path /5950F8F8)
(attr smd)
(fp_text reference C25 (at 0 0.0508) (layer F.SilkS) (fp_text reference C25 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4239,6 +4326,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D37) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D37)
(at 127.29972 123.18492) (at 127.29972 123.18492)
(path /5951F244) (path /5951F244)
(attr smd)
(fp_text reference C26 (at 0 0.0508) (layer F.SilkS) (fp_text reference C26 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4258,6 +4346,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D3D) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D3D)
(at 128.1684 130.302) (at 128.1684 130.302)
(path /595200CF) (path /595200CF)
(attr smd)
(fp_text reference C27 (at 0 0.0508) (layer F.SilkS) (fp_text reference C27 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4277,6 +4366,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D43) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D43)
(at 113.9571 123.72594 270) (at 113.9571 123.72594 270)
(path /595064F7) (path /595064F7)
(attr smd)
(fp_text reference C28 (at 0 0.0508 270) (layer F.SilkS) (fp_text reference C28 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4296,6 +4386,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D49) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D49)
(at 137.8077 108.28782 270) (at 137.8077 108.28782 270)
(path /5950C936) (path /5950C936)
(attr smd)
(fp_text reference C29 (at 0 0.0508 270) (layer F.SilkS) (fp_text reference C29 (at 0 0.0508 270) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4315,6 +4406,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D4F) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D4F)
(at 131.76504 117.30228) (at 131.76504 117.30228)
(path /595103E6) (path /595103E6)
(attr smd)
(fp_text reference C30 (at 0 0.0508) (layer F.SilkS) (fp_text reference C30 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4334,6 +4426,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D55) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D55)
(at 132.52704 123.14428 180) (at 132.52704 123.14428 180)
(path /5951FCE0) (path /5951FCE0)
(attr smd)
(fp_text reference C31 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C31 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4353,6 +4446,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D5B) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D5B)
(at 132.02412 129.98196) (at 132.02412 129.98196)
(path /5951FEC9) (path /5951FEC9)
(attr smd)
(fp_text reference C32 (at 0 0.0508) (layer F.SilkS) (fp_text reference C32 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4372,6 +4466,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D61) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 595A7D61)
(at 113.67262 134.69112 90) (at 113.67262 134.69112 90)
(path /5953EF33) (path /5953EF33)
(attr smd)
(fp_text reference C33 (at 0 0.0508 90) (layer F.SilkS) (fp_text reference C33 (at 0 0.0508 90) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4391,6 +4486,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123B3) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123B3)
(at 132.03936 131.38912) (at 132.03936 131.38912)
(path /59D87D2E) (path /59D87D2E)
(attr smd)
(fp_text reference C34 (at 0 0.0508) (layer F.SilkS) (fp_text reference C34 (at 0 0.0508) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (effects (font (size 0.4064 0.4064) (thickness 0.1016)))
) )
@ -4410,6 +4506,7 @@
(module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123BD) (module gsg-modules:0402 (layer C1F) (tedit 4FB6CFE4) (tstamp 59E123BD)
(at 141.53388 126.49962 180) (at 141.53388 126.49962 180)
(path /59D88437) (path /59D88437)
(attr smd)
(fp_text reference C35 (at 0 0.0508 180) (layer F.SilkS) (fp_text reference C35 (at 0 0.0508 180) (layer F.SilkS)
(effects (font (size 0.4064 0.4064) (thickness 0.1016))) (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) (gr_text A0 (at 150.2 158.7) (layer F.SilkS)
(effects (font (size 0.8 0.6) (thickness 0.1))) (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))) (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))) (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))) (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))) (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))) (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))) (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))) (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))) (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))) (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))) (effects (font (size 1.016 0.762) (thickness 0.1905)))
) )
(gr_text J2 (at 96.25 167) (layer F.SilkS) (gr_text J2 (at 96.25 167) (layer F.SilkS)
@ -4597,7 +4694,7 @@
(gr_text 1 (at 164.9 101.3) (layer C1F) (gr_text 1 (at 164.9 101.3) (layer C1F)
(effects (font (size 1.016 1.016) (thickness 0.1778))) (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))) (effects (font (size 1.778 1.27) (thickness 0.3048)))
) )
(gr_text P9 (at 98.1 125.47) (layer F.SilkS) (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) (gr_text P28 (at 119.5 143.25 90) (layer F.SilkS)
(effects (font (size 1.016 0.762) (thickness 0.1905))) (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))) (effects (font (size 1.778 1.27) (thickness 0.3048)))
) )

View File

@ -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 1 "SD" V 5550 9500 60 0000 C CNN
F 2 "gsg-modules:HEADER-2x11" H 5550 9500 60 0001 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 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 5550 9500
1 0 0 -1 1 0 0 -1
$EndComp $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 1 "I2S" V 6700 9600 40 0000 C CNN
F 2 "gsg-modules:HEADER-2x13" H 6700 9600 60 0001 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 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 6700 9600
1 0 0 -1 1 0 0 -1
$EndComp $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 1 "GPIO" V 8300 9500 50 0000 C CNN
F 2 "gsg-modules:HEADER-2x11" H 8300 9500 60 0001 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 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 8300 9500
1 0 0 -1 1 0 0 -1
$EndComp $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 1 "ADDRESS" H 7850 7050 50 0000 C CNN
F 2 "gsg-modules:HEADER-2x3" H 7850 6050 60 0001 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 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 7850 7250
1 0 0 -1 1 0 0 -1
$EndComp $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 1 "BASEBAND" V 4450 9300 50 0000 C CNN
F 2 "gsg-modules:HEADER-2x8" H 4450 8100 60 0001 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 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 4450 9300
1 0 0 -1 1 0 0 -1
$EndComp $EndComp
@ -2293,7 +2307,7 @@ SCL
Text Notes 1750 6650 0 40 ~ 0 Text Notes 1750 6650 0 40 ~ 0
test points test points
Text Notes 9500 9900 0 40 ~ 0 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 Text Notes 12900 8050 0 40 ~ 0
Control logic guarantees valid RF switch\nconfiguration and reduces the number\nof external control signals required. Control logic guarantees valid RF switch\nconfiguration and reduces the number\nof external control signals required.
Text Notes 12700 2900 0 40 ~ 0 Text Notes 12700 2900 0 40 ~ 0

View File

@ -24,6 +24,8 @@
set(INSTALL_DEFAULT_BINDIR "bin" CACHE STRING "Appended to CMAKE_INSTALL_PREFIX") set(INSTALL_DEFAULT_BINDIR "bin" CACHE STRING "Appended to CMAKE_INSTALL_PREFIX")
find_package(FFTW REQUIRED) find_package(FFTW REQUIRED)
include_directories(${FFTW_INCLUDE_DIRS})
link_directories(${FFTW_LIBRARY_DIRS})
SET(TOOLS SET(TOOLS
hackrf_transfer hackrf_transfer

View File

@ -36,6 +36,9 @@ typedef int bool;
#define FREQ_MAX_MHZ (7250) /* 7250 MHz */ #define FREQ_MAX_MHZ (7250) /* 7250 MHz */
#define MAX_FREQ_RANGES 8 #define MAX_FREQ_RANGES 8
#define INVALID_ADDRESS 0xFF
#define INVALID_PORT 0xFF
static void usage() { static void usage() {
printf("\nUsage:\n"); printf("\nUsage:\n");
printf("\t-h, --help: this help\n"); printf("\t-h, --help: this help\n");
@ -45,12 +48,14 @@ static void usage() {
printf("\t-b <n>: set port B connection\n"); printf("\t-b <n>: set port B connection\n");
printf("\t-f <min:max:port>: automatically assign <port> for range <min:max> in MHz\n"); printf("\t-f <min:max:port>: automatically assign <port> for range <min:max> in MHz\n");
printf("\t-l, --list: list available operacake boards\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[] = { static struct option long_options[] = {
{ "device", no_argument, 0, 'd' }, { "device", no_argument, 0, 'd' },
{ "address", no_argument, 0, 'o' }, { "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' }, { "help", no_argument, 0, 'h' },
{ 0, 0, 0, 0 }, { 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 parse_port(char* str, uint8_t* port) {
int result = 0; uint16_t tmp_port;
uint16_t tmp_port, port = 0; 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, ':'); char *sep = strchr(s, ':');
if (!sep) if (!sep)
return HACKRF_ERROR_INVALID_PARAM; return HACKRF_ERROR_INVALID_PARAM;
// Replace : separator to null terminate string for strtol()
*sep = 0; *sep = 0;
sep++; // Skip past the separator
char *sep2 = strchr(sep+1, ':'); char *sep2 = strchr(sep, ':');
if (!sep2) if (!sep2)
return HACKRF_ERROR_INVALID_PARAM; return HACKRF_ERROR_INVALID_PARAM;
// Replace : separator to null terminate string for strtol()
*sep2 = 0; *sep2 = 0;
sep2++; // Skip past the separator
result = parse_uint16(s, &range->freq_min); result = parse_uint16(s, &range->freq_min);
if (result != HACKRF_SUCCESS) if (result != HACKRF_SUCCESS)
return result; return result;
result = parse_uint16(sep + 1, &range->freq_max); result = parse_uint16(sep, &range->freq_max);
if (result != HACKRF_SUCCESS) if (result != HACKRF_SUCCESS)
return result; return result;
result = parse_port(sep2, &(range->port));
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; return result;
} }
range->port = port & 0xFF;
return HACKRF_SUCCESS;
}
int main(int argc, char** argv) { int main(int argc, char** argv) {
int opt; int opt;
const char* serial_number = NULL; const char* serial_number = NULL;
int operacake_address = 0; uint8_t operacake_address = INVALID_ADDRESS;
int port_a = 0; uint8_t port_a = INVALID_PORT;
int port_b = 0; uint8_t port_b = INVALID_PORT;
bool set_ports = false; bool set_ports = false;
bool list = false; bool list = false;
bool gpio_test = false;
uint8_t operacakes[8]; uint8_t operacakes[8];
uint8_t operacake_count = 0; uint8_t operacake_count = 0;
int i = 0; int i = 0;
@ -144,7 +160,7 @@ int main(int argc, char** argv) {
return -1; 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 ) { switch( opt ) {
case 'd': case 'd':
serial_number = optarg; serial_number = optarg;
@ -152,11 +168,21 @@ int main(int argc, char** argv) {
case 'o': case 'o':
operacake_address = atoi(optarg); operacake_address = atoi(optarg);
set_ports = true;
break; break;
case 'f': 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) { if(ranges[range_idx].freq_min >= ranges[range_idx].freq_max) {
fprintf(stderr, fprintf(stderr,
"argument error: freq_max must be greater than freq_min.\n"); "argument error: freq_max must be greater than freq_min.\n");
@ -170,26 +196,35 @@ int main(int argc, char** argv) {
usage(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if(MAX_FREQ_RANGES <= range_idx++) { range_idx++;
fprintf(stderr,
"argument error: specify a maximum of %u frequency ranges.\n",
MAX_FREQ_RANGES);
usage();
return EXIT_FAILURE;
}
break; break;
case 'a': 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; break;
case 'b': 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; break;
case 'l': case 'l':
list = true; list = true;
break; break;
case 'g':
gpio_test = true;
break;
case 'h': case 'h':
case '?': case '?':
usage(); usage();
@ -202,8 +237,14 @@ int main(int argc, char** argv) {
} }
} }
if(!(list || set_ports || range_idx)) { if(!(list || set_ports || range_idx || gpio_test)) {
fprintf(stderr, "Specify either list or address option.\n"); 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(); usage();
return EXIT_FAILURE; return EXIT_FAILURE;
} }
@ -234,16 +275,82 @@ int main(int argc, char** argv) {
printf("\n"); 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) { 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); result = hackrf_set_operacake_ports(device, operacake_address, port_a, port_b);
if( result ) { if( result ) {
printf("hackrf_set_operacake_ports() failed: %s (%d)\n", hackrf_error_name(result), result); printf("hackrf_set_operacake_ports() failed: %s (%d)\n", hackrf_error_name(result), result);
return -1; return EXIT_FAILURE;
} }
} }
if(range_idx) { 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; uint8_t ptr;
for(i=0; i<range_idx; i++) { for(i=0; i<range_idx; i++) {
ptr = 5*i; ptr = 5*i;

View File

@ -102,10 +102,13 @@ int gettimeofday(struct timeval *tv, void* ignored) {
#define THROWAWAY_BLOCKS 2 #define THROWAWAY_BLOCKS 2
#if defined _WIN32 #if defined _WIN32
#define sleep(a) Sleep( (a*1000) ) #define m_sleep(a) Sleep( (a) )
#else
#define m_sleep(a) usleep((a*1000))
#endif #endif
uint32_t num_samples = SAMPLES_PER_BLOCK; uint32_t num_samples = SAMPLES_PER_BLOCK;
uint32_t num_sweeps = 0;
int num_ranges = 0; int num_ranges = 0;
uint16_t frequencies[MAX_SWEEP_RANGES*2]; uint16_t frequencies[MAX_SWEEP_RANGES*2];
int step_count; int step_count;
@ -179,6 +182,7 @@ uint32_t antenna_enable;
bool binary_output = false; bool binary_output = false;
bool ifft_output = false; bool ifft_output = false;
bool one_shot = false; bool one_shot = false;
bool finite_mode = false;
volatile bool sweep_started = false; volatile bool sweep_started = false;
int fftSize = 20; int fftSize = 20;
@ -245,6 +249,9 @@ int rx_callback(hackrf_transfer* transfer) {
if(one_shot) { if(one_shot) {
do_exit = true; do_exit = true;
} }
else if(finite_mode && sweep_count == num_sweeps) {
do_exit = true;
}
} }
sweep_started = true; sweep_started = true;
time_stamp = usb_transfer_time; time_stamp = usb_transfer_time;
@ -352,6 +359,7 @@ static void usage() {
fprintf(stderr, "\t[-n num_samples] # Number of samples per frequency, 8192-4294967296\n"); 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[-w bin_width] # FFT bin width (frequency resolution) in Hz\n");
fprintf(stderr, "\t[-1] # one shot mode\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[-B] # binary output\n");
fprintf(stderr, "\t[-I] # binary inverse FFT output\n"); fprintf(stderr, "\t[-I] # binary inverse FFT output\n");
fprintf(stderr, "\t-r filename # output file\n"); fprintf(stderr, "\t-r filename # output file\n");
@ -393,7 +401,7 @@ int main(int argc, char** argv) {
uint32_t requested_fft_bin_width; 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; result = HACKRF_SUCCESS;
switch( opt ) switch( opt )
{ {
@ -450,6 +458,11 @@ int main(int argc, char** argv) {
result = parse_u32(optarg, &num_samples); result = parse_u32(optarg, &num_samples);
break; break;
case 'N':
finite_mode = true;
result = parse_u32(optarg, &num_sweeps);
break;
case 'w': case 'w':
result = parse_u32(optarg, &requested_fft_bin_width); result = parse_u32(optarg, &requested_fft_bin_width);
fftSize = DEFAULT_SAMPLE_RATE_HZ / requested_fft_bin_width; fftSize = DEFAULT_SAMPLE_RATE_HZ / requested_fft_bin_width;
@ -693,7 +706,7 @@ int main(int argc, char** argv) {
fprintf(stderr, "Stop with Ctrl-C\n"); fprintf(stderr, "Stop with Ctrl-C\n");
while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) { while((hackrf_is_streaming(device) == HACKRF_TRUE) && (do_exit == false)) {
float time_difference; float time_difference;
sleep(1); m_sleep(50);
gettimeofday(&time_now, NULL); gettimeofday(&time_now, NULL);

View File

@ -83,6 +83,7 @@ typedef enum {
HACKRF_VENDOR_REQUEST_CLKOUT_ENABLE = 32, HACKRF_VENDOR_REQUEST_CLKOUT_ENABLE = 32,
HACKRF_VENDOR_REQUEST_SPIFLASH_STATUS = 33, HACKRF_VENDOR_REQUEST_SPIFLASH_STATUS = 33,
HACKRF_VENDOR_REQUEST_SPIFLASH_CLEAR_STATUS = 34, HACKRF_VENDOR_REQUEST_SPIFLASH_CLEAR_STATUS = 34,
HACKRF_VENDOR_REQUEST_OPERACAKE_GPIO_TEST = 35,
} hackrf_vendor_request; } hackrf_vendor_request;
#define USB_CONFIG_STANDARD 0x1 #define USB_CONFIG_STANDARD 0x1
@ -113,6 +114,7 @@ struct hackrf_device {
volatile bool streaming; /* volatile shared between threads (read only) */ volatile bool streaming; /* volatile shared between threads (read only) */
void* rx_ctx; void* rx_ctx;
void* tx_ctx; void* tx_ctx;
volatile bool do_exit;
unsigned char buffer[TRANSFER_COUNT * TRANSFER_BUFFER_SIZE]; unsigned char buffer[TRANSFER_COUNT * TRANSFER_BUFFER_SIZE];
}; };
@ -146,8 +148,6 @@ hackrf_usb_api_version_read(device, &usb_version); \
if(usb_version < version) \ if(usb_version < version) \
return HACKRF_ERROR_USB_API_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_usb_vid = 0x1d50;
static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b; static const uint16_t hackrf_jawbreaker_usb_pid = 0x604b;
static const uint16_t hackrf_one_usb_pid = 0x6089; static const uint16_t hackrf_one_usb_pid = 0x6089;
@ -157,9 +157,9 @@ static uint16_t open_devices = 0;
static libusb_context* g_libusb_context = NULL; static libusb_context* g_libusb_context = NULL;
int last_libusb_error = LIBUSB_SUCCESS; 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) 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->callback = NULL;
lib_device->transfer_thread_started = false; lib_device->transfer_thread_started = false;
lib_device->streaming = false; lib_device->streaming = false;
do_exit = false; lib_device->do_exit = false;
result = allocate_transfers(lib_device); result = allocate_transfers(lib_device);
if( result != 0 ) if( result != 0 )
@ -1478,7 +1478,7 @@ static void* transfer_threadproc(void* arg)
int error; int error;
struct timeval timeout = { 0, 500000 }; 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); error = libusb_handle_events_timeout(g_libusb_context, &timeout);
if( (error != 0) && (error != LIBUSB_ERROR_INTERRUPTED) ) 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) if( libusb_submit_transfer(usb_transfer) < 0)
{ {
request_exit(); request_exit(device);
}else { }else {
return; return;
} }
}else { }else {
request_exit(); request_exit(device);
} }
} else { } else {
/* Other cases LIBUSB_TRANSFER_NO_DEVICE /* 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_STALL, LIBUSB_TRANSFER_OVERFLOW
LIBUSB_TRANSFER_CANCELLED ... 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; void* value;
int result; int result;
request_exit(); request_exit(device);
if( device->transfer_thread_started != false ) if( device->transfer_thread_started != false )
{ {
@ -1559,7 +1559,7 @@ static int create_transfer_thread(hackrf_device* device,
if( device->transfer_thread_started == false ) if( device->transfer_thread_started == false )
{ {
device->streaming = false; device->streaming = false;
do_exit = false; device->do_exit = false;
result = prepare_transfers( result = prepare_transfers(
device, endpoint_address, device, endpoint_address,
@ -1593,7 +1593,7 @@ int ADDCALL hackrf_is_streaming(hackrf_device* device)
if( (device->transfer_thread_started == true) && if( (device->transfer_thread_started == true) &&
(device->streaming == true) && (device->streaming == true) &&
(do_exit == false) ) (device->do_exit == false) )
{ {
return HACKRF_TRUE; return HACKRF_TRUE;
} else { } else {
@ -1736,7 +1736,7 @@ const char* ADDCALL hackrf_error_name(enum hackrf_error errcode)
return "feature not supported by installed firmware"; return "feature not supported by installed firmware";
case HACKRF_ERROR_NOT_LAST_DEVICE: 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: case HACKRF_ERROR_OTHER:
return "unspecified error"; 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 #ifdef __cplusplus
} // __cplusplus defined. } // __cplusplus defined.
#endif #endif

View File

@ -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_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 #ifdef __cplusplus
} // __cplusplus defined. } // __cplusplus defined.
#endif #endif

48
tools/deploy-nightly.sh Normal file
View File

@ -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 "
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<html><head>
<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">
<title>HackRF Nightly Builds</title>
</head>
<body>
<h2>HackRF Nightly Builds</h2>
" > 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 "<a href=\"$URL/$FN\">$FN</a><br />" >> index.html
fi
done
echo "
</body></html>
" >> 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