IPC 产测 SDK

更新时间:2021-07-09 02:20:18下载pdf

涂鸦 IPC 产测 SDK 是涂鸦智能开发并提供,对接涂鸦 IoT 平台的解决方案代码。IPC 产测 SDK 主要为了方便客户快速对接涂鸦上位机,完成生产开发。

目录结构

├── demo
│   ├── cJSON.c
│   ├── cJSON.h
│   ├── main.c
│   ├── resource
│   │   ├── speaker_test_8k.pcm
│   │   └── tuya.h264
│   ├── tool
│   │   ├── iperf-3.1.3-source.tar.gz
│   │   ├── iperf3_pc.zip
│   │   └── rtwpriv.tar.gz
│   ├── tuya_fac_cmd_demo.c
│   ├── tuya_fac_cmd_demo.h
│   └── tuya_fac_media_demo.c
├── include
│   ├── tuya_fac_cmd.h
│   ├── tuya_fac_media.h
│   ├── tuya_fac_protocol.h
│   └── tuya_fac_test.h
├── lib
│   └── libtuya_fac.a
├── Makefile
└── output

开发环境搭建

解压

将涂鸦产测开发 SDK 解压至 ubuntu 任意目录,代码目录结构如上所示:

  • demo 文件夹内客户开发部分,已经给出对应的 demo 例程

  • include 文件夹为 SDK 所需要的头文件以及客户需要自行完成的函数。

  • lib 文件夹为SDK静态库

  • resource 文件夹为一些音视频文件夹

  • output 文件夹为编译和运行输出内容

  • tool 文件夹放置了一些产测可能需要用到的编译工具

编译

指定编译链

修改 Makefile 文件中的参数。COMPILE_PREX = XXXX

在当前目录执行 Makefile 脚本,依次执行 make 指令便会在 output 目录生成二进制可执行程序。

开发流程

修改 Demo 代码

main.c

  • 需指定视音频文件和 iperf 文件输出路径,否则将加载音视频文件错误。

  • 需要忽略 SIGPIPE 信号 signal(SIGPIPE, SIG_IGN);

  • 老化时间入参值单位为小时

tuya_ipc_media_demo.c

用户自行实现流媒体初始化

  • extern FILE *aud_save_fp;

  • extern FILE *aud_save_pcm_fp;

  • extern int data_size;

  • extern pthread_mutex_t mutex;

需引用以上全局变量实现音频文件数据的写入,例程参考 void *tuya_fac_media_loop(void *arg)函数。

初始化rtsp服务

RTSP 为 IPC_SDK 业务,在完成流媒体初始化和 Ring Buffer 初始化之后可对 rtsp 进行初始化,参见 int tuya_fac_media_start_rtsp();

E_CHANNEL_VIDEO_MAIN 为视频主码流,E_CHANNEL_VIDEO_SUB 为视频子码流。

tuya_ipc_cmd_demo.c

该文件是需要测试的接口的实现过程,已经给出了对应的例程,客户需要完成的是最终读写设备的操作。

功能接口,详见 tuya_fac_cmd.h 文件。

tuya_test_path

函数原型

void tuya_test_path(char *path , int verbose);

功能说明

指定可执行程序和工具运行路径,优先调用

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
Path 指定运行路径 Char * 输入参数
Verbose 开启日志 Int 输入参数

返回值

返回值 说明

tuya_get_version

函数原型

int tuya_get_version(char *data);

功能说明

获取版本号,产测字段 0x01。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data 版本号内容 Char * 输入参数

返回值

返回值 说明
0 返回版本号
-1 返回{“ret”:false}

tuya_test_rw_partition

函数原型

int tuya_test_rw_partition();

功能说明

进入产测之前,用户可自选是否需要测试可读写分区功能。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 进入产测成功
-1 进入产测失败

tuya_test_sd_write

函数原型

int tuya_test_sd_write();

功能说明

进入产测之前,用户可自选是否需要测试SD卡分区功能。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 进入产测成功
-1 进入产测失败

tuya_test_button

函数原型

int tuya_test_button();

功能说明

按键测试,产测字段 0x0a。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 返回{“ret”:true,“keyEvent”:“key0” }
-1 返回{“ret”:false}

tuya_test_led

函数原型

int tuya_test_led();

功能说明

指示灯测试,产测字段 0x0b。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_test_video

函数原型

int tuya_test_video();

功能说明

视频流测试,产测字段 0x13。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 返回{“ret”:true,“rtspUrl”:“”}
-1 返回{“ret”:false}

tuya_test_ircut

函数原型

int tuya_test_ircut(char *str);

功能说明

ircut切换测试,产测字段 0x14。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
str 切换次数 Char * 解析json

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_test_speaker

函数原型

int tuya_test_speaker();

功能说明

喇叭测试,产测字段 0x15。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_test_mic

函数原型

int tuya_test_mic(char *str,char *ipaddr);

功能说明

麦克风测试,产测字段 0x16。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
str 开关 Char * json解析
ipaddr 音频文件接收地址 Char *

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

备注

  • PC 端作为服务端先开启 8095 端口等待接收文件,并发送 0x16 命令字段

  • 设备端接收到指令后,开始录制当前环境3s音频,转化为 wav 格式文件,按 tcp/ip 方式发送给 PC 端,根据是否录制并发送成功,返回 true 或 false 字段。

  • 若 PC 端接收到文件后,则开始循环播放,并关闭 8095 端口。

  • 工人根据听到的声音手动判定结果。

