Skip to content

Commit 941b2c6

Browse files
authored
Merge pull request #22 from dalethomas81/develop
## PCB - Board version jumps to v1.2 - Added RF filtering for the PTT line ## Enclosure - New front and back covers to fully enclose components - There is now a version that does not include the keyboard or battery for stationary use at a home PC - GPS antenna has now been moved inside the front cover ## Firmware - Dedicated "New Message" screen where direct messages can be sent - Smart beaconing feature where the APRS beacon can be sent based on a maximum distance and a minimum idle time - Display readability has been improved with better arrangement of screen components - Unused settings have been removed - Improved user input validation and cleaning - Many bugs have been resolved (just general bugs like incorrect datatypes being used) - Raw SD card output now uses Base64 encoding to help with transmitting special characters via ASCII - Code refactoring and optimizations for better readability and performance - Added terminal commands to allow beaconing and messaging - Easter egg debug screen has been added ## GUI - There is now a companion GUI app for MacOS and Windows that you can use to connect and control HamMessenger from your PC. - Log screen that shows all logs in and out in realtime - Map screen that shows live locations and info of stations similar to aprs.fi - Messaging screen where all incoming messages are displayed and direct messages can be sent ## Documentation - Readme files have been improved with much more information - There is now a new [Build Instructions](/Documentation/Build%20Instructions/) folder that will be used to include tutorial references and detailed documentation on how to build HamMessenger. - Parts lists / BOM updates ## General - Github workflows have been added to help facilitate implementing CI/CD
2 parents 6efd687 + d6beb7e commit 941b2c6

31 files changed

+1360
-103
lines changed

.github/workflows/development.yml

Lines changed: 63 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,42 @@ on:
99
- develop
1010

1111
jobs:
12+
create-release:
13+
runs-on: ubuntu-latest
14+
outputs:
15+
upload_url: ${{ steps.create_release.outputs.upload_url }}
16+
tag_name: ${{ steps.vars.outputs.tag_name }}
17+
steps:
18+
- name: Checkout code
19+
uses: actions/checkout@v4
20+
21+
- name: Generate date-based tag
22+
id: vars
23+
run: echo "tag_name=dev-$(date +'%Y%m%d-%H%M%S')" >> $GITHUB_OUTPUT
24+
25+
- name: Configure Git
26+
run: |
27+
git config user.name "github-actions[bot]"
28+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
29+
30+
- name: Create and push tag
31+
run: |
32+
git tag -f ${{ steps.vars.outputs.tag_name }}
33+
git push origin ${{ steps.vars.outputs.tag_name }} --force
34+
35+
- name: Create GitHub Release
36+
id: create_release
37+
uses: actions/create-release@latest
38+
with:
39+
tag_name: ${{ steps.vars.outputs.tag_name }}
40+
release_name: Development Build ${{ steps.vars.outputs.tag_name }}
41+
draft: false
42+
prerelease: true
43+
env:
44+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
45+
1246
Arduino-build:
47+
needs: create-release
1348
runs-on: ubuntu-latest
1449
steps:
1550
- name: Checkout code
@@ -47,39 +82,24 @@ jobs:
4782
--output-dir build-out \
4883
Source/HamMessenger
4984
50-
#- name: List everything in build output
51-
# run: |
52-
# find Source/HamMessenger/build-out
53-
54-
#- name: List all .hex files
55-
# run: |
56-
# find . -name "*.hex"
57-
5885
- name: Rename firmware file for release
5986
run: |
6087
mkdir -p output
6188
cp build-out/HamMessenger.ino.hex output/HamMessenger-mega2560.hex
6289
63-
- name: Generate changelog from recent commits
64-
run: |
65-
git log -n 20 --pretty=format:"- %s" > release-notes.txt
66-
# git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" # changelog between the last nightly and now
67-
# git log -n 20 --pretty=format:"- %s (%an, %ad)" --date=short # include author names or dates
68-
69-
- name: Upload latest dev firmware to release
70-
uses: ncipollo/release-action@v1
90+
- name: Upload Arduino firmware
91+
uses: actions/upload-release-asset@v1
7192
with:
72-
tag: dev
73-
name: Development Build
74-
prerelease: true
75-
draft: false
76-
allowUpdates: true
77-
artifacts: output/HamMessenger-mega2560.hex
78-
bodyFile: release-notes.txt
93+
upload_url: ${{ needs.create-release.outputs.upload_url }}
94+
asset_path: output/HamMessenger-mega2560.hex
95+
asset_name: HamMessenger-mega2560.hex
96+
asset_content_type: application/octet-stream
97+
env:
98+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7999

