Skip to content

Commit 6d85139

Browse files
committed
Merge branch 'piggz-nav' into develop
2 parents a0f2fa8 + 522a1eb commit 6d85139

280 files changed

Lines changed: 10934 additions & 384 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

doc/NavigationService.md

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# Navigation Service
2+
## Introduction
3+
The navigation ble service provides 4 characteristics to allow the the watch to display navigation instructions from a companion application. The intended purpose is when performing some outdoor activities, for example running or cycling.
4+
5+
The 4 characteristics are:
6+
flag (string) - Upcoming icon name
7+
narrative (string) - Textual description of instruction
8+
manDist (string) - Manouvre Distance, the distance to the upcoming change
9+
progress (uint8) - Percent complete of total route, value 0-100
10+
11+
## Service
12+
The service UUID is c7e60001-78fc-48fe-8e23-433b3a1942d0
13+
14+
## Characteristics
15+
## Flags (UUID c7e60002-78fc-48fe-8e23-433b3a1942d0)
16+
All included icons are from pure-maps, which provides the actual routing from the client. The icon names ultimately come from the mapbox project "direction-icons", See https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation See the end of this document for the full lsit of supported icon names.
17+
18+
## Narrative (UUID c7e60003-78fc-48fe-8e23-433b3a1942d0)
19+
This is a client supplied string describing the upcoming instruction such as "At the roundabout take the first exit".
20+
21+
## Man Dist (UUID c7e60004-78fc-48fe-8e23-433b3a1942d0)
22+
This is a short string describing the distance to the upcoming instruction such as "50 m".
23+
24+
## Progress (UUID c7e60001=5-78fc-48fe-8e23-433b3a1942d0)
25+
The percent complete in a uint8. The watch displays this as an overall progress in a progress bar.
26+
27+
## Full icon list
28+
* arrive
29+
* arrive-left
30+
* arrive-right
31+
* arrive-straight
32+
* close
33+
* continue
34+
* continue-left
35+
* continue-right
36+
* continue-slight-left
37+
* continue-slight-right
38+
* continue-straight
39+
* continue-uturn
40+
* depart
41+
* depart-left
42+
* depart-right
43+
* depart-straight
44+
* end-of-road-left
45+
* end-of-road-right
46+
* ferry
47+
* flag
48+
* fork
49+
* fork-left
50+
* fork-right
51+
* fork-slight-left
52+
* fork-slight-right
53+
* fork-straight
54+
* invalid
55+
* invalid-left
56+
* invalid-right
57+
* invalid-slight-left
58+
* invalid-slight-right
59+
* invalid-straight
60+
* invalid-uturn
61+
* merge-left
62+
* merge-right
63+
* merge-slight-left
64+
* merge-slight-right
65+
* merge-straight
66+
* new-name-left
67+
* new-name-right
68+
* new-name-sharp-left
69+
* new-name-sharp-right
70+
* new-name-slight-left
71+
* new-name-slight-right
72+
* new-name-straight
73+
* notification-left
74+
* notification-right
75+
* notification-sharp-left
76+
* notification-sharp-right
77+
* notification-slight-left
78+
* notification-slight-right
79+
* notification-straight
80+
* off-ramp-left
81+
* off-ramp-right
82+
* off-ramp-sharp-left
83+
* off-ramp-sharp-right
84+
* off-ramp-slight-left
85+
* off-ramp-slight-right
86+
* off-ramp-straight
87+
* on-ramp-left
88+
* on-ramp-right
89+
* on-ramp-sharp-left
90+
* on-ramp-sharp-right
91+
* on-ramp-slight-left
92+
* on-ramp-slight-right
93+
* on-ramp-straight
94+
* rotary
95+
* rotary-left
96+
* rotary-right
97+
* rotary-sharp-left
98+
* rotary-sharp-right
99+
* rotary-slight-left
100+
* rotary-slight-right
101+
* rotary-straight
102+
* roundabout
103+
* roundabout-left
104+
* roundabout-right
105+
* roundabout-sharp-left
106+
* roundabout-sharp-right
107+
* roundabout-slight-left
108+
* roundabout-slight-right
109+
* roundabout-straight
110+
* turn-left
111+
* turn-right
112+
* turn-sharp-left
113+
* turn-sharp-right
114+
* turn-slight-left
115+
* turn-slight-right
116+
* turn-stright
117+
* updown
118+
* uturn

