API 说明

更新时间:2023-12-06 09:54:47下载pdf

本文介绍 SDK 中释放给用户的 API 接口的使用方法和注意事项。

  • API 封装接口是一种统一抽象,为了适配多种芯片,单个芯片并不是需要适配所有接口,根据使用情况按需适配,所以会出现某些接口不能使用的情况。
  • 以下只对该模组已适配接口使用注意做分析,具体 API 说明参见接口注释说明。

驱动 API

  • 接口路径:software\TuyaOS\include\components\tal_driver\include

  • 驱动使能定义:software\TuyaOS\include\base\include\tuya_iot_config.h

ADC 驱动

驱动接口分析

//TS24-U 只适配了 ADC0 模块,所以 unit_num 默认是 0,同时 ADC0 模块对应一个 IO 口,所以 ch_num 也是 0
OPERATE_RET tal_adc_init(UINT32_T unit_num, TUYA_ADC_BASE_CFG_T *cfg);
OPERATE_RET tal_adc_read_single_channel(UINT32_T unit_num, UINT8_T ch_num, UINT32_T *buf);

//获取 ADC 采样位数,从而换算最大采样值
UINT8_T tal_adc_width_get(UINT32_T unit_num);

//获取 ADC 参考电压
UINT32_T tal_adc_ref_voltage_get(VOID_T);

//暂时没有适配
OPERATE_RET tal_adc_read_data(UINT32_T unit_num, UINT32_T *buff, UINT8_T len);
INT32_T tal_adc_temperature_get(VOID_T);

使用举例

#define BATTERY_ADC_BIT_CNT         (4095)
STATIC TUYA_ADC_BASE_CFG_T s_adc_info;
UINT32_T adc_raw_val = 0;
UINT8_T s_ch_id = GPIO_PORTB_2_PIN;//表示 ADC 通道的 IO 引脚

s_adc_info.ch_nums = 1;
s_adc_info.type = TUYA_ADC_EXTERNAL_SAMPLE_VOL;
s_adc_info->ch_list = &s_ch_id;
tal_adc_init(0, &s_adc_info);
tal_adc_read_single_channel(0, 0, &adc_raw_val);
tal_adc_deinit(0);

UINT16_T adc_volt_val = 0;
adc_volt_val = tal_adc_ref_voltage_get() * adc_raw_val / BATTERY_ADC_BIT_CNT;

Flash 驱动

直接根据地址,操作 Flash。
由于 SDK 已经对 Flash 进行了功能划分,直接操作会有影响已有功能的风险,所以尽量不要使用这种直接根据地址操作 Flash 的接口。

GPIO 驱动

驱动接口分析

//芯片引脚映射 software\TuyaOS\vendor\efr_matter\tuyaos\components\include\ty_modules.h
//控制 GPIO,pin_id 参数就需要填写映射后的,例如 GPIO_PORTB_4_PIN
OPERATE_RET tal_gpio_init(UINT32_T pin_id, TUYA_GPIO_BASE_CFG_T *cfg);

使用举例

TUYA_GPIO_BASE_CFG_T gpio;

gpio.mode = TUYA_GPIO_PUSH_PULL;
gpio.direct = TUYA_GPIO_OUTPUT;
gpio.level = TUYA_GPIO_LEVEL_LOW;
tal_gpio_init(GPIO_PORTB_4_PIN, &gpio);

I2C 驱动

驱动接口分析

//baudrate 指示频率,最大频率 100000
//port_num 指示 I2C 模块标记,目前只支持一个 I2C 通道,所以默认为 0
//对应内部默认 IO 为 SCL:PA7 SDA:PA8,如需改变见下方接口
OPERATE_RET tal_i2c_init(UINT32_T port_num, UINT32_T baudrate);

