summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--README.md12
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/Components/Ble/BleController.h9
-rw-r--r--src/Components/Ble/NimbleController.cpp7
-rw-r--r--src/Components/Ble/NimbleController.h2
-rw-r--r--src/Components/DateTime/DateTimeController.cpp3
-rw-r--r--src/Components/DateTime/DateTimeController.h3
-rw-r--r--src/DisplayApp/DisplayApp.cpp2
-rw-r--r--src/DisplayApp/Screens/ScreenList.cpp45
-rw-r--r--src/DisplayApp/Screens/ScreenList.h8
-rw-r--r--src/SystemTask/SystemTask.cpp3
-rw-r--r--src/SystemTask/SystemTask.h2
-rw-r--r--src/drivers/InternalFlash.cpp2
-rw-r--r--src/drivers/Watchdog.cpp22
-rw-r--r--src/graphics.cpp2
16 files changed, 93 insertions, 35 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 003be764..c5cf78aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.10)
-project(pinetime VERSION 0.6.0 LANGUAGES C CXX ASM)
+project(pinetime VERSION 0.6.1 LANGUAGES C CXX ASM)
set(NRF_TARGET "nrf52")
diff --git a/README.md b/README.md
index 30a92dc8..42efda20 100644
--- a/README.md
+++ b/README.md
@@ -92,16 +92,24 @@ GDB (Back Magic Probe)
```
$ mkdir build
$ cd build
-$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_GDB_CLIENT=1 -DGDB_CLIENT_BIN_PATH=... -DGDB_CLIENT_TARGET_REMOTE=... -DMERGEHEX=... ../
+$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_GDB_CLIENT=1 -DGDB_CLIENT_BIN_PATH=... -DGDB_CLIENT_TARGET_REMOTE=... ../
```
OpenOCD (STlink v2 clones)
```
$ mkdir build
$ cd build
-$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_OPENOCD=1 -DGDB_CLIENT_BIN_PATH=[optional] -DMERGEHEX=... ../
+$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_OPENOCD=1 -DGDB_CLIENT_BIN_PATH=[optional] ../
```
+
+**Note** : By default, the build configuration *Release* is applied. It means that the code is built with optimisations enabled (-O3). If you wanto to compile in *Debug* mode to ease debugging and step-by-step debugging, specify the CMake variable `CMAKE_BUILD_TYPE` in the CMake command line:
+
+```
+-DCMAKE_BUILD_TYPE=Debug
+```
+
+
* Make
```
$ make -j pinetime-app
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>