#include "BD357Ctrl.h" #include "MainGrabber.h" #include "lwgps.h" #include "lwrb.h" #include "time.h" BD357Controller::BD357Controller(QObject* parent /*= nullptr*/) { m_iFlagIsGPSValid = 0; m_iFlagIsContinuousUpdating = 0; m_pSerialPort = NULL; //connect(m_pSerialPort, &QSerialPort::readyRead, this, &BD357Controller::HandleReadyRead); connect(this, &BD357Controller::Signal_InitSelf, this, &BD357Controller::Slot_InitSelf); //connect(m_pMainGrabber,&CMainGrabber::Signal_InitFinished,this, &BD357Controller::Slot_SyncDateOnce); } BD357Controller::~BD357Controller() { if (m_pSerialPort != NULL) { m_pSerialPort->close(); delete m_pSerialPort; } } int BD357Controller::SetContext(CMainGrabber& pMainGrabber) { m_pMainGrabber = &pMainGrabber; } int BD357Controller::SetupMessagePipeline() { connect(m_pMainGrabber, &CMainGrabber::Signal_InitFinished, this, &BD357Controller::Slot_SyncDateOnce); return 0; } int BD357Controller::SyncDateOnce() { using namespace ZZ_MISCDEF; bool bFlagFinish = false; size_t uiCount = 0; ZZ_U8 u8Rx,u8Tx; while (!bFlagFinish) { m_qbReadData.clear(); while (m_qbReadData.size()< 1000) { m_pSerialPort->waitForReadyRead(1000); m_qbReadData.append(m_pSerialPort->readAll()); } qDebug() << m_qbReadData.size() << endl; lwgps_process(&m_hLWGPS, m_qbReadData, m_qbReadData.size()); m_qbReadData.clear(); if (uiCount<2) { uiCount++; continue; } else { /*if (m_hLWGPS.is_valid) { bFlagFinish = 1; }*/ } //need to disable //qDebug() << "one status :"<< m_hLWGPS.is_valid << m_hLWGPS .sats_in_use<< m_hLWGPS .year<<"-" << m_hLWGPS .month<<"-" << m_hLWGPS.date << "-" << m_hLWGPS.hours << ":" << m_hLWGPS.minutes << ":" << m_hLWGPS.seconds << ":" << endl; int iRes = ZZ_FormatTime(m_hLWGPS.year, m_hLWGPS.month, m_hLWGPS.date, m_hLWGPS.hours, m_hLWGPS.minutes, m_hLWGPS.seconds); if (iRes != 0) { continue; } else { bFlagFinish = 1; time_t stdtime = m_qdtDateTime.toTime_t(); time_t stdtimeUTC = m_qdtDateTimeUTC.toTime_t(); stime(&stdtimeUTC); system("gpio write 4 1"); qDebug() << "system(gpio write 4 1)"; // //m_qdtDateTime.currentMSecsSinceEpoch //m_qdtDateTime.currentMSecsSinceEpoch(); } //bFlagFinish = 1; } emit Signal_StartCapture(); return 0; } int BD357Controller::StartContinuousUpdating() { m_iFlagIsContinuousUpdating = 1; while (m_iFlagIsContinuousUpdating) { m_qbReadData.clear(); while (m_qbReadData.size() < 1000) { m_pSerialPort->waitForReadyRead(1000); m_qbReadData.append(m_pSerialPort->readAll()); } //qDebug() << m_qbReadData.size() << endl; lwgps_process(&m_hLWGPS, m_qbReadData, m_qbReadData.size()); if (m_hLWGPS.is_valid&&(!m_iFlagIsGPSValid)) { emit Signal_UpdateStatus(1); } if ((!m_hLWGPS.is_valid)&& m_iFlagIsGPSValid) { emit Signal_UpdateStatus(0); } m_qbReadData.clear(); } return 0; } int BD357Controller::Initialize(GPSInfo &struGPSI) { m_struGPSInfo = struGPSI; emit Signal_InitSelf(); } int BD357Controller::ZZ_FormatTime(ZZ_U8 u8Year, ZZ_U8 u8Month, ZZ_U8 u8Day, ZZ_U8 u8Hour, ZZ_U8 u8Minute, ZZ_U8 u8Second) { int iYear = u8Year + 2000; QDateTime qdtTestDate(QDate(iYear, u8Month, u8Day), QTime(u8Hour, u8Minute, u8Second)); if (qdtTestDate.isValid()) { qDebug() << qdtTestDate; m_qdtDateTime = qdtTestDate; m_qdtDateTimeUTC = qdtTestDate; //UTC+0 to UTC+8 m_qdtDateTime.addSecs(3600 * 8); return 0; } else { return -1; } return -2; //bool b1 = startDate.isValid(); //QString end = startDate.toString("yyyy.MM.dd hh:mm:ss"); //qDebug() << end; //QString qstrSyncDate = QString("%1-%2-%3-%4-%5-%6").arg(iYear, 4, 10, QLatin1Char('0')).arg(u8Month, 2, 10, QLatin1Char('0')) // .arg(u8Day, 2, 10, QLatin1Char('0')).arg(u8Hour, 2, 10, QLatin1Char('0')) // .arg(u8Minute, 2, 10, QLatin1Char('0')).arg(u8Second, 2, 10, QLatin1Char('0')); // //m_qdtDateTime.fromString(qstrSyncDate, "yyyy-MM-dd-hh-mm-ss"); //qDebug() << qstrSyncDate; //bool b = m_qdtDateTime.isValid(); //QString begin = m_qdtDateTime.toString("yyyy.MM.dd hh:mm:ss"); //qDebug() << begin; /*qstrSyncDate = "20" + QString::number(m_hLWGPS.year) + "-" + QString::number(m_hLWGPS.month) + "-" + QString::number(m_hLWGPS.date) + "-" + QString::number(m_hLWGPS.hours) + "-" + QString::number(m_hLWGPS.minutes) + "-" + QString::number(m_hLWGPS.seconds); qdtSync.fromString(qstrSyncDate, "yyyy-MM-dd-hh-mm-ss"); qDebug() << qstrSyncDate; bool b = qdtSync.isValid(); QString begin = qdtSync.toString("yyyy.MM.dd hh:mm:ss"); std::string strtime = begin.toStdString(); qDebug() << begin;*/ } int BD357Controller::Slot_InitSelf() { m_qbReadData.clear(); //QString qstrPortName = struGPSI.qstrInterfaceName; if (m_pSerialPort != NULL) { m_pSerialPort->close(); delete m_pSerialPort; } m_pSerialPort = new QSerialPort; m_pSerialPort->setPortName(m_struGPSInfo.qstrInterfaceName); //m_pSerialPort->setReadBufferSize(512); in this project 0 seems a better param. bool bRes = m_pSerialPort->setBaudRate(m_struGPSInfo.iBaud); if (!bRes) { qDebug() << "Err:setBaudRate Failed.Exit Code:1"; //std::cout << "Err.setBaudRate Failed" << std::endl; return 1; } bRes = m_pSerialPort->open(QIODevice::ReadWrite); if (!bRes) { qDebug() << "Err:open Failed.Exit Code:2"; //std::cout << "Err.open Failed" << std::endl; return 2; } ///// lwgps_init(&m_hLWGPS); lwrb_init(&m_hlwrbBuffer, m_u8GPSDataBuffer, sizeof(m_u8GPSDataBuffer)); } int BD357Controller::Slot_SyncDateOnce() { SyncDateOnce(); return 0; } // // int BD357Controller::HandleReadyRead() // { // size_t uiSize = 0; // m_qbReadData.append(m_pSerialPort->readAll()); // if (m_qbReadData.size()<2048) // { // lwrb_write(&m_hlwrbBuffer, &m_qbReadData, m_qbReadData.size()); // m_qbReadData.clear(); // } // else // { // m_qbReadData.clear(); // } // // return 0; // }