Skip to content

Commit 3a49bbb

Browse files
JF002Gitea
authored andcommitted
Merge branch 'develop' of JF/PineTime into master
2 parents a0e73f5 + 9a89ff7 commit 3a49bbb

16 files changed

Lines changed: 93 additions & 35 deletions

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(pinetime VERSION 0.6.0 LANGUAGES C CXX ASM)
2+
project(pinetime VERSION 0.6.1 LANGUAGES C CXX ASM)
33

44
set(NRF_TARGET "nrf52")
55

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,24 @@ GDB (Back Magic Probe)
9292
```
9393
$ mkdir build
9494
$ cd build
95-
$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_GDB_CLIENT=1 -DGDB_CLIENT_BIN_PATH=... -DGDB_CLIENT_TARGET_REMOTE=... -DMERGEHEX=... ../
95+
$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_GDB_CLIENT=1 -DGDB_CLIENT_BIN_PATH=... -DGDB_CLIENT_TARGET_REMOTE=... ../
9696
```
9797

9898
OpenOCD (STlink v2 clones)
9999
```
100100
$ mkdir build
101101
$ cd build
102-
$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_OPENOCD=1 -DGDB_CLIENT_BIN_PATH=[optional] -DMERGEHEX=... ../
102+
$ cmake -DARM_NONE_EABI_TOOLCHAIN_PATH=... -DNRF5_SDK_PATH=... -DUSE_OPENOCD=1 -DGDB_CLIENT_BIN_PATH=[optional] ../
103103
```
104104

