【引子】
- 第三方负载包括麦克风喊话器、探照灯、降落伞等负载。MSDK V5将第三方负载中喊话器封装成了IMegaphoneManager类,本篇文章将会介绍如何使用麦克风喊话器。以及针对如何使用第三方负载(包括与PSDK、OSDK通讯)总结一份使用指南。
【麦克风喊话器】
【与PSDK通讯】
- MSDK 5.2之前的版本未包含PayloadManager去统一管理与PSDK设备的通讯,因此需要使用PayloadKey去实现操作。
1.PayloadKey的使用方法
-
- 通过KeyPayloadType将获取转接环类型,比如Skyport 1,Skyport 2和X-Port。
- 通过KeyPayloadProductName获取负载的名称,负载名称在PSDK代码里定义。
- 通过KeyIsPayloadProductReady得知负载是否连接正常。
- 通过KeyUploadBandwidthLimit得知MSDK发送数据给PSDK的通道带宽。
- 通过监听KeyDataFloatHintMsgFromPayload获取负载向MSDK传输的HintMessage,相当于MSDK V4的setMessageCallback功能。
- 通过监听KeyDataFromPayload获取负载向MSDK发送的字节数组数据,相当于MSDK V4的setCommandDataCallback。通过KeySendDataToPayload以performAction的方式向负载发送数据,相当于MSDK V4的sendDataToPayload接口。
- 如果需要控制Widget,请阅读如何控制PayloadWidget?
- 其他PayloadKey请在MSDK V5 Sample里全局搜索PayloadKey后找到它继承的co_s包查询其他Payloadkey再参照MSDK V4的使用方法。
- PayloadKey都没有经过详细的测试,可能存在无法使用的情况。
- 请使用PSDK V3.0+版本,OSDK设备(妙算)将被识别成第三方负载,所有连接原OSDK串口的第三方设备都需要使用onBoardKey,使用方法与PayloadKey类似。
2.PayloadManager的使用方法
-
- 通过PayloadCenter可以拿到飞机不同拓展位置的PayloadManager去实现与对应位置上的PSDK程序进行通讯。
- PSDK设置的窗口组件中,TextInputBoxWidget是通过数据传输实现的,因此无法通过setWidgetValue去设置它的值。
【MOP功能】
- MSDK 5.3版本开始包含PipelineManager去统一管理MOP功能,5.3之前的版本可以参考PipelineIdentifier的使用方法。
1.PipelineIdentifier的使用方法
-
- 连接pipeline,和v4对比,v4只需要填入id,而v5需要填入PipelineIdentifier,其中第三个参数为PAYLOAD或者ONBOARD,第四个参数为id,其余参数为0即可。
var mPipelineIdentifier = PipelineIdentifier(0, 0, PipelineDeviceType.PAYLOAD, 49152, 0)
PipelinesManager.connectPipeline(mPipelineIdentifier, TransmissionControlType.STABLE - 断开pipeline,与连接同理。
PipelinesManager.disconnectPipeline(mPipelineIdentifier)
- 写数据,使用方法和v4一样,但是第一个参数需要递入PipelineIdentifier,第二个参数为byte数组。
PipelinesManager.writeData(mPipelineIdentifier, data)
- 读数据,使用方法和v4一样。
PipelinesManager.readData(mPipelineIdentifier, data)
- 暂时没有对应的示例代码,只能参考MSDK v4的MOP demo。
- 连接pipeline,和v4对比,v4只需要填入id,而v5需要填入PipelineIdentifier,其中第三个参数为PAYLOAD或者ONBOARD,第四个参数为id,其余参数为0即可。
2.PipelineManager的使用方法
-
- connectPipeline:用于建立通道连接。它需要传入通道的ID,设备的类型以及通道的类型。其中设备的类型指的是设置挂载口的类型,ONBOARD表示的是机身上方的拓展口,仅在M300和M350上使用。
- disconnectPipeline:用于断开通道,它需要的参数与建立连接相同。
- 在通道连接成功之后可以拿到对应的Pipeline对象,用于接收和发送数据。接收数据使用readData,发送数据使用writeData。需要注意的是数据的发送受限于通道的实际带宽,具体可以查看psdk的文档:通道带宽
- DEMO:https://github.com/dji-sdk/Mobile-SDK-Android-V5/blob/dev-sdk-main/SampleCode-V5/android-sdk-v5-sample/module-aircraft/src/main/java/dji/sampleV5/moduleaircraft/pages/MOPCenterFragment.kt
评论
4 条评论
我们在机载板卡上运行了PSDK,遥控器Pilot上能识别到PSDK,但是使用KeyPayloadProductName检测不到设备,KeyDataFromPayload和KeySendDataToPayload也用不了。请问是什么原因呢?
我测试过跑PSDK v3的Sample是没问题呀,获取名称可以获得。会不会是你的createKey用得不对,用这个createKey。
这是我们的代码,也就是MSDKdemo里面的
代码没什么问题,你发邮件给dev@dji.com来继续咨询吧。
请登录写评论。