123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #include "pcmsgbuffer.h"
- pcmsgbuffer::pcmsgbuffer()
- {
- }
- void pcmsgbuffer::run()
- {
- while(!QThread::isInterruptionRequested())
- {
- mMutex.lock();
- qint64 nowtime = QDateTime::currentMSecsSinceEpoch();
- int i;
- for(i=0;i<mvectorpcmsgstate.size();i++)
- {
- if((nowtime - mvectorpcmsgstate[i].nsendtime) > OVERTIME)
- {
- mvectorpcmsgstate.erase(mvectorpcmsgstate.begin() + i);
- i--;
- }
- }
- mMutex.unlock();
- msleep(100);
- }
- }
- unsigned int pcmsgbuffer::addmsg(int id, qint64 ntime, std::string strVIN, std::string strctrlMD5, std::vector<char> *pxdata,bool bImportant,int nkeeptime,float framerate)
- {
- unsigned int nrtn;
- mMutex.lock();
- iv::pcmsg * pmsg = 0;
- int nsize = mvectormsg.size();
- int i;
- for(i=0;i<nsize;i++)
- {
- if(strncmp(mvectormsg[i].strVIN.data(),strVIN.data(),255) == 0)
- {
- pmsg = &mvectormsg[i];
- break;
- }
- }
- if(pmsg == 0)
- {
- iv::pcmsg cmsg;
- cmsg.id = id;
- cmsg.ntime = ntime;
- cmsg.strVIN = strVIN;
- cmsg.strctrlMD5 = strctrlMD5;
- if(pxdata->size() > 0)
- {
- cmsg.xdata.resize(pxdata->size());
- memcpy(cmsg.xdata.data(),pxdata->data(),pxdata->size());
- }
- cmsg.mlastuptime = QDateTime::currentMSecsSinceEpoch();
- cmsg.nsendid = muid;
- cmsg.mbImportant = bImportant;
- cmsg.mkeeptime = nkeeptime;
- cmsg.framerate = framerate;
- nrtn = muid;
- muid++;
- mvectormsg.push_back(cmsg);
- iv::pcmsgstate xpms;xpms.nsendid = cmsg.nsendid;
- xpms.nsendtime = QDateTime::currentMSecsSinceEpoch();
- mvectorpcmsgstate.push_back(xpms);
- mMutex.unlock();
- return nrtn;
- }
- if((pmsg->mbImportant != true)||((QDateTime::currentMSecsSinceEpoch() - pmsg->mlastuptime)>=pmsg->mkeeptime))
- {
- changesendstate(pmsg->nsendid,-2);
- pmsg->mbImportant = bImportant;
- pmsg->mkeeptime = nkeeptime;
- pmsg->id = id;
- pmsg->ntime = ntime;
- pmsg->strctrlMD5 = strctrlMD5;
- pmsg->xdata.clear();
- pmsg->nsendid = muid;
- // cmsg.mlastuptime = QDateTime::currentMSecsSinceEpoch();
- nrtn = muid;
- iv::pcmsgstate xpms;xpms.nsendid = pmsg->nsendid;
- pmsg->mlastuptime = QDateTime::currentMSecsSinceEpoch();
- mvectorpcmsgstate.push_back(xpms);
- muid++;
- if(pxdata->size()>0)
- {
- pmsg->xdata.resize(pxdata->size());
- memcpy(pmsg->xdata.data(),pxdata->data(),pxdata->size());
- }
- }
- mMutex.unlock();
- return nrtn;
- }
- int pcmsgbuffer::getmsg(std::string strVIN, std::string strctrlMD5, int &id, qint64 &ntime, std::vector<char> *pxdata,float * framerate)
- {
- mMutex.lock();
- iv::pcmsg * pmsg = 0;
- int nsize = mvectormsg.size();
- int i;
- int npos;
- for(i=0;i<nsize;i++)
- {
- if(strncmp(mvectormsg[i].strVIN.data(),strVIN.data(),255) == 0)
- {
- pmsg = &mvectormsg[i];
- npos = i;
- break;
- }
- }
- if(pmsg == 0)
- {
- // std::cout<<" no this vin data"<<std::endl;;
- mMutex.unlock();
- return 0;
- }
- if(strctrlMD5 != pmsg->strctrlMD5)
- {
- std::cout<<" ctrl error."<<std::endl;
- changesendstate(pmsg->nsendid,-1);
- mMutex.unlock();
- return -2;
- }
- id = pmsg->id;
- ntime = pmsg->ntime;
- *framerate = pmsg->framerate;
- pxdata->clear();
- int ndatasize = pmsg->xdata.size();
- pxdata->resize(ndatasize);
- memcpy(pxdata->data(),pmsg->xdata.data(),ndatasize);
- changesendstate(pmsg->nsendid,1);
- mvectormsg.erase(mvectormsg.begin()+npos);
- mMutex.unlock();
- return 1;
- }
- void pcmsgbuffer::changesendstate(int nsendid, int nstate)
- {
- int nstatesize = mvectorpcmsgstate.size();
- int i;
- for(i=0;i<nstatesize;i++)
- {
- if(nsendid == mvectorpcmsgstate[i].nsendid)
- {
- mvectorpcmsgstate[i].nstate = nstate; //Send OK
- break;
- }
- }
- }
- int pcmsgbuffer::querysendstate(int nsendid)
- {
- int nrtn = -2;
- mMutex.lock();
- int nstatesize = mvectorpcmsgstate.size();
- int i;
- for(i=0;i<nstatesize;i++)
- {
- if(nsendid == mvectorpcmsgstate[i].nsendid)
- {
- nrtn = mvectorpcmsgstate[i].nstate;
- break;
- }
- }
- mMutex.unlock();
- return nrtn;
- }
|