#include "vehicle_upload.h" #include #include #include extern std::string gstrserverip; extern std::string gstruploadPort; extern std::string gstruploadInterval; extern std::string gstrid; extern std::string gstrplateNumber; extern uint8_t gShift_Status;//3 p 4 r 5 n 6 d namespace iv { struct msgunit { char mstrmsgname[256]; int mnBufferSize = 10000; int mnBufferCount = 1; void * mpa; std::shared_ptr mpstrmsgdata; int mndatasize = 0; bool mbRefresh = false; bool mbImportant = false; int mnkeeptime = 100; }; } extern iv::msgunit shmPicFront; extern iv::msgunit shmPicRear; extern iv::msgunit shmPicLeft; extern iv::msgunit shmPicRight; using org::jeecg::defsDetails::grpc::Empty; ///< other message using org::jeecg::defsDetails::grpc::GPSPoint; using org::jeecg::defsDetails::grpc::MapPoint; using org::jeecg::defsDetails::grpc::ShiftStatus; ///< other enum using org::jeecg::defsDetails::grpc::CtrlMode; DataExchangeClient * gDataExchangeClient; void ListenFrontData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname) { gDataExchangeClient->ListenFrontPicMsg(strdata,nSize); } void ListenRearData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname) { gDataExchangeClient->ListenRearPicMsg(strdata,nSize); } void ListenLeftData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname) { gDataExchangeClient->ListenLeftPicMsg(strdata,nSize); } void ListenRightData(const char * strdata,const unsigned int nSize,const unsigned int index,const QDateTime * dt,const char * strmemname) { gDataExchangeClient->ListenRightPicMsg(strdata,nSize); } DataExchangeClient::DataExchangeClient(std::shared_ptr channel) { gDataExchangeClient = this; stub_ = DataExchange::NewStub(channel); shmPicFront.mpa = iv::modulecomm::RegisterRecv(shmPicFront.mstrmsgname,ListenFrontData); shmPicRear.mpa = iv::modulecomm::RegisterRecv(shmPicRear.mstrmsgname,ListenRearData); shmPicLeft.mpa = iv::modulecomm::RegisterRecv(shmPicLeft.mstrmsgname,ListenLeftData); shmPicRight.mpa = iv::modulecomm::RegisterRecv(shmPicRight.mstrmsgname,ListenRightData); } DataExchangeClient::~DataExchangeClient(void) { } void DataExchangeClient::ListenFrontPicMsg(const char * strdata,const unsigned int nSize) // need a lock { iv::vision::rawpic xdata; if(!xdata.ParseFromArray(strdata,nSize)) { std::cout<<" MainWindow::UpdateSlider parese error."<CopyFrom(positionFeedback); request.set_pitch(pitch); request.set_roll(roll); request.set_heading(heading); gMutex_ImageFront.lock(); request.set_cameraimagefront(cameraImageFront.data(),cameraImageFront.size()); gMutex_ImageFront.unlock(); gMutex_ImageRear.lock(); request.set_cameraimagerear(cameraImageRear.data(),cameraImageRear.size()); gMutex_ImageRear.unlock(); gMutex_ImageLeft.lock(); request.set_cameraimageleft(cameraImageLeft.data(),cameraImageLeft.size()); gMutex_ImageLeft.unlock(); gMutex_ImageRight.lock(); request.set_cameraimageright(cameraImageRight.data(),cameraImageRight.size()); gMutex_ImageRight.unlock(); request.set_sensorstatusgpsimu(sensorStatusGPSIMU); request.set_sensorstatuslidar(sensorStatusLidar); request.set_sensorstatusradar(sensorStatusRadar); request.set_sensorstatuscamfront(sensorStatusCamFront); request.set_sensorstatuscamrear(sensorStatusCamRear); request.set_sensorstatuscamleft(sensorStatusCamLeft); request.set_sensorstatuscamright(sensorStatusCamRight); request.set_isarrived(isArrived); request.set_platenumber(plateNumber); request.set_modefeedback(modeFeedback); // Container for the data we expect from the server. ResponseMessage reply; // Context for the client. It could be used to convey extra information to // the server and/or tweak certain RPC behaviors. ClientContext context; gpr_timespec timespec; timespec.tv_sec = 2; timespec.tv_nsec = 0; timespec.clock_type = GPR_TIMESPAN; context.set_deadline(timespec); // The actual RPC. Status status = stub_ -> uploadVehicleInfo(&context, request, &reply); // Act upon its status. if (status.ok()) { destinationPosition.CopyFrom(reply.destinationposition()); // std::cout<<"lat:"<operator =(pathPoints.at(i)); } // Container for the data we expect from the server. Empty reply; // Context for the client. It could be used to convey extra information to // the server and/or tweak certain RPC behaviors. ClientContext context; gpr_timespec timespec; timespec.tv_sec = 5; timespec.tv_nsec = 0; timespec.clock_type = GPR_TIMESPAN; context.set_deadline(timespec); // The actual RPC. Status status = stub_ -> uploadPath(&context,request,&reply); // Act upon its status. if (status.ok()) { if(reply.id() == gstrid) { std::cout<<"Path uploaded by car id:"< points) { id = gstrid; patrolPathID = pathID; pathPoints.clear(); for(int i = 0;i < points.size();i++) { pathPoints.append(points.value(i)); // std::cout<=interval) { updateData(); std::string reply = uploadVehicleInfo(); std::cout<< reply < somePoints; if(mapfile.open(QIODevice::ReadOnly | QIODevice::Text)) { while(!mapfile.atEnd()) { QByteArray line = mapfile.readLine(); QString map_str(line); QStringList oneline = map_str.split(","); org::jeecg::defsDetails::grpc::MapPoint onePoint; onePoint.set_index(oneline.at(0).toInt()); onePoint.mutable_mappoint()->set_longitude(oneline.at(1).toDouble()); onePoint.mutable_mappoint()->set_latitude(oneline.at(2).toDouble()); onePoint.mutable_mappoint()->set_height(oneline.at(3).toDouble()); somePoints.append(onePoint); } } updatePath(pathID,somePoints); uploadPath(); } void DataExchangeClient::ctrlMode_Changed_Slot(org::jeecg::defsDetails::grpc::CtrlMode ctrlMode) { modeFeedback = ctrlMode; }