Compare commits
2
Commits
831501ea41
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47f2766bb8 | ||
|
|
839ea1490a |
@@ -9,3 +9,4 @@ compile_commands.json
|
||||
include/
|
||||
!scripts/include/
|
||||
*.o
|
||||
test
|
||||
@@ -63,15 +63,31 @@ config VECTOR_FOLLOW_TRACK_RATE
|
||||
This option will turn the vector from line into curve.
|
||||
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
|
||||
int "Spacing between character in pixels"
|
||||
range 1 255
|
||||
range 0 255
|
||||
default 1
|
||||
|
||||
config X_TEXT_OFFSET
|
||||
int "X offset of text from aircraft"
|
||||
range 0 65535
|
||||
default 10
|
||||
|
||||
config NO_CALLSIGN_IDENTIFICATION
|
||||
string "Callsign used for aircraft with unknown callsign"
|
||||
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"
|
||||
|
||||
config FALLBACK_LAT
|
||||
|
||||
+31
-18
@@ -17,7 +17,6 @@
|
||||
#include <iostream>
|
||||
#include <numbers>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
|
||||
#ifndef CONFIG_AUTOSCALE
|
||||
constexpr
|
||||
@@ -95,6 +94,11 @@ int main() {
|
||||
nlohmann::json aircraft = net::http_get_json(
|
||||
std::format("{}/aircraft.json", CONFIG_BASE_URL));
|
||||
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"]) {
|
||||
|
||||
uint32_t altitude;
|
||||
@@ -135,9 +139,9 @@ int main() {
|
||||
" aircraft with no ground speed or track data detected!\n";
|
||||
speed = 0;
|
||||
track = 0;
|
||||
#ifndef CONFIG_METRIC
|
||||
#ifndef CONFIG_METRIC
|
||||
speed_knot = 0;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
draw::color_t color = get_altitude_color(altitude);
|
||||
try {
|
||||
@@ -162,33 +166,40 @@ int main() {
|
||||
// speed in pixels per hour
|
||||
const float speed_pph = speed * pixels_per_km;
|
||||
|
||||
|
||||
// track in radians
|
||||
const float track_rad =
|
||||
std::fmod((track - 90), 360.0f) *
|
||||
(static_cast<float>(std::numbers::pi) / 180.0f);
|
||||
#ifdef CONFIG_VECTOR_FOLLOW_TRACK_RATE
|
||||
{
|
||||
{
|
||||
float track_rate_rads;
|
||||
try {
|
||||
track_rate_rads = craft["track_rate"].get<float>() * (static_cast<float>(std::numbers::pi) / 180.0f);
|
||||
track_rate_rads =
|
||||
craft["track_rate"].get<float>() *
|
||||
(static_cast<float>(std::numbers::pi) / 180.0f);
|
||||
} catch (...) {
|
||||
std::clog << YELLOW
|
||||
"[WARNING]" RESET
|
||||
std::clog
|
||||
<< YELLOW "[WARNING]" RESET
|
||||
" aircraft with no track_rate data detected!\n";
|
||||
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
|
||||
// lenght of Time-Based Vector
|
||||
const float vector_lenght =
|
||||
(speed_pph / 60) * CONFIG_TIME_BASED_VECTOR_LENGHT;
|
||||
draw::line(x_center, y_center,
|
||||
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);
|
||||
draw::line(
|
||||
x_center, y_center,
|
||||
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
|
||||
draw::rhombus(x_center, y_center, 8 /*TODO: remove magic*/,
|
||||
draw::rhombus(x_center, y_center, CONFIG_AIRCRAFT_RHOMBUS_RADIUS,
|
||||
color);
|
||||
|
||||
{
|
||||
@@ -201,8 +212,9 @@ int main() {
|
||||
callsign = CONFIG_NO_CALLSIGN_IDENTIFICATION;
|
||||
}
|
||||
// print some info
|
||||
font::puts(callsign, x_center + 10 /*TODO: remove magic*/,
|
||||
y_center, color);
|
||||
font::puts(callsign, x_center + CONFIG_X_TEXT_OFFSET,
|
||||
y_center - (FONT_HEIGHT + CONFIG_CHARACTER_SPACING),
|
||||
color);
|
||||
font::puts(std::to_string(static_cast<uint16_t>(
|
||||
#ifdef CONFIG_METRIC
|
||||
speed
|
||||
@@ -211,10 +223,11 @@ int main() {
|
||||
#endif
|
||||
)) +
|
||||
SPEED_UNIT,
|
||||
x_center + 10 /*TODO: remove magic*/,
|
||||
y_center + FONT_HEIGHT + CONFIG_CHARACTER_SPACING,
|
||||
x_center + CONFIG_X_TEXT_OFFSET, y_center, color);
|
||||
font::puts(std::to_string(altitude) + ALTITUDE_UNIT,
|
||||
x_center + CONFIG_X_TEXT_OFFSET,
|
||||
y_center + (FONT_HEIGHT + CONFIG_CHARACTER_SPACING),
|
||||
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 (...) {
|
||||
std::clog << YELLOW "[WARNING]" RESET
|
||||
|
||||
Reference in New Issue
Block a user