WORKING. Will use for trip
This commit is contained in:
parent
5911e3093a
commit
1acd5e568c
|
@ -80,6 +80,8 @@ target_sources(infinisim PUBLIC
|
||||||
sim/components/ble/MusicService.cpp
|
sim/components/ble/MusicService.cpp
|
||||||
sim/components/ble/NavigationService.h
|
sim/components/ble/NavigationService.h
|
||||||
sim/components/ble/NavigationService.cpp
|
sim/components/ble/NavigationService.cpp
|
||||||
|
sim/components/ble/AgendaService.h
|
||||||
|
sim/components/ble/AgendaService.cpp
|
||||||
sim/components/ble/NimbleController.h
|
sim/components/ble/NimbleController.h
|
||||||
sim/components/ble/NimbleController.cpp
|
sim/components/ble/NimbleController.cpp
|
||||||
sim/components/ble/weather/WeatherService.h
|
sim/components/ble/weather/WeatherService.h
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 373289c072b701684520fce72801136c58b61c55
|
Subproject commit e54d78a04b42264770cf25dc2bb2952c7618b764
|
|
@ -0,0 +1,138 @@
|
||||||
|
/* Copyright (C) 2021 Adam Pigg
|
||||||
|
|
||||||
|
This file is part of InfiniTime.
|
||||||
|
|
||||||
|
InfiniTime is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published
|
||||||
|
by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
InfiniTime is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "components/ble/AgendaService.h"
|
||||||
|
|
||||||
|
#include "systemtask/SystemTask.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
/*
|
||||||
|
// 3fdaYYXX-e246-472e-b7e0-d2b0f3d9c17a
|
||||||
|
constexpr ble_uuid128_t CharUuid(uint8_t x, uint8_t y) {
|
||||||
|
return ble_uuid128_t {.u = {.type = BLE_UUID_TYPE_128},
|
||||||
|
.value = {0x7a, 0xc1, 0xd9, 0xf3, 0xb0, 0xd2, 0xe0, 0xb7, 0x2e, 0x47, 0x46, 0xe2, x, y, 0xda, 0x3f}};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 00010000-78fc-48fe-8e23-433b3a1942d0
|
||||||
|
constexpr ble_uuid128_t BaseUuid() {
|
||||||
|
return CharUuid(0x00, 0x00);
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr ble_uuid128_t agendaUuid {BaseUuid()};
|
||||||
|
|
||||||
|
constexpr ble_uuid128_t agendaItemCharUuid {CharUuid(0x01, 0x00)};
|
||||||
|
|
||||||
|
int AgendaCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) {
|
||||||
|
auto agendaService = static_cast<Pinetime::Controllers::AgendaService*>(arg);
|
||||||
|
return agendaService->OnCommand(conn_handle, attr_handle, ctxt);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
|
||||||
|
Pinetime::Controllers::AgendaService::AgendaService(Pinetime::System::SystemTask& system) : m_system(system) {
|
||||||
|
/*
|
||||||
|
characteristicDefinition[0] = {.uuid = &agendaItemCharUuid.u,
|
||||||
|
.access_cb = AgendaCallback,
|
||||||
|
.arg = this,
|
||||||
|
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ};
|
||||||
|
|
||||||
|
characteristicDefinition[1] = {0};
|
||||||
|
|
||||||
|
serviceDefinition[0] = {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &agendaUuid.u, .characteristics = characteristicDefinition};
|
||||||
|
serviceDefinition[1] = {0};
|
||||||
|
*/
|
||||||
|
m_agenda_times[0] = 1655327841;
|
||||||
|
m_agenda_pieces[0] = "Write AgendaService";
|
||||||
|
|
||||||
|
m_agenda_times[1] = 1655369999;
|
||||||
|
m_agenda_pieces[1] = "WTF C++ dates";
|
||||||
|
|
||||||
|
m_agenda_times[2] = 1655370699;
|
||||||
|
m_agenda_pieces[2] = "??? work ???";
|
||||||
|
|
||||||
|
m_agenda_times[3] = 1655380699;
|
||||||
|
m_agenda_pieces[3] = "??? stuff ???";
|
||||||
|
|
||||||
|
m_agenda_times[4] = 1655381699;
|
||||||
|
m_agenda_pieces[4] = "WTF C++ dates";
|
||||||
|
|
||||||
|
m_agenda_times[5] = 1655382699;
|
||||||
|
m_agenda_pieces[5] = "??? work ???";
|
||||||
|
|
||||||
|
m_agenda_times[6] = 1655493699;
|
||||||
|
m_agenda_pieces[6] = "??? stuff ???";
|
||||||
|
|
||||||
|
m_agenda_times[7] = 1655497999;
|
||||||
|
m_agenda_pieces[7] = "??? stuff ???";
|
||||||
|
}
|
||||||
|
|
||||||
|
void Pinetime::Controllers::AgendaService::Init() {
|
||||||
|
/*
|
||||||
|
int res = 0;
|
||||||
|
res = ble_gatts_count_cfg(serviceDefinition);
|
||||||
|
ASSERT(res == 0);
|
||||||
|
|
||||||
|
res = ble_gatts_add_svcs(serviceDefinition);
|
||||||
|
ASSERT(res == 0);
|
||||||
|
|
||||||
|
m_agenda_times[0] = 1655327841;
|
||||||
|
m_agenda_pieces[0] = "Write AgendaService";
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
int Pinetime::Controllers::AgendaService::OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) {
|
||||||
|
|
||||||
|
if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) {
|
||||||
|
size_t notifSize = OS_MBUF_PKTLEN(ctxt->om);
|
||||||
|
uint8_t data[notifSize + 1];
|
||||||
|
data[notifSize] = '\0';
|
||||||
|
os_mbuf_copydata(ctxt->om, 0, notifSize, data);
|
||||||
|
char* s = (char*) &data[0];
|
||||||
|
if (ble_uuid_cmp(ctxt->chr->uuid, &agendaItemCharUuid.u) == 0) {
|
||||||
|
if (notifSize >= 5) {
|
||||||
|
uint8_t itemIndex = (uint8_t) data[0];
|
||||||
|
uint32_t itemTime = ((uint32_t) data[1]) << 24 | ((uint32_t) data[2]) << 16 | ((uint32_t) data[3]) << 8 | ((uint32_t) data[4]);
|
||||||
|
char* sAgendaItem = (char*) &data[5];
|
||||||
|
if (itemIndex <= 15) { // don't allow a buffer overflow
|
||||||
|
m_agenda_times = itemTime;
|
||||||
|
// implicit std::string copy/conversion here:
|
||||||
|
m_agenda_pieces = sAgendaItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
uint32_t Pinetime::Controllers::AgendaService::getAgendaTime(uint8_t index) {
|
||||||
|
if (index <= AGENDA_CAPACITY) {
|
||||||
|
return m_agenda_times[index];
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Pinetime::Controllers::AgendaService::getAgendaPiece(uint8_t index) {
|
||||||
|
if (index <= AGENDA_CAPACITY) {
|
||||||
|
return m_agenda_pieces[index];
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* Copyright (C) 2021 Adam Pigg
|
||||||
|
|
||||||
|
This file is part of InfiniTime.
|
||||||
|
|
||||||
|
InfiniTime is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published
|
||||||
|
by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
InfiniTime is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
// #define min // workaround: nimble's min/max macros conflict with libstdc++
|
||||||
|
// #define max
|
||||||
|
// #include <host/ble_gap.h>
|
||||||
|
// #include <host/ble_uuid.h>
|
||||||
|
// #undef max
|
||||||
|
// #undef min
|
||||||
|
|
||||||
|
namespace Pinetime {
|
||||||
|
namespace System {
|
||||||
|
class SystemTask;
|
||||||
|
}
|
||||||
|
namespace Controllers {
|
||||||
|
|
||||||
|
class AgendaService {
|
||||||
|
public:
|
||||||
|
static const uint8_t AGENDA_CAPACITY = 30;
|
||||||
|
|
||||||
|
explicit AgendaService(Pinetime::System::SystemTask& system);
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
// int OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt);
|
||||||
|
|
||||||
|
uint32_t getAgendaTime(uint8_t index);
|
||||||
|
|
||||||
|
std::string getAgendaPiece(uint8_t index);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// struct ble_gatt_chr_def characteristicDefinition[2];
|
||||||
|
// struct ble_gatt_svc_def serviceDefinition[2];
|
||||||
|
|
||||||
|
uint32_t m_agenda_times[AGENDA_CAPACITY];
|
||||||
|
std::string m_agenda_pieces[AGENDA_CAPACITY];
|
||||||
|
|
||||||
|
Pinetime::System::SystemTask& m_system;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -45,6 +45,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
|
||||||
// currentTimeService {dateTimeController},
|
// currentTimeService {dateTimeController},
|
||||||
musicService {systemTask},
|
musicService {systemTask},
|
||||||
weatherService {systemTask, dateTimeController},
|
weatherService {systemTask, dateTimeController},
|
||||||
|
agendaService {systemTask},
|
||||||
navService {systemTask} {
|
navService {systemTask} {
|
||||||
// batteryInformationService {batteryController},
|
// batteryInformationService {batteryController},
|
||||||
// immediateAlertService {systemTask, notificationManager},
|
// immediateAlertService {systemTask, notificationManager},
|
||||||
|
@ -92,6 +93,7 @@ void NimbleController::Init() {
|
||||||
musicService.Init();
|
musicService.Init();
|
||||||
weatherService.Init();
|
weatherService.Init();
|
||||||
navService.Init();
|
navService.Init();
|
||||||
|
agendaService.Init();
|
||||||
// anService.Init();
|
// anService.Init();
|
||||||
// dfuService.Init();
|
// dfuService.Init();
|
||||||
// batteryInformationService.Init();
|
// batteryInformationService.Init();
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
//#include "components/ble/ImmediateAlertService.h"
|
//#include "components/ble/ImmediateAlertService.h"
|
||||||
#include "components/ble/MusicService.h"
|
#include "components/ble/MusicService.h"
|
||||||
#include "components/ble/NavigationService.h"
|
#include "components/ble/NavigationService.h"
|
||||||
|
#include "components/ble/AgendaService.h"
|
||||||
//#include "components/ble/ServiceDiscovery.h"
|
//#include "components/ble/ServiceDiscovery.h"
|
||||||
//#include "components/ble/MotionService.h"
|
//#include "components/ble/MotionService.h"
|
||||||
#include "components/ble/weather/WeatherService.h"
|
#include "components/ble/weather/WeatherService.h"
|
||||||
|
@ -75,6 +76,9 @@ namespace Pinetime {
|
||||||
Pinetime::Controllers::NavigationService& navigation() {
|
Pinetime::Controllers::NavigationService& navigation() {
|
||||||
return navService;
|
return navService;
|
||||||
};
|
};
|
||||||
|
Pinetime::Controllers::AgendaService& agenda() {
|
||||||
|
return agendaService;
|
||||||
|
};
|
||||||
Pinetime::Controllers::AlertNotificationService& alertService() {
|
Pinetime::Controllers::AlertNotificationService& alertService() {
|
||||||
return anService;
|
return anService;
|
||||||
};
|
};
|
||||||
|
@ -113,6 +117,7 @@ namespace Pinetime {
|
||||||
MusicService musicService;
|
MusicService musicService;
|
||||||
WeatherService weatherService;
|
WeatherService weatherService;
|
||||||
NavigationService navService;
|
NavigationService navService;
|
||||||
|
AgendaService agendaService;
|
||||||
// BatteryInformationService batteryInformationService;
|
// BatteryInformationService batteryInformationService;
|
||||||
// ImmediateAlertService immediateAlertService;
|
// ImmediateAlertService immediateAlertService;
|
||||||
// HeartRateService heartRateService;
|
// HeartRateService heartRateService;
|
||||||
|
|
Loading…
Reference in New Issue