80100
gui-windows-build:
101+
needs: create-release
81102
runs-on: windows-latest
82-
83103
steps:
84104
- name: Checkout code
85105
uses: actions/checkout@v4
@@ -97,26 +117,26 @@ jobs:
97117
- name: Build GUI with PyInstaller
98118
run: |
99119
cd Source/GUI
100-
pyinstaller --noconfirm --windowed --name HamMessenger --onefile Main.py
120+
pyinstaller --noconfirm --windowed --name HamMessenger --onefile Qt.py
101121
102122
- name: Copy built GUI executable
103123
run: |
104124
mkdir output
105125
copy Source\GUI\dist\HamMessenger.exe output\HamMessenger-windows.exe
106126
107-
- name: Upload GUI to latest dev release
108-
uses: ncipollo/release-action@v1
127+
- name: Upload Windows GUI
128+
uses: actions/upload-release-asset@v1
109129
with:
110-
tag: dev
111-
name: Development Build
112-
prerelease: true
113-
draft: false
114-
allowUpdates: true
115-
artifacts: output/HamMessenger-windows.exe
130+
upload_url: ${{ needs.create-release.outputs.upload_url }}
131+
asset_path: output/HamMessenger-windows.exe
132+
asset_name: HamMessenger-windows.exe
133+
asset_content_type: application/octet-stream
134+
env:
135+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
116136

117137
gui-mac-build:
138+
needs: create-release
118139
runs-on: macos-latest
119-
120140
steps:
121141
- name: Checkout code
122142
uses: actions/checkout@v4
@@ -131,14 +151,10 @@ jobs:
131151
pip install -r Source/GUI/requirements-macos.txt
132152
pip install -U pyinstaller
133153
134-
#- name: Verify tkinter is available
135-
# run: |
136-
# python -c "import tkinter; print('Tkinter OK:', tkinter.TkVersion)"
137-
138154
- name: Build macOS GUI with PyInstaller
139155
run: |
140156
cd Source/GUI
141-
python -m PyInstaller --windowed --name HamMessenger --onefile Main.py
157+
python -m PyInstaller --windowed --name HamMessenger --onefile Qt.py
142158
143159
- name: Install create-dmg
144160
run: brew install create-dmg
@@ -157,18 +173,12 @@ jobs:
157173
output/HamMessenger-mac.dmg \
158174
Source/GUI/dist/HamMessenger.app
159175
160-
#- name: Zip macOS .app bundle
161-
# run: |
162-
# mkdir -p output
163-
# ditto -c -k --sequesterRsrc --keepParent Source/GUI/dist/HamMessenger.app output/HamMessenger-mac.zip
164-
165-
- name: Upload macOS GUI to latest dev release
166-
uses: ncipollo/release-action@v1
176+
- name: Upload macOS GUI
177+
uses: actions/upload-release-asset@v1
167178
with:
168-
tag: dev
169-
name: Development Build
170-
prerelease: true
171-
draft: false
172-
allowUpdates: true
173-
#artifacts: output/HamMessenger-mac.zip
174-
artifacts: output/HamMessenger-mac.dmg
179+
upload_url: ${{ needs.create-release.outputs.upload_url }}
180+
asset_path: output/HamMessenger-mac.dmg
181+
asset_name: HamMessenger-mac.dmg
182+
asset_content_type: application/octet-stream
183+
env:
184+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ jobs:
5555
- name: Generate changelog from recent commits
5656
run: |
5757
git log -n 20 --pretty=format:"- %s" > release-notes.txt
58-
# git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" # changelog between the last nightly and now
59-
# git log -n 20 --pretty=format:"- %s (%an, %ad)" --date=short # include author names or dates
6058

