移植指南

更新时间:2024-03-01 10:02:37下载pdf

TuyaOS 定义了一套标准化的 TuyaOS Kernel Layer(TKL),旨在屏蔽硬件和系统的差异性,实现跨平台兼容性。TKL 接口涵盖系统和业务相关的功能,例如内存分配、互斥锁和信号量等。

针对 Linux 操作系统,系统相关的接口遵循统一的 POSIX 标准。因此,如果没有特殊需求,您可以直接使用 TuyaOS SDK 开发环境提供的示例代码。然而,业务相关的接口在不同的硬件和芯片上可能存在差异,您需要根据具体情况进行适配。

本文将介绍新旧版在 Wi-Fi 及蓝牙适配层接口的差异及如何适配必要的 TKL 接口,以便您能够轻松地实现 TKL 接口的适配,从而确保 TuyaOS SDK 开发框架在特定的硬件平台上顺利运行。

  • 旧版本:IoT SDK 2.3.2 及之前版本
  • 新版本:TuyaOS SDK 3.6.1 及之后版本

适配差异说明

Wi-Fi 配网适配

旧版本接口 新版本接口 区别
tkl_wifi_init 新增接口,该接口的使用及注意事项,参考 热点配网
tuya_adapter_wifi_ap_start tkl_wifi_start_ap 仅修改函数名称
tuya_adapter_wifi_ap_stop tkl_wifi_stop_ap 仅修改函数名称
tuya_adapter_wifi_set_work_mode tkl_wifi_set_work_mode 仅修改函数名称
tuya_adapter_wifi_get_work_mode tkl_wifi_get_work_mode 仅修改函数名称
tuya_adapter_wifi_station_connect tkl_wifi_station_connect 仅修改函数名称
tuya_adapter_wifi_station_disconnect tkl_wifi_station_disconnect 仅修改函数名称
tuya_adapter_wifi_station_get_status tkl_wifi_station_get_status 在旧版基础上新增了 DHCP 失败的枚举值
tuya_adapter_wifi_get_ip tkl_wifi_get_ip 仅修改函数名称
tuya_adapter_wifi_sniffer_set 旧版的 EZ 配网存在一定的安全风险,涂鸦将下线该功能

蓝牙配网适配

旧版本接口 新版本接口 区别
tuya_os_adapt_bt_port_init tkl_ble_stack_init 在旧版基础上新增角色入参 SERVER 和 CLIENT
tuya_os_adapt_bt_send tkl_ble_gatts_value_notify 在旧版基础上新增连接及属性句柄
tuya_os_adapt_bt_reset_adv tkl_ble_gap_adv_rsp_data_set 仅修改函数名称
tuya_os_adapt_bt_start_adv tkl_ble_gap_adv_start 在旧版基础上新增入参,具体参考 TKL_BLE_GAP_ADV_PARAMS_T 结构体
tuya_os_adapt_bt_stop_adv tkl_ble_gap_adv_stop 仅修改函数名称
tkl_ble_gap_callback_register 新增接口,该接口的使用及注意事项,参考 蓝牙配网
tkl_ble_gatt_callback_register 新增接口,该接口的使用及注意事项,参考 蓝牙配网
tkl_ble_gatts_service_add 新增接口,该接口的使用及注意事项,参考 蓝牙配网
tkl_ble_gattc_exchange_mtu_request 新增接口,该接口的使用及注意事项,参考 蓝牙配网

相关接口

系统接口

以下系统相关接口,目前输出的 TuyaOS SDK 都是标准的 Linux 实现,一般情况无需修改。如果您的平台有特殊需要,请自行修改。

模块 描述
tkl_fs 提供操作文件系统的接口,包括文件的创建、打开和读写等操作
tkl_system 提供 OS 相关的接口,包括获取系统时间、延时和重启等操作
tkl_memory 提供内存管理的接口,包括内存分配、释放和拷贝等操作
tkl_thread 提供线程管理的接口,包括线程的创建和销毁等操作
tkl_mutex 提供互斥锁管理的接口,包括互斥锁的创建、上锁、解锁和销毁等操作
tkl_semaphore 提供信号量管理的接口,包括信号量的创建、等待、发送和销毁等操作
tkl_uart 提供串行通信的接口,包括 UART 的初始化、发送和接收等操作

日志输出接口

TuyaOS SDK 默认输出日志到终端上。应用如需保存到其他地方,可以在 tkl_output 下面的 tkl_log_output 接口中实现。

// 把日志打印到终端
VOID_T tkl_log_output(IN CONST CHAR_T *str, ...)
{
    printf("%s", str);
    fflush(stdout);
    return;
}

// 把日志保存到文件
VOID_T tkl_log_output(IN CONST CHAR_T *str, ...)
{
    uFILE * fp = NULL;

    // 打开文件
    fp = ufopen("sweeper_log.txt", "w+");
    if(NULL == fp) {
    return ;
    }
    // 写入文件
    uiWriteCnt = ufwrite(fp, str, strlen(str));
    if(uiWriteCnt != strlen(str)) {
    TAL_PR_ERR("sweeper_log uf file write data error!");
    return ;
    }
    // 关闭文件
    ufclose(fp);
    return;
}

如需使用其他 TKL 开头的接口,您可以自行适配。

补充说明

其他 TKL 接口功能,参考 移植 TuyaOS 到 Linux 平台