Compare commits

...
2 Commits
Author SHA1 Message Date
PoliEcho 47f2766bb8 some housekeeping 2026-08-11 12:51:19 +02:00
PoliEcho 839ea1490a format 2026-08-11 12:14:53 +02:00
3 changed files with 58 additions and 28 deletions
+1
View File
@@ -9,3 +9,4 @@ compile_commands.json
include/ include/
!scripts/include/ !scripts/include/
*.o *.o
test
+17 -1
View File
@@ -63,15 +63,31 @@ config VECTOR_FOLLOW_TRACK_RATE
This option will turn the vector from line into curve. This option will turn the vector from line into curve.
This is of course be more computationaly expensive. This is of course be more computationaly expensive.
config AIRCRAFT_RHOMBUS_RADIUS
int "Radius of rhombus or aircraft icon"
range 0 65535
default 8
config CHARACTER_SPACING config CHARACTER_SPACING
int "Spacing between character in pixels" int "Spacing between character in pixels"
range 1 255 range 0 255
default 1 default 1
config X_TEXT_OFFSET
int "X offset of text from aircraft"
range 0 65535
default 10
config NO_CALLSIGN_IDENTIFICATION config NO_CALLSIGN_IDENTIFICATION
string "Callsign used for aircraft with unknown callsign" string "Callsign used for aircraft with unknown callsign"
default "UNK" default "UNK"
config EXTRA_INFO
bool "Enable extra information on top of the screen"
default 1
help
Show information like number of tracked aircraft on top of the screen
comment "Receiver configuration" comment "Receiver configuration"
config FALLBACK_LAT config FALLBACK_LAT
+39 -26
View File
@@ -17,7 +17,6 @@
#include <iostream> #include <iostream>
#include <numbers> #include <numbers>
#include <string> #include <string>
#include <algorithm>
#ifndef CONFIG_AUTOSCALE #ifndef CONFIG_AUTOSCALE
constexpr constexpr
@@ -95,6 +94,11 @@ int main() {
nlohmann::json aircraft = net::http_get_json( nlohmann::json aircraft = net::http_get_json(
std::format("{}/aircraft.json", CONFIG_BASE_URL)); std::format("{}/aircraft.json", CONFIG_BASE_URL));
if (aircraft != nullptr) { if (aircraft != nullptr) {
#ifdef CONFIG_EXTRA_INFO
font::puts(
std::format("Tracking {} aircraft", aircraft["aircraft"].size()),
0, 0, {0xff, 0xff, 0xff});
#endif
for (nlohmann::json &craft : aircraft["aircraft"]) { for (nlohmann::json &craft : aircraft["aircraft"]) {
uint32_t altitude; uint32_t altitude;
@@ -135,9 +139,9 @@ int main() {
" aircraft with no ground speed or track data detected!\n"; " aircraft with no ground speed or track data detected!\n";
speed = 0; speed = 0;
track = 0; track = 0;
#ifndef CONFIG_METRIC #ifndef CONFIG_METRIC
speed_knot = 0; speed_knot = 0;
#endif #endif
} }
draw::color_t color = get_altitude_color(altitude); draw::color_t color = get_altitude_color(altitude);
try { try {
@@ -162,33 +166,40 @@ int main() {
// speed in pixels per hour // speed in pixels per hour
const float speed_pph = speed * pixels_per_km; const float speed_pph = speed * pixels_per_km;
// track in radians // track in radians
const float track_rad = const float track_rad =
std::fmod((track - 90), 360.0f) * std::fmod((track - 90), 360.0f) *
(static_cast<float>(std::numbers::pi) / 180.0f); (static_cast<float>(std::numbers::pi) / 180.0f);
#ifdef CONFIG_VECTOR_FOLLOW_TRACK_RATE #ifdef CONFIG_VECTOR_FOLLOW_TRACK_RATE
{ {
float track_rate_rads; float track_rate_rads;
try { try {
track_rate_rads = craft["track_rate"].get<float>() * (static_cast<float>(std::numbers::pi) / 180.0f); track_rate_rads =
} catch (...) { craft["track_rate"].get<float>() *
std::clog << YELLOW (static_cast<float>(std::numbers::pi) / 180.0f);
"[WARNING]" RESET } catch (...) {
" aircraft with no track_rate data detected!\n"; std::clog
<< YELLOW "[WARNING]" RESET
" aircraft with no track_rate data detected!\n";
track_rate_rads = 0; track_rate_rads = 0;
} }
draw::arc(x_center, y_center,track_rad,speed_pph/3600,track_rate_rads,CONFIG_TIME_BASED_VECTOR_LENGHT*60,color); draw::arc(x_center, y_center, track_rad, speed_pph / 3600,
track_rate_rads, CONFIG_TIME_BASED_VECTOR_LENGHT * 60,
color);
} }
#else #else
// lenght of Time-Based Vector // lenght of Time-Based Vector
const float vector_lenght = const float vector_lenght =
(speed_pph / 60) * CONFIG_TIME_BASED_VECTOR_LENGHT; (speed_pph / 60) * CONFIG_TIME_BASED_VECTOR_LENGHT;
draw::line(x_center, y_center, draw::line(
std::clamp(x_center + (vector_lenght * std::cos(track_rad)),0.0f, static_cast<float>(UINT16_MAX)), x_center, y_center,
std::clamp(y_center + (vector_lenght * std::sin(track_rad)),0.0f,static_cast<float>(UINT16_MAX)), color); std::clamp(x_center + (vector_lenght * std::cos(track_rad)),
0.0f, static_cast<float>(UINT16_MAX)),
std::clamp(y_center + (vector_lenght * std::sin(track_rad)),
0.0f, static_cast<float>(UINT16_MAX)),
color);
#endif #endif
draw::rhombus(x_center, y_center, 8 /*TODO: remove magic*/, draw::rhombus(x_center, y_center, CONFIG_AIRCRAFT_RHOMBUS_RADIUS,
color); color);
{ {
@@ -201,8 +212,9 @@ int main() {
callsign = CONFIG_NO_CALLSIGN_IDENTIFICATION; callsign = CONFIG_NO_CALLSIGN_IDENTIFICATION;
} }
// print some info // print some info
font::puts(callsign, x_center + 10 /*TODO: remove magic*/, font::puts(callsign, x_center + CONFIG_X_TEXT_OFFSET,
y_center, color); y_center - (FONT_HEIGHT + CONFIG_CHARACTER_SPACING),
color);
font::puts(std::to_string(static_cast<uint16_t>( font::puts(std::to_string(static_cast<uint16_t>(
#ifdef CONFIG_METRIC #ifdef CONFIG_METRIC
speed speed
@@ -211,10 +223,11 @@ int main() {
#endif #endif
)) + )) +
SPEED_UNIT, SPEED_UNIT,
x_center + 10 /*TODO: remove magic*/, x_center + CONFIG_X_TEXT_OFFSET, y_center, color);
y_center + FONT_HEIGHT + CONFIG_CHARACTER_SPACING, font::puts(std::to_string(altitude) + ALTITUDE_UNIT,
x_center + CONFIG_X_TEXT_OFFSET,
y_center + (FONT_HEIGHT + CONFIG_CHARACTER_SPACING),
color); color);
font::puts(std::to_string(altitude) + ALTITUDE_UNIT, x_center + 10 /*TODO: remove magic*/, y_center + (FONT_HEIGHT + CONFIG_CHARACTER_SPACING)*2,color);
} }
} catch (...) { } catch (...) {
std::clog << YELLOW "[WARNING]" RESET std::clog << YELLOW "[WARNING]" RESET