1 /*
2 * Copyright (C) 2019-2020 Alibaba Group Holding Limited
3 */
4
5 #include <stdlib.h>
6 #include <string.h>
7 #include <stdio.h>
8 //#include <aos/osal_debug.h>
9 #include <aos/ble.h>
10 #include <yoc/ibeacons.h>
11
12 uint8_t BEACON_TYPE[2] = {0X02, 0X15} ; //define by apple for all Proximity Beacons,Cant not change,
13
14 union u {
15 beacon_info init_becons;
16 uint8_t data[25];
17 } uu;
18
ibeacon_Init(uint8_t _id[2],uint8_t _uuid[16],uint8_t _major[2],uint8_t _minor[2],uint8_t _measure_power)19 static uint8_t *ibeacon_Init(uint8_t _id[2], uint8_t _uuid[16], uint8_t _major[2], uint8_t _minor[2], uint8_t _measure_power)
20 {
21 int i;
22
23 uu.init_becons.id[0] = _id[0];
24 uu.init_becons.id[1] = _id[1];
25 uu.init_becons.type[0] = BEACON_TYPE[0];
26 uu.init_becons.type[1] = BEACON_TYPE[1];
27
28 for (i = 0; i < 16; i++) {
29 uu.init_becons.uuid[i] = _uuid[i];
30 }
31
32 uu.init_becons.major[0] = _major[0];
33 uu.init_becons.major[1] = _major[1];
34
35 uu.init_becons.minor[0] = _minor[0];
36 uu.init_becons.minor[1] = _minor[1];
37 uu.init_becons.measure_power = _measure_power;
38
39 return uu.data;//(uint8_t *)usdata;
40 }
41
42
ibeacon_start(uint8_t _id[2],uint8_t _uuid[16],uint8_t _major[2],uint8_t _minor[2],uint8_t _measure_power,char * _sd)43 int ibeacon_start(uint8_t _id[2], uint8_t _uuid[16], uint8_t _major[2], uint8_t _minor[2], uint8_t
44 _measure_power, char *_sd)
45 {
46 int ret;
47 ad_data_t sd[1] = {0};
48 ad_data_t ad[2] = {0};
49
50 uint8_t flag = AD_FLAG_GENERAL | AD_FLAG_NO_BREDR;
51 ad[0].type = AD_DATA_TYPE_FLAGS;
52 ad[0].data = (uint8_t *)&flag;
53 ad[0].len = 1;
54
55 ad[1].type = AD_DATA_TYPE_MANUFACTURER_DATA;
56 ad[1].data = (uint8_t *)ibeacon_Init(_id, _uuid, _major, _minor, _measure_power);
57 ad[1].len = sizeof(beacon_info);
58
59 //SD DATA
60 sd[0].type = AD_DATA_TYPE_NAME_COMPLETE;
61 sd[0].data = (uint8_t *)_sd;
62 sd[0].len = strlen(_sd);
63
64 adv_param_t param = {
65 ADV_NONCONN_IND,
66 ad,
67 sd,
68 BLE_ARRAY_NUM(ad),
69 BLE_ARRAY_NUM(sd),
70 ADV_FAST_INT_MIN_2,
71 ADV_FAST_INT_MIN_2,
72 };
73 ret = ble_stack_adv_start(¶m);
74
75 return ret;
76 }
77
ibeacon_stop(void)78 int ibeacon_stop(void)
79 {
80 int ret;
81 ret = ble_stack_adv_stop();
82 return ret;
83 }
84
85