使用mop方式实现osdk和msdk的通信,在osdk侧,用MopPipeline的recvData接收msdk侧发...
已完成-
未接收到任何数据之前,程序表现正常:未收到数据之前blocking,达到一个较长的timeout时间后,返回timeout。接收过一次数据之后,recvData开始按照1800ms左右的间隔返回timeOut
[2867554.480]STATUS/1 @ accept, L94: /*! 4.Accept finished */
[2867554.480]STATUS/1 @ accept, L96: MOP channel [49150] accepted success
[2867554.480]STATUS/1 @ normalAccept, L93: accept successfully
[2867554.480]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867563.887]STATUS/1 @ normalServerReceiver, L167: [Normal-Service] recv data from cilent, len:1
[2867563.887]STATUS/1 @ normalServerReceiver, L181: [Normal-Service] msg is fan info, fan_id:246
[2867563.887]STATUS/1 @ normalServerReceiver, L182: [Normal-Service] msg is fan info, fan_id:40
[2867563.887]STATUS/1 @ normalServerReceiver, L183: [Normal-Service] msg is fan info, fan_id:92
[2867563.887]STATUS/1 @ normalServerReceiver, L184: [Normal-Service] msg is fan info, fan_id:143
[2867563.928]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867565.729]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867565.729]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867567.530]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867567.530]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867569.331]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867569.331]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867571.131]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867571.131]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867572.932]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867572.932]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867574.733]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867574.733]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867576.534]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867576.534]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867578.334]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867578.334]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867580.135]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867580.135]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service
[2867581.936]STATUS/1 @ normalServerReceiver, L149: [Normal-Service] receive timeout
[2867581.936]STATUS/1 @ normalServerReceiver, L139: [normal-service] running normal service -
voidMopManager::normalAccept(){PipelineType type = RELIABLE;PipelineID id = OM_NORMAL_RELIABLE_PIPELINE_ID;
/*! create mop server */normalServer = new MopServer();
/*! connect pipeline */normalPipeline = NULL;
normalReceiverRunning = false;MopErrCode acceptRet = MOP_PASSED;if (((acceptRet = normalServer->accept(id, type, normalPipeline)) != MOP_PASSED) ||(normalPipeline == NULL)){DERROR("MOP server accept failed, ret : %d", acceptRet);delete normalServer;normalServer = NULL;return;}else{DSTATUS("accept successfully");}normalReceiverRunning = true;normalReceiveThread = new thread(&MopManager::normalServerReceiver, this);normalReceiveThread->join();delete normalReceiveThread;
/*! Disconnect pipeline */if (normalServer->close(OM_NORMAL_RELIABLE_PIPELINE_ID) != MOP_PASSED) {DERROR("MOP Pipeline disconnect pipeline(%d) failed", OM_NORMAL_RELIABLE_PIPELINE_ID);} else {DSTATUS("Disconnect mop pipeline id(%d) successfully", OM_NORMAL_RELIABLE_PIPELINE_ID);}delete normalServer;normalServer = NULL;normalReceiveThread = NULL;}
voidMopManager::normalServerReceiver(){//接收缓存区uint8_t* recvBuf = (uint8_t*)OsdkOsal_Malloc(RELIABLE_RECV_ONCE_BUFFER_SIZE);MopErrCode mopRet;if (recvBuf == NULL){DERROR("[File-Service] OsdkOsal_Malloc recv buffer error");return;}//发送缓存区uint8_t* sendBuf = (uint8_t *)OsdkOsal_Malloc(RELIABLE_SEND_ONCE_BUFFER_SIZE);if (sendBuf == NULL){DERROR("[File-Service] OsdkOsal_Malloc send buffer error");return;}
//接收类型MopPipeline::DataPackType readPack = { (uint8_t*)recvBuf,RELIABLE_RECV_ONCE_BUFFER_SIZE };//发送类型MopPipeline::DataPackType writePack = {(uint8_t*)sendBuf,RELIABLE_SEND_ONCE_BUFFER_SIZE };
while (normalReceiverRunning){DSTATUS("[normal-service] running normal service");memset(recvBuf, 0, RELIABLE_RECV_ONCE_BUFFER_SIZE);memset(sendBuf, 0, RELIABLE_SEND_ONCE_BUFFER_SIZE);readPack.length = RELIABLE_RECV_ONCE_BUFFER_SIZE;writePack.length = RELIABLE_SEND_ONCE_BUFFER_SIZE;mopRet = normalPipeline->recvData(readPack, &readPack.length);if (mopRet != MOP_PASSED){if (mopRet == MOP_TIMEOUT){DSTATUS("[Normal-Service] receive timeout");}else if (mopRet == MOP_CONNECTIONCLOSE){DSTATUS("[Normal-Service] connection of pipeline [%d] closed",normalPipeline->getId());DSTATUS("[Normal-Service] disconnect from cilent now stop task");break;}else{DERROR("[Normal-Service] recv data from cilent error,stat:%lld",mopRet);}//OsdkOsal_TaskSleepMs(1000);}else{DSTATUS("[Normal-Service] recv data from cilent, len:%d",readPack.length);if (readPack.length > 0){NormalMessage *msg = (NormalMessage *) recvBuf;switch(msg->cmd) {case NORMAL_CMD_FAN_CENTER://todo: 替换成实际获取经纬度的方法Location location;location.fan_center[0] = 3.12;location.fan_center[1] = 131.63;location.fan_center[2] = 135.72;sendBuf[0] = NORMAL_CMD_FAN_CENTER;memcpy(sendBuf + 1, &location, sizeof(Location));DSTATUS("[Normal-Service] msg is fan info, fan_id:%d", (int)sendBuf[1]);DSTATUS("[Normal-Service] msg is fan info, fan_id:%d", (int)sendBuf[2]);DSTATUS("[Normal-Service] msg is fan info, fan_id:%d", (int)sendBuf[3]);DSTATUS("[Normal-Service] msg is fan info, fan_id:%d", (int)sendBuf[4]);mopRet = normalPipeline->sendData(writePack, &writePack.length);if (mopRet != MOP_PASSED){DSTATUS("[Normal-Service] send data fail:%d", mopRet);}break;case NORMAL_CMD_FLIGHT_INFO:InfoMsg infoMsg;memcpy(&infoMsg, msg->data, sizeof(InfoMsg));DSTATUS("[Normal-Service] msg is fan info, fan_id:%s", infoMsg.fan_id);break;case NORMAL_CMD_INSPECT_STATE:break;case NORMAL_CMD_TEST:break;case NORMAL_CMD_OTHER_INFO:break;default:break;}}}}OsdkOsal_Free(recvBuf);OsdkOsal_Free(sendBuf);}
请先登录再写评论。
评论
7 条评论