155 lines
3.9 KiB
C++
155 lines
3.9 KiB
C++
#include "Ispindel.h"
|
|
#include <QDataStream>
|
|
#include "IspindelInterface.h"
|
|
|
|
CIspindel::CIspindel(CIspindelGUI *IspindelGui)
|
|
{
|
|
mIspindelGui = IspindelGui;
|
|
IspindelGui->mProgramHandle = this;
|
|
mNetworkInterface = new CIspindelInterface(this);
|
|
mOG = 0.0;
|
|
|
|
}
|
|
|
|
CIspindel::~CIspindel()
|
|
{
|
|
delete mNetworkInterface;
|
|
}
|
|
|
|
void CIspindel::Start()
|
|
{
|
|
mNetworkInterface->ConnectToMasterCtrl();
|
|
}
|
|
|
|
void CIspindel::IspindelFullBufferReceived(QByteArray *Data)
|
|
{
|
|
int NbItems;
|
|
QDataStream Strm(Data,QIODevice::ReadOnly | QIODevice::Unbuffered);
|
|
|
|
Strm >> NbItems;
|
|
|
|
if(NbItems == 0)
|
|
{
|
|
qDebug("Received empty Ispindel buffer...");
|
|
return;
|
|
}
|
|
|
|
ClearIspindleDataList();
|
|
|
|
for(int i = 0; i < NbItems; i++)
|
|
{
|
|
CIspindelData *NewFrame = new CIspindelData;
|
|
Strm >> *NewFrame;
|
|
|
|
mIspindelDataList.append(NewFrame);
|
|
}
|
|
mOG = mIspindelDataList.first()->mGravity;
|
|
SetLasFrameTextInGUI(*mIspindelDataList.last());
|
|
mIspindelGui->UpdateIspindelPlot(&mIspindelDataList);
|
|
|
|
|
|
|
|
}
|
|
|
|
void CIspindel::IspindelLastFrameReceived(QByteArray Data)
|
|
{
|
|
int DataSize;
|
|
QDataStream Strm(&Data,QIODevice::ReadOnly | QIODevice::Unbuffered);
|
|
|
|
if(Data.size() == 0)
|
|
return;
|
|
|
|
CIspindelData *NewData = new CIspindelData();
|
|
Strm >> *NewData;
|
|
|
|
mIspindelDataList.append(NewData);
|
|
SetLasFrameTextInGUI(*NewData);
|
|
mIspindelGui->NewIspindelFrameReceived(NewData);
|
|
|
|
// qDebug("Latest Ispindel data received");
|
|
|
|
}
|
|
int CIspindel::DeleteSampleResponseReceived(QByteArray Data)
|
|
{
|
|
bool Success;
|
|
QDataStream Strm(&Data,QIODevice::ReadOnly | QIODevice::Unbuffered);
|
|
Strm >> Success;
|
|
|
|
if(Success)
|
|
{
|
|
mNetworkInterface->SendMasterCtrlCommand(ISPINDEL_GET_FULL_DATA_BUFFER_REQUEST,QByteArray());
|
|
return RET_OK;
|
|
}
|
|
return RET_ERROR;
|
|
}
|
|
|
|
void CIspindel::ClearIspindleDataList()
|
|
{
|
|
for(int i = 0; i < mIspindelDataList.size(); i++)
|
|
{
|
|
delete mIspindelDataList[i];
|
|
}
|
|
|
|
mIspindelDataList.clear();
|
|
}
|
|
|
|
void CIspindel::ConnectedToMaster(bool connected)
|
|
{
|
|
if(connected)
|
|
{
|
|
mNetworkInterface->SendMasterCtrlCommand(ISPINDEL_GET_FULL_DATA_BUFFER_REQUEST,QByteArray());
|
|
}
|
|
}
|
|
|
|
void CIspindel::SetLasFrameTextInGUI(CIspindelData Frame)
|
|
{
|
|
QString FrameText;
|
|
QString ABVText;
|
|
|
|
FrameText = QString("\nLast Frame:\n------------------------------\nAngle: %1\nBattery Voltage: %2\nGravity: %3\nSample Interval: %4\nIspindel ID: %5\nIspindel Name: %6\nRSSI: %7\nTemperature: %8%9 (%11F)\nSample date time: %10\n------------------------------")\
|
|
.arg(Frame.mAngle)\
|
|
.arg(Frame.mBattery)\
|
|
.arg(Frame.mGravity)\
|
|
.arg(Frame.mInterval)\
|
|
.arg(Frame.mIspindelID)\
|
|
.arg(Frame.mIspindelName)\
|
|
.arg(Frame.mRSSI)\
|
|
.arg(Frame.mTemperature).arg(Frame.mTemperatureUnits)\
|
|
.arg(Frame.mSampleDateTime.toString("yyyy-MM-dd - hh:mm:ss"))\
|
|
.arg(((Frame.mTemperature*9/5)+32));
|
|
|
|
if(mIspindelDataList.size() > 1)
|
|
{
|
|
float ABV = ((mOG - Frame.mGravity) * 131.25);
|
|
ABVText = QString("ABV : %1\%").arg(ABV);
|
|
}
|
|
else
|
|
{
|
|
ABVText = QString("ABV : ?\%");
|
|
}
|
|
|
|
mIspindelGui->SetLastIspindelFrameData(FrameText,ABVText);
|
|
}
|
|
|
|
int CIspindel::SetOGFromItem(int ItemIndex)
|
|
{
|
|
if(ItemIndex >= mIspindelDataList.size())
|
|
return RET_ERROR;
|
|
|
|
mOG = mIspindelDataList.at(ItemIndex)->mGravity;
|
|
SetLasFrameTextInGUI(*mIspindelDataList.last());
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int CIspindel::DeleteSample(int ItemIndex)
|
|
{
|
|
if(ItemIndex >= mIspindelDataList.size())
|
|
return RET_ERROR;
|
|
QByteArray Data;
|
|
QDataStream Strm(&Data,QIODevice::WriteOnly | QIODevice::Unbuffered);
|
|
Strm << ItemIndex;
|
|
|
|
mNetworkInterface->SendMasterCtrlCommand(ISPINDEL_DELETE_SAMPLE_REQUEST,Data);
|
|
}
|