src/CMakeLists.txt

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,96 @@ list(APPEND IMAGE_FILES
322322

323323
displayapp/icons/bluetooth/os_bt_connected.c
324324
displayapp/icons/bluetooth/os_bt_disconnected.c
325+
326+
displayapp/icons/navigation/arrive-left.c
327+
displayapp/icons/navigation/arrive-right.c
328+
displayapp/icons/navigation/arrive-straight.c
329+
displayapp/icons/navigation/arrive.c
330+
displayapp/icons/navigation/close.c
331+
displayapp/icons/navigation/continue-left.c
332+
displayapp/icons/navigation/continue-right.c
333+
displayapp/icons/navigation/continue-slight-left.c
334+
displayapp/icons/navigation/continue-slight-right.c
335+
displayapp/icons/navigation/continue-straight.c
336+
displayapp/icons/navigation/continue-uturn.c
337+
displayapp/icons/navigation/continue.c
338+
displayapp/icons/navigation/depart-left.c
339+
displayapp/icons/navigation/depart-right.c
340+
displayapp/icons/navigation/depart-straight.c
341+
displayapp/icons/navigation/end-of-road-left.c
342+
displayapp/icons/navigation/end-of-road-right.c
343+
displayapp/icons/navigation/ferry.c
344+
displayapp/icons/navigation/flag.c
345+
displayapp/icons/navigation/fork-left.c
346+
displayapp/icons/navigation/fork-right.c
347+
displayapp/icons/navigation/fork-slight-left.c
348+
displayapp/icons/navigation/fork-slight-right.c
349+
displayapp/icons/navigation/fork-straight.c
350+
displayapp/icons/navigation/invalid.c
351+
displayapp/icons/navigation/invalid-left.c
352+
displayapp/icons/navigation/invalid-right.c
353+
displayapp/icons/navigation/invalid-slight-left.c
354+
displayapp/icons/navigation/invalid-slight-right.c
355+
displayapp/icons/navigation/invalid-straight.c
356+
displayapp/icons/navigation/invalid-uturn.c
357+
displayapp/icons/navigation/merge-left.c
358+
displayapp/icons/navigation/merge-right.c
359+
displayapp/icons/navigation/merge-slight-left.c
360+
displayapp/icons/navigation/merge-slight-right.c
361+
displayapp/icons/navigation/merge-straight.c
362+
displayapp/icons/navigation/new-name-left.c
363+
displayapp/icons/navigation/new-name-right.c
364+
displayapp/icons/navigation/new-name-sharp-left.c
365+
displayapp/icons/navigation/new-name-sharp-right.c
366+
displayapp/icons/navigation/new-name-slight-left.c
367+
displayapp/icons/navigation/new-name-slight-right.c
368+
displayapp/icons/navigation/new-name-straight.c
369+
displayapp/icons/navigation/notification-left.c
370+
displayapp/icons/navigation/notification-right.c
371+
displayapp/icons/navigation/notification-sharp-left.c
372+
displayapp/icons/navigation/notification-sharp-right.c
373+
displayapp/icons/navigation/notification-slight-left.c
374+
displayapp/icons/navigation/notification-slight-right.c
375+
displayapp/icons/navigation/notification-straight.c
376+
displayapp/icons/navigation/off-ramp-left.c
377+
displayapp/icons/navigation/off-ramp-right.c
378+
displayapp/icons/navigation/off-ramp-sharp-left.c
379+
displayapp/icons/navigation/off-ramp-sharp-right.c
380+
displayapp/icons/navigation/off-ramp-slight-left.c
381+
displayapp/icons/navigation/off-ramp-slight-right.c
382+
displayapp/icons/navigation/off-ramp-straight.c
383+
displayapp/icons/navigation/on-ramp-left.c
384+
displayapp/icons/navigation/on-ramp-right.c
385+
displayapp/icons/navigation/on-ramp-sharp-left.c
386+
displayapp/icons/navigation/on-ramp-sharp-right.c
387+
displayapp/icons/navigation/on-ramp-slight-left.c
388+
displayapp/icons/navigation/on-ramp-slight-right.c
389+
displayapp/icons/navigation/on-ramp-straight.c
390+
displayapp/icons/navigation/rotary.c
391+
displayapp/icons/navigation/rotary-left.c
392+
displayapp/icons/navigation/rotary-right.c
393+
displayapp/icons/navigation/rotary-sharp-left.c
394+
displayapp/icons/navigation/rotary-sharp-right.c
395+
displayapp/icons/navigation/rotary-slight-left.c
396+
displayapp/icons/navigation/rotary-slight-right.c
397+
displayapp/icons/navigation/rotary-straight.c
398+
displayapp/icons/navigation/roundabout.c
399+
displayapp/icons/navigation/roundabout-left.c
400+
displayapp/icons/navigation/roundabout-right.c
401+
displayapp/icons/navigation/roundabout-sharp-left.c
402+
displayapp/icons/navigation/roundabout-sharp-right.c
403+
displayapp/icons/navigation/roundabout-slight-left.c
404+
displayapp/icons/navigation/roundabout-slight-right.c
405+
displayapp/icons/navigation/roundabout-straight.c
406+
displayapp/icons/navigation/turn-left.c
407+
displayapp/icons/navigation/turn-right.c
408+
displayapp/icons/navigation/turn-sharp-left.c
409+
displayapp/icons/navigation/turn-sharp-right.c
410+
displayapp/icons/navigation/turn-slight-left.c
411+
displayapp/icons/navigation/turn-slight-right.c
412+
displayapp/icons/navigation/turn-stright.c
413+
displayapp/icons/navigation/updown.c
414+
displayapp/icons/navigation/uturn.c
325415
)
326416

