XFusion API v1.3.0
载入中...
搜索中...
未找到
xf_main.c
浏览该文件的文档.
1
6/* ==================== [Includes] ========================================== */
7
8#include "xf_hal.h"
11#include "xf_sle_ssap_server.h"
12#include "string.h"
13
14/* ==================== [Defines] =========================================== */
15
16#define TAG "sample_ssaps"
17
18#define SAMPLE_ADV_ID 1
19#define SAMPLE_ADV_HANDLE 1
20
21/* 连接调度间隔12.5ms,单位125us */
22#define SAMPLE_SLE_CONN_INTV_MIN 0x64
23/* 连接调度间隔12.5ms,单位125us */
24#define SAMPLE_SLE_CONN_INTV_MAX 0x64
25/* 连接调度间隔25ms,单位125us */
26#define SAMPLE_SLE_ADV_INTERVAL_MIN 0xC8
27/* 连接调度间隔25ms,单位125us */
28#define SAMPLE_SLE_ADV_INTERVAL_MAX 0xC8
29/* 超时时间5000ms,单位10ms */
30#define SAMPLE_SLE_CONN_SUPERVISION_TIMEOUT 0x1F4
31/* 超时时间4990ms,单位10ms */
32#define SAMPLE_SLE_CONN_MAX_LATENCY 0
33/* 广播发送功率 */
34#define SAMPLE_SLE_ADV_TX_POWER 10
35
36/* ==================== [Typedefs] ========================================== */
37
38/* ==================== [Static Prototypes] ================================= */
39
43static void sample_sle_set_adv_data(void);
44static void sample_sle_set_adv_param(void);
45
46/* ==================== [Static Variables] ================================== */
47
48static uint8_t s_local_name[] = "XF_SSAPS";
50static uint8_t s_aap_id = 0;
51static uint8_t s_prop_value[8] = {0xCC};
52static uint8_t s_ntf_value[] = {0x01, 0x0};
53static uint8_t s_rsp_value[] = "I M SSAPS RSP";
54
55static uint8_t s_sle_mac_addr[XF_SLE_ADDR_LEN] = {0x33, 0x22, 0x22, 0x66, 0x11, 0x22};
56static bool is_connected = false;
57
59 .service_uuid = XF_SLE_DECLARE_UUID16(0xABCD),
61 .prop_set = (xf_sle_ssaps_property_t [])
62 {
63 {
64 .prop_uuid = XF_SLE_DECLARE_UUID16(0x1122),
66 .value = s_prop_value,
67 .value_len = sizeof(s_prop_value),
68 .desc_set = (xf_sle_ssaps_desc_t []) {
69 {
71 .value = s_ntf_value,
72 .value_len = sizeof(s_ntf_value),
73 },
74 {0}
75 },
76 },
77 {0}
78 }
79};
80
81/* ==================== [Macros] ============================================ */
82
83/* ==================== [Global Functions] ================================== */
84
85void xf_main(void)
86{
87 XF_LOGI(TAG, "XF SLE SSAP Server");
88
89 xf_err_t ret = XF_OK;
90 ret = xf_sle_enable();
92 "xf_sle_enable error!:%#X", ret);
93
94 // 注册 ssaps 事件回调
96
97 // 设置本地设备名
100 "xf_sle_set_local_name error:%#X", ret);
101
102 // 注册 ssaps 服务端 app
105 "xf_sle_set_local_name error:%#X", ret);
106
107 // 添加 服务(结构)到 服务端 app
110 "xf_sle_ssaps_add_service_to_app error:%#X", ret);
111 XF_LOGI(TAG, "property handle:[0]:%d,uuid:%#X",
112 service_struct.prop_set[0].prop_handle,
113 service_struct.prop_set[0].prop_uuid->uuid16);
114
115 // 启动服务
118 "xf_sle_ssaps_start_service error:%#X", ret);
119
120 /* 设置广播数据及参数 */
123
124 // 启动广播
127 "xf_sle_start_announce error:%#X", ret);
128 XF_LOGI(TAG, "ADV STAR CMPL");
129}
130
131/* ==================== [Static Functions] ================================== */
132
136{
137 switch (event) {
139 is_connected = false;
140 XF_LOGI(TAG, "EV:disconnect, it will restart ADV");
141 // 重新启动广播
143 XF_CHECK(ret != XF_OK, ret, TAG,
144 "xf_sle_start_announce error:%#X", ret);
145 } break;
147 is_connected = true;
148 } break;
150 XF_LOGI(TAG, "EV:REQ WRITE:need_rsp:%d,hdl:%d,conn_id:%d,trans_id:%d",
151 param->req_write.need_rsp, param->req_write.handle,
152 param->req_write.conn_id, param->req_write.trans_id);
154
155 } break;
157 XF_LOGI(TAG, "EV:REQ READ:need_rsp:%d,hdl:%d,conn_id:%d,trans_id:%d",
158 param->req_read.need_rsp, param->req_read.handle,
159 param->req_read.conn_id, param->req_read.trans_id);
160
163 .value_len = sizeof(s_rsp_value),
164 };
166 param->req_read.conn_id, param->req_read.trans_id,
167 XF_OK, &rsp
168 );
169 XF_CHECK(ret != XF_OK, ret, TAG,
170 "xf_sle_start_announce error:%#X", ret);
171 } break;
172 default:
173 break;
174 }
175 return XF_OK;
176}
177
178static void sample_sle_set_adv_data(void)
179{
180 xf_sle_announce_data_t announce_data = {
182 {
183 {
185 .data.local_name = s_local_name,
186 .struct_data_len = sizeof(s_local_name),
187 }, {
189 .data.discovery_level = XF_SLE_ANNOUNCE_LEVEL_NORMAL,
190 .struct_data_len = 1,
191 },
192 {.struct_data_len = 0} // 结束标记,也可以直接填 0,struct_data_len为关键标记变量
193 },
194 .seek_rsp_data_len = 0,
195 .seek_rsp_data = NULL,
196 };
197
198 xf_err_t ret = xf_sle_set_announce_data(SAMPLE_ADV_ID, &announce_data);
200 "ADV set data error:%#X", ret);
201}
202
204{
205 xf_sle_announce_param_t announce_param = {0};
206 {
208 announce_param.announce_handle = SAMPLE_ADV_HANDLE;
212
215
220 };
222
223 xf_err_t ret = xf_sle_set_announce_param(SAMPLE_ADV_ID, &announce_param);
225 "ADV set param error:%#X", ret);
226}
void xf_main(void)
Definition xf_main.c:28
#define XF_RETURN_VOID
Definition xf_check.h:47
#define XF_CHECK(condition, retval, tag, format,...)
xfusion 检查宏(条件 成立 时则输出日志后返回)。
Definition xf_check.h:112
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
@ XF_OK
Definition xf_err.h:43
#define XF_LOG_BUFFER_HEXDUMP_ESCAPE(buffer, buffer_len)
以十六进制输出 buffer 的内容,同时输出可见的 ascii 码,以及转义字符。
#define xf_memcpy(dest, src, n)
Definition xf_string.h:44
xf_err_t xf_sle_ssaps_event_cb_register(xf_sle_ssaps_event_cb_t evt_cb, xf_sle_ssaps_event_t events)
SLE SSAPS 事件回调注册
xf_err_t xf_sle_ssaps_send_response(uint8_t app_id, uint16_t conn_id, uint32_t trans_id, xf_sle_ssap_err_t err_code, xf_sle_ssaps_response_value_t *rsp)
SLE SSAPS 发送 (请求的) 响应
xf_err_t xf_sle_ssaps_add_service_to_app(uint8_t app_id, xf_sle_ssaps_service_t *service)
SLE SSAPS 服务端 (应用) 添加服务
xf_sle_ssaps_event_t
SLE SSAPS 事件
xf_err_t xf_sle_ssaps_app_register(xf_sle_uuid_info_t *app_uuid, uint8_t *app_id)
SLE SSAPS 服务端注册
xf_err_t xf_sle_ssaps_start_service(uint8_t app_id, uint16_t service_handle)
SLE SSAPS 服务开启
@ XF_SLE_SSAP_SERVICE_TYPE_PRIMARY
@ XF_SLE_SSAP_PERMISSION_WRITE
@ XF_SLE_SSAP_PERMISSION_READ
@ XF_SLE_EVT_ALL
@ XF_SLE_CONN_EVT_DISCONNECT
@ XF_SLE_CONN_EVT_CONNECT
@ XF_SLE_SSAPS_EVT_REQ_WRITE
@ XF_SLE_SSAPS_EVT_REQ_READ
xf_err_t xf_sle_set_announce_data(uint8_t announce_id, const xf_sle_announce_data_t *data)
SLE 设置广播 (公开) 数据
xf_err_t xf_sle_set_local_name(const uint8_t *name, const uint8_t len)
SLE 设置本端设备名称
struct __packed _xf_sle_uuid_info_t xf_sle_uuid_info_t
SLE UUID 信息 (多种长度类型通用)
#define XF_SLE_ADDR_LEN
SLE 地址长度
xf_err_t xf_sle_enable(void)
SLE 功能开启
xf_err_t xf_sle_set_announce_param(uint8_t announce_id, const xf_sle_announce_param_t *param)
SLE 设置广播 (公开) 参数
xf_err_t xf_sle_start_announce(uint8_t announce_id)
SLE 广播开启
#define XF_SLE_DECLARE_UUID16(uuid16)
SLE 声明一个 16-bit UUID
@ XF_SLE_ADV_STRUCT_TYPE_DISCOVERY_LEVEL
@ XF_SLE_ADV_STRUCT_TYPE_COMPLETE_LOCAL_NAME
@ XF_SLE_ANNOUNCE_TYPE_CONNECTABLE_SCANABLE
@ XF_SLE_ANNOUNCE_ROLE_T_CAN_NEGO
xf_osal_event_t event
Definition xf_main.c:35
#define TAG
Definition xf_main.c:24
SLE 广播 (公开) 数据 ( 包含响应数据 )
uint8_t addr[XF_SLE_ADDR_LEN]
SLE 广播数据单元 ( AD structure )
xf_sle_adv_struct_type_t type
xf_sle_announce_gt_role_t announce_gt_role
xf_sle_adv_channel_map_t announce_channel_map
SLE SSAPS 特征描述符信息
SLE SSAPS 特征值信息。
SLE SSAPS 响应 (回应) 值信息
SLE SSAPS 服务端事件回调参数
struct _xf_sle_ssaps_evt_cb_param_t::@28 req_read
SLE SSAPS 接收到读请求事件的参数
struct _xf_sle_ssaps_evt_cb_param_t::@29 req_write
SLE SSAPS 接收到写请求事件的参数
static xf_sle_ssapc_find_struct_param_t service_struct
Definition xf_main.c:46
static void sample_sle_set_adv_data(void)
Definition xf_main.c:178
static uint8_t s_prop_value[8]
Definition xf_main.c:51
static uint8_t s_ntf_value[]
Definition xf_main.c:52
static uint8_t s_aap_id
Definition xf_main.c:50
static void sample_sle_set_adv_param(void)
Definition xf_main.c:203
#define SAMPLE_SLE_ADV_INTERVAL_MAX
Definition xf_main.c:28
static bool is_connected
Definition xf_main.c:56
static uint8_t s_rsp_value[]
Definition xf_main.c:53
static uint8_t s_local_name[]
Definition xf_main.c:48
#define SAMPLE_SLE_CONN_INTV_MIN
Definition xf_main.c:22
#define SAMPLE_ADV_ID
Definition xf_main.c:18
#define SAMPLE_ADV_HANDLE
Definition xf_main.c:19
#define SAMPLE_SLE_CONN_INTV_MAX
Definition xf_main.c:24
static uint8_t s_sle_mac_addr[XF_SLE_ADDR_LEN]
Definition xf_main.c:55
#define SAMPLE_SLE_CONN_SUPERVISION_TIMEOUT
Definition xf_main.c:30
static xf_err_t sample_ssaps_event_cb(xf_sle_ssaps_event_t event, xf_sle_ssaps_evt_cb_param_t *param)
Definition xf_main.c:133
#define SAMPLE_SLE_ADV_INTERVAL_MIN
Definition xf_main.c:26
#define SAMPLE_SLE_CONN_MAX_LATENCY
Definition xf_main.c:32
static xf_sle_uuid_info_t s_app_uuid
Definition xf_main.c:49
#define XF_LOGI(tag, format,...)