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(&param);
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