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/NavigationService.h
|
||||
sim/components/ble/NavigationService.cpp
|
||||
sim/components/ble/AgendaService.h
|
||||
sim/components/ble/AgendaService.cpp
|
||||
sim/components/ble/NimbleController.h
|
||||
sim/components/ble/NimbleController.cpp
|
||||
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},
|
||||
musicService {systemTask},
|
||||
weatherService {systemTask, dateTimeController},
|
||||
agendaService {systemTask},
|
||||
navService {systemTask} {
|
||||
// batteryInformationService {batteryController},
|
||||
// immediateAlertService {systemTask, notificationManager},
|
||||
|
@ -92,6 +93,7 @@ void NimbleController::Init() {
|
|||
musicService.Init();
|
||||
weatherService.Init();
|
||||
navService.Init();
|
||||
agendaService.Init();
|
||||
// anService.Init();
|
||||
// dfuService.Init();
|
||||
// batteryInformationService.Init();
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
//#include "components/ble/ImmediateAlertService.h"
|
||||
#include "components/ble/MusicService.h"
|
||||
#include "components/ble/NavigationService.h"
|
||||
#include "components/ble/AgendaService.h"
|
||||
//#include "components/ble/ServiceDiscovery.h"
|
||||
//#include "components/ble/MotionService.h"
|
||||
#include "components/ble/weather/WeatherService.h"
|
||||
|
@ -75,6 +76,9 @@ namespace Pinetime {
|
|||
Pinetime::Controllers::NavigationService& navigation() {
|
||||
return navService;
|
||||
};
|
||||
Pinetime::Controllers::AgendaService& agenda() {
|
||||
return agendaService;
|
||||
};
|
||||
Pinetime::Controllers::AlertNotificationService& alertService() {
|
||||
return anService;
|
||||
};
|
||||
|
@ -113,6 +117,7 @@ namespace Pinetime {
|
|||
MusicService musicService;
|
||||
WeatherService weatherService;
|
||||
NavigationService navService;
|
||||
AgendaService agendaService;
|
||||
// BatteryInformationService batteryInformationService;
|
||||
// ImmediateAlertService immediateAlertService;
|
||||
// HeartRateService heartRateService;
|
||||
|
|
Loading…
Reference in New Issue