327417
list(APPEND SOURCE_FILES
@@ -345,6 +435,7 @@ list(APPEND SOURCE_FILES
345435
displayapp/screens/Label.cpp
346436
displayapp/screens/FirmwareUpdate.cpp
347437
displayapp/screens/Music.cpp
438+
displayapp/screens/Navigation.cpp
348439
displayapp/screens/FirmwareValidation.cpp
349440
displayapp/screens/ApplicationList.cpp
350441
displayapp/screens/Notifications.cpp
@@ -372,6 +463,7 @@ list(APPEND SOURCE_FILES
372463
components/ble/CurrentTimeService.cpp
373464
components/ble/AlertNotificationService.cpp
374465
components/ble/MusicService.cpp
466+
components/ble/NavigationService.cpp
375467
components/ble/BatteryInformationService.cpp
376468
components/ble/ImmediateAlertService.cpp
377469
components/ble/ServiceDiscovery.cpp
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/* Copyright (C) 2021 Adam Pigg
2+
3+
This file is part of InfiniTime.
4+
5+
InfiniTime is free software: you can redistribute it and/or modify
6+
it under the terms of the GNU General Public License as published
7+
by the Free Software Foundation, either version 3 of the License, or
8+
(at your option) any later version.
9+
10+
InfiniTime is distributed in the hope that it will be useful,
11+
but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
GNU General Public License for more details.
14+
15+
You should have received a copy of the GNU General Public License
16+
along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*/
18+
19+
#include "NavigationService.h"
20+
21+
#include "systemtask/SystemTask.h"
22+
23+
int NAVCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) {
24+
auto navService = static_cast<Pinetime::Controllers::NavigationService *>(arg);
25+
return navService->OnCommand(conn_handle, attr_handle, ctxt);
26+
}
27+
28+
Pinetime::Controllers::NavigationService::NavigationService(Pinetime::System::SystemTask &system) : m_system(system) {
29+
navUuid.value[14] = navId[0];
30+
navUuid.value[15] = navId[1];
31+
32+
navFlagCharUuid.value[12] = navFlagCharId[0];
33+
navFlagCharUuid.value[13] = navFlagCharId[1];
34+
navFlagCharUuid.value[14] = navId[0];
35+
navFlagCharUuid.value[15] = navId[1];
36+
37+
navNarrativeCharUuid.value[12] = navNarrativeCharId[0];
38+
navNarrativeCharUuid.value[13] = navNarrativeCharId[1];
39+
navNarrativeCharUuid.value[14] = navId[0];
40+
navNarrativeCharUuid.value[15] = navId[1];
41+
42+
navManDistCharUuid.value[12] = navManDistCharId[0];
43+
navManDistCharUuid.value[13] = navManDistCharId[1];
44+
navManDistCharUuid.value[14] = navId[0];
45+
navManDistCharUuid.value[15] = navId[1];
46+
47+
navProgressCharUuid.value[12] = navProgressCharId[0];
48+
navProgressCharUuid.value[13] = navProgressCharId[1];
49+
navProgressCharUuid.value[14] = navId[0];
50+
navProgressCharUuid.value[15] = navId[1];
51+
52+
characteristicDefinition[0] = {.uuid = (ble_uuid_t *) (&navFlagCharUuid),
53+
.access_cb = NAVCallback,
54+
.arg = this,
55+
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
56+
};
57+
58+
characteristicDefinition[1] = {.uuid = (ble_uuid_t *) (&navNarrativeCharUuid),
59+
.access_cb = NAVCallback,
60+
.arg = this,
61+
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
62+
};
63+
characteristicDefinition[2] = {.uuid = (ble_uuid_t *) (&navManDistCharUuid),
64+
.access_cb = NAVCallback,
65+
.arg = this,
66+
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
67+
};
68+
characteristicDefinition[3] = {.uuid = (ble_uuid_t *) (&navProgressCharUuid),
69+
.access_cb = NAVCallback,
70+
.arg = this,
71+
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ
72+
};
73+
74+
characteristicDefinition[4] = {0};
75+
76+
serviceDefinition[0] = {
77+
.type = BLE_GATT_SVC_TYPE_PRIMARY,
78+
.uuid = (ble_uuid_t *) &navUuid,
79+
.characteristics = characteristicDefinition
80+
};
81+
serviceDefinition[1] = {0};
82+
83+
m_progress = 0;
84+
}
85+
86+
void Pinetime::Controllers::NavigationService::Init() {
87+
int res = 0;
88+
res = ble_gatts_count_cfg(serviceDefinition);
89+
ASSERT(res == 0);
90+
91+
res = ble_gatts_add_svcs(serviceDefinition);
92+
ASSERT(res == 0);
93+
}
94+
95+
int Pinetime::Controllers::NavigationService::OnCommand(uint16_t conn_handle, uint16_t attr_handle,
96+
struct ble_gatt_access_ctxt *ctxt) {
97+
98+
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
99+
size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
100+
uint8_t data[notifSize + 1];
101+
data[notifSize] = '\0';
102+
os_mbuf_copydata(ctxt->om, 0, notifSize, data);
103+
char *s = (char *) &data[0];
104+
NRF_LOG_INFO("DATA : %s", s);
105+
if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t *) &navFlagCharUuid) == 0) {
106+
m_flag = s;
107+
} else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t *) &navNarrativeCharUuid) == 0) {
108+
m_narrative = s;
109+
} else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t *) &navManDistCharUuid) == 0) {
110+
m_manDist = s;
111+
} else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t *) &navProgressCharUuid) == 0) {
112+
m_progress = data[0];
113+
}
114+
}
115+
return 0;
116+
}
117+
118+
std::string Pinetime::Controllers::NavigationService::getFlag()
119+
{
120+
return m_flag;
121+
}
122+
123+
std::string Pinetime::Controllers::NavigationService::getNarrative()
124+
{
125+
return m_narrative;
126+
}
127+
128+
std::string Pinetime::Controllers::NavigationService::getManDist()
129+
{
130+
return m_manDist;
131+
}
132+
133+
int Pinetime::Controllers::NavigationService::getProgress()
134+
{
135+
return m_progress;
136+
}
137+

0 commit comments

Comments
 (0)