更新时间:2024-11-20 08:51:13下载pdf
版本 | 编写/修订说明 | 修订日期 | 备注 |
---|---|---|---|
1.0.0 | 创建文档 | 20200601 |
TuyaOS 是涂鸦独创 IoT OS 操作系统,提供了按照业务需求选择组件,定制 SDK 的能力,是涂鸦开发者的利剑,具备轻量级、互联互通、安全传输、组件丰富、快速开发等关键能力,有效降低开发门槛、缩短开发周期,可广泛应用于可穿戴设备、视频监控、中控网关、智能音箱、智能家电、智能门锁等智能家居领域设备。
Tuya 通用 Wi-Fi SDK是基于 TuyaOS 技术体系按照物联网 Wi-Fi 应用场景,进行裁剪、定制得到的,适用于任意一款按照涂鸦平台导入规范进行适配导入的 Wi-Fi 芯片平台。
对于不同的开发者,Tuya 提供了不同的策略,给开发者提供不同的服务。其中,对于拥有较强的自主开发能力的,能够开发底层硬件、驱动的开发者,可以使用我们提供的 SDK,适配开发环境抽象接口,从而更加定制的实现设备功能。
本文档主要描述了如何对 Tuya 通用 Wi-Fi SDK 进行开发环境适配。开发环境包括了原厂的工具链、脚本、库文件等信息,如果你使用的是 Tuya 提供的模块,或者是Tuya 已经对此芯片平台进行了适配,你就不需自己去适配了,Tuya对外发布的 SDK 产物,都已经完成了编译适配、接口适配等工作,根据 README.md 文件的指引使用就可以了。
开发环境包括了芯片原厂提供的工具链、脚本、库文件等信息,是编译 Tuya 通用 Wi-Fi SDK 时必须的,因此需要客户对开发环境按照以下规范进行适配,从而实现SDK、固件的编译。
客户使用自有的芯片平台对接Tuya 通用 Wi-Fi SDK,需要 Tuya 提供使用该芯片平台的编译工具编译生成的静态库或者是动态库文件。可以在 本文档的指引下,自助完成。分为以下几个步骤:
需要把芯片生产原厂提供的工具、库、脚本等资料提供给 Tuya,同时也需要把编译选项、功能需求等需求列表发送给 Tuya 工程师。
Tuya 工程师按照需求对芯片生产原厂工具链进行适配。以 RTL8720CF
的适配为例:
创建 toolchain
目录:在芯片生产原厂提供的工具链的根目录下创建 toolchain
目录,用于创建编译环境。
创建 build_path
: 用于导出工具链的编译工具位置。
TUYA_SDK_TOOLCHAIN_ZIP
:用于标识工具链压缩包的位置,Tuya 自动化编译系统会判断这个变量的值,如果存在,会进行解压。TUYA_SDK_BUILD_PATH
:用于标识编译工具的位置,Tuya自动化编译系统会将这个PATH作为编译工具的前缀使用。 创建 platform.mk
: 用于对接 Tuya 持续集成系统,按照客户的编译需求,进行自动化 SDK编译。
TUYA_PLATFORM_DIR
:用于标识当前开发环境的位置。TUYA_PLATFORM_CFLAGS
:用于添加客户需要的CFLAGS、编译选项等 创建 build.conf
:
Tuya 工程师将编译好的 Tuya 通用 Wi-Fi SDK 产物提供给客户,供调试、开发使用。客户拿到 Tuya 通用 Wi-Fi SDK产物之后,可以按照下面的固件编译适配,去调整的固件编译流程,编译出可以烧录到芯片上执行的固件。
Tuya 提供编译好的 Tuya 通用 Wi-Fi SDK 产物解压之后,目录如下表所示:
目录 | 子目录 | 描述 | 备注 |
---|---|---|---|
apps | / | 存放客户应用程序和涂鸦通用 Wi-Fi SDK 的 demo,每个应用或者demo应使用单独的文件夹保存 | 参照涂鸦通用 Wi-Fi SDK demo 使用说明 |
one_plug_demo | 一个示例demo | 一般会提供一个或者多个 demo | |
sdk | / | 存放涂鸦通用 Wi-Fi SDK 的头文件和库文件 | 参照后续的功能接口说明 |
include | 涂鸦通用 Wi-Fi SDK 提供的 API 接口 | ||
lib | 涂鸦通用 Wi-Fi SDK 编译得到的 libtuya_iot.a文件 | ||
platforms | / | 涂鸦通用 Wi-Fi SDK 的开发编译环境和工具链 | 默认是空的,在编译的时候,会通过build_app.sh下载相应的工具链 |
build_app.sh | / | 应用、demo 的编译入口 | 进行环境准备,以及编译 |
CHANGELOG.md | / | 版本修改的记录 | |
README.md | / | Tuya SDK使用指南 | 根据使用指南,指引客户如何使用TuyaOS SDK |
我们基于这个环境,提供了一套编译机制,客户也可以根据自己的需求,自己定义自己的编译过程。此处以 one_plug_demo 的固件编译过程为例,描述固件的编译过程:
build_app.sh
:下载开发环境包,执行 demo 里的编译脚本。我们支持多种编译方式,包括脚本,makefile。
./apps/one_plug_demo/build.sh
:进入开发环境,执行编译脚本,并进行打包处理工作。
编译生成的产物会输出到apps/one_plug_demo/output/
目录之下。
Tuya Common 存放在 Tuya 通用 Wi-Fi SDK 产物包里,通过执行 build_app.sh
下载的经过 SDK 编译适配之后的开发环境里,包含了Tuya Commonm
目录,客户可以直接使用这个目录里的相关代码。
Tuya OS Adapter层采用广泛使用的注册机制,由 Tuya 通用 Wi-Fi SDK 提供对底层功能进行抽象,提供接口描述定义,用户根据自己的需求,实现相关接口,并进行注册,从而实现 Tuya 通用 Wi-Fi SDK 的平台无关性。客户需要自己实现 Tuya OS Adapter,并放置于开发环境根目录。
Tuya HAL System提供了一些操作系统的接口,需要不同的平台对其进行实现,如果是Linux平台,Tuya 通用 Wi-Fi SDK 提供了一套通用的 System相关接口的实现,如果客户有特殊的定制要求,可以按照自己的需求实现这些接口。
SYS_TICK_T os_adapter_get_systemtickcount(void)
函数说明
获取系统当前的ticket值
参数
无
返回值
系统当前的tick值
unsigned int os_adapter_get_tickratems(void)
函数说明
获取系统1个ticket是多少个ms
参数
无
返回值
系统1个ticket是多少个ms
void os_adapter_system_sleep(const unsigned long msTime)
函数说明
线程睡眠
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | msTime | 系统sleep的时间(单位ms) |
返回值
无
bool os_adapter_system_isrstatus(void)
函数说明
获取系统是否处于中断例程里
参数
无
返回值
bool : TRUE:在中断例程;FALSE:不在中断例程
void os_adapter_system_reset(void)
函数说明
重启系统
参数
无
返回值
无
unsigned int os_adapter_system_getheapsize(void)
函数说明
获取系统剩余内存大小
参数
无
返回值
剩余内存
TY_RST_REASON_E os_adapter_system_get_rst_info(void)
函数说明
获取系统重启原因
TY_RST_REASON_E | —— |
---|---|
TY_RST_POWER_OFF | 电源重启 |
TY_RST_HARDWARE_WATCHDOG | 硬件看门狗复位 |
TY_RST_FATAL_EXCEPTION | 异代码常 |
TY_RST_SOFTWARE_WATCHDOG | 软件看门狗重启 |
TY_RST_SOFTWARE | 软件复位 |
TY_RST_DEEPSLEEP | 深度睡眠 |
TY_RST_HARDWARE | 硬件复位 |
TY_RST_OTHER | 其它原因 |
TY_RST_UNSUPPORT | 不支持 |
参数
无
返回值
重启原因
int os_adapter_get_random_data(const unsigned int range)
函数说明
获取随机数
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | range | 随机数range |
返回值
随机值
备注
真随机数
int os_adapter_set_cpu_lp_mode(const bool en,const TY_CPU_SLEEP_MODE_E mode)
函数说明
设置cpu的低功耗模式
mode | —— |
---|---|
TY_CPU_SLEEP | 低功耗模式、os自动唤醒、15mA以内 |
TY_CPU_DEEP_SLEEP | 深度睡眠 |
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | en | 是否使能cpu低功耗模式 |
[in] | mode | cpu低功耗模式 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_CPU_LPMODE_SET_FAILED :失败
Tuya HAL Memory 提供了内存申请和释放的接口,需要不同的平台对其进行实现。如果是Linux平台,可以不提供,Tuya 通用 Wi-Fi SDK 提供了一套通用的 Linux 平台的接口实现。
void *os_adapter_system_malloc(const size_t size)
函数说明
内存分配
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | size | 分配内存大小 |
返回值
NULL : 内存分配失败
其他:分配成功
备注
适配层其它文件API需要申请内存,一律调用os_adapter_system_malloc
void os_adapter_system_free(void* ptr)
函数说明
内存释放
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | ptr | 释放内存的地址 |
返回值
无
备注
适配层其它文件API需要释放内存,一律调用os_adapter_system_free
Tuya HAL Semaphore 提供了信号量操作的接口,需要不同的平台对其进行实现。如果是Linux平台,可以不提供,Tuya 通用 Wi-Fi SDK 提供了一套通用的 Linux 平台的接口实现。
int os_adapter_semaphore_create_init(SEM_HANDLE *pHandle, const unsigned int semCnt, const unsigned int sem_max)
函数说明
创建并初始化信号量
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | pHandle | 信号量句柄的指针 |
[in] | semCnt | 初始化信号量个数 |
[in] | sem_max | 最大信号量数 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_THRD_CREAT_FAILED :失败
int os_adapter_semaphore_wait(const SEM_HANDLE semHandle)
函数说明
等待信号量
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | semHandle | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_SEM_WAIT_FAILED :失败
int os_adapter_semaphore_post(const SEM_HANDLE semHandle)
函数说明
发送信号量
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | mutexHandle | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_SEM_POST_FAILED :失败
备注
需要区别线程上下文和中断上下文
int os_adapter_semaphore_release(const SEM_HANDLE semHandle)
函数说明
释放信号量资源
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | semHandle | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_SEM_RELEASE_FAILED :失败
Tuya HAL Mutex 提供了互斥量操作接口,需要不同的平台对其进行实现。如果是Linux平台,可以不提供,Tuya 通用 Wi-Fi SDK 提供了一套通用的 Linux 平台的接口实现。
int os_adapter_mutex_create_init(MUTEX_HANDLE *pMutexHandle)
函数说明
创建并初始化互斥锁
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | pMutexHandle | 互斥锁句柄的指针 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_MUTEX_CREAT_FAILED :失败
int os_adapter_mutex_release(const MUTEX_HANDLE mutexHandle)
函数说明
释放互斥锁资源
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | mutexHandle | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MUTEX_RELEASE_FAILED :失败
int os_adapter_mutex_lock(const MUTEX_HANDLE mutexHandle)
函数说明
加锁
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | mutexHandle | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MUTEX_LOCK_FAILED :失败
int os_adapter_mutex_unlock(const MUTEX_HANDLE mutexHandle)
函数说明
解锁
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | mutexHandle | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MUTEX_UNLOCK_FAILED :失败
备注
需要区别线程上下文和中断上下文
Tuya HAL Thread 提供了Thread创建、释放的接口,需要不同的平台对其进行实现。如果是Linux平台,可以不提供,Tuya 通用 Wi-Fi SDK 提供了一套通用的 Linux 平台的接口实现。
int os_adapter_thread_create(THREAD_HANDLE* thread,
const char* name,
const unsigned int stack_size,
const unsigned int priority,
const THREAD_FUNC_T func,
const void* arg)
函数说明
创建并启动线程
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | thread | 线程句柄的指针 |
[in] | name | 线程名字 |
[in] | stack_size | 线程堆栈大小,单位是byte,而不是4字节 |
[in] | priority | 线程优先级 |
[in] | func | 线程函数 |
[in] | arg | 用户参数 |
返回值
OPRT_OS_ADAPTER_OK : 创建成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_THRD_CREAT_FAILED :失败
备注
int os_adapter_thread_release(THREAD_HANDLE thread)
函数说明
释放线程资源
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | thread | 信号量句柄 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_THRD_RELEASE_FAILED :失败
int os_adapter_thread_is_self(THREAD_HANDLE thread, bool* is_self)
函数说明
判断运行上下文是否在指定线程里
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | thread | 信号量句柄 |
[out] | is_self | 是否在指定线程 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_THRD_JUDGE_SELF_FAILED :失败
Tuya HAL Watch Dog 提供了Watch Dog创建和刷新的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
unsigned int os_adapter_watchdog_init_start(const unsigned int timeval);
函数说明
用于初始化并运行watchdog
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | timeval | 看门狗时间 |
返回值
int 芯片实际设置的看门狗时间
备注
涂鸦上层会设置看门狗时间为60s,若芯片不支持60s的看门狗,返回实际设置成功的时间
void os_adapter_watchdog_refresh(void);
函数说明
用于刷新watch dog
返回值
void
void os_adapter_watchdog_stop(void);
函数说明
用于停止watch dog
返回值
void
Tuya HAL RTC 提供了RTC操作的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
void os_adapter_rtc_init(void)
函数说明
初始化芯片内部RTC
返回值
void 无返回值
void os_adapter_rtc_set_time(const time_t write_time)
函数说明
向芯片内部RTC设置时间
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | write_time | 时间戳,单位为秒 |
返回值
void 无返回值
time_t os_adapter_rtc_get_time(void)
函数说明
从芯片内部rtc时钟获取时间
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | void | 无 |
返回值
time_t 芯片内部的rtc时间,单位为秒
Tuya HAL OTA 提供了OTA操作的接口,需要不同的平台对其进行实现。
int os_adapter_ota_start_inform(unsigned int file_size);
函数说明
升级开始通知函数
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | file_size | 固件升级包总大小 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_OTA_START_INFORM_FAILED :失败
备注
告知hal层即将开始ota升级,需要hal层预先申请升级ota管理资源,记录ota固件包大小。
int os_adapter_ota_data_process(const unsigned int total_len, const unsigned int offset,
const unsigned char* data, const unsigned int len, unsigned int* remain_len, void* pri_data);
函数说明
ota数据包处理
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | total_len | ota升级固件总大小 |
[in] | offset | data指针在ota升级固件中的偏移量 |
[in] | data | 本次ota数据包buffer指针 |
[in] | len | 本次ota数据包长度 |
[out] | remain_len | 已经下发但未处理的数据包长度 |
[in] | pri_data | 保留参数,暂不使用 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_OTA_PROCESS_FAILED :失败
备注
此函数用于支撑ota升级,需结合涂鸦升级包拉取业务来实现。
目前涂鸦有两种升级方式: 1.http固件升级;2.私有串口协议固件升级;但对该hal函数来说无需关心数据包的来源。
ota升级过程中tuya sdk会循环收包,并将ota数据包通知给此函数,由此函数完成ota数据包写入flash的工作。
int os_adapter_ota_end_inform(bool reset);
函数说明
ota数据下载结束通知
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | reset | 通知hal层下载结束是否需要重启 |
返回值
OPRT_OS_ADAPTER_OK :成功
OPRT_OS_ADAPTER_OTA_VERIFY_FAILED :校验失败
OPRT_OS_ADAPTER_OTA_END_INFORM_FAILED :失败
备注
ota数据包传输完成后会调用此通知函数,需在次函数中实现:
1.释放ota开始时hal层申请的资源。
2.做固件完整性校验
3.修改ota参数区,重启之后运行新固件
4.根据入参reset决定是否需要重启(tuya串口升级成功后的重启逻辑不在这个api实现)
Tuya HAL Storage 提供了Flash操作的接口,需要不同的平台对其进行实现。
int os_adapter_flash_read(const unsigned int addr, unsigned char *dst, const unsigned int size);
函数说明
从flash读取数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | addr | 读取的flash首地址 |
[out] | dst | 接收读取数据的buffer指针 |
[in] | size | 读取的buffer大小 |
返回值
0 : 成功;
其他:失败错误码;
备注
1,由于tuya上层业务可能出现多线程同时调用os_adapter_flash层的api接口,因此os_adapter_flash_read,os_adapter_flash_write,os_adapter_flash_erase三个操作函数需要共用互斥锁。
若调用的芯片flash api本身具有互斥性,则无需再加锁;若调用的芯片flash api本身不具互斥性,则需在os_adapter_flash层添加互斥锁。
2,如果支持片上运行,在操作flash可能会导致系统tick不准,在操作flash后需要弥补系统tick(重要)。
3,读一个扇区时间在3ms以内。
int os_adapter_flash_write(const unsigned int addr, const unsigned char *src, const unsigned int size);
函数说明
向flash写入数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | addr | 写入的flash首地址 |
[in] | dst | 写入数据的buffer指针 |
[in] | size | 写入的buffer大小 |
返回值
0 : 成功;
其他:失败错误码
备注
写一个扇区时间在20ms以内。
int os_adapter_flash_erase(const unsigned int addr, const unsigned int size);
函数说明
擦除flash块
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | addr | 擦除的flash首地址 |
[in] | size | 擦除的flash大小 |
返回值
0 : 成功;
其他:失败错误码;
备注
擦一个扇区时间在65ms以内。
UNI_STORAGE_DESC_S* os_adapter_storage_get_desc(void);
函数说明
获取芯片sdk为涂鸦应用数据划分的KV(Key-Value)-flash分区信息。
参数
无
返回值
UNI_STORAGE_DESC_S* : KV-flash分区信息结构体指针
备注
static UNI_STORAGE_DESC_S storage = {
SIMPLE_FLASH_START,
SIMPLE_FLASH_SIZE,
PARTITION_SIZE,
SIMPLE_FLASH_SWAP_START,
SIMPLE_FLASH_SWAP_SIZE,
SIMPLE_FLASH_KEY_ADDR
};
UNI_STORAGE_DESC_S* os_adapter_storage_get_desc(void)
{
return &storage;
}
分区名 | 描述 | 长度(推荐值) | 说明 |
---|---|---|---|
SIMPLE_FLASH | KV数据 | 0x10000(64K) | 最少32K |
SIMPLE_FLASH_SWAP | KV数据的备份区 | 0x4000(16K) | 最少12K |
SIMPLE_FLASH_KEY_ADDR | KV加密密钥存储区 | 0x1000(4K) | 大小不可更改 |
UF_PARTITION_TABLE_S* os_adapter_uf_get_desc(void);
函数说明
获取芯片sdk为涂鸦应用数据划分的uf_file-flash分区信息。
参数
无
返回值
UF_PARTITION_TABLE_S* : UF_file-flash分区信息结构体指针
备注
static UF_PARTITION_TABLE_S uf_file = {
.sector_size = PARTITION_SIZE,
.uf_partition_num = 2,
.uf_partition = {
{xx, 0x8000},
{xx, 0x18000}
}
};
分区名 | 描述 | 长度(推荐值) | 说明 |
---|---|---|---|
UF_FILE_1 | UF_FILE数据1区 | 0x8000(32K) | 32K,起始位置可以调整 |
UF_FILE_2 | UF_FILE数据2区 | 0x18000(96K) | 96K,起始位置可以调整 |
Tuya HAL Output 接口提供了日志输出重定向的接口,如果需要对日志输出进行重定向,可以实现此接口。如果不需要此功能,可以不实现。
void os_adapter_output_log(const char *str)
函数说明
打印字符串
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | str | 字符串指针 |
返回值
void
int os_adapter_log_close(void)
函数说明
关闭log口
业务需要用到log uart的io作为普通io时需要关闭uart功能
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | str | 字符串指针 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_LOG_CLOSE_FAILED :失败
int os_adapter_log_open(void)
函数说明
恢复log口
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_LOG_OPEN_FAILED :失败
Tuya HAL Wi-Fi 提供了Wi-Fi操作的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
int os_adapter_wifi_all_ap_scan(AP_IF_S **ap_ary, unsigned int *num)
函数说明
扫描当前环境所有ap信息
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | ap_ary | 扫描结果 |
[out] | num | 扫描ap个数 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_AP_SCAN_FAILED :失败
备注
int os_adapter_wifi_assign_ap_scan(const char *ssid, AP_IF_S **ap)
函数说明
扫描当前环境指定ssid的ap信息
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | ssid | 指定ssid |
[out] | ap | 扫描结果 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_AP_SCAN_FAILED :扫描失败
备注
int os_adapter_wifi_release_ap(AP_IF_S *ap)
函数说明
释放ap信息资源
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | ap | 需要释放的ap信息 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_AP_RELEASE_FAILED :失败
int os_adapter_wifi_set_cur_channel(const unsigned char chan)
函数说明
设置信道
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | chan | 信道 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_CHAN_SET_FAILED :失败
备注
1,设置当前国家码信道范围之外的信道报失败
2,支持在sniffer回调里设置信道
int os_adapter_wifi_get_cur_channel(unsigned char *chan)
函数说明
获取当前信道
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | chan | 信道 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_CHAN_GET_FAILED :失败
int os_adapter_wifi_get_ip(const WF_IF_E wf, NW_IP_S *ip)
函数说明
获取 Wi-Fi 的 ip 信息( ip 地址、网关地址、地址掩码)
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | wf | Wi-Fi 模式 ,WF_STATION:station type,WF_AP:ap type |
[out] | ip | ip 信息 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_IP_GET_FAILED :失败
备注
需要区分不同模式(依据传参wf)下的ip信息
int os_adapter_wifi_set_mac(const WF_IF_E wf, const NW_MAC_S *mac)
函数说明
设置mac地址
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | wf | Wi-Fi 模式 ,WF_STATION:station type,WF_AP:ap type |
[in] | mac | mac地址 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_MAC_SET_FAILED:失败
备注
永久生效,断电不丢失
int os_adapter_wifi_get_mac(const WF_IF_E wf, NW_MAC_S *mac)
函数说明
获取mac地址
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | wf | Wi-Fi 模式 ,WF_STATION:station type,WF_AP:ap type |
[out] | mac | mac地址 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_MAC_GET_FAILED :失败
备注
STATIONAP模式下的mac地址需要区分工作模式(依据传参wf)
int os_adapter_wifi_set_work_mode(const WF_WK_MD_E mode)
函数说明
设置 Wi-Fi 工作模式
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | mode | Wi-Fi 工作模式,WWM_LOWPOWER :低功耗(指关闭 Wi-Fi 模块);WWM_SNIFFER: monitor;WWM_STATION: station,WWM_SOFTAP:softap;WWM_STATIONAP:stationap |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_WORKMODE_SET_FAILED :失败
备注
int os_adapter_wifi_get_work_mode(WF_WK_MD_E *mode)
函数说明
获取 Wi-Fi 工作模式
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | mode | Wi-Fi 工作模式,WWM_LOWPOWER :低功耗(指关闭 Wi-Fi 模块);WWM_SNIFFER: monitor;WWM_STATION: station,WWM_SOFTAP:softap;WWM_STATIONAP:stationap |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_WORKMODE_GET_FAILED :失败
int os_adapter_wifi_sniffer_set(const bool en, const SNIFFER_CALLBACK cb)
函数说明
设置sniffer功能开关
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | en | 开或关sniffer功能 |
[in] | cb | 抓包数据回调 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_SNIFFER_SET_FAILED :失败
备注
返给应用的数据要括管理包数据
int os_adapter_wifi_ap_start( const WF_AP_CFG_IF_S *cfg)
函数说明
启动ap模式
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | cfg | ap配置参数 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_AP_START_FAILED :失败
备注
1,需要根据max_conn来设置ap模式下最多允许几个sta能连接成功。
2,需要根据ip信息来设置ap模式下的ip信息。
3,stationap模式,如果ap port有连接的情况下staiton port连接路由器,连接过程以及连接
失败后ap port不可以有断连情况以及可以收发广播包。
4,配网ez+ap共存:
4.1 softap或者stationap模式下可以使能sniffer功能以及可以切换信道。
4.2 使能sniffer功能之后,扔给回调的数据要包括ap port的设备连接请求包。
int os_adapter_wifi_ap_stop(void)
函数说明
停止ap模式
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_AP_STOP_FAILED :失败
备注
1,需要针对设备当前所处模式softap或stationap做不同的关闭逻辑
2,stationap模式下,如果station port端有连接,关闭ap port过程station port不能有断连情况
int os_adapter_wifi_get_connected_ap_info_v2(FAST_WF_CONNECTED_AP_INFO_V2_S **fast_ap_info)
函数说明
获取所连ap信息,用于快连功能
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | fast_ap_info | 所连ap信息 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_APINFO_GET_FAILED :失败
备注
1,fast_ap_info 需要在该api内动态申请内存
2, 每次重连路由器成功都会获取一次路由器信息,如有更新会同步到flash
int os_adapter_fast_station_connect_v2(const FAST_WF_CONNECTED_AP_INFO_V2_S *fast_ap_info)
函数说明
快速连接路由器
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | fast_ap_info | 快连所需的ap信息 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_FAST_CONN_FAILED :失败
备注
配过网且重启之后第一次连接才会调用这个函数
int os_adapter_wifi_station_connect(const char *ssid, const char *passwd)
函数说明
连接路由器
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | ssid | ssid |
[in] | passwd | passwd |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_CONN_FAILED :失败
备注
1,非阻塞,启动连接流程成功后,上层会每隔1s钟调用os_adapter_wifi_station_get_status查询 Wi-Fi 连接状态
2,需要使能自动重连功能,重连时间在1min以内即可,上层断连情况下会每隔1min发起一次重连
int os_adapter_wifi_station_disconnect(void)
函数说明
断开路由器
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_DISCONN_FAILED :失败
int os_adapter_wifi_station_get_conn_ap_rssi(char *rssi)
函数说明
获取所连ap的信号强度
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | rssi | 信号强度 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_RSSI_GET_FAILED :失败
备注
1,不移动设备和路由器的位置,多次获取rssi只能出现小范围的波动
2,移动设备和路由器的位置,获取rssi会有对应的变化
int os_adapter_wifi_get_bssid(unsigned char *mac)
函数说明
获取所连ap的mac地址
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | mac | mac地址 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_BSSID_GET_FAILED :失败
int os_adapter_wifi_station_get_status(WF_STATION_STAT_E *stat)
函数说明
获取 Wi-Fi 当前的连接状态
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | stat | 连接状态, WSS_IDLE:空闲;WSS_CONNECTING : 连接中;WSS_PASSWD_WRONG: 密码错误;WSS_CONN_FAIL: 连接失败;WSS_CONN_SUCCESS: 连接成功;WSS_GOT_IP:dhcp成功 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_STAT_GET_FAILED :失败
int os_adapter_wifi_set_country_code(const COUNTRY_CODE_E ccode)
函数说明
设置国家码
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | ccode | 国家码,COUNTRY_CODE_CN: 中国区 1-13 ;COUNTRY_CODE_US :美国区 1-11;COUNTRY_CODE_JP: 日本区 1-14;COUNTRY_CODE_EU |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_CCODE_SET_FAILED :失败
备注
1,国家码暂时只需要支持中国区(CN 1-13)、美国区(US 1-11)、日本区(JP 1-14)、欧洲区(EU 1-13)
2,针对不同的国家码,需要达到的要求如下:
2.1 扫描路由器时只能扫到国家码对应信道列表的ap。
2.2 欧洲区需要实现欧洲自适应功能
2.3 设置信道时,设置的信道不在当前国家码的信道列表范围之内,设置信道返回error
int os_adapter_wifi_send_mgnt(const unsigned char *buf, const unsigned int len)
函数说明
发送管理包数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | buf | 管理包数据buf |
[in] | len | 管理包数据长度 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_MGNT_SEND_FAILED :失败
int os_adapter_wifi_register_recv_mgnt_callback(const bool enable, const WIFI_REV_MGNT_CB recv_cb)
函数说明
设置应用层是否接收管理包数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | enable | 是否开启接收管理包数据 |
[in] | recv_cb | 接收管理包数据回调 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_MGNT_REG_FAILED :失败
int os_adapter_set_wifi_lp_mode(IN const bool en, IN const unsigned int dtim)
函数说明
Wi-Fi 低功耗设置
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | en | 是否开启 Wi-Fi 低功耗模式 |
[in] | dtim | dtim参数 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_WF_LPMODE_SET_FAILED :失败
Tuya HAL BLE 提供了 BLE 操作的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
typedef VOID (*TY_BT_MSG_CB)(int id, ty_bt_cb_event_t e, unsigned char *buf, unsigned int len);
typedef struct {
char name[DEVICE_NAME_LEN]; //蓝牙名字
ty_bt_mode_t mode;
unsigned char link_num; // 最大支持客户端连接数,默认是1
TY_BT_MSG_CB cb; // 事件和数据回调函数
tuya_ble_data_buf_t adv; // 广播内容
tuya_ble_data_buf_t scan_rsp; // 客户端(APP)扫描响应数据
}ty_bt_param_t;
typedef struct {
ty_bt_scan_type_t scan_type; /* 扫描类型 */
char name[DEVICE_NAME_LEN]; // 蓝牙名字,设置为TY_BT_SCAN_BY_NAME时生效
char bd_addr[6]; //蓝牙的MAC,设置为TY_BT_SCAN_BY_MAC时生效
char rssi; // 扫描到后,返回信号强度
unsigned char channel; // 扫描到后,返回信道
unsigned char timeout_s; /* 扫描超时,在规定的时间没扫到,返回失败,单位是second. */
}ty_bt_scan_info_t;
int os_adapter_bt_port_init(ty_bt_param_t *p)
函数说明
初始化蓝牙:在 Wi-Fi 和蓝牙共用RF的情况,该函数需要支持多次调用,即在调用tuya_bt_port_deinit关闭蓝牙后,可以再次调用该函数来重新初始化蓝牙
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | p | 蓝牙参数结构体指针 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_BT_INIT_FAILED :失败
备注
1 不能在该函数里面添加sleep函数来等待初始化完成
2 蓝牙初始化完成后,是通过TY_BT_EVENT_ADV_READY事件回到通知到应用层
int os_adapter_bt_port_deinit(void)
函数说明
关闭蓝牙初始化
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_BT_DEINIT_FAILED :失败
备注
1 在 Wi-Fi 和蓝牙共用RF的情况,关闭 Wi-Fi 前,需要先调用该函数关闭蓝牙
2 在低功耗的情况下,调用该函数来关闭蓝牙从而达到低功耗
int os_adapter_bt_gap_disconnect(void)
函数说明
蓝牙作为slave主动断开连接
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_BT_DISCONN_FAILED :失败
int os_adapter_bt_send(unsigned char *data, unsigned char len)
函数说明
蓝牙作为slave发送数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | data | 数据指针 |
[in] | len | 数据长度 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_BT_SEND_FAILED :失败
int os_adapter_bt_reset_adv(tuya_ble_data_buf_t *adv, tuya_ble_data_buf_t *scan_resp)
函数说明
重置蓝牙广播内容和扫描响应内容
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | adv | 蓝牙广播数据 |
[in] | lscan_respen | 蓝牙扫描响应数据 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_BT_ADV_RESET_FAILED :失败
int os_adapter_bt_get_rssi(signed char *rssi)
函数说明
获取蓝牙的信号强度
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[out] | rssi | 信号强度指针 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_BT_RSSI_GET_FAILED :失败
int os_adapter_bt_start_adv()
函数说明
启动蓝牙广播,直接使用原有的参数
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_BT_ADV_START_FAILED :失败
int os_adapter_bt_stop_adv()
函数说明
停止蓝牙广播
参数
无
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_BT_ADV_STOP_FAILED :失败
int os_adapter_bt_assign_scan(ty_bt_scan_info_t *info)
函数说明
扫描指定蓝牙名字,获取蓝牙信息,用于产测
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[inout] | info | 蓝牙信息 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_BT_SCAN_FAILED :失败
备注
1 scan_type为TY_BT_SCAN_BY_NAME,则扫描特定的蓝牙名字的信标
2 scan_type为TY_BT_SCAN_BY_MAC,则扫描特定的MAC地址的信标
3 返回的信息中,一定需要携带信号强度
Tuya HAL UART 提供了 UART 操作的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
typedef enum {
TY_UART0 = 0x00,
TY_UART1,
TY_UART2,
TY_UART3,
TY_UART_NUM,
} TY_UART_PORT_E;
涂鸦默认TY_UART0为日志口,TY_UART1是用户口,TY_UART2、TY_UART3是拓展串口。
涂鸦上层授权、用户对接用的串口是TY_UART1,如果涂鸦设定的串口对应关系和芯
片平台有冲突,请在适配层做调整。
int *os_adapter_uart_init(const TY_UART_DEV_S *uart)
函数说明
串口初始化
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | uart | 串口句柄,需要初始化相关参数 。uart->port: 串口id;uart->arg : 配置参数;uart->cb:UART rx中断回调 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_UART_INIT_FAILED :失败
int os_adapter_uart_deinit(const TY_UART_PORT_E port)
函数说明
串口反初始化函数
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | 串口 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_UART_DEINIT_FAILED :失败
int os_adapter_uart_send_char(const TY_UART_PORT_E port, const unsigned char ch)
函数说明
串口数据发送函数
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | 串口 |
[in] | ch | 要发送的数据 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_UART_SEND_FAILED :失败
int os_adapter_uart_pool_read_char(const TY_UART_PORT_E port, unsigned char *ch)
函数说明
串口轮询读数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | 串口 |
[out] | ch | 接收数据的指针 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_UART_READ_FAILED :失败
Tuya HAL GPIO提供了 GPIO 操作的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
int os_adapter_gpio_inout_set(const TY_GPIO_PORT_E port, const bool in)
函数说明
设置GPIO输入输出状态
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | GPIO口 |
[in] | in | 0:输出;1:输入 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_GPIO_INOUT_SET_FAILED :失败
int os_adapter_gpio_mode_set(const TY_GPIO_PORT_E port, const TY_GPIO_MODE_E mode)
函数说明
设置GPIO模式函数
mode | —— |
---|---|
TY_GPIO_PULLUP | 上拉模式 |
TY_GPIO_PULLDOWN | 下拉模式 |
TY_GPIO_PULLUP_PULLDOWN | 推挽输出模式 |
TY_GPIO_OPENDRAIN | 开漏输出模式 |
TY_GPIO_FLOATING | 浮空输入模式 |
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | GPIO口 |
[in] | mode | GPIO工作模式 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_GPIO_MODE_SET_FAILED :失败
int os_adapter_gpio_read(const TY_GPIO_PORT_E port)
函数说明
读取GPIO口电平状态函数
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | GPIO口 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_GPIO_READ_FAILED :失败
int os_adapter_gpio_write(const TY_GPIO_PORT_E port, const bool high)
函数说明
设置GPIO口电平状态函数
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | GPIO口 |
[in] | high | 电平状态:0:低电平;1:高电平 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_GPIO_WRITE_FAILED :失败
int os_adapter_gpio_irq_init(const TY_GPIO_PORT_E port, const TY_GPIO_CALLBACK cb, const TY_GPIO_IRQ_TRIG_TYPE trig_type)
函数说明
初始化GPIO口中断函数
trig_type | —— |
---|---|
TY_IRQ_NONE | |
TY_IRQ_RISE | 上升沿触发 |
TY_IRQ_FALL | 下降沿触发 |
TY_TRQ_BOTH | 双边沿触发 |
TY_IRQ_HIGH | 高电平触发 |
TY_IRQ_LOW | 低电平触发 |
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | GPIO口 |
[in] | cb | 分配给GPIO的中断回调函数 |
[in] | trig_type | 中断触发源类型 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_GPIO_IRQ_INIT_FAILED :失败
Tuya HAL I2C提供了 I2C 操作的接口,需要不同的平台对其进行实现。如果不需要此功能,可以不实现。
int os_adapter_i2c_open(int port)
函数说明
打开I2C设备
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | i2c设备编号 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_I2C_OPEN_FAILED :失败
int os_adapter_i2c_close(int port)
函数说明
关闭I2C设备
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | i2c设备编号 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_I2C_CLOSE_FAILED :失败
int os_adapter_i2c_read(int port, int addr, uint8_t* buf, int len)
函数说明
读数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | 使用的i2c设备编号 |
[in] | addr | 从机地址 |
[out] | buf | 读取的数据缓冲区地址 |
[in] | len | 缓冲区长度 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_I2C_READ_FAILED :失败
int os_adapter_i2c_write(int port, int addr, uint8_t const* buf, int len)
函数说明
写数据
参数
输入/输出 | 参数名 | 描述 |
---|---|---|
[in] | port | 使用的i2c设备编号 |
[in] | addr | 从机地址 |
[in] | buf | 读取的数据缓冲区地址 |
[in] | len | 缓冲区长度 |
返回值
OPRT_OS_ADAPTER_OK : 成功
OPRT_OS_ADAPTER_INVALID_PARM :传参错误
OPRT_OS_ADAPTER_MALLOC_FAILED :申请内存失败
OPRT_OS_ADAPTER_I2C_WRITE_FAILED :失败
实现了所需要的的Tuya HAL接口之后,需要把这些实现注册到TuyaOS SDK。这样 SDK 就可以使用这些实现。
No. | Name | Value | message |
---|---|---|---|
1 | OPRT_OS_ADAPTER_INIT_MUTEX_ATTR_FAILED | -10100 | 初始化同步属性失败 |
2 | OPRT_OS_ADAPTER_SET_MUTEX_ATTR_FAILED | -10101 | 设置同步属性失败 |
3 | OPRT_OS_ADAPTER_DESTROY_MUTEX_ATTR_FAILED | -10102 | 销毁同步属性失败 |
4 | OPRT_OS_ADAPTER_INIT_MUTEX_FAILED | -10103 | 初始化互斥量失败 |
5 | OPRT_OS_ADAPTER_MUTEX_LOCK_FAILED | -10104 | 互斥量加锁失败 |
6 | OPRT_OS_ADAPTER_MUTEX_TRYLOCK_FAILED | -10105 | 互斥量尝试加锁失败 |
7 | OPRT_OS_ADAPTER_MUTEX_LOCK_BUSY | -10106 | 互斥量忙 |
8 | OPRT_OS_ADAPTER_MUTEX_UNLOCK_FAILED | -10107 | 互斥量解锁失败 |
9 | OPRT_OS_ADAPTER_MUTEX_RELEASE_FAILED | -10108 | 互斥量释放失败 |
10 | OPRT_OS_ADAPTER_CR_MUTEX_ERR | -10109 | 互斥量创建失败 |
11 | OPRT_OS_ADAPTER_MEM_PARTITION_EMPTY | -10110 | 内存分区空 |
12 | OPRT_OS_ADAPTER_MEM_PARTITION_FULL | -10111 | 内存分区满 |
13 | OPRT_OS_ADAPTER_MEM_PARTITION_NOT_FOUND | -10112 | 内存分区不存在 |
14 | OPRT_OS_ADAPTER_INIT_SEM_FAILED | -10113 | 初始化信号量失败 |
15 | OPRT_OS_ADAPTER_WAIT_SEM_FAILED | -10114 | 等待信号量失败 |
16 | OPRT_OS_ADAPTER_POST_SEM_FAILED | -10115 | 释放信号量失败 |
17 | OPRT_OS_ADAPTER_THRD_STA_UNVALID | -10116 | 线程状态非法 |
18 | OPRT_OS_ADAPTER_THRD_CR_FAILED | -10117 | 线程创建失败 |
19 | OPRT_OS_ADAPTER_THRD_JOIN_FAILED | -10118 | 线程JOIN函数调用失败 |
20 | OPRT_OS_ADAPTER_THRD_SELF_CAN_NOT_JOIN | -10119 | 自身线程不能调用JOIN函数 |
21 | OPRT_OS_ADAPTER_COND_CREATE_FAILED | -10120 | 创建条件变量失败 |
22 | OPRT_OS_ADAPTER_COND_RELEASE_FAILED | -10121 | 释放条件变量失败 |
23 | OPRT_OS_ADAPTER_COND_WAIT_FAILED | -10122 | 等待条件变量失败 |
24 | OPRT_OS_ADAPTER_COND_WAIT_TIMEOUT | -10123 | 等待条件变量超时 |
25 | OPRT_OS_ADAPTER_COND_SIGNAL_FAILED | -10124 | 通知条件变量失败 |
26 | OPRT_OS_ADAPTER_COND_BROADCAST_FAILED | -10125 | 广播条件变量失败 |
No. | Name | default | message |
---|---|---|---|
1 | TUYA_IOT_DEBUG | 1 | 设置DEBUG模式 |
2 | KV_KEY_SEED | 无 | 生成KEY-VALUE存储加密KEY的种子1,为了兼容老的产品(RTOS、LINUX使用),新产品不需要提供 |
3 | KV_KEY_PROJECT_NAME | 无 | 生成KEY-VALUE存储加密KEY的种子,为了兼容老的产品(LINUX使用),新产品不需要提供 |
4 | WIFI_GW | 1 | 使能Wi-Fi |
5 | GW_SUPPORT_WIRED_WIFI | 0 | 使能有线 + Wi-Fi ,必须保证WIFI_GW也使能 |
6 | TY_BT_MOD | 0 | 使能蓝牙 |
7 | ENABLE_STATION_AP_MODE | 0 | 使能Station AP模式 |
8 | KV_FILE | 0 | 使能KV_FILE,如果是0,则使用KV_FLASH,一般linux设置为1,ROTS设置为0 |
9 | SHUTDOWN_MODE | 1 | 使能Socket shutdown 模式 |
10 | LITTLE_END | 1 | 设置系统大小端模式 |
11 | TLS_SESSION | 0 | 使能TLS session保持,每个session保持会消耗240字节内存 |
12 | TLS_MODE | TLS_TUYA_ECC_PSK | TLS模式 |
13 | ENABLE_CLOUD_OPERATION | 0 | 使能使能流服务 |
14 | ENABLE_SYS_RPC | 0 | 使能RPC |
15 | TY_SECURITY_CHIP | 0 | 使能安全芯片能力,有安全芯片的时候开启 |
16 | TY_RTC | 1 | 使能RTC |
17 | TY_WATCHDOG | 1 | 使能看门狗 |
18 | TUYA_OPERATOR_TYPE | 0 | 第三方运营商ID上报,按bit使能不同的运营商 |
19 | ENABLE_HTTP_TRUNK | 0 | 使能HTTP TRUNK模式 |
20 | QRCODE_ACTIVE_MODE | 0 | 使能扫码配网 |
21 | ENABLE_AP_FAST_CONNECT | 0 | 使能AP快连模式 |
22 | TY_WIFI_FFC | 0 | 使能FFC |
23 | ENABLE_GOOGLE_LOCAL_HOME | 0 | 使能google local home控制 |
24 | ENABLE_LAN_LINKAGE | 1 | 使能局域网联动 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