onboard sdk 与无人机失去连接 OSDK lost connection with Drone
0
void
Vehicle::fcLostConnectCallBack(void)
{
DSTATUS("OSDK lost connection with Drone!");
}
uint8_t
Vehicle::sendHeartbeatToFCFunc(Linker *linker)
{
if (linker) {
uint8_t ackData[1024];
uint8_t *data = (uint8_t *) &heartBeatPack;
T_CmdInfo heatBeatCmdInfo = {0};
T_CmdInfo heatBeatAckCmdInfo = {0};
heatBeatCmdInfo.cmdSet = OpenProtocolCMD::CMDSet::Activation::heatBeatCmd[0];
heatBeatCmdInfo.cmdId = OpenProtocolCMD::CMDSet::Activation::heatBeatCmd[1];
heatBeatCmdInfo.dataLen = sizeof(HeartBeatPack);
heatBeatCmdInfo.needAck = OSDK_COMMAND_NEED_ACK_FINISH_ACK;
heatBeatCmdInfo.packetType = OSDK_COMMAND_PACKET_TYPE_REQUEST;
heatBeatCmdInfo.protoType = PROTOCOL_SDK;
heatBeatCmdInfo.addr = GEN_ADDR(0, ADDR_SDK_COMMAND_INDEX);
heatBeatCmdInfo.channelId = 0;
linker->sendSync(&heatBeatCmdInfo, data,
&heatBeatAckCmdInfo, ackData, 500, 2);
HeartBeatPack *ack = (HeartBeatPack *)ackData;
if (ack->seqNumber == heartBeatPack.seqNumber) {
fcLostConnectCount = 0;
osdkConnectFCFlag = 1;
} else {
fcLostConnectCount++;
}
if (fcLostConnectCount > kMaxFCLostConnectCount) {
osdkConnectFCFlag = 0;
DJI::OSDK::Vehicle::fcLostConnectCallBack();
}
heartBeatPack.seqNumber++;
return true;
} else {
return false;
}
}
经过代码查找,发现是 ack->seqNumber == heartBeatPack.seqNumber 这个条件一直不满足从而导致一直 OSDK lost connection with Drone 这个错误,哪个大神能够解决。
|
|
|
|