From 728394ff22c2bb72164796c895a35cf81c52c4be Mon Sep 17 00:00:00 2001 From: anschrammh Date: Fri, 24 Mar 2023 14:56:16 +0100 Subject: [PATCH] Reworked the compass screen to work for both possible platforms (breadboard and PCB) --- src/W800_SDK_v1.00.10/app/gfx/compass_screen.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/W800_SDK_v1.00.10/app/gfx/compass_screen.c b/src/W800_SDK_v1.00.10/app/gfx/compass_screen.c index bcd1844..e0a2a23 100644 --- a/src/W800_SDK_v1.00.10/app/gfx/compass_screen.c +++ b/src/W800_SDK_v1.00.10/app/gfx/compass_screen.c @@ -3,6 +3,7 @@ #include "lvgl.h" #include "compass_screen.h" #include "menu_screen.h" +#include "app_config.h" static const char *cardinals[] = { @@ -71,9 +72,13 @@ static void rotate_cardinal(CompassCardinal_t *cardinal, uint16_t azimuth) { lv_coord_t rotated_x, rotated_y; float azimuth_in_rads = (float)azimuth*M_PI/180.0; - +#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD rotated_x = (float)(cardinal->position.x-120+cardinal->offset.x)*cos(azimuth_in_rads) - (float)(cardinal->position.y-120+cardinal->offset.y)*sin(azimuth_in_rads) + 120-cardinal->offset.x; rotated_y = (float)(cardinal->position.y-120+cardinal->offset.y)*cos(azimuth_in_rads) + (float)(cardinal->position.x-120+cardinal->offset.x)*sin(azimuth_in_rads) + 120-cardinal->offset.y; +#elif HARDWARE_PLATFORM == SMART_WATCH_PCB + rotated_x = (float)(cardinal->position.x-120+cardinal->offset.x)*cos(azimuth_in_rads) + (float)(cardinal->position.y-120+cardinal->offset.y)*sin(azimuth_in_rads) + 120-cardinal->offset.x; + rotated_y = (float)(cardinal->position.y-120+cardinal->offset.y)*cos(azimuth_in_rads) - (float)(cardinal->position.x-120+cardinal->offset.x)*sin(azimuth_in_rads) + 120-cardinal->offset.y; +#endif lv_obj_set_pos(cardinal->label, rotated_x, rotated_y); } @@ -102,7 +107,11 @@ void compass_screen_set_azimuth(CompassScreen_t * const compassScreen, uint16_t //We make sure the azimuth is in the right range ie 0 to 359 azimuth %= 360; +#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD uint16_t azimuthAdjusted = 359 - azimuth; +#elif HARDWARE_PLATFORM == SMART_WATCH_PCB + uint16_t azimuthAdjusted = azimuth; +#endif uint8_t index; @@ -129,7 +138,11 @@ void compass_screen_set_azimuth(CompassScreen_t * const compassScreen, uint16_t //Rotate each cardinal with the current azimuth rotate_cardinal(&compassScreen->northCardinal, azimuth); +#if HARDWARE_PLATFORM == SMART_WATCH_BREADBOARD lv_img_set_angle(compassScreen->northMarker, azimuth*10); +#elif HARDWARE_PLATFORM == SMART_WATCH_PCB + lv_img_set_angle(compassScreen->northMarker, -azimuth*10); +#endif //lv_meter_set_scale_range(compassScreen->compassGraduation.meter, compassScreen->compassGraduation.scale, 0, 330, 330, azimuth-90); rotate_cardinal(&compassScreen->eastCardinal, azimuth);