tuya_test_irled

函数原型

int tuya_test_irled();

功能说明

红外灯测试,产测字段 0x17。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_write_cfg

函数原型

int tuya_write_cfg(char *data);

功能说明

写授权信息测试,产测字段 0x03。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data 授权信息 Char * 解析json

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_read_cfg

函数原型

int tuya_read_cfg(char *data);

功能说明

读授权信息测试,产测字段 0x04。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data 授权信息 Char * 输入参数

返回值

返回值 说明
0 返回{“auzkey”:”xxxx”,“uuid”:”xxxx”,”pid”:”xxx”,”prod_test”:true,“ap_ssid”:”xxxx”,“ap_pwd”:“xxxx”}
-1 返回{“ret”:false}

tuya_write_sn

函数原型

int tuya_write_sn(char *str);

功能说明

写SN测试,产测字段 0x0e。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
Str SN号 Char * 解析json

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_read_sn

函数原型

int tuya_read_sn(char *data);

功能说明

读SN测试,产测字段 0x0f。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data SN号 Char * 输入参数

返回值

返回值 说明
0 返回{“sn”:“xxx”}
-1 返回{“ret”:false}

tuya_write_bsn

函数原型

int tuya_write_bsn(char *str);

功能说明

写BSN测试,产测字段 0x0c。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
Str BSN号 Char * 解析json

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_read_bsn

函数原型

int tuya_read_bsn(char *data);

功能说明

读BSN测试,产测字段 0x0d。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data BSN号 Char * 输入参数

返回值

返回值 说明
0 返回{“bsn”:“xxx”}
-1 返回{“ret”:false}

tuya_write_mac

函数原型

int tuya_write_mac(char *str);

功能说明

写MAC测试,产测字段 0x05。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
Str MAC地址 Char * 解析json

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_read_mac

函数原型

int tuya_read_mac(char *data);

功能说明

读MAC测试,产测字段 0x06。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data MAC地址 Char * 输入参数

返回值

返回值 说明
0 返回{“mac”:“xxx”}
-1 返回{“ret”:false}

tuya_write_cc

函数原型

int tuya_write_cc(char *str);

功能说明

写国家码测试,产测字段 0x1c。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
Str 国家码 Char * 解析json

返回值

返回值 说明
0 返回{“ret”:true}
-1 返回{“ret”:false}

tuya_read_cc

函数原型

int tuya_read_cc(char *data);

功能说明

读国家码测试,产测字段 0x1d。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
data 国家码 Char * 输入参数

返回值

返回值 说明
0 返回{“country”:“xxx”}
-1 返回{“ret”:false}

tuya_test_iperf

函数原型

int tuya_test_iperf(char *addr ,
                      char *str ,
                      double *max,
                      double *avr,
                      double *min);

功能说明

无线速率测试,产测字段 0x12。

参数说明

参数名称 如何理解 参数类型 是否必选 如何设置
Addr 上位机地址 Char *
Str 速率上限 Char * 解析json
max 最大速率 Double * 输入参数
avr 平均速率 Double * 输入参数
min 最小速率 Double * 输入参数

返回值

返回值 说明
0 返回{“ret”:true, “bandwidth”:20}
-1 返回{“ret”:false}

备注

例程中已经完成了对iperf输出的解析和上报,客户需要在tool文件夹中使用对应编译链编译iperf应用。

Iperf-3.1.3编译示例:
CURDIR=\`pwd\`
tar -xzvf iperf-3.1.3-source.tar.gz
mkdir out
cd iperf-3.1.3
./configure \--host=\${HOST} \--disable-shared \--enable-static \--prefix=\${CURDIR}/out
make
make install
  • 设备端作为客户端,PC 端作为服务端。

  • PC端执行 iperf3 -s 提前开启服务端,并发送 0x12 命令字段,下发测试速率上限

  • 设备端接收到命令字,执行iperf.命令

  • 设备解析 iperf_out.txt 内 wifi 速率数值大小,按帧格式将数据反馈给 PC 端,并根据测试情况返回 true/false。

  • PC端根据反馈的 true/false 结果,以及速率大小和设置的速率阈值对比,自动判断测试结果

公共接口

tuya_fac_test_start

函数原型

int tuya_fac_test_start(void** pphdl);

功能说明

开始测试,启动音视频功能

关联函数

tuya_fac_stream_start();

tuya_fac_test_stop

函数原型

int tuya_fac_test_stop(void** pphdl);

功能说明

停止测试,退出音视频功能

关联函数

tuya_fac_stream_stop();

tuya_fac_test_loop

函数原型

int tuya_fac_test_loop(void* phdl , char *path);

功能说明

基础测试,建立socket通讯,接收和回复上位机信息。

tuya_fac_test_loop_exit

函数原型

int tuya_fac_test_loop_exit(void* phdl);

功能说明

停止基础测试。

tuya_fac_media_start_rtsp

函数原型

int tuya_fac_media_start_rtsp();

功能说明

启动rtsp服务。

tuya_fac_media_stop_rtsp

函数原型

int tuya_fac_media_stop_rtsp();

功能说明

停止rtsp服务。

tuya_fac_media_loop

函数原型

int tuya_fac_media_loop(void *arg);

功能说明

获取音视频数据,写入extern FILE *aud_save_fp
extern FILE *aud_save_pcm_fp