更新时间:2024-08-05 06:34:22下载pdf
Linux 系统的操作系统、网络、文件系统相关的接口都是统一的,TuyaOS 框架也内嵌了一份默认的接口实现,如果没有特殊的需求,您可以直接使用。
Linux 系统还有一些涉及硬件的能力,在不同的硬件、芯片上可能存在差异。TuyaOS 生成了这些能力接口的空函数,需要您按照自己的硬件、芯片的实际情况,完成接口的适配。
Linux 系统的 TuyaOS Kernel 已经提供了默认的编译脚本,这些脚本存放于适配模板的 tuyaos/
目录下。固件编译入口 tuyaos/build.sh
会直接调用 tuyaos/Makefile
,实现可执行文件的编译。您可以根据自己的实际情况进行修改。
支持实时时钟(Real-time clock,RTC)的平台可以实现 RTC 相关的接口,通过 RTC 提供的精确计时的能力,保障设备的时间准确。
TuyaOS 在设备配网激活之后,会和云端进行数据交互,获取云端的时间信息并设置到 RTC 中。TuyaOS 需要依赖 RTC 提供的时间服务进行工作。一旦检测到本地时间和云端时间偏差超过 5 秒,开发框架会再次通过云端更新时间,以保障时间偏差不至于扩大。但是,当设备处于离线状态时,则完全依赖于 RTC 自身的精度来保障时间的准确性。
接口 | 说明 |
---|---|
OPERATE_RET tkl_rtc_init ( VOID_T ) | 初始化 RTC 器件,使得其能够正常工作,注意,RTC 时间统计周期应为秒级。 |
OPERATE_RET tkl_rtc_deinit ( VOID_T ) | 卸载 RTC 器件,释放相关资源。 |
OPERATE_RET tkl_rtc_time_set ( TIME_T time_sec ) | 设置 RTC 时间戳,参数单位精度是秒级。设置成功之后,RTC 计时以该时间戳为起点。 |
OPERATE_RET tkl_rtc_time_get ( TIME_T *time_sec ) | 获取当前系统的时间戳。 |
支持看门狗(WatchDog)的平台可以实现 WatchDog 相关的接口,通过 WatchDog 来保障设备异常状态下能够通过超时重启的机制恢复,避免设备进入无法使用的状态。在 TuyaOS 里,喂狗操作是在一个独立的、高优先级的线程里进行的,不会受普通业务操作的影响。
接口 | 说明 |
---|---|
UINT32_T tkl_watchdog_init ( TUYA_WDOG_BASE_CFG_T *cfg ) | 初始化 WatchDog 器件,返回值是实际的超时周期,周期不应小于 5 秒。 |
OPERATE_RET tkl_watchdog_deinit ( VOID_T ) | 卸载 WatchDog 器件,释放相关资源,和初始化 WatchDog 对应。 |
OPERATE_RET tkl_watchdog_refresh ( VOID_T ) | 刷新 WatchDog,重置 WatchDog 状态。刷新周期是实际周期的三分之一。 |
连接接口是指开发平台的连接能力驱动接口,如有线、Wi-Fi、低功耗蓝牙等,可以按照您的目标平台实际连接方式进行适配。
一般 Linux 系统、带有屏幕的产品,移植默认使用有线连接。您通过界面的方式配置网络,然后通过 局域网绑定 和 扫码绑定 的方式来对设备进行激活。
接口 | 说明 |
---|---|
OPERATE_RET tkl_wired_get_status (TKL_WIRED_STAT_E *status) | 获取有线网络连接状态,以接口 linkup 并且获取到 IP 地址为 TKL_WIRED_LINK_UP ,否则为 TKL_WIRED_LINK_DOWN 。 |
OPERATE_RET tkl_wired_set_status_cb (TKL_WIRED_STATUS_CHANGE_CB cb) | 设置有线网络连接状态变化通知回调。当有线网络状态发生变化时(以接口 linkup 并且获取到 IP 地址为 TKL_WIRED_LINK_UP ,否则为 TKL_WIRED_LINK_DOWN ),需要通过 cb 将状态通知给 TuyaOS ,以触发内部各种状态和事件。 |
OPERATE_RET tkl_wired_get_ip (NW_IP_S *ip) | 获取网络接口 IP 地址,设备和云端、App 等通信都基于该 IP 地址,所以需要确认返回的是连接到路由器的网络接口的 IP 地址。 |
OPERATE_RET tkl_wired_get_mac (NW_MAC_S *mac) | 获取网络接口 MAC 地址。 |
OPERATE_RET tkl_wired_set_mac (CONST NW_MAC_S *mac) | 设置网络接口 MAC 地址。 |
接口 | 说明 |
---|---|
OPERATE_RET tkl_wifi_init ( WIFI_EVENT_CB cb ) | 初始化 Wi-Fi |
OPERATE_RET tkl_wifi_scan_ap ( CONST SCHAR_T *ssid, AP_IF_S **ap_ary, UINT_T *num ) |
扫描周边热点,可以指定 SSID |
OPERATE_RET tkl_wifi_release_ap ( AP_IF_S *ap ) | 释放扫描到的热点信息,和扫描配套使用,否则会导致内存泄露 |
OPERATE_RET tkl_wifi_start_ap ( CONST WF_AP_CFG_IF_S *cfg ) | 启动热点,需要指 SSID、密码等信息 |
OPERATE_RET tkl_wifi_stop_ap ( VOID_T ) | 关闭热点,释放资源,和启动热点配套使用 |
OPERATE_RET tkl_wifi_set_cur_channel ( CONST UCHAR_T chan ) | 设置 Wi-Fi 工作信道 |
OPERATE_RET tkl_wifi_get_cur_channel ( UCHAR_T *chan ) | 获取 Wi-Fi 工作信道 |
OPERATE_RET tkl_wifi_set_sniffer ( CONST BOOL_T en, CONST SNIFFER_CALLBACK cb ) |
设置 Sniffer 回调,需要把 Sniffer 的原始报文上报 |
OPERATE_RET tkl_wifi_get_ip ( CONST WF_IF_E wf, NW_IP_S *ip ) | 获取 Wi-Fi 接口 IP 地址 |
OPERATE_RET tkl_wifi_set_ip ( CONST WF_IF_E wf, NW_IP_S *ip ) | 设置 Wi-Fi 接口 IP 地址 |
OPERATE_RET tkl_wifi_set_mac ( CONST WF_IF_E wf, CONST NW_MAC_S *mac ) | 设置 Wi-Fi 接口 MAC 地址 |
OPERATE_RET tkl_wifi_get_mac ( CONST WF_IF_E wf, NW_MAC_S *mac ) | 获取 Wi-Fi 接口 MAC 地址 |
OPERATE_RET tkl_wifi_set_work_mode ( CONST WF_WK_MD_E mode ) | 设置 Wi-Fi 工作模式 |
OPERATE_RET tkl_wifi_get_work_mode ( WF_WK_MD_E *mode ) | 获取 Wi-Fi 工作模式 |
OPERATE_RET tkl_wifi_get_connected_ap_info ( FAST_WF_CONNECTED_AP_INFO_T **fast_ap_info ) | 获取 Wi-Fi 连接的热点信息 |
OPERATE_RET tkl_wifi_get_bssid ( UCHAR_T *mac ) | 获取 Wi-Fi 接口 BSSID |
OPERATE_RET tkl_wifi_set_country_code ( CONST COUNTRY_CODE_E ccode ) | 设置 Wi-Fi 接口的国家码 |
OPERATE_RET tkl_wifi_set_rf_calibrated ( VOID_T ) | 设置 Wi-Fi 射频校准标志位, 一般产测时需要使用,不使用涂鸦产测的话不需要适配 |
OPERATE_RET tkl_wifi_set_lp_mode ( CONST BOOL_T enable, CONST UCHAR_T dtim ) | 设置 Wi-Fi 低功耗模式 |
OPERATE_RET tkl_wifi_station_fast_connect ( CONST FAST_WF_CONNECTED_AP_INFO_T *fast_ap_info ) | Wi-Fi 基于已保存的信息,快速连接热点 |
OPERATE_RET tkl_wifi_station_connect ( CONST SCHAR_T *ssid, CONST SCHAR_T *passwd ) | Wi-Fi 连接热点 |
OPERATE_RET tkl_wifi_station_disconnect ( VOID_T ) | Wi-Fi 断开和热点的连接 |
OPERATE_RET tkl_wifi_station_get_conn_ap_rssi ( SCHAR_T *rssi ) | 获取信号强度 |
OPERATE_RET tkl_wifi_station_get_status ( WF_STATION_STAT_E *stat ) | 获取连接状态 |
OPERATE_RET tkl_wifi_send_mgnt ( CONST UCHAR_T *buf, CONST UINT_T len ) | 发送管理帧 |
OPERATE_RET tkl_wifi_register_recv_mgnt_callback ( CONST BOOL_T enable, CONST WIFI_REV_MGNT_CB recv_cb ) |
接收管理帧 |
OPERATE_RET tkl_wifi_ioctl ( WF_IOCTL_CMD_E cmd, VOID *args ) | 万能接口,供后续扩展 |
蓝牙设备可以作为以下两种设备:
您可以根据自己的需求,选择需求的接口来进行适配,减少适配的工作量。
蓝牙协议栈
接口 | 说明 |
---|---|
OPERATE_RET tkl_ble_stack_init ( UCHAR_T role ) | 初始化蓝牙协议栈 |
OPERATE_RET tkl_ble_stack_deinit ( UCHAR_T role ) | 卸载蓝牙协议栈,和初始化对应 |
OPERATE_RET tkl_ble_stack_gatt_link ( USHORT_T *p_link ) | 获取 GATT 连接信息 |
OPERATE_RET tkl_ble_gap_callback_register ( CONST TKL_BLE_GAP_EVT_FUNC_CB gap_evt ) | 注册 GAP 事件回调 |
OPERATE_RET tkl_ble_gatt_callback_register ( CONST TKL_BLE_GATT_EVT_FUNC_CB gatt_evt ) | 注册 GATT 事件回调 |
OPERATE_RET tkl_ble_gap_addr_set ( TKL_BLE_GAP_ADDR_T CONST *p_peer_addr ) | 设置 GAP 地址 |
OPERATE_RET tkl_ble_gap_address_get ( TKL_BLE_GAP_ADDR_T *p_peer_addr ) | 获取 GAP 地址 |
OPERATE_RET tkl_ble_gap_conn_param_update ( USHORT_T conn_handle, TKL_BLE_GAP_CONN_PARAMS_T CONST *p_conn_params ) |
更新连接参数 |
OPERATE_RET tkl_ble_gap_tx_power_set ( UCHAR_T role, INT_T tx_power ) | 设置发射功率 |
OPERATE_RET tkl_ble_gap_rssi_get ( USHORT_T conn_handle ) | 获取连接信号强度 |
外围设备
接口 | 说明 |
---|---|
OPERATE_RET tkl_ble_gap_adv_start ( TKL_BLE_GAP_ADV_PARAMS_T CONST *p_adv_params ) | 启动 GAP 广播 |
OPERATE_RET tkl_ble_gap_adv_stop ( VOID ) | 停止 GAP 广播 |
OPERATE_RET tkl_ble_gap_adv_rsp_data_set ( TKL_BLE_DATA_T CONST *p_adv, TKL_BLE_DATA_T CONST *p_scan_rsp ) |
设置 adv resp 数据 |
OPERATE_RET tkl_ble_gap_adv_rsp_data_update ( TKL_BLE_DATA_T CONST *p_adv, TKL_BLE_DATA_T CONST *p_scan_rsp ) |
更新 adv resp 数据 |
OPERATE_RET tkl_ble_gap_name_set ( CHAR_T *p_name ) | 设置名称 |
OPERATE_RET tkl_ble_gap_disconnect ( USHORT_T conn_handle, UCHAR_T hci_reason ) |
断开和中心设备的连接 |
OPERATE_RET tkl_ble_gatts_service_add ( TKL_BLE_GATTS_PARAMS_T *p_service ) | 添加能力 |
OPERATE_RET tkl_ble_gatts_value_set ( USHORT_T conn_handle, USHORT_T char_handle, UCHAR_T *p_data, USHORT_T length ) |
设置指定属性的值 |
OPERATE_RET tkl_ble_gatts_value_get ( USHORT_T conn_handle, USHORT_T char_handle, UCHAR_T *p_data, USHORT_T length ) |
获取指定属性的值 |
OPERATE_RET tkl_ble_gatts_value_notify ( USHORT_T conn_handle, USHORT_T char_handle, UCHAR_T *p_data, USHORT_T length ) |
通知指定属性,无需确认 |
OPERATE_RET tkl_ble_gatts_value_indicate ( USHORT_T conn_handle, USHORT_T char_handle, UCHAR_T *p_data, USHORT_T length ) |
指示指定属性,需要确认 |
OPERATE_RET tkl_ble_gatts_exchange_mtu_reply ( USHORT_T conn_handle, USHORT_T server_rx_mtu ) |
应答 MTU Exchange |
中心设备
接口 | 说明 |
---|---|
OPERATE_RET tkl_ble_gap_scan_start ( TKL_BLE_GAP_SCAN_PARAMS_T CONST *p_scan_params ) | 启动扫描 GAP 广播 |
OPERATE_RET tkl_ble_gap_scan_stop ( VOID ) | 关闭扫描 GAP 广播,和启动对应 |
OPERATE_RET tkl_ble_gap_connect ( TKL_BLE_GAP_ADDR_T CONST *p_peer_addr, TKL_BLE_GAP_SCAN_PARAMS_T CONST *p_scan_params, TKL_BLE_GAP_CONN_PARAMS_T CONST *p_conn_params ) |
连接外围设备 |
OPERATE_RET tkl_ble_gap_disconnect ( USHORT_T conn_handle, UCHAR_T hci_reason ) | 断开与外围设备的连接 |
OPERATE_RET tkl_ble_gattc_all_service_discovery ( USHORT_T conn_handle ) | 发现所有服务 |
OPERATE_RET tkl_ble_gattc_all_char_discovery ( USHORT_T conn_handle, USHORT_T start_handle, USHORT_T end_handle ) |
发现所有特征 |
OPERATE_RET tkl_ble_gattc_char_desc_discovery ( USHORT_T conn_handle, USHORT_T start_handle, USHORT_T end_handle ) |
发现所有描述符 |
OPERATE_RET tkl_ble_gattc_write_without_rsp ( USHORT_T conn_handle, USHORT_T char_handle, UCHAR_T *p_data, USHORT_T length ) |
写 GATT server 数据,不需要应答 |
OPERATE_RET tkl_ble_gattc_write ( USHORT_T conn_handle, USHORT_T char_handle, UCHAR_T *p_data, USHORT_T length ) |
写 GATT server 数据,需要应答 |
OPERATE_RET tkl_ble_gattc_read ( USHORT_T conn_handle, USHORT_T char_handle ) | 读取 GATT server 数据 |
OPERATE_RET tkl_ble_gattc_exchange_mtu_request ( USHORT_T conn_handle, USHORT_T client_rx_mtu ) |
请求 MTU exchange |
完成上述接口,可以保障 TuyaOS 最小功能集的正常运行,其他的接口,可以使用原厂接口,也可以参考 TuyaOS 提供的外设驱动进行适配。
您也可以通过开发框架自带的示例集合来验证接口适配的正确性,示例集合存放在开发框架 software/TuyaOS/apps/tuyaos_demo_examples
目录下,可以直接编译这个目录,烧录到开发板上运行,通过命令行来执行功能示例。
您也可以结合您要开发的产品的实际功能,来验证产品的功能和性能。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