#include "xf_hal.h"
#include "string.h"
#include "xf_task.h"
#define TAG "sample_gattc"
#define DEFAULT_BLE_GAP_SCAN_INTERVAL 0x48
#define DEFAULT_BLE_GAP_SCAN_WINDOW 0x48
#define TASK_PRIORITY 5
#define TASK_DELAY_MS 500
#define DEFAULT_SERVICE_INDEX (1)
#define DEFAULT_CHARA_READ_INDEX (0)
#define DEFAULT_CHARA_WRITE_INDEX (1)
.uuid16 = 0x0000
};
{
"REGISTER event cb failed:%#X", ret);
"REGISTER app profile failed:%#X app_id:%d", ret,
s_app_id);
"SET scan param failed:%#X", ret);
"STAR scan failed:%#X", ret);
}
{
} break;
XF_LOGI(
TAG,
"EV:connect:s_conn_id:%d,addr_type:%u,addr:"
} break;
}
} break;
XF_LOGI(
TAG,
"EV:write CMPL:handle:%d,it will disconnect",
} break;
}
} break;
default:
break;
}
return ret;
}
{
};
}
{
",RSSI:%d,adv_data_len:%u",
);
uint8_t *ptr_current = adv_data_all;
uint8_t *ptr_end = adv_data_all + adv_size_all;
while (ptr_current <= ptr_end) {
uint8_t struct_data_len = ptr_current[0];
XF_LOGD(
TAG,
"EV:scan_result:struct_data_len:%d ad_type:%#2X",
struct_data_len, ad_type);
switch (ad_type) {
uint8_t *local_name = &ptr_current[2];
XF_LOGI(
TAG,
"EV:scan_result:target local name:%s", local_name);
}
} break;
default: {
XF_LOGD(
TAG,
"EV:scan_result:uncaring ad_type:%#2X", ad_type);
} break;
}
}
}
{
while (cnt_service-- > 0) {
"discover chara failed:%#X app_id:%d", ret,
s_app_id);
while (cnt_chara-- > 0) {
XF_LOGI(
TAG,
"service[%u]:uuid(16):[%#X],handle[%u,%u],chara[%u]:%#X",
cnt_service, service->
uuid.uuid16,
cnt_chara, chara->
uuid.uuid16);
}
}
}
}
{
"s_app_id:%d,s_conn_id:%d"
"service_uuid(16):%#X,chara_uuid(16):%#X,",
);
}
}
}
}
}
}
static xf_task_t xf_ttask_create_loop(xf_task_func_t func, void *func_arg, uint16_t priority, uint32_t delay_ms)
在默认的任务管理下,创建 ttask 循环任务。
#define XF_CHECK(condition, retval, tag, format,...)
xfusion 检查宏(条件 成立 时则输出日志后返回)。
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
#define XF_LOG_BUFFER_HEXDUMP(buffer, buffer_len)
以十六进制输出 buffer 的内容,同时输出可见的 ascii 码。
xf_err_t xf_ble_gap_disconnect(const xf_ble_addr_t *addr)
BLE GAP 断开连接
xf_err_t xf_ble_gap_set_scan_param(const xf_ble_gap_scan_param_t *param)
BLE GAP 设置扫描参数
xf_err_t xf_ble_gap_connect(const xf_ble_addr_t *addr)
BLE GAP 发起连接
xf_err_t xf_ble_gap_start_scan(void)
BLE GAP 扫描开启
xf_err_t xf_ble_gap_stop_scan(void)
BLE GAP 扫描停止
#define XF_BLE_GAP_ADV_STRUCT_AD_TYPE_FIELD_SIZE
BLE GAP 广播数据单元类型 (AD_TYPE) 字段的大小
xf_ble_gap_adv_struct_type_t
BLE 广播数据单元 ( AD Structure ) 类型,完全遵循蓝牙标准进行定义
#define XF_BLE_GAP_ADV_STRUCT_LEN_FIELD_SIZE
BLE GAP 广播数据单元数据长度 (LEN) 字段的大小
xf_err_t xf_ble_enable(void)
BLE 功能开启
@ XF_BLE_GAP_SCAN_TYPE_PASSIVE
@ XF_BLE_GAP_SCAN_FILTER_ACCEPT_ALL
@ XF_BLE_ADV_STRUCT_TYPE_LOCAL_NAME_ALL
xf_err_t xf_ble_gattc_request_read_by_handle(uint8_t app_id, uint16_t conn_id, uint16_t handle)
BLE GATTC 通过句柄发起读请求
xf_err_t xf_ble_gattc_app_register(xf_ble_uuid_info_t *app_uuid, uint8_t *app_id)
BLE GATTC 客户端注册
xf_err_t xf_ble_gattc_request_write(uint8_t app_id, uint16_t conn_id, uint16_t handle, uint8_t *value, uint16_t value_len, xf_ble_gattc_write_type_t write_type)
BLE GATTC 发起写请求
xf_err_t xf_ble_gattc_discover_chara(uint8_t app_id, uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, xf_ble_uuid_info_t *chara_uuid, xf_ble_gattc_chara_found_set_t **out_chara_set)
BLE GATTC 搜寻特征(指定 UUID 或 尝试搜寻所有特征)
xf_err_t xf_ble_gattc_discover_service(uint8_t app_id, uint16_t conn_id, xf_ble_uuid_info_t *service_uuid, xf_ble_gattc_service_found_set_t **service_set_info)
BLE GATTC 搜寻服务(指定 UUID 或 尝试搜寻所有服务)
xf_err_t xf_ble_gattc_event_cb_register(xf_ble_gattc_event_cb_t evt_cb, xf_ble_gattc_event_t events)
BLE GATTC 事件回调注册
@ XF_BLE_GATT_WRITE_TYPE_WITH_RSP
xf_ble_gattc_event_t
BLE GATTC 事件
#define XF_BLE_ADDR_PRINT_FMT
BLE 地址打印格式
#define XF_BLE_ADDR_EXPAND_TO_ARG(addr)
BLE 地址展开为参数
struct __packed _xf_ble_uuid_info_t xf_ble_uuid_info_t
BLE UUID 信息 (多种长度类型通用)
@ XF_BLE_GATTC_EVT_WRITE_COMPLETE
@ XF_BLE_GATTC_EVT_RECV_NOTIFICATION_OR_INDICATION
@ XF_BLE_GATTC_EVT_READ_COMPLETE
@ XF_BLE_GAP_EVT_SCAN_RESULT
uint8_t addr[XF_BLE_ADDR_LEN]
xf_ble_addr_t addr_scanned
xf_ble_gattc_chara_found_t * set
xf_ble_attr_handle_t value_handle
xf_ble_gattc_service_found_t * set
xf_ble_gattc_chara_found_set_t * chara_set_info
xf_ble_attr_handle_t start_hdl
xf_ble_attr_handle_t end_hdl
static void task(xf_task_t task)
xf_ble_evt_param_scan_result_t scan_result
xf_ble_evt_param_connect_t connect
xf_ble_evt_param_gattc_notify_t notify
xf_ble_evt_param_gattc_read_cmpl_t read_cmpl
xf_ble_evt_param_gattc_write_t write
static xf_ble_uuid_info_t app_uuid
#define DEFAULT_CHARA_WRITE_INDEX
static xf_ble_gattc_service_found_set_t * service_found_set
#define DEFAULT_BLE_GAP_SCAN_INTERVAL
static void discovery_task(xf_task_t task)
#define DEFAULT_CHARA_READ_INDEX
static uint8_t write_req_data[]
static xf_err_t gattc_event_scan_result_cb(xf_ble_gattc_evt_cb_param_t *param)
static xf_err_t sample_ble_set_scan_param(void)
#define DEFAULT_SERVICE_INDEX
static uint8_t target_gatts_device_name[]
static void read_write_task(xf_task_t task)
static bool is_need_discovery
static xf_err_t sample_ble_gattc_event_cb(xf_ble_gattc_event_t event, xf_ble_gattc_evt_cb_param_t param)
static bool is_discovery_cmpl
static xf_ble_addr_t peer_addr
#define DEFAULT_BLE_GAP_SCAN_WINDOW
#define XF_LOGI(tag, format,...)
#define XF_LOGE(tag, format,...)
#define XF_LOGD(tag, format,...)