xref: /nrf52832-nimble/packages/NimBLE-latest/apps/ibeacon/src/ibeacon.c (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero 
2*042d53a7SEvalZero #include "os/os.h"
3*042d53a7SEvalZero #include "nimble/hci_common.h"
4*042d53a7SEvalZero #include "host/ble_hs_hci.h"
5*042d53a7SEvalZero #include "ble_hs_priv.h"
6*042d53a7SEvalZero 
7*042d53a7SEvalZero #include <rtthread.h>
8*042d53a7SEvalZero 
ble_app_set_addr(void)9*042d53a7SEvalZero static void ble_app_set_addr(void)
10*042d53a7SEvalZero {
11*042d53a7SEvalZero     ble_addr_t addr;
12*042d53a7SEvalZero     int rc;
13*042d53a7SEvalZero 
14*042d53a7SEvalZero     rc = ble_hs_id_gen_rnd(1, &addr);
15*042d53a7SEvalZero     RT_ASSERT(rc == 0);
16*042d53a7SEvalZero 
17*042d53a7SEvalZero     rc = ble_hs_id_set_rnd(addr.val);
18*042d53a7SEvalZero     RT_ASSERT(rc == 0);
19*042d53a7SEvalZero }
20*042d53a7SEvalZero 
ble_app_advertise(void)21*042d53a7SEvalZero static void ble_app_advertise(void)
22*042d53a7SEvalZero {
23*042d53a7SEvalZero     struct ble_gap_adv_params adv_params;
24*042d53a7SEvalZero     uint8_t uuid128[16];
25*042d53a7SEvalZero     int rc;
26*042d53a7SEvalZero     int8_t tx_pwr;
27*042d53a7SEvalZero 
28*042d53a7SEvalZero     /* Arbitrarily set the UUID to a string of 0x11 bytes. */
29*042d53a7SEvalZero     memset(uuid128, 0x11, sizeof uuid128);
30*042d53a7SEvalZero 
31*042d53a7SEvalZero     rc = ble_hs_hci_util_read_adv_tx_pwr(&tx_pwr);
32*042d53a7SEvalZero     RT_ASSERT(rc == 0);
33*042d53a7SEvalZero 
34*042d53a7SEvalZero     /* Major version=2; minor version=10. */
35*042d53a7SEvalZero     rc = ble_ibeacon_set_adv_data(uuid128, 2, 10, tx_pwr);
36*042d53a7SEvalZero     RT_ASSERT(rc == 0);
37*042d53a7SEvalZero 
38*042d53a7SEvalZero     /* Begin advertising. */
39*042d53a7SEvalZero     adv_params = (struct ble_gap_adv_params){ 0 };
40*042d53a7SEvalZero     rc = ble_gap_adv_start(BLE_OWN_ADDR_RANDOM, NULL, BLE_HS_FOREVER,
41*042d53a7SEvalZero                            &adv_params, NULL, NULL);
42*042d53a7SEvalZero     RT_ASSERT(rc == 0);
43*042d53a7SEvalZero }
44*042d53a7SEvalZero 
ble_app_on_sync(void)45*042d53a7SEvalZero static void ble_app_on_sync(void)
46*042d53a7SEvalZero {
47*042d53a7SEvalZero     /* Generate a non-resolvable private address. */
48*042d53a7SEvalZero     ble_app_set_addr();
49*042d53a7SEvalZero 
50*042d53a7SEvalZero     /* Advertise indefinitely. */
51*042d53a7SEvalZero     ble_app_advertise();
52*042d53a7SEvalZero }
53*042d53a7SEvalZero 
ble_ibeacon(void)54*042d53a7SEvalZero static int ble_ibeacon(void)
55*042d53a7SEvalZero {
56*042d53a7SEvalZero     static int init_flag = 0;
57*042d53a7SEvalZero 
58*042d53a7SEvalZero     if (init_flag)
59*042d53a7SEvalZero         return 0;
60*042d53a7SEvalZero     init_flag = 1;
61*042d53a7SEvalZero 
62*042d53a7SEvalZero     ble_hs_cfg.sync_cb = ble_app_on_sync;
63*042d53a7SEvalZero 
64*042d53a7SEvalZero     /* startup bluetooth host stack*/
65*042d53a7SEvalZero     ble_hs_thread_startup();
66*042d53a7SEvalZero 
67*042d53a7SEvalZero     return 0;
68*042d53a7SEvalZero }
69*042d53a7SEvalZero MSH_CMD_EXPORT_ALIAS(ble_ibeacon, ble_ibeacon, "bluetoooth ibeacon sample");
70