#include "./include/Emp5220Application.h"
#include "./include/xdcomprotocol.h"
#include "./include/debuginfo.h"
Emp5220Application::Emp5220Application(QWidget *parent):QWidget(parent)
{
////////////////////////////////用作背景窗口/////////////////////////////////////////////
Qt::WindowFlags flags = 0;
flags |= Qt::FramelessWindowHint;
setWindowFlags(flags);
//setAutoFillBackground(true);
//setFixedSize(WINDOW_WIDTH_SIZE,WINDOW_HEIGTH_SIZE);
resize(WINDOW_WIDTH_SIZE,WINDOW_HEIGTH_SIZE);
mglobaldata = GlobalData::getInstance();
QPalette palette;
QPixmap pixmap = mglobaldata->getSysBackground();
palette.setBrush(QPalette::Window, QBrush(pixmap));
setPalette(palette);
msgThread = new MsgQueueThread(this);
QObject::connect(msgThread, SIGNAL(sendMsg(const QByteArray &)), this, SLOT(recvMsg(const QByteArray&)));
// 主界面
mstandby = new StandbyDialog();
// 交易显示
mTradeResult = new TradeResultDialog();
// 错误显示
mErrDlg = new ErrorDialog();
mShowTime = new QTimer();
move(0,0);
show();
}
Emp5220Application::~Emp5220Application()
{
mglobaldata = NULL;
delete mShowTime;
delete mTradeResult;
delete mErrDlg;
delete mstandby;
delete msgThread;
}
/**************************************************************************
*function :setBootFlag
*description :启动成功后设置为false
*parameter :
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::setBootFlag(bool flg)
{
this->bootFlag = flg;
return 0;
}
/**************************************************************************
*function :getBootFlag
*description :获取启动标志
*parameter :
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
bool Emp5220Application::getBootFlag()
{
return this->bootFlag;
}
int Emp5220Application::setProgress(int num)
{
if(num < 0)
{
progress = 0;
}
else if(num > 100)
{
progress = 100;
}
progress = num;
TRACE("setProgress progress = %d num = %d",progress, num);
return 0;
}
int Emp5220Application::getProgress()
{
return progress;
}
/**************************************************************************
*function :displayTradeInfo
*description :show trade result information
*parameter :msg:字节序列
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::emp5220appInit()
{
// start msg queue thread
msgThread->start();
setBootFlag(true);
setProgress(0);
return 0;
}
/**************************************************************************
*function :displayTradeInfo
*description :show trade result information
*parameter :msg:字节序列
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::displayTradeInfo(const QByteArray &msg) // 交易信息显示
{
unsigned long pay = 0, money = 0;
QByteArray m_msg;
QString str;
int kanci = -1;
///////////////////////////解析数据//////////////////////////////////
// 报文
m_msg = msg.mid(5, msg.length()-5);
// 交易金额
memcpy(&pay, m_msg.data(), 4);
//str = QString::number(pay / 100) + "." + QString::number(pay % 100) + "元";
// 余额
memcpy(&money, m_msg.mid(4).data(), 4);
//str = QString::number(money / 100) + "." + QString::number(money % 100) + "元";
// 槛次
kanci = m_msg[8];
// 卡类型
str = m_msg.mid(9, m_msg.length() - 9);
///////////////////////////全局 数据设置////////////////////////////////////
///////////////////////////交易结果显示////////////////////////////////////
mTradeResult->setTradeResultValue(kanci,str, pay, money);
mTradeResult->openWidget();
return 0;
}
/**************************************************************************
*function :displayPowerOnInfo
*description :显示上电后显示的内容
*parameter :msg:字节序列
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::displayPowerOnInfo(const QByteArray & msg) // 开机信息显示
{
QByteArray m_msg;
///////////////////////////解析数据//////////////////////////////////
// 报文
m_msg = msg.mid(5, msg.length()-5);
return 0;
}
/**************************************************************************
*function :displayStandbyInfo
*description :显示 standby 界面
*parameter :msg:字节序列
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::displayStandbyInfo(const QByteArray & msg) // 待机界面
{
QByteArray m_msg;
QString str[2];
///////////////////////////解析数据//////////////////////////////////
m_msg = msg.mid(5, msg.length()-5);
str[0] = m_msg.mid(0, 32);
str[1] = str[0] = m_msg.mid(32, 32);
//////////////////////////全局数据设置//////////////////////////////
mglobaldata->setSysStatus(SYS_STANDBY_OK);
mglobaldata->setLineNum(str[0]);
mglobaldata->setPrice(str[1]);
/////////////////////////切换到standby界面/////////////////////////
mstandby->openWidget();
return 0;
}
/**************************************************************************
*function :displaySysErrInfo
*description :显示 系统错误 界面
*parameter :msg:字节序列
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::displaySysErrInfo(const QByteArray & msg)
{
QByteArray m_msg;
int pos = 2;
QString str[3];
int index;
///////////////////////////解析数据//////////////////////////////////
// 报文
m_msg = msg.mid(5, msg.length() - 5);
char ch_line = m_msg.at(1);
TRACE("ch_line = %d", ch_line);
for(index = 0; index < ch_line; index++)
{
if(index >= 3)
{
break;
}
str[index] = m_msg.mid(pos, m_msg.length()-pos);
pos += str[index].toStdString().length() + 1;
}
/////////////////////////全局错误////////////////////////////////////
mglobaldata->setSysStatus(SYS_ERROR_OCCUR);
mglobaldata->setErrorNum(index);
for(int i = 0; i < index; i ++)
{
mglobaldata->setError(str[i],i);
}
/////////////////////////界面显示////////////////////////////////////
if((getBootFlag() == false) && (getProgress() >= 100))
{
////////////////////切换到出错界面/////////////////////////////
mErrDlg->openWidget();
}
else
{
////////////////////启动界面提示出错//////////////////////////
/*不用实现*/;
}
return 0;
}
/**************************************************************************
*function :displayStandbyInfo
*description :显示 standby 界面
*parameter :msg:字节序列
*return : return 0
*author : xxx
*date & time : 2017-04-24
**************************************************************************/
int Emp5220Application::parseTlvData(const QByteArray & msg)
{
tlv_showInf tlv_data;
QByteArray m_msg;
int num = 0;
TRACE("parseTlvData ...");
memset(&tlv_data, 0x0, sizeof(tlv_showInf));
///////////////////////////解析数据//////////////////////////////////
// 报文
m_msg = msg.mid(5, msg.length() - 5);
tlv_data.tag = m_msg.at(0);
tlv_data.len = m_msg.at(1);
switch(tlv_data.tag)
{
case TAG_SYNC:
TRACE("TAG_SYNC ...");
break;
case TAG_PROGRESS:
TRACE("TAG_PROGRESS ...");
if(tlv_data.len != 1)
{
TRACE("tlv_data.len = %u\n", tlv_data.len);
return -1;
}
TRACE("progess len %d data %d",tlv_data.len, m_msg.at(2));
num = (int)m_msg.at(2);
mglobaldata->setProgress(num);
setProgress(num);
break;
case TAG_VERSION:
TRACE("TAG_VERSION ...");
mVersionNum = m_msg.mid(2, m_msg.length() - 2);
m