#include "sdi_datarecv_consumer.h" extern setupConfig_t setupConfig; extern iv::msgunit shmSonar; extern double gsoundVelocity; SDI_DataRecv_Consumer::SDI_DataRecv_Consumer(Byte_Qvector_Producer_Consumer *pBuf) { pBuffer = pBuf; } SDI_DataRecv_Consumer::~SDI_DataRecv_Consumer() { requestInterruption(); while(this->isFinished() == false); } void SDI_DataRecv_Consumer::run() { QVector tempData; BYTES2UINT bytes2uint; bytes2uint.wordData = 0xFF00; while (!QThread::isInterruptionRequested()) { tempData = pBuffer->Consume_Element(); uint16_t tempPtr = tempData.size(); bytes2uint.byteData[1] = tempData.at(tempPtr - 1); bytes2uint.byteData[0] = tempData.at(tempPtr - 2); SDI_payload_size = bytes2uint.wordData; SDI_sensor_CNT = tempData.at(8); bytes2uint.byteData[0] = tempData.at(4); bytes2uint.byteData[1] = tempData.at(5); SDI_TX_Mask = bytes2uint.wordData; if(SDI_sensor_CNT == 4 && SDI_payload_size >= 0x0061) { if(SDI_TX_Mask == 0x0041) { if(tempData.at(9)==0x00&&tempData.at(39)==0x01&&tempData.at(61)==0x06&&tempData.at(91)==0x07) { Clear_Sensor_Data(); uint8_t tempEchosCNT = tempData.at(10); // sensor 0 for(unsigned int i=0;iResultFilterAndPublish(); } else { std::cout<<"sensor ID is not correct, payload data may broken. "<= 0x008D) { if(SDI_TX_Mask == 0x0082) { if(tempData.at(9)==0x00&&tempData.at(31)==0x01&&tempData.at(61)==0x02&&tempData.at(83)==0x06&&tempData.at(105)==0x07&&tempData.at(135)==0x08) { uint8_t tempEchosCNT = tempData.at(10); // sensor 0 for(unsigned int i=0;iBubbleSort(sensorTOF_0,sensorMagnitude_0); else return; if(sensorTOF_1.size()!=0 && sensorMagnitude_1.size()!=0) this->BubbleSort(sensorTOF_1,sensorMagnitude_1); else return; if(sensorTOF_2.size()!=0 && sensorMagnitude_2.size()!=0) this->BubbleSort(sensorTOF_2,sensorMagnitude_2); else return; if(sensorTOF_3.size()!=0 && sensorMagnitude_3.size()!=0) this->BubbleSort(sensorTOF_3,sensorMagnitude_3); else return; if(sensorTOF_4.size()!=0 && sensorMagnitude_4.size()!=0) this->BubbleSort(sensorTOF_4,sensorMagnitude_4); else return; if(sensorTOF_5.size()!=0 && sensorMagnitude_5.size()!=0) this->BubbleSort(sensorTOF_5,sensorMagnitude_5); else return; if(sensorTOF_6.size()!=0 && sensorMagnitude_6.size()!=0) this->BubbleSort(sensorTOF_6,sensorMagnitude_6); else return; if(sensorTOF_7.size()!=0 && sensorMagnitude_7.size()!=0) this->BubbleSort(sensorTOF_7,sensorMagnitude_7); else return; if(sensorTOF_8.size()!=0 && sensorMagnitude_8.size()!=0) this->BubbleSort(sensorTOF_8,sensorMagnitude_8); else return; if(sensorTOF_9.size()!=0 && sensorMagnitude_9.size()!=0) this->BubbleSort(sensorTOF_9,sensorMagnitude_9); else return; if(sensorTOF_10.size()!=0 && sensorMagnitude_10.size()!=0) this->BubbleSort(sensorTOF_10,sensorMagnitude_10); else return; if(sensorTOF_11.size()!=0 && sensorMagnitude_11.size()!=0) this->BubbleSort(sensorTOF_11,sensorMagnitude_11); else return; iv::ultrasonic::ultrasonic xmsg; for(int i=0;i0 && sensorMagnitude_0.at(i)>5) { xmsg.set_sigobjdist_flside((uint32_t)(gsoundVelocity * sensorTOF_0.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_front_ls(true); break; } else { xmsg.set_sigobjdist_flside(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_front_ls(false); } } for(int i=0;i0 && sensorMagnitude_1.at(i)>5) { xmsg.set_sigobjdist_flcorner((uint32_t)(gsoundVelocity * sensorTOF_1.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_front_l(true); break; } else { xmsg.set_sigobjdist_flcorner(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_front_l(false); } } for(int i=0;i0 && sensorMagnitude_2.at(i)>5) { xmsg.set_sigobjdist_flmiddle((uint32_t)(gsoundVelocity * sensorTOF_2.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_front_lm(true); break; } else { xmsg.set_sigobjdist_flmiddle(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_front_lm(false); } } for(int i=0;i0 && sensorMagnitude_3.at(i)>5) { xmsg.set_sigobjdist_frmiddle((uint32_t)(gsoundVelocity * sensorTOF_3.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_front_rm(true); break; } else { xmsg.set_sigobjdist_frmiddle(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_front_rm(false); } } for(int i=0;i0 && sensorMagnitude_4.at(i)>5) { xmsg.set_sigobjdist_frcorner((uint32_t)(gsoundVelocity * sensorTOF_4.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_front_r(true); break; } else { xmsg.set_sigobjdist_frcorner(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_front_r(false); } } for(int i=0;i0 && sensorMagnitude_5.at(i)>5) { xmsg.set_sigobjdist_frside((uint32_t)(gsoundVelocity * sensorTOF_5.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_front_rs(true); break; } else { xmsg.set_sigobjdist_frside(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_front_rs(false); } } for(int i=0;i0 && sensorMagnitude_6.at(i)>5) { xmsg.set_sigobjdist_rrside((uint32_t)(gsoundVelocity * sensorTOF_6.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_rear_rs(true); break; } else { xmsg.set_sigobjdist_rrside(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_rear_rs(false); } } for(int i=0;i0 && sensorMagnitude_7.at(i)>5) { xmsg.set_sigobjdist_rrcorner((uint32_t)(gsoundVelocity * sensorTOF_7.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_rear_r(true); break; } else { xmsg.set_sigobjdist_rrcorner(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_rear_r(false); } } for(int i=0;i0 && sensorMagnitude_8.at(i)>5) { xmsg.set_sigobjdist_rrmiddle((uint32_t)(gsoundVelocity * sensorTOF_8.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_rear_rm(true); break; } else { xmsg.set_sigobjdist_rrmiddle(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_rear_rm(false); } } for(int i=0;i0 && sensorMagnitude_9.at(i)>5) { xmsg.set_sigobjdist_rlmiddle((uint32_t)(gsoundVelocity * sensorTOF_9.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_rear_lm(true); break; } else { xmsg.set_sigobjdist_rlmiddle(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_rear_lm(false); } } for(int i=0;i0 && sensorMagnitude_10.at(i)>5) { xmsg.set_sigobjdist_rlcorner((uint32_t)(gsoundVelocity * sensorTOF_10.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_rear_l(true); break; } else { xmsg.set_sigobjdist_rlcorner(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_rear_l(false); } } for(int i=0;i0 && sensorMagnitude_11.at(i)>5) { xmsg.set_sigobjdist_rlside((uint32_t)(gsoundVelocity * sensorTOF_11.at(i) * 51.2 / 2000.0)); // mm xmsg.set_sigsensor_rear_ls(true); break; } else { xmsg.set_sigobjdist_rlside(DIST_ERROR); // 50000 mm xmsg.set_sigsensor_rear_ls(false); } } xmsg.set_timestamp(QDateTime::currentMSecsSinceEpoch()); int ndatasize = xmsg.ByteSize(); char * strser = new char[ndatasize]; std::shared_ptr pstrser; pstrser.reset(strser); if(xmsg.SerializePartialToArray(strser,ndatasize)) { iv::modulecomm::ModuleSendMsg(shmSonar.mpa,strser,ndatasize); } else { std::cout<<"ultrasonic data serialize error."< &sensorTOF, QVector &sensorMagnitude) { if(sensorTOF.size()<2||sensorMagnitude.size()<2)return; //notice vector size must >= 2 int i = 0,j = 0; uint16_t tempTOF = 0; uint8_t tempMagnitude = 0; if(sensorTOF.size() == sensorMagnitude.size()) { for(i=0;isensorTOF.at(j+1)) { tempTOF = sensorTOF.at(j); sensorTOF[j] = sensorTOF.at(j+1); sensorTOF[j+1] = tempTOF; tempMagnitude = sensorMagnitude.at(j); sensorMagnitude[j] = sensorMagnitude.at(j+1); sensorMagnitude[j+1] = tempMagnitude; } } } } }