Skip to content

Commit ce9ea06

Browse files
authored
Create BeaconGuard.cpp
1 parent 14d5b42 commit ce9ea06

1 file changed

Lines changed: 60 additions & 0 deletions

File tree

src/guardian/BeaconGuard.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include "guardian/BeaconGuard.h"
2+
3+
// NimBLE (wbudowane w InfiniTime)
4+
#include "host/ble_hs.h"
5+
#include "nimble/ble.h"
6+
7+
namespace {
8+
uint8_t adv_data[31];
9+
bool started = false;
10+
11+
void start_adv()
12+
{
13+
ble_gap_adv_params p{};
14+
p.conn_mode = BLE_GAP_CONN_MODE_NON; // non-connectable
15+
p.disc_mode = BLE_GAP_DISC_MODE_NON; // non-discoverable (czysty beacon)
16+
p.itvl_min = 160; // 100 ms
17+
p.itvl_max = 160; // 100 ms
18+
p.channel_map = 0x07;
19+
20+
// zaczynamy nadawanie na stałe (0 = bez limitu)
21+
ble_gap_adv_start(BLE_OWN_ADDR_PUBLIC, nullptr, BLE_HS_FOREVER, &p, nullptr, nullptr);
22+
}
23+
24+
void set_adv_payload(uint8_t hr, uint8_t batt)
25+
{
26+
// AD struktury: [len][type][payload...]
27+
// 1) Flags (0x01): LE General + BR/EDR not supported
28+
uint8_t i = 0;
29+
adv_data[i++] = 2; // len
30+
adv_data[i++] = 0x01; // Flags
31+
adv_data[i++] = 0x06; // LE General + BR/EDR not supported
32+
33+
// 2) Manufacturer Specific Data (0xFF)
34+
// Company ID (tu 0xFFFF jako „test”), a potem nasz ładunek: 'G','R','D', hr, batt
35+
uint8_t payload[] = { 'G','R','D', hr, batt };
36+
adv_data[i++] = uint8_t(1 + 2 + sizeof(payload)); // len = type + companyID(2B) + payload
37+
adv_data[i++] = 0xFF; // type
38+
adv_data[i++] = 0xFF; // company ID LSB (demo)
39+
adv_data[i++] = 0xFF; // company ID MSB
40+
for (auto b : payload) adv_data[i++] = b;
41+
42+
ble_gap_adv_set_data(adv_data, i);
43+
}
44+
} // namespace
45+
46+
namespace Guardian {
47+
void BeaconGuard::Start()
48+
{
49+
if (started) return;
50+
set_adv_payload(0, 0); // pierwsze „puste” dane
51+
start_adv();
52+
started = true;
53+
}
54+
55+
void BeaconGuard::Update(uint8_t hr, uint8_t batt)
56+
{
57+
if (!started) Start();
58+
set_adv_payload(hr, batt);
59+
}
60+
} // namespace Guardian

0 commit comments

Comments
 (0)