6159
- name: Upload latest master firmware to release
6260
uses: ncipollo/release-action@v1
@@ -89,7 +87,7 @@ jobs:
8987
- name: Build GUI with PyInstaller
9088
run: |
9189
cd Source/GUI
92-
pyinstaller --noconfirm --windowed --name HamMessenger --onefile Main.py
90+
pyinstaller --noconfirm --windowed --name HamMessenger --onefile Qt.py
9391

9492
- name: Copy built GUI executable
9593
run: |
@@ -123,14 +121,10 @@ jobs:
123121
pip install -r Source/GUI/requirements-macos.txt
124122
pip install -U pyinstaller
125123

126-
#- name: Verify tkinter is available
127-
# run: |
128-
# python -c "import tkinter; print('Tkinter OK:', tkinter.TkVersion)"
129-
130124
- name: Build macOS GUI with PyInstaller
131125
run: |
132126
cd Source/GUI
133-
python -m PyInstaller --windowed --name HamMessenger --onefile Main.py
127+
python -m PyInstaller --windowed --name HamMessenger --onefile Qt.py
134128

135129
- name: Install create-dmg
136130
run: brew install create-dmg
@@ -149,11 +143,6 @@ jobs:
149143
output/HamMessenger-mac.dmg \
150144
Source/GUI/dist/HamMessenger.app
151145

152-
#- name: Zip macOS .app bundle
153-
# run: |
154-
# mkdir -p output
155-
# ditto -c -k --sequesterRsrc --keepParent Source/GUI/dist/HamMessenger.app output/HamMessenger-mac.zip
156-
157146
- name: Upload macOS GUI to latest master release
158147
uses: ncipollo/release-action@v1
159148
with:
@@ -162,5 +151,4 @@ jobs:
162151
prerelease: false
163152
draft: false
164153
allowUpdates: true
165-
#artifacts: output/HamMessenger-mac.zip
166154
artifacts: output/HamMessenger-mac.dmg

