From 0a83f936b5b393f79019849e2675039f6dd96eb6 Mon Sep 17 00:00:00 2001 From: Will Bradley Date: Tue, 16 Jan 2024 22:21:28 -0800 Subject: [PATCH] Got it working --- src/CMakeLists.txt | 26 +++++++------- src/displayapp/screens/WatchFaceAnalog.cpp | 42 ++++++++++++++-------- src/displayapp/screens/WatchFaceAnalog.h | 1 + 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b933ca8d..4fd693ef 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -778,7 +778,7 @@ link_directories( set(COMMON_FLAGS -MP -MD -mthumb -mabi=aapcs -ftree-vrp -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin -fshort-enums -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fstack-usage -fno-exceptions -fno-non-call-exceptions) set(WARNING_FLAGS -Wall -Wextra -Warray-bounds=2 -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=2 -Wformat-nonliteral -Wno-missing-field-initializers -Wno-unknown-pragmas -Wno-expansion-to-defined -Wreturn-type -Werror=return-type -Werror) set(DEBUG_FLAGS -Og -g3) -set(RELEASE_FLAGS -Os) +set(DEBUG_FLAGS -Os) set(CXX_FLAGS -fno-rtti) set(ASM_FLAGS -x assembler-with-cpp) add_definitions(-DCONFIG_GPIO_AS_PINRESET) @@ -847,7 +847,7 @@ add_subdirectory(displayapp/fonts) target_compile_options(infinitime_fonts PUBLIC ${COMMON_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -861,7 +861,7 @@ target_include_directories(nrf-sdk SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(nrf-sdk PRIVATE ${COMMON_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> -O3 @@ -874,7 +874,7 @@ target_include_directories(nimble SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(nimble PRIVATE ${COMMON_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -886,7 +886,7 @@ target_include_directories(lvgl SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(lvgl PRIVATE ${COMMON_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -898,7 +898,7 @@ target_include_directories(littlefs SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(littlefs PRIVATE ${COMMON_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -910,7 +910,7 @@ target_include_directories(sunset SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(sunset PRIVATE ${COMMON_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -926,7 +926,7 @@ target_compile_options(${EXECUTABLE_NAME} PUBLIC ${COMMON_FLAGS} ${WARNING_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -961,7 +961,7 @@ target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC ${COMMON_FLAGS} ${WARNING_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -1004,7 +1004,7 @@ target_compile_options(${EXECUTABLE_RECOVERY_NAME} PUBLIC ${COMMON_FLAGS} ${WARNING_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -1036,7 +1036,7 @@ target_compile_options(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC ${COMMON_FLAGS} ${WARNING_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -1075,7 +1075,7 @@ target_compile_options(${EXECUTABLE_RECOVERYLOADER_NAME} PUBLIC ${COMMON_FLAGS} ${WARNING_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) @@ -1110,7 +1110,7 @@ target_compile_options(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PUBLIC ${COMMON_FLAGS} ${WARNING_FLAGS} $<$: ${DEBUG_FLAGS}> - $<$: ${RELEASE_FLAGS}> + $<$: ${DEBUG_FLAGS}> $<$: ${CXX_FLAGS}> $<$: ${ASM_FLAGS}> ) diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 786c408f..ea7fef57 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -56,10 +56,19 @@ namespace { pt = CoordinateRelocate(LV_HOR_RES/2-45, i*30); lv_obj_set_style_local_text_font(koku, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, ¬o_serif_cjk_15); } - lv_obj_align(koku, NULL, LV_ALIGN_CENTER, LV_HOR_RES/2-pt.x-10, LV_HOR_RES/2-pt.y); + lv_obj_align(koku, NULL, LV_ALIGN_CENTER, LV_HOR_RES/2-pt.x, LV_HOR_RES/2-pt.y); lv_obj_set_style_local_text_color(koku, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); } + void drawTime(lv_obj_t * obj, uint8_t hour, uint8_t minute, lv_color_t color, uint8_t x, uint8_t y) { + lv_label_set_align(obj, LV_LABEL_ALIGN_CENTER); + lv_label_set_text_fmt(obj, "%2d:%02d", hour, minute); + lv_obj_set_pos(obj, 0, 0); + lv_obj_align(obj, NULL, LV_ALIGN_CENTER, x, y); + lv_obj_set_style_local_text_color(obj, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, color); + lv_obj_set_style_local_text_font(obj, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); + } + } WatchFaceAnalog::WatchFaceAnalog(Controllers::DateTime& dateTimeController, @@ -81,7 +90,7 @@ WatchFaceAnalog::WatchFaceAnalog(Controllers::DateTime& dateTimeController, location = settingsController.GetLocation(); - // begin sundial watch face + // begin Japanese watch face if (settingsController.GetClockType() == Controllers::Settings::ClockType::Fuzzy) { major_scales = lv_linemeter_create(lv_scr_act(), nullptr); lv_linemeter_set_scale(major_scales, 360, 13); @@ -89,20 +98,27 @@ WatchFaceAnalog::WatchFaceAnalog(Controllers::DateTime& dateTimeController, lv_obj_set_size(major_scales, 240, 240); lv_obj_align(major_scales, nullptr, LV_ALIGN_CENTER, 0, 0); lv_obj_set_style_local_bg_opa(major_scales, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); - lv_obj_set_style_local_scale_width(major_scales, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, 60); + lv_obj_set_style_local_scale_width(major_scales, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, 50); lv_obj_set_style_local_scale_end_line_width(major_scales, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, 1); lv_obj_set_style_local_scale_end_color(major_scales, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); axis = lv_arc_create(lv_scr_act(), NULL); - lv_obj_set_size(axis, 40, 40); + lv_obj_set_size(axis, 70, 70); lv_arc_set_bg_angles(axis, 0, 360); lv_arc_set_end_angle(axis, 360); lv_obj_align(axis, NULL, LV_ALIGN_CENTER, 0, 0); + lv_obj_set_style_local_line_width(axis, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, 40); lv_obj_set_style_local_line_color(axis, LV_ARC_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_WHITE); const char* kokuZodiac[] = {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}; const char* kokuNums[] = {"九","八","七","六","五","四"}; + // abusing existing objs as text labels for this purpose + // one = lv_label_create(lv_scr_act(), nullptr); + twelve = lv_label_create(lv_scr_act(), nullptr); + // minor_scales = lv_label_create(lv_scr_act(), nullptr); + // large_scales = lv_label_create(lv_scr_act(), nullptr); + for (int i=0;i<12;i++) { printKoku(kokuZodiac[i], i, true); printKoku(kokuNums[i%6], i, false); @@ -240,13 +256,13 @@ void WatchFaceAnalog::drawWatchFaceWadokei(){ minutesNighttime = (1440 - minutesDaytime); minutesBeforeSunset = minutesSunset - (hour * 60 + minute); // i.e.zero degrees - HourLength = 40; // wadokei hand length + HourLength = 70; // wadokei hand length - int16_t oldHourAngle; - auto const angle = (hour * 15 + minute / 2)+180; //24-hr rotation with 0/24 at the bottom + int16_t oldHourAngle=0; + auto const angle = ((hour * 15 + minute / 2)+180)%360; //24-hr rotation with 0/24 at the bottom if(minutesBeforeSunset > 0 && minutesBeforeSunset < minutesDaytime) { // day (after sunrise) - oldHourAngle = 180.0 * minutesBeforeSunset / minutesDaytime + 90; + // oldHourAngle = 180.0 * minutesBeforeSunset / minutesDaytime + 90; } else { // night (before sunrise or after sunset) // lv_style_set_line_color(&hour_line_style, LV_STATE_DEFAULT, DARK_GRAY); // lv_style_set_line_color(&hour_line_style_trace, LV_STATE_DEFAULT, DARK_GRAY); @@ -256,9 +272,9 @@ void WatchFaceAnalog::drawWatchFaceWadokei(){ // lv_obj_set_style_local_text_color(twelve, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, DARK_GRAY); if(minutesBeforeSunset > minutesDaytime) { // before sunrise - oldHourAngle = 180.0 * (minutesBeforeSunset - minutesDaytime) / minutesNighttime + 90; + // oldHourAngle = 180.0 * (minutesBeforeSunset - minutesDaytime) / minutesNighttime + 90; } else { // after sunset - oldHourAngle = 180 + 180.0 * minutesBeforeSunset / minutesNighttime + 90; + // oldHourAngle = 180 + 180.0 * minutesBeforeSunset / minutesNighttime + 90; } } NRF_LOG_INFO("oa: %d, a: %d, la: %f, lo: %f, be: %d", @@ -280,10 +296,8 @@ void WatchFaceAnalog::drawWatchFaceWadokei(){ lv_line_set_points(hour_body, hour_point, 2); // lv_line_set_points(hour_body_trace, hour_point_trace, 2); - lv_label_set_align(twelve, LV_LABEL_ALIGN_CENTER); - lv_label_set_text_fmt(twelve, "%2d:%02d", hour, minute); - lv_obj_set_pos(twelve, 0, 0); - lv_obj_set_style_local_text_color(twelve, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + drawTime(twelve, hour, minute, LV_COLOR_BLACK, 0, 0); + lv_obj_move_foreground(twelve); } } diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index 88e08c0a..143eb4aa 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -71,6 +71,7 @@ namespace Pinetime { lv_style_t minute_line_style; lv_style_t minute_line_style_trace; lv_style_t second_line_style; + lv_style_t axis_style; lv_obj_t* label_date_day; lv_obj_t* plugIcon;