diff --git a/CMakeLists.txt b/CMakeLists.txt index e318c7ba..f2edbc4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,16 @@ cmake_minimum_required(VERSION 3.10) project(pinetime VERSION 0.15.0 LANGUAGES C CXX ASM) +set(CMAKE_C_STANDARD 99) +set(CMAKE_CXX_STANDARD 14) + +# set(CMAKE_GENERATOR "Unix Makefiles") +set(CMAKE_C_EXTENSIONS OFF) +set(CMAKE_C_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + set(NRF_TARGET "nrf52") if (NOT ARM_NONE_EABI_TOOLCHAIN_PATH) diff --git a/cmake-nRF5x/CMake_nRF5x.cmake b/cmake-nRF5x/CMake_nRF5x.cmake index c1785d36..ead7b9f6 100755 --- a/cmake-nRF5x/CMake_nRF5x.cmake +++ b/cmake-nRF5x/CMake_nRF5x.cmake @@ -36,9 +36,6 @@ macro(nRF5x_setup) set(CMAKE_OSX_SYSROOT "/") set(CMAKE_OSX_DEPLOYMENT_TARGET "") - # language standard/version settings - set(CMAKE_C_STANDARD 99) - set(CMAKE_CXX_STANDARD 11) # CPU specyfic settings if (NRF_TARGET MATCHES "nrf51") @@ -86,8 +83,8 @@ macro(nRF5x_setup) set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") - set(CMAKE_ASM_FLAGS "-MP -MD -std=c99 -x assembler-with-cpp") - set(CMAKE_EXE_LINKER_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} ${CPU_FLAGS} -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm") + set(CMAKE_ASM_FLAGS "-MP -MD -x assembler-with-cpp") + set(CMAKE_EXE_LINKER_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} ${CPU_FLAGS} -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm") # note: we must override the default cmake linker flags so that CMAKE_C_FLAGS are not added implicitly set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_COMPILER} -o ") set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_C_COMPILER} -lstdc++ -o ") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 59dc9730..1183bb3b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,16 +3,6 @@ cmake_minimum_required(VERSION 3.10) project(pinetime-app C CXX ASM) -set(CMAKE_C_STANDARD 99) -set(CMAKE_CXX_STANDARD 14) - -# set(CMAKE_GENERATOR "Unix Makefiles") -set(CMAKE_C_EXTENSIONS OFF) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - # define some variables just for this example to determine file locations set(NRF_PROJECT_NAME pinetime-app) set(NRF_BOARD pca10040) @@ -875,8 +865,6 @@ target_compile_options(${EXECUTABLE_NAME} PUBLIC set_target_properties(${EXECUTABLE_NAME} PROPERTIES SUFFIX ".out" LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_FILE_NAME}.map" - CXX_STANDARD 11 - C_STANDARD 99 ) add_custom_command(TARGET ${EXECUTABLE_NAME} @@ -907,8 +895,6 @@ target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC set_target_properties(${EXECUTABLE_MCUBOOT_NAME} PROPERTIES SUFFIX ".out" LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_FILE_NAME}.map" - CXX_STANDARD 11 - C_STANDARD 99 ) add_custom_command(TARGET ${EXECUTABLE_MCUBOOT_NAME} @@ -946,8 +932,6 @@ target_compile_options(${EXECUTABLE_RECOVERY_NAME} PUBLIC set_target_properties(${EXECUTABLE_RECOVERY_NAME} PROPERTIES SUFFIX ".out" LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERY_FILE_NAME}.map" - CXX_STANDARD 11 - C_STANDARD 99 ) add_custom_command(TARGET ${EXECUTABLE_RECOVERY_NAME} @@ -977,9 +961,7 @@ target_compile_options(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC set_target_properties(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PROPERTIES SUFFIX ".out" - LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERY_MCUBOOT_FILE_NAME}.map" - CXX_STANDARD 11 - C_STANDARD 99 + LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_GRAPHICS_FILE_NAME}.map" ) add_custom_command(TARGET ${EXECUTABLE_RECOVERY_MCUBOOT_NAME} @@ -1021,8 +1003,6 @@ add_dependencies(${EXECUTABLE_RECOVERYLOADER_NAME} ${EXECUTABLE_RECOVERY_MCUBOOT set_target_properties(${EXECUTABLE_RECOVERYLOADER_NAME} PROPERTIES SUFFIX ".out" LINK_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_RECOVERYLOADER_FILE_NAME}.map" - CXX_STANDARD 11 - C_STANDARD 99 ) add_custom_command(TARGET ${EXECUTABLE_RECOVERYLOADER_NAME} @@ -1056,8 +1036,6 @@ add_dependencies(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} ${EXECUTABLE_RECOVERY set_target_properties(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PROPERTIES SUFFIX ".out" LINK_FLAGS "-mthumb -mabi=aapcs -std=gnu++98 -std=c99 -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT_MCUBOOT} -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm -Wl,-Map=${EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME}.map" - CXX_STANDARD 11 - C_STANDARD 99 ) add_custom_command(TARGET ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 2e81c99b..3de26991 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -123,7 +123,7 @@ void DisplayApp::Refresh() { currentScreen.reset(nullptr); lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up); onClockApp = false; - currentScreen.reset(new Screens::Notifications(this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview)); + currentScreen = std::make_unique(this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview); } } break; @@ -161,10 +161,10 @@ void DisplayApp::Refresh() { // lvgl.SetFullRefresh(components::LittleVgl::FullRefreshDirections::Down); // currentScreen.reset(nullptr); // if(toggle) { -// currentScreen.reset(new Screens::Tile(this)); +// currentScreen = std::make_unique(this); // toggle = false; // } else { -// currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController)); +// currentScreen = std::make_unique(this, dateTimeController, batteryController, bleController); // toggle = true; // } @@ -172,10 +172,14 @@ void DisplayApp::Refresh() { case Messages::BleFirmwareUpdateStarted: lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down); currentScreen.reset(nullptr); - currentScreen.reset(new Screens::FirmwareUpdate(this, bleController)); + currentScreen = std::make_unique(this, bleController); onClockApp = false; break; + case Messages::UpdateDateTime: + // Added to remove warning + // What should happen here? + break; } } @@ -198,23 +202,23 @@ void DisplayApp::RunningState() { onClockApp = false; switch(nextApp) { case Apps::None: - case Apps::Launcher: currentScreen.reset(new Screens::ApplicationList(this, settingsController)); break; + case Apps::Launcher: currentScreen = std::make_unique(this, settingsController); break; case Apps::Clock: - currentScreen.reset(new Screens::Clock(this, dateTimeController, batteryController, bleController, notificationManager, settingsController, heartRateController)); + currentScreen = std::make_unique(this, dateTimeController, batteryController, bleController, notificationManager, settingsController, heartRateController); onClockApp = true; break; - case Apps::SysInfo: currentScreen.reset(new Screens::SystemInfo(this, dateTimeController, batteryController, brightnessController, bleController, watchdog)); break; - case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break; - case Apps::StopWatch: currentScreen.reset(new Screens::StopWatch(this)); break; - case Apps::Twos: currentScreen.reset(new Screens::Twos(this)); break; - case Apps::Paint: currentScreen.reset(new Screens::InfiniPaint(this, lvgl)); break; - case Apps::Paddle: currentScreen.reset(new Screens::Paddle(this, lvgl)); break; - case Apps::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break; - case Apps::Music : currentScreen.reset(new Screens::Music(this, systemTask.nimble().music())); break; - case Apps::Navigation : currentScreen.reset(new Screens::Navigation(this, systemTask.nimble().navigation())); break; - case Apps::FirmwareValidation: currentScreen.reset(new Screens::FirmwareValidation(this, validator)); break; - case Apps::Notifications: currentScreen.reset(new Screens::Notifications(this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Normal)); break; - case Apps::HeartRate: currentScreen.reset(new Screens::HeartRate(this, heartRateController)); break; + case Apps::SysInfo: currentScreen = std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog); break; + case Apps::Meter: currentScreen = std::make_unique(this);break; + case Apps::StopWatch: currentScreen = std::make_unique(this); break; + case Apps::Twos: currentScreen = std::make_unique(this); break; + case Apps::Paint: currentScreen = std::make_unique(this, lvgl); break; + case Apps::Paddle: currentScreen = std::make_unique(this, lvgl); break; + case Apps::Brightness : currentScreen = std::make_unique(this, brightnessController); break; + case Apps::Music : currentScreen = std::make_unique(this, systemTask.nimble().music()); break; + case Apps::Navigation : currentScreen = std::make_unique(this, systemTask.nimble().navigation()); break; + case Apps::FirmwareValidation: currentScreen = std::make_unique(this, validator); break; + case Apps::Notifications: currentScreen = std::make_unique(this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Normal); break; + case Apps::HeartRate: currentScreen = std::make_unique(this, heartRateController); break; } nextApp = Apps::None; } diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index dd9cb2a8..60039045 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -56,7 +56,7 @@ std::unique_ptr ApplicationList::CreateScreen1() { }; - return std::unique_ptr(new Screens::Tile(0, app, settingsController, applications)); + return std::make_unique(0, app, settingsController, applications); } std::unique_ptr ApplicationList::CreateScreen2() { @@ -70,7 +70,7 @@ std::unique_ptr ApplicationList::CreateScreen2() { } }; - return std::unique_ptr(new Screens::Tile(1, app, settingsController, applications)); + return std::make_unique(1, app, settingsController, applications); } std::unique_ptr ApplicationList::CreateScreen3() { @@ -84,6 +84,6 @@ std::unique_ptr ApplicationList::CreateScreen3() { } }; - return std::unique_ptr(new Screens::Tile(2, app, settingsController, applications)); + return std::make_unique(2, app, settingsController, applications); } diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 342dd222..69180370 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -64,20 +64,20 @@ bool Clock::OnTouchEvent(Pinetime::Applications::TouchEvents event) { } std::unique_ptr Clock::WatchFaceDigitalScreen() { - return std::unique_ptr(new Screens::WatchFaceDigital(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController, heartRateController)); + return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController, heartRateController); } std::unique_ptr Clock::WatchFaceAnalogScreen() { - return std::unique_ptr(new Screens::WatchFaceAnalog(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController)); + return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } /* // Examples for more watch faces std::unique_ptr Clock::WatchFaceMinimalScreen() { - return std::unique_ptr(new Screens::WatchFaceMinimal(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController)); + return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } std::unique_ptr Clock::WatchFaceCustomScreen() { - return std::unique_ptr(new Screens::WatchFaceCustom(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController)); + return std::make_unique(app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } */ \ No newline at end of file diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 4219bac7..c903ed0f 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -17,22 +17,22 @@ Notifications::Notifications(DisplayApp *app, auto notification = notificationManager.GetLastNotification(); if(notification.valid) { currentId = notification.id; - currentItem.reset(new NotificationItem("\nNotification", + currentItem = std::make_unique("\nNotification", notification.message.data(), notification.index, notification.category, notificationManager.NbNotifications(), mode, - alertNotificationService)); + alertNotificationService); validDisplay = true; } else { - currentItem.reset(new NotificationItem("\nNotification", + currentItem = std::make_unique("\nNotification", "No notification to display", 0, notification.category, notificationManager.NbNotifications(), Modes::Preview, - alertNotificationService)); + alertNotificationService); } if(mode == Modes::Preview) { @@ -87,13 +87,13 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { currentId = previousNotification.id; currentItem.reset(nullptr); app->SetFullRefresh(DisplayApp::FullRefreshDirections::Up); - currentItem.reset(new NotificationItem("\nNotification", + currentItem = std::make_unique("\nNotification", previousNotification.message.data(), previousNotification.index, previousNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService)); + alertNotificationService); } return true; case Pinetime::Applications::TouchEvents::SwipeDown: { @@ -109,13 +109,13 @@ bool Notifications::OnTouchEvent(Pinetime::Applications::TouchEvents event) { currentId = nextNotification.id; currentItem.reset(nullptr); app->SetFullRefresh(DisplayApp::FullRefreshDirections::Down); - currentItem.reset(new NotificationItem("\nNotification", + currentItem = std::make_unique("\nNotification", nextNotification.message.data(), nextNotification.index, nextNotification.category, notificationManager.NbNotifications(), mode, - alertNotificationService)); + alertNotificationService); } return true; case Pinetime::Applications::TouchEvents::LongTap: { diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 0d6f8e5a..949fd345 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -104,14 +104,14 @@ std::unique_ptr SystemInfo::CreateScreen1() { uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds, batteryPercent, brightness, resetReason); - return std::unique_ptr(new Screens::Label(app, t1)); + return std::make_unique(app, t1); } std::unique_ptr SystemInfo::CreateScreen2() { auto& bleAddr = bleController.Address(); sprintf(t2, "BLE MAC: \n %02x:%02x:%02x:%02x:%02x:%02x", bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]); - return std::unique_ptr(new Screens::Label(app, t2)); + return std::make_unique(app, t2); } std::unique_ptr SystemInfo::CreateScreen3() { @@ -123,5 +123,5 @@ std::unique_ptr SystemInfo::CreateScreen3() { "Source code:\n" "https://github.com/\n" " JF002/InfiniTime"); - return std::unique_ptr(new Screens::Label(app, t3)); + return std::make_unique(app, t3); } diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index b51d48c7..66af584a 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -5,6 +5,8 @@ #include "Symbols.h" #include "NotificationIcon.h" +#include + LV_IMG_DECLARE(bg_clock); using namespace Pinetime::Applications::Screens; diff --git a/src/main.cpp b/src/main.cpp index b29aac71..bd4bbe79 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -49,6 +49,8 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif +#include + static constexpr uint8_t pinSpiSck = 2; static constexpr uint8_t pinSpiMosi = 3; static constexpr uint8_t pinSpiMiso = 4; @@ -254,8 +256,8 @@ int main(void) { debounceTimer = xTimerCreate ("debounceTimer", 200, pdFALSE, (void *) 0, DebounceTimerCallback); - systemTask.reset(new Pinetime::System::SystemTask(spi, lcd, spiNorFlash, twiMaster, touchPanel, lvgl, batteryController, bleController, - dateTimeController, motorController, heartRateSensor, settingsController)); + systemTask = std::make_unique(spi, lcd, spiNorFlash, twiMaster, touchPanel, lvgl, batteryController, bleController, + dateTimeController, motorController, heartRateSensor, settingsController); systemTask->Start(); nimble_port_init(); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 19a416ba..7b137f55 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -23,6 +23,8 @@ #include "drivers/Hrs3300.h" #include "main.h" +#include + using namespace Pinetime::System; void IdleTimerCallback(TimerHandle_t xTimer) { @@ -86,9 +88,9 @@ void SystemTask::Work() { settingsController.Init(); - displayApp.reset(new Pinetime::Applications::DisplayApp(lcd, lvgl, touchPanel, batteryController, bleController, + displayApp = std::make_unique(lcd, lvgl, touchPanel, batteryController, bleController, dateTimeController, watchdogView, *this, notificationManager, - heartRateController, settingsController)); + heartRateController, settingsController); displayApp->Start(); batteryController.Update(); @@ -96,7 +98,7 @@ void SystemTask::Work() { heartRateSensor.Init(); heartRateSensor.Disable(); - heartRateApp.reset(new Pinetime::Applications::HeartRateTask(heartRateSensor, heartRateController)); + heartRateApp = std::make_unique(heartRateSensor, heartRateController); heartRateApp->Start();