某软件的架构设计

前置说明

根据项目的需要情况,对PSDK的demo进行阅读。
系统版本:ubuntu20.04
gcc:9.3.0
cmake:3.16.3
Payload_SDK_V2.2.0-build.262

初步部署

该版本软件发生了较大的架构调整,因此有必要进行一些简单的梳理。与以往没有变化的是需要在appinfo中修改用户的配置信息,在串口中调整设备节点的名称与波特率。本次一个变化是网口的使用,也需要通过设置节点名称的方式进行访问,对于通过网络的传输也有了变化,不再是以UDP:PROT的形式发送,新的SDK提供了PsdkDataTransmission_SendDataStream()方法,这意味着已经设计好的架构需要重新调整。
另外,编译变得更为好用,在CMakeLists中通过uname -m命令确定系统的架构,从而选择编译器。在交叉编译的时候,我们需要调整这个位置的编译器设置。

关键方法的使用

在设计中,我们首当其冲的仍是数据传输的3个接口,这构建了基本的通信环节,向APP端发送数据提供了命令通道、高速数据通道2个方法;接受APP发送过来的数据提供了1个命令通道。
在app_info.h这个头文件中定义

#define PSDK_USING_DATA_TRANSMISSION

将数据传输模块编译进入程序中,该部分在main()的init中实现。其他的功能模块也通过这样的方式编译进程序当中。在相应的功能模块的socure文件中,定义了一个传输数据的task,以及2个接受数据的回调函数,以供实现相应的基本功能。数据源的更新频率为1s。

1、向APP端发送数据(命令通道)
在周期为1s的task中调用如下方法,其中data的类型为const uint8_t *data:

psdkStat = PsdkDataTransmission_SendDataToMobile(dataToBeSent, sizeof(dataToBeSent));
if (psdkStat != PSDK_RETURN_CODE_OK)
    PsdkLogger_UserLogError("send data to mobile error.");

命令通道的带宽为4KB/S

2、接收APP端的数据(命令通道)
构造回调函数如下

static T_PsdkReturnCode ReceiveDataFromMobile(const uint8_t *data, uint16_t len)
{
    static char printData[PSDK_DATA_TRANSMISSION_DATA_RECEIVE_FROM_MOBILE_MAX_LEN + 1];

    USER_UTIL_UNUSED(len);

    strncpy(printData, (const char *) data, len);
    printData[len] = '\0';
    PsdkLogger_UserLogDebug("receive data from mobile: %s.", printData);

    return PSDK_RETURN_CODE_OK;
}

回调函数注册

psdkStat = PsdkDataTransmission_RegReceiveDataFromMobileCallback(ReceiveDataFromMobile);
if (psdkStat != PSDK_RETURN_CODE_OK) {
    PsdkLogger_UserLogError("register receive data from mobile error.");
    return PSDK_RETURN_CODE_ERR_UNKNOWN;
}

3向APP端发送数据(高速通道)
高速数据通道的带宽为4Mbps,底层逻辑为UDP,仍然为在周期为1的task中调用如下的方法

psdkStat = PsdkDataTransmission_SendDataStream(dataToBeSent, sizeof(dataToBeSent));
if (psdkStat != PSDK_RETURN_CODE_OK)
    PsdkLogger_UserLogError("send data to data stream error.");

本文内容为整理思路所写,更为详细的细节可参考
https://developer.dji.com/cn/document/a822024a-3876-4fb7-9082-ec60465c4cc4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值