.github/workflows/release.yml

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
name: Release Build
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
create-release:
10+
runs-on: ubuntu-latest
11+
outputs:
12+
upload_url: ${{ steps.release.outputs.upload_url }}
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
17+
- name: Create GitHub Release
18+
id: release
19+
uses: softprops/action-gh-release@v1
20+
with:
21+
tag_name: ${{ github.ref_name }}
22+
name: Release ${{ github.ref_name }}
23+
generate_release_notes: true
24+
env:
25+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
26+
27+
Arduino-build:
28+
needs: create-release
29+
runs-on: ubuntu-latest
30+
steps:
31+
- name: Checkout code
32+
uses: actions/checkout@v4
33+
34+
- name: Install Arduino CLI
35+
run: |
36+
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
37+
sudo mv bin/arduino-cli /usr/local/bin/
38+
39+
- name: Set up Arduino CLI
40+
run: |
41+
arduino-cli config init
42+
arduino-cli core update-index
43+
arduino-cli core install arduino:avr
44+
45+
- name: Install Adafruit GFX Library (via Library Manager)
46+
run: |
47+
arduino-cli lib install "Adafruit GFX Library"
48+
arduino-cli lib install "SD"
49+
50+
- name: Clone SH1106, TinyGPSPlus, and Base64 libraries
51+
run: |
52+
mkdir -p custom-libraries
53+
git clone https://github.com/wonho-maker/Adafruit_SH1106 custom-libraries/Adafruit_SH1106
54+
git clone https://github.com/mikalhart/TinyGPSPlus custom-libraries/TinyGPSPlus
55+
git clone https://github.com/Xander-Electronics/Base64 custom-libraries/Base64
56+
57+
- name: Compile sketch for Arduino Mega 2560
58+
run: |
59+
mkdir -p build-out
60+
arduino-cli compile \
61+
--fqbn arduino:avr:mega \
62+
--libraries custom-libraries \
63+
--output-dir build-out \
64+
Source/HamMessenger
65+
66+
- name: Rename firmware file for release
67+
run: |
68+
mkdir -p output
69+
cp build-out/HamMessenger.ino.hex output/HamMessenger-mega2560.hex
70+
71+
- name: Upload Arduino firmware
72+
uses: actions/upload-release-asset@v1
73+
with:
74+
upload_url: ${{ needs.create-release.outputs.upload_url }}
75+
asset_path: output/HamMessenger-mega2560.hex
76+
asset_name: HamMessenger-mega2560.hex
77+
asset_content_type: application/octet-stream
78+
env:
79+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
80+
81+
gui-windows-build:
82+
needs: create-release
83+
runs-on: windows-latest
84+
steps:
85+
- name: Checkout code
86+
uses: actions/checkout@v4
87+
88+
- name: Set up Python
89+
uses: actions/setup-python@v5
90+
with:
91+
python-version: '3.11'
92+
93+
- name: Install Python dependencies
94+
run: |
95+
pip install -r Source/GUI/requirements-windows.txt
96+
pip install -U pyinstaller
97+
98+
- name: Build GUI with PyInstaller
99+
run: |
100+
cd Source/GUI
101+
pyinstaller --noconfirm --windowed --name HamMessenger --onefile Qt.py
102+
103+
- name: Copy built GUI executable
104+
run: |
105+
mkdir output
106+
copy Source\GUI\dist\HamMessenger.exe output\HamMessenger-windows.exe
107+
108+
- name: Upload Windows GUI
109+
uses: actions/upload-release-asset@v1
110+
with:
111+
upload_url: ${{ needs.create-release.outputs.upload_url }}
112+
asset_path: output/HamMessenger-windows.exe
113+
asset_name: HamMessenger-windows.exe
114+
asset_content_type: application/octet-stream
115+
env:
116+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
117+
118+
gui-mac-build:
119+
needs: create-release
120+
runs-on: macos-latest
121+
steps:
122+
- name: Checkout code
123+
uses: actions/checkout@v4
124+
125+
- name: Set up Python
126+
uses: actions/setup-python@v5
127+
with:
128+
python-version: '3.11'
129+
130+
- name: Install dependencies
131+
run: |
132+
pip install -r Source/GUI/requirements-macos.txt
133+
pip install -U pyinstaller
134+
135+
- name: Build macOS GUI with PyInstaller
136+
run: |
137+
cd Source/GUI
138+
python -m PyInstaller --windowed --name HamMessenger --onefile Qt.py
139+
140+
- name: Install create-dmg
141+
run: brew install create-dmg
142+
143+
- name: Create DMG
144+
run: |
145+
mkdir -p output
146+
create-dmg \
147+
--volname "HamMessenger" \
148+
--window-pos 200 120 \
149+
--window-size 800 400 \
150+
--icon-size 100 \
151+
--icon "HamMessenger.app" 200 190 \
152+
--hide-extension "HamMessenger.app" \
153+
--app-drop-link 600 185 \
154+
output/HamMessenger-mac.dmg \
155+
Source/GUI/dist/HamMessenger.app
156+
157+
- name: Upload macOS GUI
158+
uses: actions/upload-release-asset@v1
159+
with:
160+
upload_url: ${{ needs.create-release.outputs.upload_url }}
161+
asset_path: output/HamMessenger-mac.dmg
162+
asset_name: HamMessenger-mac.dmg
163+
asset_content_type: application/octet-stream
164+
env:
165+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ Source/GUI/Main.spec
88
Source/GUI/dist/*
99
.DS_Store
1010
Source/GUI/HamMessenger.spec
11+
Source/MicroAPRS Firmware Installer/avrdude.*
12+
Source/MicroAPRS Firmware Installer/*.hex

0 commit comments

Comments
 (0)