105+
106+
**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:
107+
108+
```
109+
-DCMAKE_BUILD_TYPE=Debug
110+
```
111+
112+
105113
* Make
106114
```
107115
$ make -j pinetime-app

src/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,10 @@ add_definitions(-DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF52_PAN_64
546546
add_definitions(-DFREERTOS)
547547
add_definitions(-DDEBUG_NRF_USER)
548548

549+
if(NOT CMAKE_BUILD_TYPE)
550+
set(CMAKE_BUILD_TYPE "Release")
551+
endif()
552+
549553
# Build autonomous binary (without support for bootloader)
550554
set(EXECUTABLE_NAME "pinetime-app")
551555
set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf52.ld")

src/Components/Ble/BleController.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
#include <FreeRTOS.h>
44
#include <queue.h>
5+
#include <array>
56

67
namespace Pinetime {
78
namespace Controllers {
89
class Ble {
910
public:
11+
using BleAddress = std::array<uint8_t, 6>;
1012
enum class FirmwareUpdateStates {Idle, Running, Validated, Error};
13+
enum class AddressTypes { Public, Random };
1114

1215
Ble() = default;
1316
bool IsConnected() const {return isConnected;}
@@ -24,12 +27,18 @@ namespace Pinetime {
2427
uint32_t FirmwareUpdateTotalBytes() const { return firmwareUpdateTotalBytes; }
2528
uint32_t FirmwareUpdateCurrentBytes() const { return firmwareUpdateCurrentBytes; }
2629
FirmwareUpdateStates State() const { return firmwareUpdateState; }
30+
31+
void Address(BleAddress&& addr) { address = addr; }
32+
const BleAddress& Address() const { return address; }
33+
void AddressType(AddressTypes t) { addressType = t;}
2734
private:
2835
bool isConnected = false;
2936
bool isFirmwareUpdating = false;
3037
uint32_t firmwareUpdateTotalBytes = 0;
3138
uint32_t firmwareUpdateCurrentBytes = 0;
3239
FirmwareUpdateStates firmwareUpdateState = FirmwareUpdateStates::Idle;
40+
BleAddress address;
41+
AddressTypes addressType;
3342

3443
};
3544
}

src/Components/Ble/NimbleController.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,13 @@ void NimbleController::Init() {
9090
res = ble_hs_id_infer_auto(0, &addrType);
9191
ASSERT(res == 0);
9292
res = ble_svc_gap_device_name_set(deviceName);
93-
9493
ASSERT(res == 0);
94+
Pinetime::Controllers::Ble::BleAddress address;
95+
res = ble_hs_id_copy_addr(addrType, address.data(), nullptr);
96+
ASSERT(res == 0);
97+
bleController.AddressType((addrType == 0) ? Ble::AddressTypes::Public : Ble::AddressTypes::Random);
98+
bleController.Address(std::move(address));
99+
95100
res = ble_gatts_start();
96101
ASSERT(res == 0);
97102
}

src/Components/Ble/NimbleController.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ namespace Pinetime {
5050
AlertNotificationClient alertNotificationClient;
5151
CurrentTimeService currentTimeService;
5252

53-
uint8_t addrType;
53+
uint8_t addrType; // 1 = Random, 0 = PUBLIC
5454
uint16_t connectionHandle;
5555

5656
ble_uuid128_t dfuServiceUuid {

src/Components/DateTime/DateTimeController.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ void DateTime::UpdateTime(uint32_t systickCounter) {
4747
previousSystickCounter = 0xffffff - (rest - systickCounter);
4848
}
4949

50-
currentDateTime += std::chrono::seconds (correctedDelta);
50+
currentDateTime += std::chrono::seconds(correctedDelta);
51+
uptime += std::chrono::seconds(correctedDelta);
5152

5253
auto dp = date::floor<date::days>(currentDateTime);
5354
auto time = date::make_time(currentDateTime-dp);

src/Components/DateTime/DateTimeController.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ namespace Pinetime {
2121
uint8_t Seconds() const { return second; }
2222

2323
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> CurrentDateTime() const { return currentDateTime; }
24+
std::chrono::seconds Uptime() const { return uptime; }
2425
private:
2526
uint16_t year = 0;
2627
Months month = Months::Unknown;
@@ -32,7 +33,7 @@ namespace Pinetime {
3233

3334
uint32_t previousSystickCounter = 0;
3435
std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds> currentDateTime;
35-
36+
std::chrono::seconds uptime {0};
3637
};
3738
}
3839
}

src/DisplayApp/DisplayApp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ void DisplayApp::RunningState() {
185185
onClockApp = true;
186186
break;
187187
// case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
188-
case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, watchdog)); break;
188+
case Apps::SysInfo: currentScreen.reset(new Screens::ScreenList(this, dateTimeController, batteryController, brightnessController, bleController, watchdog)); break;
189189
case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break;
190190
case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break;
191191
case Apps::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break;

src/DisplayApp/Screens/ScreenList.cpp

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@ using namespace Pinetime::Applications::Screens;
88
// move operation.
99
// It should accept many type of "sub screen" (it only supports Label for now).
1010
// The number of sub screen it supports must be dynamic.
11-
ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController,
12-
Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Drivers::WatchdogView& watchdog) :
11+
ScreenList::ScreenList(Pinetime::Applications::DisplayApp *app,
12+
Pinetime::Controllers::DateTime &dateTimeController,
13+
Pinetime::Controllers::Battery& batteryController,
14+
Pinetime::Controllers::BrightnessController& brightnessController,
15+
Pinetime::Controllers::Ble& bleController,
16+
Pinetime::Drivers::WatchdogView& watchdog) :
1317
Screen(app),
14-
dateTimeController{dateTimeController}, batteryController{batteryController}, brightnessController{brightnessController}, watchdog{watchdog} {
18+
dateTimeController{dateTimeController}, batteryController{batteryController},
19+
brightnessController{brightnessController}, bleController{bleController}, watchdog{watchdog} {
1520
screens.reserve(3);
1621

1722
// 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
4348
}
4449
}();
4550

51+
// uptime
52+
static constexpr uint32_t secondsInADay = 60*60*24;
53+
static constexpr uint32_t secondsInAnHour = 60*60;
54+
static constexpr uint32_t secondsInAMinute = 60;
55+
uint32_t uptimeSeconds = dateTimeController.Uptime().count();
56+
uint32_t uptimeDays = (uptimeSeconds / secondsInADay);
57+
uptimeSeconds = uptimeSeconds % secondsInADay;
58+
uint32_t uptimeHours = uptimeSeconds / secondsInAnHour;
59+
uptimeSeconds = uptimeSeconds % secondsInAnHour;
60+
uint32_t uptimeMinutes = uptimeSeconds / secondsInAMinute;
61+
uptimeSeconds = uptimeSeconds % secondsInAMinute;
62+
// TODO handle more than 100 days of uptime
4663

4764
sprintf(t1, "Pinetime\n"
4865
"Version:%d.%d.%d\n"
49-
"Build: xx/xx/xxxx\n"
66+
"Build: %s\n"
67+
" %s\n"
68+
"Date: %02d/%02d/%04d\n"
5069
"Time: %02d:%02d:%02d\n"
51-
"date: %02d/%02d/%04d\n"
52-
"Uptime: xd xxhxx:xx\n"
70+
"Uptime: %02lud %02lu:%02lu:%02lu\n"
5371
"Battery: %d%%\n"
5472
"Backlight: %d/3\n"
55-
"Last reset: %s\n"
56-
"BLE MAC: \n AA:BB:CC:DD:EE:FF", Version::Major(), Version::Minor(), Version::Patch(),
57-
dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(),
73+
"Last reset: %s\n",
74+
Version::Major(), Version::Minor(), Version::Patch(),
75+
__DATE__, __TIME__,
5876
dateTimeController.Day(), dateTimeController.Month(), dateTimeController.Year(),
77+
dateTimeController.Hours(), dateTimeController.Minutes(), dateTimeController.Seconds(),
78+
uptimeDays, uptimeHours, uptimeMinutes, uptimeSeconds,
5979
batteryPercent, brightness, resetReason);
6080

6181
screens.emplace_back(t1);
6282

63-
strncpy(t2, "Hello from\nthe developper!", 27);
83+
auto& bleAddr = bleController.Address();
84+
sprintf(t2, "BLE MAC: \n %2x:%2x:%2x:%2x:%2x:%2x",
85+
bleAddr[5], bleAddr[4], bleAddr[3], bleAddr[2], bleAddr[1], bleAddr[0]);
6486
screens.emplace_back(t2);
6587

66-
strncpy(t3, "Place holder\nin case we need\nmore room!", 40);
88+
strncpy(t3, "Hello from\nthe developper!", 27);
89+
6790
screens.emplace_back(t3);
6891

6992
auto &screen = screens[screenIndex];

0 commit comments

Comments
 (0)