Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 484af68693 | |||
| 855dafb959 | |||
| ca6cf0326f | |||
| 79a87f52ba | |||
| 81b766aefa | |||
| ec29e20d79 | |||
| e2ef291add | |||
| efeb4d190a | |||
| 58ef23c0cd | |||
| 2180d5d0b5 | |||
| b2edc2735b |
@@ -17,17 +17,6 @@ env:
|
|||||||
- ARTEFACT_BASE=$TRAVIS_BUILD_DIR/artefacts/
|
- ARTEFACT_BASE=$TRAVIS_BUILD_DIR/artefacts/
|
||||||
- ARTEFACT_PATH=$ARTEFACT_BASE/$BUILD_NAME
|
- ARTEFACT_PATH=$ARTEFACT_BASE/$BUILD_NAME
|
||||||
|
|
||||||
notifications:
|
|
||||||
irc:
|
|
||||||
channels:
|
|
||||||
- "chat.freenode.net#portapack"
|
|
||||||
template:
|
|
||||||
- "%{repository}#%{build_number} (%{branch} - %{commit} : %{author}): %{message}"
|
|
||||||
- "Change view : %{compare_url}"
|
|
||||||
- "Build details : %{build_url}"
|
|
||||||
# TODO: The "build_number.1" in this URL is almost certainly wrong, but correct value not available from Travis?
|
|
||||||
- "Firmware download : https://jboone.github.io/portapack-havoc-nightly/"
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa -y
|
- sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa -y
|
||||||
- sudo apt-get update -q
|
- sudo apt-get update -q
|
||||||
@@ -65,9 +54,3 @@ addons:
|
|||||||
- cmake
|
- cmake
|
||||||
- dfu-util
|
- dfu-util
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: script
|
|
||||||
skip-cleanup: true
|
|
||||||
script: bash $TRAVIS_BUILD_DIR/tools/deploy-nightly.sh
|
|
||||||
on:
|
|
||||||
branch: master
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Keeping the latest release files and all features I found, and possible my own f
|
|||||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CBPQA4HRRPJQ6&source=url)
|
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CBPQA4HRRPJQ6&source=url)
|
||||||
|
|
||||||
I only have this [Portapack H2+HackRF+battery](https://s.click.aliexpress.com/e/_dSMPvNo), so that's the version I'll be using for testing the releases before I post them here. BTW, if you have the same H2 (I know... I know it is a *dirty* clone) you could print my case:
|
I only have this [Portapack H2+HackRF+battery](https://s.click.aliexpress.com/e/_dSMPvNo), so that's the version I'll be using for testing the releases before I post them here. BTW, if you have the same H2 (I know... I know it is a *dirty* clone) you could print my case:
|
||||||
[](https://www.thingiverse.com/thing:4260973)
|
[](https://www.thingiverse.com/thing:4260973)
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>More details about the H2 case</summary>
|
<summary>More details about the H2 case</summary>
|
||||||
@@ -18,7 +18,7 @@ I only have this [Portapack H2+HackRF+battery](https://s.click.aliexpress.com/e/
|
|||||||
<details>
|
<details>
|
||||||
<summary>Printed magnetic cover for the H2 case</summary>
|
<summary>Printed magnetic cover for the H2 case</summary>
|
||||||
|
|
||||||
[](https://www.thingiverse.com/thing:4278961)
|
[](https://www.thingiverse.com/thing:4278961)
|
||||||
|
|
||||||
[STL files](https://www.thingiverse.com/thing:4278961)
|
[STL files](https://www.thingiverse.com/thing:4278961)
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 191 KiB |
|
Before Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 261 KiB |
|
Before Width: | Height: | Size: 245 B |
|
Before Width: | Height: | Size: 20 KiB |
@@ -1,171 +0,0 @@
|
|||||||
~ Pretty ugly PortaPack H1 (+HAVOC) UI widget documentation ~
|
|
||||||
by @furrtek - v0.1 - 2017/02/02
|
|
||||||
Not approved at all by @Sharebrained
|
|
||||||
|
|
||||||
The display is 240 x 320 pixels.
|
|
||||||
|
|
||||||
A View is basically a rectangular zone on the screen.
|
|
||||||
Widgets (aka controls, UI elements...) go into Views.
|
|
||||||
|
|
||||||
Views can be pushed to/popped from a stack.
|
|
||||||
The main menu view is at the bottom of the stack and can't be popped.
|
|
||||||
The title bar view is a special case, it (normally) can't be hidden by pushed Views.
|
|
||||||
Since the title bar is 16 pixel high, a regular full-screen view is 240 x 304 pixels.
|
|
||||||
|
|
||||||
If the current View can be popped (removed), an arrow shows on the left of the title bar.
|
|
||||||
|
|
||||||
Kind of widgets:
|
|
||||||
|
|
||||||
==== Rectangle ====
|
|
||||||
|
|
||||||
A simple filled or outlined rectangle. No interactivity.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- Rectangle(Rect, Color)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- set_color(Color)
|
|
||||||
- set_outline(bool): Default is filled, set to true for outline only
|
|
||||||
|
|
||||||
==== Text ====
|
|
||||||
|
|
||||||
A simple text label. No interactivity.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- Text(Rect)
|
|
||||||
- Text(Rect, std::string)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- set(std::string): Updates text
|
|
||||||
|
|
||||||
==== BigFrequency (HAVOC) ====
|
|
||||||
|
|
||||||
Displays a big 7-segment style frequency value in the XXXX.xxxMHz format.
|
|
||||||
If the value is 0, ----.--- is displayed. No leading zeros. No interactivity.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- BigFrequency(Rect, rf::Frequency)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- set(rf::Frequency): Updates value
|
|
||||||
|
|
||||||
==== ProgressBar (HAVOC) ====
|
|
||||||
|
|
||||||
Displays progress as an horizontal progress bar with value and maximum value.
|
|
||||||
No interactivity.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- ProgressBar(Rect)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- set_max(uint32_t): Updates maximum value
|
|
||||||
- set_value(uint32_t): Updates current value
|
|
||||||
|
|
||||||
The maximum value is set by default to 100.
|
|
||||||
|
|
||||||
==== Console ====
|
|
||||||
|
|
||||||
Displays a scrolling text console. No interactivity.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Console(Rect)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- clear(): Clears text and resets cursor to top-left
|
|
||||||
- write(std::string): Adds text
|
|
||||||
- writeln(std::string): Adds text and CR + LF
|
|
||||||
|
|
||||||
==== Checkbox (HAVOC) ====
|
|
||||||
|
|
||||||
A toggle option shown as a tickable box with a text label.
|
|
||||||
Interactive: select and touch.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- Checkbox(Point, size_t, std::string)
|
|
||||||
- Checkbox(Point, size_t, std::string, bool)
|
|
||||||
|
|
||||||
(Position, length of text label, text, regular size/small)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- bool value(): Returns state
|
|
||||||
- set_text(std::string): Updates text label
|
|
||||||
- set_value(bool): Sets state
|
|
||||||
|
|
||||||
Callbacks:
|
|
||||||
- on_select: Select key press or touch. Returns state
|
|
||||||
|
|
||||||
==== Button ====
|
|
||||||
|
|
||||||
A momentary push-button. Interactive: select and touch.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- Button(Rect, std::string)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- std::string text(): Returns text
|
|
||||||
- set_text(std::string): Updates text
|
|
||||||
|
|
||||||
Callbacks:
|
|
||||||
- on_select: Select key press or touch
|
|
||||||
- on_dir: Direction keys press
|
|
||||||
- on_highlight: Focus get
|
|
||||||
|
|
||||||
==== Image ====
|
|
||||||
|
|
||||||
Shows a 1-bit bitmap. No interactivity.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- Image(Rect, Bitmap*, Color, Color)
|
|
||||||
|
|
||||||
(Rect, pointer to bitmap (see bitmap.hpp), foreground, background)
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- set_bitmap(Bitmap*): Updates bitmap
|
|
||||||
- set_foreground(Color): Changes foreground color
|
|
||||||
- set_background(Color): Changes background color
|
|
||||||
- invert_colors(): Flip foreground color with background
|
|
||||||
|
|
||||||
==== ImageButton ====
|
|
||||||
|
|
||||||
Same as the Image widget, except interactive (select and touch). No methods.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- ImageButton(Rect, Bitmap*, Color, Color)
|
|
||||||
|
|
||||||
(Rect, pointer to bitmap (see bitmap.hpp), foreground, background)
|
|
||||||
|
|
||||||
Callbacks:
|
|
||||||
- on_select: Select key press or touch
|
|
||||||
|
|
||||||
==== ImageOptionsField (HAVOC) ====
|
|
||||||
|
|
||||||
Options list displayed as images.
|
|
||||||
Interactive: change (jog wheel) and focus.
|
|
||||||
|
|
||||||
Constructors:
|
|
||||||
- Empty
|
|
||||||
- ImageOptionsField(Rect, options_t)
|
|
||||||
|
|
||||||
options_t is a std::vector of std::pair of unsigned char pointers to color bitmap data and an int32_t
|
|
||||||
|
|
||||||
Methods:
|
|
||||||
- set_options(options_t)
|
|
||||||
- size_t selected_index()
|
|
||||||
- size_t selected_index_value()
|
|
||||||
- set_selected_index(size_t)
|
|
||||||
- set_by_value(value_t)
|
|
||||||
|
|
||||||
Callbacks:
|
|
||||||
- on_change: Option was changed
|
|
||||||
- on_show_options: Focus get
|
|
||||||
|
|
||||||
==== OptionsField ====
|
|
||||||
==== NumberField ====
|
|
||||||
==== SymField (HAVOC) ====
|
|
||||||
==== Waveform (HAVOC) ====
|
|
||||||
@@ -1,27 +1,31 @@
|
|||||||
FROM ubuntu:latest
|
FROM ubuntu:xenial
|
||||||
|
|
||||||
# Set location to download ARM toolkit from.
|
# Set location to download ARM toolkit from.
|
||||||
# This will need to be changed over time or replaced with a static link to the latest release.
|
# This will need to be changed over time or replaced with a static link to the latest release.
|
||||||
ENV ARMBINURL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=108bd959-44bd-4619-9c19-26187abf5225&la=en&hash=E788CE92E5DFD64B2A8C246BBA91A249CB8E2D2D \
|
ENV ARMBINURL=https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2?revision=108bd959-44bd-4619-9c19-26187abf5225&la=en&hash=E788CE92E5DFD64B2A8C246BBA91A249CB8E2D2D \
|
||||||
PATH=$PATH:/opt/build/armbin/bin
|
PATH=$HOME/bin:$PATH:/opt/build/armbin/bin
|
||||||
|
|
||||||
#Create volume /havoc/bin for compiled firmware binaries
|
#Create volume /havoc/bin for compiled firmware binaries
|
||||||
VOLUME /havoc
|
VOLUME /havoc
|
||||||
WORKDIR /havoc/firmware
|
WORKDIR /havoc/firmware
|
||||||
|
|
||||||
# Fetch dependencies from APT
|
# Fetch dependencies from APT
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y git tar wget dfu-util cmake python3 python-pip && \
|
apt-get install -y git tar wget dfu-util cmake python3 python-pip ccache && \
|
||||||
apt-get -qy autoremove
|
apt-get -qy autoremove
|
||||||
|
|
||||||
RUN pip install pyyaml
|
RUN pip install pyyaml
|
||||||
|
|
||||||
# Grab the GNU ARM toolchain from arm.com
|
# Grab the GNU ARM toolchain from arm.com
|
||||||
# Then extract contents to /opt/build/armbin/
|
# Then extract contents to /opt/build/armbin/
|
||||||
RUN mkdir /opt/build && cd /opt/build && \
|
RUN mkdir /opt/build && cd /opt/build && \
|
||||||
wget -O gcc-arm-none-eabi $ARMBINURL && \
|
wget -O gcc-arm-none-eabi $ARMBINURL && \
|
||||||
mkdir armbin && \
|
mkdir armbin && \
|
||||||
tar --strip=1 -xjvf gcc-arm-none-eabi -C armbin
|
tar --strip=1 -xjvf gcc-arm-none-eabi -C armbin
|
||||||
|
|
||||||
CMD cd .. && cd build && \
|
# Configure CCACHE
|
||||||
|
RUN mkdir ~/bin && cd ~/bin && \
|
||||||
|
for tool in gcc g++ cpp c++;do ln -s $(which ccache) arm-none-eabi-$tool;done
|
||||||
|
|
||||||
|
CMD cd .. && cd build && \
|
||||||
cmake .. && make firmware
|
cmake .. && make firmware
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
portapack.ried.cl
|
||||||
|
After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 150 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
<h1>Portapack Havoc</h1>
|
||||||
|
<h2>Nightly builds</h2>
|
||||||
|
<p><a href="/fake.bin">fake.bin</a></p>
|
||||||
|
<p><a href="/fake.bin">fake.bin</a></p>
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
printf "Hold down the HackRF's DFU button (the button closest to the antenna jack)\n"
|
|
||||||
printf "then plug the HackRF into a USB port on your computer.\n\n"
|
|
||||||
printf "After the HackRF is plugged in, you may release the DFU button.\n"
|
|
||||||
printf "Press any key to continue or ^c to abort\n"
|
|
||||||
read
|
|
||||||
|
|
||||||
for i in /usr/share/hackrf/hackrf_one_usb.dfu /usr/share/hackrf/hackrf_one_usb_ram.dfu hackrf_one_usb.dfu; do
|
|
||||||
if [ -r "${i}" ]; then
|
|
||||||
ram_firmware="${i}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "${ram_firmware}" ]; then
|
|
||||||
printf "\nFound firmware: ${ram_firmware}\n"
|
|
||||||
printf "Flashing...\n"
|
|
||||||
else
|
|
||||||
printf "Unable to find firmware to flash, please have hackrf_one_usb.dfu\n"
|
|
||||||
printf "in current directory or /usr/share/hackrf/\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in /usr/share/hackrf/hackrf_one_usb.bin /usr/share/hackrf/hackrf_one_usb_rom_to_ram.bin hackrf_one_usb.bin; do
|
|
||||||
if [ -r "${i}" ]; then
|
|
||||||
rom_firmware="${i}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "${rom_firmware}" ]; then
|
|
||||||
printf "\nFound firmware: ${rom_firmware}\n"
|
|
||||||
printf "Flashing...\n"
|
|
||||||
else
|
|
||||||
printf "Unable to find firmware to flash, please have hackrf_one_usb.bin\n"
|
|
||||||
printf "in current directory or /usr/share/hackrf/\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
dfu-util --device 1fc9:000c --download "${ram_firmware}" --reset
|
|
||||||
sleep 2s
|
|
||||||
hackrf_spiflash -w "${rom_firmware}"
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
printf "Hold down the HackRF's DFU button (the button closest to the antenna jack)\n"
|
|
||||||
printf "then plug the HackRF into a USB port on your computer.\n\n"
|
|
||||||
printf "After the HackRF is plugged in, you may release the DFU button.\n"
|
|
||||||
printf "Press any key to continue or ^c to abort\n"
|
|
||||||
read
|
|
||||||
|
|
||||||
for i in /usr/share/hackrf/hackrf_one_usb.dfu /usr/share/hackrf/hackrf_one_usb_ram.dfu hackrf_one_usb.dfu; do
|
|
||||||
if [ -r "${i}" ]; then
|
|
||||||
ram_firmware="${i}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "${ram_firmware}" ]; then
|
|
||||||
printf "\nFound firmware: ${ram_firmware}\n"
|
|
||||||
printf "Flashing...\n"
|
|
||||||
else
|
|
||||||
printf "Unable to find firmware to flash, please have hackrf_one_usb.dfu\n"
|
|
||||||
printf "in current directory or /usr/share/hackrf/\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in /usr/share/hackrf/portapack-h1-firmware.bin portapack-h1-firmware.bin; do
|
|
||||||
if [ -r "${i}" ]; then
|
|
||||||
rom_firmware="${i}"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -n "${rom_firmware}" ]; then
|
|
||||||
printf "\nFound firmware: ${rom_firmware}\n"
|
|
||||||
printf "Flashing...\n"
|
|
||||||
else
|
|
||||||
printf "Unable to find firmware to flash, please have portapack-h1-firmware.bin\n"
|
|
||||||
printf "in current directory or /usr/share/hackrf/\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
dfu-util --device 1fc9:000c --download "${ram_firmware}" --reset
|
|
||||||
sleep 2s
|
|
||||||
hackrf_spiflash -w "${rom_firmware}"
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
PUBLICATION_BRANCH=master
|
|
||||||
# set -x
|
|
||||||
cd $HOME
|
|
||||||
# Checkout the branch
|
|
||||||
git clone --branch=$PUBLICATION_BRANCH https://${GITHUB_TOKEN}@github.com/${ARTEFACT_REPO}.git publish
|
|
||||||
cd publish
|
|
||||||
# Update pages
|
|
||||||
BUILD_PATH=$BUILD_DATE-$SHORT_COMMIT_HASH
|
|
||||||
mkdir $BUILD_PATH
|
|
||||||
cp $ARTEFACT_BASE/$BUILD_NAME.tar.xz $BUILD_PATH/
|
|
||||||
cp $ARTEFACT_BASE/MD5SUMS $BUILD_PATH/
|
|
||||||
cp $ARTEFACT_BASE/SHA256SUMS $BUILD_PATH/
|
|
||||||
# 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>$PROJECT_NAME Builds</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h2>$PROJECT_NAME Builds</h2>
|
|
||||||
<table>
|
|
||||||
" > index.html
|
|
||||||
|
|
||||||
for commit in $COMMITS; do
|
|
||||||
FILEPATH=`find . -maxdepth 2 -name "*-$commit.tar.xz"`
|
|
||||||
if [ "$FILEPATH" != "" ]; then
|
|
||||||
FILEDIR=`dirname "${FILEPATH}"`
|
|
||||||
FILENAME=`basename "${FILEPATH}"`
|
|
||||||
FILEPATH=${FILEPATH:2}
|
|
||||||
# pushd "${FILEDIR}"
|
|
||||||
# HASH_MD5=`md5sum --binary ${FILENAME}`
|
|
||||||
# HASH_SHA256=`sha256sum --binary ${FILENAME}`
|
|
||||||
# popd
|
|
||||||
echo "<tr><td><a href=\"$FILEPATH\">$FILENAME</a></td><td><a href=\"$FILEDIR/MD5SUMS\">MD5SUMS</a></td><td><a href=\"$FILEDIR/SHA256SUMS\">SHA256SUMS</a></td></tr>" >> index.html
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "
|
|
||||||
</table>
|
|
||||||
</body></html>
|
|
||||||
" >> index.html
|
|
||||||
|
|
||||||
# Commit and push latest version
|
|
||||||
git add $BUILD_PATH/$BUILD_NAME.tar.xz $BUILD_PATH/MD5SUMS $BUILD_PATH/SHA256SUMS 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
|
|
||||||