diff options
author | JF <jf@codingfield.com> | 2020-06-16 21:15:16 +0200 |
---|---|---|
committer | Gitea <gitea@fake.local> | 2020-06-16 21:15:16 +0200 |
commit | 3a49bbbae48a62d5252fee0cb6d04002d917c820 (patch) | |
tree | 800c2ab76a4609382865ba9fd8b16b9732e5eb03 /src | |
parent | a0e73f5c1a1e652aa6270b7e42a73aee3d12ded6 (diff) | |
parent | 9a89ff7f7764df085a59c8a24fe578228a22fc6c (diff) |
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/Components/Ble/BleController.h | 9 | ||||
-rw-r--r-- | src/Components/Ble/NimbleController.cpp | 7 | ||||
-rw-r--r-- | src/Components/Ble/NimbleController.h | 2 | ||||
-rw-r--r-- | src/Components/DateTime/DateTimeController.cpp | 3 | ||||
-rw-r--r-- | src/Components/DateTime/DateTimeController.h | 3 | ||||
-rw-r--r-- | src/DisplayApp/DisplayApp.cpp | 2 | ||||
-rw-r--r-- | src/DisplayApp/Screens/ScreenList.cpp | 45 | ||||
-rw-r--r-- | src/DisplayApp/Screens/ScreenList.h | 8 | ||||
-rw-r--r-- | src/SystemTask/SystemTask.cpp | 3 | ||||
-rw-r--r-- | src/SystemTask/SystemTask.h | 2 | ||||
-rw-r--r-- | src/drivers/InternalFlash.cpp | 2 | ||||
-rw-r--r-- | src/drivers/Watchdog.cpp | 22 | ||||
-rw-r--r-- | src/graphics.cpp | 2 |
14 files changed, 82 insertions, 32 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 286a792a..1609196a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -546,6 +546,10 @@ add_definitions(-DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF52_PAN_64 add_definitions(-DFREERTOS) add_definitions(-DDEBUG_NRF_USER) +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release") +endif() + # Build autonomous binary (without support for bootloader) set(EXECUTABLE_NAME "pinetime-app") set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf52.ld") diff --git a/src/Components/Ble/BleController.h b/src/Components/Ble/BleController.h index c47e65b6..3f52ea25 100644 --- a/src/Components/Ble/BleController.h +++ b/src/Components/Ble/BleController.h @@ -2,12 +2,15 @@ #include <FreeRTOS.h> #include <queue.h> +#include <array> namespace Pinetime { namespace Controllers { class Ble { public: + using BleAddress = std::array<uint8_t, 6>; enum class FirmwareUpdateStates {Idle, Running, Validated, Error}; + enum class AddressTypes { Public, Random }; Ble() = default; bool IsConnected() const {return isConnected;} @@ -24,12 +27,18 @@ namespace Pinetime { uint32_t FirmwareUpdateTotalBytes() const { return firmwareUpdateTotalBytes; } uint32_t FirmwareUpdateCurrentBytes() const { return firmwareUpdateCurrentBytes; } FirmwareUpdateStates State() const { return firmwareUpdateState; } + + void Address(BleAddress&& addr) { address = addr; } + const BleAddress& Address() const { return address; } + void AddressType(AddressTypes t) { addressType = t;} private: bool isConnected = false; bool isFirmwareUpdating = false; uint32_t firmwareUpdateTotalBytes = 0; uint32_t firmwareUpdateCurrentBytes = 0; FirmwareUpdateStates firmwareUpdateState = FirmwareUpdateStates::Idle; + BleAddress address; + AddressTypes addressType; }; } diff --git a/src/Components/Ble/NimbleController.cpp b/src/Components/Ble/NimbleController.cpp index 4c8035b7..561dbce4 100644 --- a/src/Components/Ble/NimbleController.cpp +++ b/src/Components/Ble/NimbleController.cpp @@ -90,8 +90,13 @@ void NimbleController::Init() { res = ble_hs_id_infer_auto(0, &addrType); ASSERT(res == 0); res = ble_svc_gap_device_name_set(deviceName); - ASSERT(res == 0); + Pinetime::Controllers::Ble::BleAddress address; + res = ble_hs_id_copy_addr(addrType, address.data(), nullptr); + ASSERT(res == 0); + bleController.AddressType((addrType == 0) ? Ble::AddressTypes::Public : Ble::AddressTypes::Random); + bleController.Address(std::move(address)); + res = ble_gatts_start(); ASSERT(res == 0); } diff --git a/src/Components/Ble/NimbleController.h b/src/Components/Ble/NimbleController.h index 7e680607..cf50d78d 100644 --- a/src/Components/Ble/NimbleController.h +++ b/src/Components/Ble/NimbleController.h @@ -50,7 +50,7 @@ namespace Pinetime { AlertNotificationClient alertNotificationClient; CurrentTimeService currentTimeService; - uint8_t addrType; + uint8_t addrType; // 1 = Random, 0 = PUBLIC uint16_t connectionHandle; ble_uuid128_t dfuServiceUuid { diff --git a/src/Components/DateTime/DateTimeController.cpp b/src/Components/DateTime/DateTimeController.cpp index 5cfa08eb..30d9c13f 100644 --- a/src/Components/DateTime/DateTimeController.cpp +++ b/src/Components/DateTime/DateTimeController.cpp @@ -47,7 +47,8 @@ void DateTime::UpdateTime(uint32_t systickCounter) { previousSystickCounter = 0xffffff - (rest - systickCounter); } - currentDateTime += std::chrono::seconds (correctedDelta); + currentDateTime += std::chrono::seconds(correctedDelta); + uptime += std::chrono::seconds(correctedDelta); auto dp = date::floor<date::days>(currentDateTime); auto time = date::make_time(currentDateTime-dp); diff --git a/src/Components/DateTime/DateTimeController.h b/src/Components/DateTime/DateTimeController.h index 1e65bd11..d6020745 100644 --- a/src/Components/DateTime/DateTimeController.h +++ b/src/Components/DateTime/DateTimeController.h @@ -21,6 +21,7 @@ namespace Pinetime { uint8_t Seconds() const { return second; } std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> CurrentDateTime() const { return currentDateTime; } + std::chrono::seconds Uptime() const { return uptime; } private: uint16_t year = 0; Months month = Months::Unknown; @@ -32,7 +33,7 @@ namespace Pinetime { uint32_t previousSystickCounter = 0; std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> currentDateTime; - + std::chrono::seconds uptime {0}; }; } }
\ No newline at end of file diff --git a/src/DisplayApp/DisplayApp.cpp b/src/DisplayApp/DisplayApp.cpp index 01c3aa96..8e35ef55 100644 --- a/src/DisplayApp/DisplayApp.cpp +++ b/src/DisplayApp/DisplayApp.cpp @@ -185,7 +185,7 @@ void DisplayApp::RunningState() { onClockApp = true; break; // case Apps::Test: currentScreen.reset(new Screens::Message(this)); break; - case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, watchdog)); break; + case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, bleController, watchdog)); break; case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break; case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break; case Apps::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break; diff --git a/src/DisplayApp/Screens/ScreenList.cpp b/src/DisplayApp/Screens/ScreenList.cpp index 93a91212..48f71649 100644 --- a/src/DisplayApp/Screens/ScreenList.cpp +++ b/src/DisplayApp/Screens/ScreenList.cpp @@ -8,10 +8,15 @@ using namespace Pinetime::Applications::Screens; // move operation. // It should accept many type of "sub screen" (it only supports Label for now). // The number of sub screen it supports must be dynamic. -ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController, - Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Drivers::WatchdogView& watchdog) : +ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, + Pinetime::Controllers::DateTime &dateTimeController, + Pinetime::Controllers::Battery& batteryController, + Pinetime::Controllers::BrightnessController& brightnessController, + Pinetime::Controllers::Ble& bleController, + Pinetime::Drivers::WatchdogView& watchdog) : Screen(app), - dateTimeController{dateTimeController}, batteryController{batteryController}, brightnessController{brightnessController}, watchdog{watchdog} { + dateTimeController{dateTimeController}, batteryController{batteryController}, + brightnessController{brightnessController}, bleController{bleController}, watchdog{watchdog} { screens.reserve(3); // TODO all of this is far too heavy (string processing). This should be improved. @@ -43,27 +48,45 @@ ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, Pinetime::Contro } }(); + // uptime + static constexpr uint32_t secondsInADay = 60*60*24; + static constexpr uint32_t secondsInAnHour = 60*60; + static constexpr uint32_t secondsInAMinute = 60; + uint32_t uptimeSeconds = dateTimeController.Uptime().count(); + uint32_t uptimeDays = (uptimeSeconds / secondsInADay); + uptimeSeconds = uptimeSeconds % secondsInADay; + uint32_t uptimeHours = uptimeSeconds / secondsInAnHour; + uptimeSeconds = uptimeSeconds % secondsInAnHour; + uint32_t uptimeMinutes = uptimeSeconds / secondsInAMinute; + uptimeSeconds = uptimeSeconds % secondsInAMinute; + // TODO handle more than 100 days of uptime sprintf(t1, "Pinetime\n" "Version:%d.%d.%d\n" - "Build: xx/xx/xxxx\n" + "Build: %s\n" + " %s\n" + "Date: %02d/%02d/%04d\n" "Time: %02d:%02d:%02d\n" - "date: %02d/%02d/%04d\n" - "Uptime: xd xxhxx:xx\n" + "Uptime: %02lud %02lu:%02lu:%02lu\n" "Battery: %d%%\n" "Backlight: %d/3\n" - "Last reset: %s\n" - "BLE MAC: \n AA:BB:CC:DD:EE:FF", Version::Major(), Version::Minor(), Version::Patch(), - dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(), + "Last reset: %s\n", + Version::Major(), Version::Minor(), Version::Patch(), + __DATE__, __TIME__, dateTimeController.Day(), dateTimeController.Month(), dateTimeController.Year(), + dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(), + uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds, batteryPercent, brightness, resetReason); screens.emplace_back(t1); - strncpy(t2, "Hello from\nthe developper!", 27); + auto& bleAddr = bleController.Address(); + sprintf(t2, "BLE MAC: \n %2x:%2x:%2x:%2x:%2x:%2x", + bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]); screens.emplace_back(t2); - strncpy(t3, "Place holder\nin case we need\nmore room!", 40); + strncpy(t3, "Hello from\nthe developper!", 27); + screens.emplace_back(t3); auto &screen = screens[screenIndex]; diff --git a/src/DisplayApp/Screens/ScreenList.h b/src/DisplayApp/Screens/ScreenList.h index ad093d35..b0ee016b 100644 --- a/src/DisplayApp/Screens/ScreenList.h +++ b/src/DisplayApp/Screens/ScreenList.h @@ -1,6 +1,7 @@ #pragma once #include <vector> +#include <Components/Ble/NimbleController.h> #include "Screen.h" #include "Label.h" @@ -13,6 +14,7 @@ namespace Pinetime { Pinetime::Controllers::DateTime& dateTimeController, Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, + Pinetime::Controllers::Ble& bleController, Pinetime::Drivers::WatchdogView& watchdog); ~ScreenList() override; bool Refresh() override; @@ -27,11 +29,13 @@ namespace Pinetime { Pinetime::Controllers::DateTime& dateTimeController; Pinetime::Controllers::Battery& batteryController; Pinetime::Controllers::BrightnessController& brightnessController; + Pinetime::Controllers::Ble& bleController; Pinetime::Drivers::WatchdogView& watchdog; + char t1[200]; - char t2[30]; - char t3[42]; + char t2[200]; + char t3[30]; }; } } diff --git a/src/SystemTask/SystemTask.cpp b/src/SystemTask/SystemTask.cpp index b0f58d17..61b3c638 100644 --- a/src/SystemTask/SystemTask.cpp +++ b/src/SystemTask/SystemTask.cpp @@ -16,6 +16,8 @@ using namespace Pinetime::System; void IdleTimerCallback(TimerHandle_t xTimer) { + + NRF_LOG_INFO("IdleTimerCallback"); auto sysTask = static_cast<SystemTask *>(pvTimerGetTimerID(xTimer)); sysTask->OnIdle(); } @@ -113,6 +115,7 @@ void SystemTask::Work() { break; case Messages::GoToSleep: NRF_LOG_INFO("[SystemTask] Going to sleep"); + xTimerStop(idleTimer, 0); displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::GoToSleep); isSleeping = true; break; diff --git a/src/SystemTask/SystemTask.h b/src/SystemTask/SystemTask.h index b6ecf7c9..ab5f7010 100644 --- a/src/SystemTask/SystemTask.h +++ b/src/SystemTask/SystemTask.h @@ -67,7 +67,7 @@ namespace Pinetime { void Work(); bool isBleDiscoveryTimerRunning = false; uint8_t bleDiscoveryTimer = 0; - static constexpr uint32_t idleTime = 5000; + static constexpr uint32_t idleTime = 15000; TimerHandle_t idleTimer; bool doNotGoToSleep = false; diff --git a/src/drivers/InternalFlash.cpp b/src/drivers/InternalFlash.cpp index bc89ff1a..db705d78 100644 --- a/src/drivers/InternalFlash.cpp +++ b/src/drivers/InternalFlash.cpp @@ -1,4 +1,4 @@ -#include <sdk/modules/nrfx/mdk/nrf.h> +#include <mdk/nrf.h> #include "InternalFlash.h" using namespace Pinetime::Drivers; diff --git a/src/drivers/Watchdog.cpp b/src/drivers/Watchdog.cpp index 850fd2f1..11da1211 100644 --- a/src/drivers/Watchdog.cpp +++ b/src/drivers/Watchdog.cpp @@ -32,17 +32,17 @@ void Watchdog::Kick() { } Watchdog::ResetReasons Watchdog::ActualResetReason() const { - uint32_t resetReason; -// sd_power_reset_reason_get(&resetReason); -// sd_power_reset_reason_clr(0xFFFFFFFF); -// if(resetReason & 0x01u) return ResetReasons::ResetPin; -// if((resetReason >> 1u) & 0x01u) return ResetReasons::Watchdog; -// if((resetReason >> 2u) & 0x01u) return ResetReasons::SoftReset; -// if((resetReason >> 3u) & 0x01u) return ResetReasons::CpuLockup; -// if((resetReason >> 16u) & 0x01u) return ResetReasons::SystemOff; -// if((resetReason >> 17u) & 0x01u) return ResetReasons::LpComp; -// if((resetReason >> 18u) & 0x01u) return ResetReasons::DebugInterface; -// if((resetReason >> 19u) & 0x01u) return ResetReasons::NFC; + uint32_t reason = NRF_POWER->RESETREAS; + NRF_POWER->RESETREAS = 0xffffffff; + + if(reason & 0x01u) return ResetReasons::ResetPin; + if((reason >> 1u) & 0x01u) return ResetReasons::Watchdog; + if((reason >> 2u) & 0x01u) return ResetReasons::SoftReset; + if((reason >> 3u) & 0x01u) return ResetReasons::CpuLockup; + if((reason >> 16u) & 0x01u) return ResetReasons::SystemOff; + if((reason >> 17u) & 0x01u) return ResetReasons::LpComp; + if((reason) & 0x01u) return ResetReasons::DebugInterface; + if((reason >> 19u) & 0x01u) return ResetReasons::NFC; return ResetReasons::HardReset; } diff --git a/src/graphics.cpp b/src/graphics.cpp index d95ba3fa..8c39c89a 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -3,7 +3,7 @@ #include <drivers/SpiMaster.h> #include <drivers/Spi.h> #include <drivers/SpiNorFlash.h> -#include <sdk/components/libraries/log/nrf_log.h> +#include <libraries/log/nrf_log.h> #include "bootloader/boot_graphics.h" #include <FreeRTOS.h> #include <task.h> |