Skip to content

Commit ef1534a

Browse files
committed
Start BLE
1 parent 8956a18 commit ef1534a

File tree

9 files changed

+1329
-994
lines changed

9 files changed

+1329
-994
lines changed

apps/my_sensor_app/src/ble.c

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#include "sysinit/sysinit.h"
2+
#include "os/os.h"
3+
#include "console/console.h"
4+
#include "host/ble_hs.h"
5+
6+
static void
7+
ble_app_set_addr(void)
8+
{
9+
ble_addr_t addr;
10+
int rc;
11+
12+
rc = ble_hs_id_gen_rnd(1, &addr);
13+
assert(rc == 0);
14+
15+
rc = ble_hs_id_set_rnd(addr.val);
16+
assert(rc == 0);
17+
}
18+
19+
static void
20+
ble_app_advertise(void)
21+
{
22+
struct ble_gap_adv_params adv_params;
23+
uint8_t uuid128[16];
24+
int rc;
25+
26+
/* Arbitrarily set the UUID to a string of 0x11 bytes. */
27+
memset(uuid128, 0x11, sizeof uuid128);
28+
29+
/* Major version=2; minor version=10. */
30+
// Measured Power ranging data (Calibrated tx power at 1 meters). Must be > -126 and < 20
31+
rc = ble_ibeacon_set_adv_data(uuid128, 2, 10, 0); // TODO: Confirm RSSI
32+
assert(rc == 0);
33+
34+
/* Begin advertising. */
35+
adv_params = (struct ble_gap_adv_params){ 0 };
36+
rc = ble_gap_adv_start(BLE_OWN_ADDR_RANDOM, NULL, BLE_HS_FOREVER,
37+
&adv_params, NULL, NULL);
38+
assert(rc == 0);
39+
}
40+
41+
static void
42+
ble_app_on_sync(void)
43+
{
44+
/* Generate a non-resolvable private address. */
45+
ble_app_set_addr();
46+
47+
/* Advertise indefinitely. */
48+
ble_app_advertise();
49+
}
50+
51+
int
52+
start_ble(void)
53+
{
54+
ble_hs_cfg.sync_cb = ble_app_on_sync;
55+
return 0;
56+
}

logs/libapp-demangle.S

Lines changed: 192 additions & 132 deletions
Large diffs are not rendered by default.

logs/libapp-expanded.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ mod app_network {
8080
//gps_sensor::start_gps_listener()
8181
//.expect("GPS fail");
8282

83+
// Start Bluetooth LE.
84+
8385
// Main event loop
8486
// Loop forever...
8587
// Processing events...
@@ -395,6 +397,16 @@ use mynewt::{kernel::os, sys::console, libs::sensor_network};
395397
extern "C" fn main() -> ! {
396398
mynewt::sysinit();
397399
app_sensor::start_sensor_listener().expect("TMP fail");
400+
extern "C" {
401+
fn start_ble() -> i32;
402+
}
403+
let rc = unsafe { start_ble() };
404+
if !(rc == 0) {
405+
{
406+
::core::panicking::panic(&("BLE fail", "rust\\app\\src\\lib.rs",
407+
74u32, 5u32))
408+
}
409+
};
398410
loop {
399411
os::eventq_run(os::eventq_dflt_get().expect("GET fail")).expect("RUN fail");
400412
}

logs/libapp.S

Lines changed: 193 additions & 133 deletions
Large diffs are not rendered by default.

logs/libapp.elf

Lines changed: 485 additions & 463 deletions
Large diffs are not rendered by default.

logs/libapp.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

logs/rustlib-demangle.S

Lines changed: 192 additions & 132 deletions
Large diffs are not rendered by default.

logs/rustlib.S

Lines changed: 193 additions & 133 deletions
Large diffs are not rendered by default.

rust/app/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@ extern "C" fn main() -> ! { // Declare extern "C" because it will be called by
6868
//gps_sensor::start_gps_listener()
6969
//.expect("GPS fail");
7070

71+
// Start Bluetooth LE.
72+
extern { fn start_ble() -> i32; }
73+
let rc = unsafe { start_ble() };
74+
assert!(rc == 0, "BLE fail");
75+
7176
// Main event loop
7277
loop { // Loop forever...
7378
os::eventq_run( // Processing events...

0 commit comments

Comments
 (0)