//有些客户有修改对应 GPIO 的需求,不属于通用接口
/**
* @brief 用于用户更改 SDK I2C 驱动中默认的 IO 口,注意必须搭配 tal_i2c_init 使用,在 init 之前
*
* @param[in] port:I2C 通道
* @param[in] scl_io sda_io:I2C IO
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tkl_i2c_user_change_io(UINT32_T port, UINT8_T scl_io,UINT8_T sda_io);

PWM 驱动

驱动接口分析

//为了方便使用,驱动设计思路为提供 PWM 能力,所以通道含义为第几个 PWM 口,用户无需配置每个通道 IO
//默认提供 5 个 PWM 口,ch_id 对应 0-4,对应的 GPIO 为 PC2\PC1\PA4\PA5\PA6
OPERATE_RET tal_pwm_init(UINT32_T ch_id, TUYA_PWM_BASE_CFG_T *cfg);

//有些客户有修改对应 GPIO 的需求,不属于通用接口
/**
* @brief 用于用户更改 SDK PWM 驱动中默认的 IO 口,注意必须搭配 tal_pwm_init 使用,在 init 之前
*
* @param[in] ch_id:PWM port ID
* @param[in] pwm_io:PWM IO
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tkl_pwm_user_change_io(UINT32_T ch_id, UINT8_T pwm_io);

SPI 驱动

驱动接口分析

//port_num 指示 SPI 模块标记,目前只支持一个 SPI 通道,所以默认为 0
//由于 SPI 口较多,默认没有设置 GPIO,所以使用时需要用下方接口先设定 IO
OPERATE_RET tal_spi_init(UINT_T port_num, TUYA_SPI_BASE_CFG_T *cfg);

/**
* @brief 用于用户更改 SDK SPI 驱动中默认的 IO 口,注意必须搭配 tal_spi_init 使用,在 init 之前
*
* @param[in] port:SPI 通道
* @param[in] cs_io clk_io tx_io rx_io:SPI IO
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tkl_spi_user_change_io(UINT32_T port, UINT8_T cs_io,UINT8_T clk_io,UINT8_T tx_io,UINT8_T rx_io);

UART 驱动

驱动接口分析

//由于 SDK 应用默认使用了 log 功能和产测功能,占用了串口,所以使用时应注意
//支持 3 个串口模块,port_id 使用为 0,1,2
//port_id 0:SDK 未使用
//port_id 1:SDK 用作 log 口,波特率 921600
//port_id 2:SDK 用作授权口,波特率 115200,谨慎使用,避免不能授权
OPERATE_RET tal_uart_init(UINT32_T port_id, TUYA_UART_BASE_CFG_T *cfg);

//有些客户有修改对应 GPIO 的需求,不属于通用接口
/**
* @brief 用于用户更改 SDK 串口驱动中默认的 UART IO 口,注意必须搭配 tal_uart_init 使用,在 init 之前
*
* @param[in] port_id:UART port ID
* @param[in] tx_io:UART TX IO
* @param[in] rx_io:UART RX IO
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tkl_uart_user_change_io(UINT32_T port_id, UINT8_T tx_io, UINT8_T rx_io)

sw_timer 驱动

和 FreeRTOS 的 timer 使用方法相同。

sleeptimer 驱动

暂时不支持。

watchdog 驱动

看门狗 SDK 默认开启,暂时不支持用户关闭和喂狗。

RTC 驱动

暂时不支持。

组件 API

  • 接口路径 software\TuyaOS\vendor\efr_matter\tuyaos\components\include

  • ty_modules.h

    //芯片 pin 口映射 API pin 口定义
    

Key 驱动

//key 组件初始化
//key_index:灯的序号
//pin:对应的 GPIO 口
//high_valid:是否高有效
//long_ms:长按触发时间
//key_callback:按键按下时的回调函数
void ty_key_init(uint8_t key_index,uint32_t pin,bool_t high_valid,uint32_t long_ms,key_callback_func_t key_callback);
//key 禁止
void ty_key_deinit(uint8_t key_index);

LED 驱动

//led 组件初始化
//led_index:灯的序号,pin:对应的 GPIO 口,level:初始的状态,high_valid:是否高点亮
void ty_led_init(uint8_t led_index,uint32_t pin,TUYA_GPIO_LEVEL_E level,bool_t high_valid);
//LED 控制
//控制相应的灯开
void ty_led_action_on(uint8_t led_index);
//控制相应的灯关
void ty_led_action_off(uint8_t led_index);
//控制相应的灯闪烁
void ty_led_action_blink(uint8_t led_index,uint32_t led_on_ms,uint32_t led_off_ms,uint16_t blink_times,LED_ON_OFF_T led_end_state);

非易失性存储器(NVM)驱动

提供 Flash 存储数据功能,使用 key-value store 机制,屏蔽了数据发生变化时底层 Flash 操作细节,方便使用。

//NVM_SAVE_TYPE_E 枚举中可以定义 nvm_id,每个 nvm_id 对应需要存储的一组数据
//将数据写入 Flash
OPERATE_RET flash_kv_write( IN UINT8_T nvm_id, IN UCHAR_T *data, IN USHORT_T len);

//将数据从 Flash 中读出,返回值为写入数据长度
USHORT_T flash_kv_read(IN UINT8_T nvm_id, IN UCHAR_T *data, IN USHORT_T len);

支持与帮助

在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-Matter 开发 版块进行沟通咨询。