更新时间:2024-03-01 06:48:57下载pdf
针对 Wi-Fi & 蓝牙双模设备,TuyaOS 框架支持接收蓝牙遥控器控制指令的功能。
开启蓝牙扫描的前提条件
应用在 设备初始化 前注册了处理蓝牙遥控器数据的回调函数。
框架在 设备初始化 之后才会打开扫描功能。
设备不处于配网状态或者配网中拿到 SSID 和密码后。
开启蓝牙扫描功能会影响双模设备的配网成功率。
开启绑定窗口的时机
蓝牙扫描功能当前是处于开启的状态。
未配网激活的设备 上电进入低功耗状态 后,框架会自动打开绑定窗口期。
设备处于配网状态,在设备拿到 SSID 和密码后,框架会自动打开绑定窗口期。
已经激活的设备上电后,待 设备初始化 时会自动打开绑定窗口期。
应用自行调用开启绑定窗口的接口。
由于每个模组上的资源不一样,并不会打开所有功能,您需要检查 tuya_iot_config.h
并确认如下宏定义是否已经定义:
#define ENABLE_BT_REMOTE_CTRL 1
tuya_bt.h
tuya_ble_reg_app_scan_adv_cb
。tuya_ble_reg_raw_scan_adv_cb
。框架会在 上述描述的时机 自动开启涂鸦遥控器绑定窗口。如果应用想在自定义的时机开启窗口,可自行再调用开启接口。
在调用 设备初始化 接口之前注册。只有注册了该回调函数,蓝牙扫描的功能才会打开。该接口也相当于蓝牙扫描功能的总开关。
该回调函数会返回接收到的涂鸦蓝牙遥控器的指令数据。
//Callback function for advertisement scanning data processing
//type:0xFF old remote
// 0x16 new remote
typedef VOID (*TUYA_BLE_APP_SCAN_HANDLE)(UCHAR_T *data, UCHAR_T len, UCHAR_T type, UCHAR_T* mac);
/**
* @brief Register callback function for advertisement scanning data processing
*
* @param[in] cb: callback function
*
* @note This API is used for registering callback function for advertisement scanning data processing
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_ble_reg_app_scan_adv_cb(TUYA_BLE_APP_SCAN_HANDLE cb);
该绑定/解绑的通知主要针对的是涂鸦蓝牙遥控器。
//Callback function for validity check for bind or unbind operation
typedef OPERATE_RET(*BLE_SCAN_ADV_BIND_CHECK_CB)(TUYA_BLE_BIND_TYPE type, UCHAR_T *data, UCHAR_T len);
//Callback function for result notify for bind or unbind operation
typedef VOID_T(*BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB)(TUYA_BLE_BIND_TYPE type, int rslt);
typedef struct {
BLE_SCAN_ADV_BIND_CHECK_CB bind_check;
BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB bind_notify;
} TUYA_BLE_SCAN_ADV_HANDLE_CBS;
/**
* @brief Register callback function for advertisement scanning data processing
*
* @param[in] cbs: callback function
*
* @note This API is used for registering callback function for inform binding/unbinding state
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_ble_reg_app_scan_adv_handle_cbs(TUYA_BLE_SCAN_ADV_HANDLE_CBS* cbs);
如果设置的时间低于 30s,则当做 30s 处理。如果设置为 0,则会永久打开绑定窗口。
/**
* @brief Set timeout window for binding remote controller
*
* @param[in] time_out: time out in second, 0: no window
*
* @note This API is used for setting timeout window for binding remote controller
*
* @return VOID
*/
VOID_T tuya_ble_set_bind_window(UINT_T time_out);
框架会在上述描述的时机自动开启绑定窗口。如果应用想在自定义的时机开启窗口,可自行调用该接口。
/**
* @brief Open window for binding remote controller
*
* @param[in] VOID
*
* @note This API is used for opening window for binding remote controller
*
* @return VOID
*/
VOID_T tuya_ble_open_bind_window(VOID_T);
即使您只支持自定义遥控器,注册自定义数据回调的同时也需要注册 涂鸦蓝牙遥控器接收数据回调。
框架会通过回调函数,向应用透传扫描到的广播数据。开启蓝牙扫描的前提条件请 参考上文。
/**
* @brief Register callback function for advertisement scanning raw data processing
*
* @param[in] cb: callback function
*
* @note This API is used for registering callback function for advertisement scanning raw data processing
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_ble_reg_raw_scan_adv_cb(TUYA_BLE_RAW_SCAN_HANDLE cb);
关于示例代码,参考框架内自带的 TuyaOS 示例集合 中的 service_ble_remote
。
参考上文描述的 开启蓝牙扫描的前提条件,检查是否有满足条件。
ADV_IND
、SCAN_RSP
和 NONCONN_IND
三种广播类型的广播包。该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