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