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