Add updated sources of thomas.
This commit is contained in:
48
src/com.cpp
48
src/com.cpp
@@ -8,7 +8,7 @@
|
||||
///
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
static int64_t com_want2read;
|
||||
// -------------------------------------------------------------------------------------------------------------
|
||||
// --------- PUBLIC --------------------------------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------------------------------------------------
|
||||
@@ -78,7 +78,7 @@ T_com::T_com(QWidget *parent) : QMainWindow(parent)
|
||||
connect(ChkConnectTimer, SIGNAL(timeout()), this, SLOT(ser_ISR100ms()));
|
||||
ChkConnectTimer->setSingleShot(false);
|
||||
ChkConnectTimer->start(100); // in ms
|
||||
|
||||
com_want2read=0;
|
||||
}
|
||||
|
||||
|
||||
@@ -202,9 +202,48 @@ void T_com::readSomeBytes(void)
|
||||
{
|
||||
// called by serial-read-detection
|
||||
// restart off-time as input flow is ongoing
|
||||
serRecTime->stop();
|
||||
serRecTime->start(20); // in ms
|
||||
|
||||
// timer for slow receive
|
||||
// and serves as timeout for fast receive is msg is shorter as expected
|
||||
serRecTime->stop();
|
||||
serRecTime->start(20); // in ms
|
||||
|
||||
//qDebug()<< "com-rec read some bytes";
|
||||
|
||||
this->receiveByLength(); // since 14.12.21: fast receive
|
||||
}
|
||||
|
||||
void T_com::receiveFixLen(int64_t nrOfbytesToReceive)
|
||||
{
|
||||
// call this before sending a request to slave
|
||||
// then we know exactly when reception is complete -> much faster
|
||||
com_want2read=nrOfbytesToReceive;
|
||||
// since 14.12.21: FastDevice Protocol has two lengthen:
|
||||
// fast: 12byte reception long: 68byte
|
||||
}
|
||||
|
||||
void T_com::receiveByLength(void)
|
||||
{
|
||||
|
||||
if (CatSerial->isOpen())
|
||||
{
|
||||
QString myString=nullptr, tmpStr=nullptr;
|
||||
int64_t nrOfBytesreceived = CatSerial->bytesAvailable(); // nr of received bytes
|
||||
|
||||
//qDebug()<< "com-rec current Len: "<< nrOfBytesreceived;
|
||||
|
||||
if (nrOfBytesreceived >= com_want2read)
|
||||
{
|
||||
QByteArray data = CatSerial->readAll(); // erst auslesen wenn alles da! löscht den Empfangspuffer
|
||||
serRecTime->stop(); // stop timeout to avoid 2nd emit
|
||||
rawInLen=uint16_t (nrOfBytesreceived);
|
||||
rawInput.clear();
|
||||
rawInput.append(data);
|
||||
// report "new data received" to other objects
|
||||
//qDebug()<< "com-recFinished by Len "<< rawInLen;
|
||||
emit receivingFinished();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void T_com::receiveTO(void)
|
||||
@@ -252,6 +291,7 @@ void T_com::receiveTO(void)
|
||||
//gpi_set2ndTxt4RsDiagWin(myString);
|
||||
|
||||
// report "new data received" to other objects
|
||||
//qDebug()<< "com-recFinished by TO";
|
||||
emit receivingFinished();
|
||||
}
|
||||
}
|
||||
|
390
src/datIf.cpp
390
src/datIf.cpp
@@ -15,7 +15,7 @@ static uint8_t dif_scanStep, RDBLKNR;
|
||||
static uint8_t datif_OutCmdpara1, datif_OutCmdpara2, datif_OutCmdpara3, datif_OutCmdpara4;
|
||||
static uint16_t datif_OutCmdpara5;
|
||||
static uint32_t datif_OutCmdpara6;
|
||||
|
||||
static uint8_t cycl_running;
|
||||
|
||||
T_datif::T_datif(QWidget *parent) : QMainWindow(parent)
|
||||
{
|
||||
@@ -32,7 +32,7 @@ T_datif::T_datif(QWidget *parent) : QMainWindow(parent)
|
||||
datif_trigger = new QTimer();
|
||||
connect(datif_trigger, SIGNAL(timeout()), this, SLOT(datif_cycleSend()));
|
||||
datif_trigger->setSingleShot(false);
|
||||
datif_trigger->start(100); // in ms, 80 gut, default 100 50....200
|
||||
datif_trigger->start(10); // in ms, 80 gut, default 100 50....200
|
||||
|
||||
// passing Signal through
|
||||
//connect(myDCIF, SIGNAL(framerecieved()), this, SLOT( ResponseRecieved() ));
|
||||
@@ -45,7 +45,7 @@ T_datif::T_datif(QWidget *parent) : QMainWindow(parent)
|
||||
|
||||
dif_scanStep=0;
|
||||
selectedSlaveAddr=FIX_SLAVE_ADDR;
|
||||
|
||||
cycl_running=0;
|
||||
}
|
||||
|
||||
void T_datif::resetChain(void)
|
||||
@@ -61,6 +61,16 @@ char T_datif::datif_cycleSend()
|
||||
uint8_t dataSendBuf[160], dataBufLen, dbl, who;
|
||||
static uint8_t BlockCounter;
|
||||
|
||||
if (cycl_running)
|
||||
{
|
||||
// request is still running, wait for response before next sending
|
||||
datif_trigger->stop();
|
||||
datif_trigger->start(10);
|
||||
cycl_running++;
|
||||
if (cycl_running>10)
|
||||
cycl_running=0;
|
||||
return 0;
|
||||
}
|
||||
if (myDCIF->isPortOpen())
|
||||
{
|
||||
#ifdef USEHANDSHAKES
|
||||
@@ -71,7 +81,8 @@ char T_datif::datif_cycleSend()
|
||||
nxtAsCmd=sendWRcmd_getSendCommand0(); // command was stored by Gui
|
||||
if (nxtAsCmd>0)
|
||||
{
|
||||
qDebug() << "datif: send next cmd0";
|
||||
cycl_running=1;
|
||||
// qDebug() << "datif: send next cmd0";
|
||||
sendWRcommand(nxtAsCmd);
|
||||
send_requests(nxtAsCmd);
|
||||
sendHighLevel(nxtAsCmd);
|
||||
@@ -83,7 +94,8 @@ char T_datif::datif_cycleSend()
|
||||
// command was stored by Gui
|
||||
if (nxtAsCmd>0)
|
||||
{
|
||||
qDebug() << "datif: send next cmd4";
|
||||
cycl_running=1;
|
||||
//qDebug() << "datif: send next cmd4";
|
||||
sendWRcommand(nxtAsCmd);
|
||||
send_requests(nxtAsCmd);
|
||||
sendHighLevel(nxtAsCmd);
|
||||
@@ -95,7 +107,8 @@ char T_datif::datif_cycleSend()
|
||||
// command was stored by Gui
|
||||
if (nxtAsCmd>0)
|
||||
{
|
||||
qDebug() << "datif: send next cmd8";
|
||||
cycl_running=1;
|
||||
//qDebug() << "datif: send next cmd8";
|
||||
sendWRcommand(nxtAsCmd);
|
||||
send_requests(nxtAsCmd);
|
||||
sendHighLevel(nxtAsCmd);
|
||||
@@ -106,7 +119,8 @@ char T_datif::datif_cycleSend()
|
||||
dbl=sendWRcmd_getSendBlock160(&dataBufLen, dataSendBuf); // used for bootloader
|
||||
if (dbl>0)
|
||||
{
|
||||
qDebug() << "datif: sending 160 byte block, len: " << dataBufLen;
|
||||
cycl_running=1;
|
||||
qDebug() << "datif: sending 160 byte block, len: " << dataBufLen;
|
||||
datif_OUT_SendRandomData(dataSendBuf, dataBufLen);
|
||||
BlockCounter=0;
|
||||
return 0;
|
||||
@@ -115,7 +129,8 @@ char T_datif::datif_cycleSend()
|
||||
dbl=gpi_chk4remainingText();
|
||||
if (dbl>0)
|
||||
{
|
||||
qDebug() << "datif: sending printer text ";
|
||||
cycl_running=1;
|
||||
//qDebug() << "datif: sending printer text ";
|
||||
gpi_restorePrnText(&dataSendBuf[0]);
|
||||
// can hold 1280 byte, get next 64
|
||||
//for (uint8_t nn=0; nn<64; nn++)
|
||||
@@ -149,7 +164,10 @@ char T_datif::datif_cycleSend()
|
||||
|
||||
|
||||
if (gpi_isEmmisionOn()) // auto send button is pressed
|
||||
sendINrequestsAutomatic(); // sendCyclicCmd(); // request all cyclic data sequential
|
||||
{
|
||||
//qDebug() << "auto request is on";
|
||||
sendINrequestsAutomatic(); // sendCyclicCmd(); // request all cyclic data sequential
|
||||
}
|
||||
else
|
||||
dif_scanStep=0; // always start from beginning
|
||||
}
|
||||
@@ -280,7 +298,8 @@ void T_datif::sendWRcommand(uint16_t nextWrCmd)
|
||||
case SENDDIRCMD_MIF_SWONOFF:
|
||||
datif_sendIOrequest(CMD2DC_MIFREADERON, 0, 1); // 0x2900
|
||||
indat_storeMifarePower(datif_OutCmdpara1);
|
||||
break;
|
||||
qDebug()<<"switching mifare on/off "<< datif_OutCmdpara1;
|
||||
break;
|
||||
|
||||
case SENDDIRCMD_MOD_SWONOFF:
|
||||
datif_sendIOrequest(CMD2DC_MOD_ON, 0, 1);
|
||||
@@ -321,17 +340,17 @@ void T_datif::sendWRcommand(uint16_t nextWrCmd)
|
||||
|
||||
case SENDDIR_OPENVAULT:
|
||||
datif_sendIOrequest(CMD2DC_VAULT_DOOR, 0, 0);
|
||||
qDebug() << "Datif: send cmd open vault";
|
||||
//qDebug() << "Datif: send cmd open vault";
|
||||
break;
|
||||
|
||||
case SENDDIR_REJMOT_ON:
|
||||
datif_sendIOrequest(CMD2DC_REJMOT_ON, 0, 0);
|
||||
qDebug() << "Datif: send cmd open vault";
|
||||
datif_sendIOrequest(CMD2DC_REJMOT_ON, 0, 1);
|
||||
qDebug() << "Datif: send cmd reject motor";
|
||||
break;
|
||||
|
||||
case SENDDIR_REJMOT_RUN:
|
||||
datif_sendIOrequest(CMD2DC_REJMOT_RUN, 0, 0);
|
||||
qDebug() << "Datif: send cmd open vault";
|
||||
qDebug() << "Datif: send cmd do coin reject";
|
||||
break;
|
||||
|
||||
|
||||
@@ -387,9 +406,6 @@ void T_datif::send_requests(uint16_t nextWrCmd)
|
||||
datif_sendIOrequest(0, CMD2DC_RdBkAllOutputs, 0);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case SEND_REQU_PRN_STATE:
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_PrnState, 0);
|
||||
break;
|
||||
@@ -398,34 +414,34 @@ void T_datif::send_requests(uint16_t nextWrCmd)
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_PrnFonts, 0);
|
||||
break;
|
||||
|
||||
case SEND_REQU_PRN_ALL :
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_AllPrnData, 0);
|
||||
break;
|
||||
case SEND_REQU_PRN_ALL :
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_AllPrnData, 0);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case SEND_REQU_MIFREADER :
|
||||
case SEND_REQU_MIFSTATE :
|
||||
// Type and state of reader
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_MifReader, 0);
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_MifState, 0);
|
||||
break;
|
||||
|
||||
case SEND_REQU_MIFCARD :
|
||||
case SEND_REQU_MIFDATA :
|
||||
// Type, UID, Header of card
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_Mifcard, 0);
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_MifData, 1); // immer nur blk 0 anfordern
|
||||
qDebug()<<"manual requesting mif card data";
|
||||
break;
|
||||
|
||||
case SEND_REQU_MIF_ATB_TYPE :
|
||||
// read one card sector
|
||||
// sectors must be addressed by RD_ADD
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_AtbCardType, 0);
|
||||
break;
|
||||
// case SEND_REQU_MIF_ATB_TYPE :
|
||||
// // read one card sector
|
||||
// // sectors must be addressed by RD_ADD
|
||||
// datif_sendIOrequest(0, CMD2DC_RdBk_AtbCardType, 0);
|
||||
// break;
|
||||
|
||||
//case SEND_REQU_MIF_DATA :
|
||||
// read one card sector
|
||||
// sectors must be addressed by RD_ADD
|
||||
//datif_sendIOrequest(0, CMD2DC_RdBk_CardData, 0);
|
||||
//break;
|
||||
// case SEND_REQU_MIF_DATA :
|
||||
// // read one card sector
|
||||
// // sectors must be addressed by RD_ADD
|
||||
// //datif_sendIOrequest(0, CMD2DC_RdBk_CardData, 1); ist das gleiche
|
||||
// datif_sendIOrequest(0, CMD2DC_RdBk_MifData, 1); // jeden beliebigen Block anfordern
|
||||
// break;
|
||||
|
||||
case SEND_REQU_MDB_GETSTAT :
|
||||
datif_sendIOrequest(0, CMD2DC_MDB_GET_STATE, 0);
|
||||
@@ -467,7 +483,6 @@ void T_datif::sendHighLevel(uint16_t nxtHLCmd)
|
||||
{
|
||||
|
||||
case SENDDIRCMD_SHUTOPENBYTIME:
|
||||
// void datif_sendIOrequest(uint16_t WRcmd, uint16_t RDcmd, uint8_t nrOfWrData);
|
||||
qDebug() << "open by time " << datif_OutCmdpara1 << " "<< datif_OutCmdpara2;
|
||||
datif_sendIOrequest(CMD2DC_SHUTTER_OPEN3S, 0, 1);
|
||||
break;
|
||||
@@ -607,11 +622,11 @@ void T_datif::sendHighLevel(uint16_t nxtHLCmd)
|
||||
// sende alle Befehle um die Eingangsdaten abzufragen der Reihe nach:
|
||||
char T_datif::sendINrequestsAutomatic(void)
|
||||
{
|
||||
//qDebug() << "send IN request " << dif_scanStep;
|
||||
|
||||
switch (dif_scanStep)
|
||||
{
|
||||
// first 5 items are performed only one time after startup as this data never change
|
||||
qDebug() << "send IN request " << dif_scanStep;
|
||||
|
||||
case 0:
|
||||
datif_sendIOrequest(0, CMD2DC_GetSerialConfig, 0);
|
||||
@@ -675,10 +690,10 @@ char T_datif::sendINrequestsAutomatic(void)
|
||||
case 14:
|
||||
if (indat_isMifareOn())
|
||||
{
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_MifReader, 0);
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_MifState, 0);
|
||||
//qDebug()<<"requesting MIF reader state";
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case 15:
|
||||
datif_sendIOrequest(0, CMD2DC_GetAllInputs, 0);
|
||||
@@ -687,9 +702,9 @@ char T_datif::sendINrequestsAutomatic(void)
|
||||
case 16:
|
||||
if (indat_isMifareOn())
|
||||
{
|
||||
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_Mifcard, 1);
|
||||
//qDebug()<<"requesting mif card data";
|
||||
datif_OutCmdpara1=0; // data block number 0 contains the Mifare-ID
|
||||
datif_sendIOrequest(0, CMD2DC_RdBk_MifData, 1);
|
||||
// qDebug()<<"automatically requesting mif card data";
|
||||
if (++RDBLKNR>11)
|
||||
RDBLKNR=0;
|
||||
datif_OutCmdpara1=RDBLKNR;
|
||||
@@ -703,8 +718,8 @@ char T_datif::sendINrequestsAutomatic(void)
|
||||
case 18:
|
||||
if (indat_isMdbOn())
|
||||
datif_sendIOrequest(0, CMD2DC_MDB_GET_STATE, 0);
|
||||
else
|
||||
dif_scanStep=24;
|
||||
//else
|
||||
// dif_scanStep=24; unsinn
|
||||
break;
|
||||
|
||||
case 19:
|
||||
@@ -739,7 +754,7 @@ char T_datif::sendINrequestsAutomatic(void)
|
||||
|
||||
dif_scanStep++;
|
||||
if (dif_scanStep>=25)
|
||||
dif_scanStep=5;
|
||||
dif_scanStep=0; //dif_scanStep=5;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -760,7 +775,6 @@ char T_datif::isPortOpen(void)
|
||||
|
||||
|
||||
|
||||
//void T_datif::StoredRecData(bool neu)
|
||||
void T_datif::StoredRecData()
|
||||
{
|
||||
//qDebug() << "StoreRecData called";
|
||||
@@ -772,6 +786,7 @@ void T_datif::StoredRecData()
|
||||
// "neu" is the same as "INdataValid"
|
||||
loadRecDataFromFrame();
|
||||
}
|
||||
cycl_running=0;
|
||||
}
|
||||
|
||||
char T_datif::loadRecDataFromFrame()
|
||||
@@ -779,28 +794,28 @@ char T_datif::loadRecDataFromFrame()
|
||||
// necessary data in T_prot:
|
||||
uint16_t readSource, uitmp;
|
||||
uint16_t readAddress;
|
||||
uint8_t pp;
|
||||
//uint8_t pp;
|
||||
uint8_t SlaveAdr, RdDleng;
|
||||
uint8_t receivedData[FRAME_DATALEN];
|
||||
QString localStr;
|
||||
uint32_t ultmp;
|
||||
int portNr;
|
||||
//uint32_t ultmp;
|
||||
//int portNr;
|
||||
bool ret;
|
||||
uint8_t maxai;
|
||||
uint8_t uctmp; // maxai
|
||||
|
||||
ret=myDCIF->getReceivedInData(&SlaveAdr, &readSource, &readAddress, &RdDleng, receivedData);
|
||||
// retval: data valid, only one time true, true if CommandState OK and readState OK
|
||||
gpi_storeResultOfLastRequest(ret);
|
||||
if (ret==false)
|
||||
{
|
||||
qDebug() << "datif: rec data not valid";
|
||||
// qDebug() << "datif: rec data not valid";
|
||||
return 0;
|
||||
}
|
||||
|
||||
gpi_storeRecPayLoad(RdDleng, receivedData); // save for host (user of hwapi)
|
||||
|
||||
// qDebug() << "\n +++datif: got valid data, rdsrc:" << readSource << " rdadd:" << readAddress
|
||||
// << " rdlen:" << RdDleng;
|
||||
//qDebug() << "\n datif: got valid data, rdsrc:" << readSource << " rdadd:" << readAddress
|
||||
// << " rdlen:" << RdDleng;
|
||||
// qDebug("datif_recData: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ",
|
||||
// receivedData[0], receivedData[1], receivedData[2], receivedData[3],
|
||||
// receivedData[4], receivedData[5], receivedData[6], receivedData[7],
|
||||
@@ -847,18 +862,20 @@ char T_datif::loadRecDataFromFrame()
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBkHWversion:
|
||||
qDebug() << "got HW version: " << localStr;
|
||||
//qDebug() << "got HW version: " << localStr;
|
||||
gpi_storeGenerals(0, localStr);
|
||||
// 0=HW 1=SW 2=State
|
||||
//gpi_storeSlaveBusAddr(SlaveAdr);
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBkSWversion:
|
||||
qDebug() << "got SW version: " << localStr;
|
||||
//qDebug() << "got SW version: " << localStr;
|
||||
gpi_storeGenerals(1, localStr);
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBkDCstate:
|
||||
//qDebug() << "got DC state " << localStr;
|
||||
localStr[8]=0;
|
||||
gpi_storeGenerals(2, localStr);
|
||||
// 0=HW 1=SW 2=State
|
||||
break;
|
||||
@@ -868,140 +885,180 @@ char T_datif::loadRecDataFromFrame()
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBkTime: // slave returned RTC time and date
|
||||
// new, FastProt: 0=dayOfWeek 1=min 2=sec 3=hours 4=year 5=month 6=dayOfYear
|
||||
gpi_backupTime(receivedData, RdDleng); // function reads 20 bytes from the buffer
|
||||
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBkAnalog: // get ALL AIs 0...3, 4byte + 2byte each
|
||||
|
||||
// DB0...3: Value0=Temperature
|
||||
// DB4...7: Value1=Voltage
|
||||
// ...DB31 for Value7
|
||||
// DB32,33: ADC0 input value 0...1023
|
||||
// DB34,35: ADC1 input value 0...1023
|
||||
// DB36,37: ADC2 input value 0...1023
|
||||
// …
|
||||
// DB46,47: ADC7 input value 0...1023
|
||||
pp=0;
|
||||
ultmp=uchar2uint(receivedData[1], receivedData[0]);
|
||||
gpi_storeMeasureValue(0, ultmp);
|
||||
pp=1;
|
||||
ultmp=uchar2uint(receivedData[5], receivedData[4]);
|
||||
gpi_storeMeasureValue(1, ultmp);
|
||||
|
||||
pp=32;
|
||||
maxai=gpi_getMaxNrAIs();
|
||||
for (portNr=0; portNr<maxai; portNr++)
|
||||
{
|
||||
uitmp=uchar2uint(receivedData[pp+1], receivedData[pp]);
|
||||
gpi_storeAIs(uint8_t(portNr), uitmp);
|
||||
|
||||
|
||||
pp+=2;
|
||||
}
|
||||
// DB0,1: Value0=Temperature
|
||||
// DB2,3: Value1=Voltage
|
||||
// DB4,5: ADC0 input value 0...1023
|
||||
// DB6,7: ADC1 input value 0...1023
|
||||
uitmp=uchar2uint(receivedData[1], receivedData[0]);
|
||||
gpi_storeMeasureValue(0, uitmp);
|
||||
uitmp=uchar2uint(receivedData[3], receivedData[2]);
|
||||
gpi_storeMeasureValue(1, uitmp);
|
||||
uitmp=uchar2uint(receivedData[5], receivedData[4]);
|
||||
gpi_storeAIs(0, uitmp);
|
||||
uitmp=uchar2uint(receivedData[7], receivedData[6]);
|
||||
gpi_storeAIs(1, uitmp);
|
||||
break;
|
||||
|
||||
case CMD2DC_GetAllInputs:
|
||||
/*
|
||||
D0: upper door D1: low door D2:vault door
|
||||
D3: cash box D4: bill box in
|
||||
D5: bit 0: upper lockbar up bit1:down
|
||||
D6: bit 0: lower lockbar up bit1:down
|
||||
// alle DI's in einen 8byte Puffer zusammenstellen, werden in einen Rutsch zum Master gesendet
|
||||
|
||||
D7: DI_contact Power Is On
|
||||
outBuf[0]: door switches and cash boxes:
|
||||
bit 0: service
|
||||
1: battery
|
||||
2: vault
|
||||
3: coin box
|
||||
4: bill box
|
||||
|
||||
D8: OptoIn 1,2
|
||||
D9: Aux0...5
|
||||
D10:Wake from ptu
|
||||
D11: DI Wake From Mdb
|
||||
D12: Ready from printer
|
||||
D13: Coin Shutter Input
|
||||
D14: CoinEscrow switch
|
||||
D15: Mifare IN
|
||||
D16: Modem_Wake In
|
||||
outBuf[1]: lock bar switches:
|
||||
bit 0: upper lock up
|
||||
1: down
|
||||
bit 2: lower lock up
|
||||
3: down
|
||||
4: contact pwr on
|
||||
6: opto in2
|
||||
|
||||
D18: DI Mif Pwr is on
|
||||
D19: DI MDB_TxD_rdBack
|
||||
D20: DI Aux Pwr is on
|
||||
D21: DI GSM Pwr from PO2 is ON
|
||||
D22: DI Credit Pwr from PO2 is on
|
||||
=DI RdBack Credit Wake
|
||||
D23: DI Printer Pwr from PO2 is on
|
||||
D24: DI MDB Pwr from PO2 is on
|
||||
new since 7.10.21:
|
||||
D25: coin reject switch 1=home position
|
||||
D26: Paper-Low-Sensor Input (printer must be ON!)
|
||||
outBuf[2]: aux inputs:
|
||||
2: aux2....6:aux6
|
||||
|
||||
outBuf[3]: 0: ptu wake
|
||||
1: rdBack MdbTx = 5V on if Tx low
|
||||
2: prn ready
|
||||
3: coin attached
|
||||
4: Escrow
|
||||
5: MifCardPresent
|
||||
6: reject switch
|
||||
|
||||
outBuf[4]: 0: rdMdbWake 1: Wake=Low=Active
|
||||
1: rdBackVmif
|
||||
2: rdBack_MdbBusPwr5V
|
||||
3: rdBackVbar
|
||||
4: rdBackVgsm
|
||||
5: rdBack_CreditPwr
|
||||
6: rdBack_Vprint
|
||||
7: rdBack_VmdbDevice
|
||||
|
||||
outBuf[5]: 0: coin Reject SwitchOn
|
||||
1: PaperLowSensor
|
||||
|
||||
*/
|
||||
gpi_storeDI_doorSwitches(receivedData[0], receivedData[1], receivedData[2]);
|
||||
gpi_storeDI_vaultSwitches(receivedData[3], receivedData[4]);
|
||||
gpi_storeDI_lockSwitches(receivedData[5], receivedData[6]);
|
||||
// qDebug()<<"datif got DIs: "<< receivedData[0] << " "
|
||||
// << receivedData[1] << " " << receivedData[2] << " "
|
||||
//<< receivedData[3] << " " << receivedData[4] << " " << receivedData[5];
|
||||
|
||||
gpi_storeDI_contactPowerIsOn(receivedData[7]);
|
||||
gpi_storeDI_optos(receivedData[8]);
|
||||
gpi_storeDI_auxIn(receivedData[9]);
|
||||
gpi_storeDI_ptuWake(receivedData[10]);
|
||||
gpi_storeDI_readbackMdbTxD(receivedData[11]);
|
||||
gpi_storeDI_prnReady(receivedData[12]);
|
||||
gpi_storeDI_CoinAttach(receivedData[13]);
|
||||
gpi_storeDI_CoinEscrow(receivedData[14]);
|
||||
gpi_storeDI_mifareCardTapped(receivedData[15]);
|
||||
gpi_storeDI_modemWake(receivedData[16]); // gibt's gar nicht!
|
||||
gpi_storeDI_mbdWake(receivedData[17]);
|
||||
gpi_storeDI_MifarePowerIsOn(receivedData[18]);
|
||||
gpi_storeDI_readbackMdbTxD(receivedData[19]);
|
||||
gpi_storeDI_AuxPowerIsOn(receivedData[20]);
|
||||
gpi_storeDI_GsmPowerIsOn(receivedData[21]);
|
||||
gpi_storeDI_CreditPowerIsOn(receivedData[22]);
|
||||
gpi_storeDI_PrinterPowerIsOn(receivedData[23]);
|
||||
gpi_storeDI_MdbPowerIsOn(receivedData[24]);
|
||||
uctmp=receivedData[0];
|
||||
// qDebug()<<"datif single bits: "<< (uctmp&1) << (uctmp&2) << (uctmp&4);
|
||||
gpi_storeDI_doorSwitches(uctmp&1, uctmp&2, uctmp&4);
|
||||
|
||||
gpi_storeDI_rejMot_home(receivedData[25]);
|
||||
gpi_storeDI_paperLow(receivedData[26]);
|
||||
gpi_storeDI_vaultSwitches(uctmp&8, uctmp&16);
|
||||
uctmp=receivedData[1];
|
||||
gpi_storeDI_lockSwitches((uctmp&3), ((uctmp>>2)&3));
|
||||
uctmp=receivedData[1];
|
||||
gpi_storeDI_contactPowerIsOn(uctmp&0x10);
|
||||
gpi_storeDI_optos((uctmp>>5)&3);
|
||||
uctmp=receivedData[2];
|
||||
gpi_storeDI_auxIn(uctmp);
|
||||
|
||||
break;
|
||||
uctmp=receivedData[3];
|
||||
gpi_storeDI_ptuWake(uctmp&1);
|
||||
gpi_storeDI_readbackMdbTxD(uctmp&2);
|
||||
gpi_storeDI_prnReady(uctmp&4);
|
||||
gpi_storeDI_CoinAttach(uctmp&8);
|
||||
gpi_storeDI_CoinEscrow(uctmp&16);
|
||||
gpi_storeDI_mifareCardTapped(uctmp&32);
|
||||
gpi_storeDI_rejMot_home(uctmp&64);
|
||||
|
||||
uctmp=receivedData[4];
|
||||
//gpi_storeDI_modemWake(0); // gibt's gar nicht!
|
||||
gpi_storeDI_mbdWake(uctmp&1);
|
||||
gpi_storeDI_MifarePowerIsOn(uctmp&2);
|
||||
gpi_storeDI_AuxPowerIsOn(uctmp&8);
|
||||
gpi_storeDI_GsmPowerIsOn(uctmp&16);
|
||||
gpi_storeDI_CreditPowerIsOn(uctmp&32);
|
||||
gpi_storeDI_PrinterPowerIsOn(uctmp&64);
|
||||
|
||||
//gpi_storeMdbState(uctmp&4, uctmp&128, uctmp&4); // hat ein eigenes Cmd weiter unten!
|
||||
gpi_storeDI_MdbPowerIsOn(uctmp&128);
|
||||
|
||||
gpi_storeDI_paperLow(receivedData[5]);
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBkAllOutputs:
|
||||
|
||||
/*
|
||||
D0 = mdb Rx-test out
|
||||
// alle DO's in einen 8byte Puffer zusammenstellen, werden in einen Rutsch zum Master gesendet
|
||||
|
||||
D1: motor outputs bit0: upper lock forw bit 1 backw
|
||||
Bit2: lowLock forw bit3: LL backw
|
||||
outBuf[0]: bit 0: TestMdbInput
|
||||
1: RS1 drv enabled
|
||||
2: RS1switch: 1=GSM 0=printer
|
||||
3: RS2switch: H: mifare L: credit
|
||||
4: Vbarcode=Vaux is on
|
||||
|
||||
D5: serial drv on/off, Serial mux1, Serial mux2
|
||||
D6: Leds, Fan,
|
||||
D7: Siren and relay
|
||||
D8: PtuWakeOut
|
||||
D9: Power Aux/Barcode
|
||||
D12: Coin shutter output, input-test-output
|
||||
D13: CoinEscrow Outputs bit0=return bit1=take
|
||||
D14: printer power is switched on/off
|
||||
*/
|
||||
outBuf[1]: bit 0: coin led
|
||||
1: 0
|
||||
2: paper led
|
||||
3: pinpad led
|
||||
4: start led
|
||||
5: service led
|
||||
|
||||
gpi_storeDO_mdbRxTst(receivedData[0]);
|
||||
gpi_storeDO_motorOutputs(receivedData[1]);
|
||||
gpi_storeDO_serialSwitch(receivedData[5]);
|
||||
gpi_storeDO_ledsAndFan(receivedData[6]);
|
||||
gpi_storeDO_sirenAndRelay(receivedData[7]);
|
||||
gpi_storeDO_ptuWake(receivedData[8]);
|
||||
gpi_storeDO_auxPower(receivedData[9]);
|
||||
gpi_storeDO_coinShutter(receivedData[12]);
|
||||
gpi_storeDO_coinEscrow(receivedData[13]);
|
||||
gpi_storeDO_printerPwrOn(receivedData[14]);
|
||||
outBuf[2]: bit 0: siren
|
||||
1: relay
|
||||
2: ptu wake
|
||||
3: shutter
|
||||
4: shutter test
|
||||
5: escrowGive
|
||||
6: escrowTake
|
||||
7: prn power
|
||||
|
||||
outBuf[3]: Motor 1: 0:off 1=vorwärts / öffnen 2=rückw./zu 3: beide ein
|
||||
outBuf[4]: Motor 2: 0:off 1=vorwärts / öffnen 2=rückw./zu 3: beide ein
|
||||
*/
|
||||
|
||||
uctmp=receivedData[0];
|
||||
gpi_storeDO_mdbRxTst(uctmp&1);
|
||||
gpi_storeDO_auxPower(uctmp&0x10);
|
||||
gpi_storeDO_serialSwitch((uctmp>>1)&7); // serial drv 0:on/off, 1:Serial mux1, 2:Serial mux2
|
||||
|
||||
uctmp=receivedData[1];
|
||||
gpi_storeDO_ledsAndFan(uctmp);
|
||||
// bit0: coinled 1:front_illu 2: paper-led 3:pinpad-led 4:start-led 5:service-led 6:fan
|
||||
|
||||
uctmp=receivedData[2];
|
||||
gpi_storeDO_sirenAndRelay(uctmp&3); // bit0: siren 1:relay
|
||||
gpi_storeDO_ptuWake(uctmp&4);
|
||||
|
||||
|
||||
gpi_storeDO_coinShutter(uctmp>>3); // bit0: Coin shutter output, bit1: input-test-output
|
||||
gpi_storeDO_coinEscrow(uctmp>>5); // retval: 1:return flap is open 2:take flap is open 0:closed
|
||||
gpi_storeDO_printerPwrOn(uctmp&0x80);
|
||||
|
||||
uctmp=(receivedData[4] & 3);
|
||||
uctmp<<=2;
|
||||
if (receivedData[3] & 1) uctmp |=1;
|
||||
if (receivedData[3] & 2) uctmp |=2;
|
||||
gpi_storeDO_motorOutputs(uctmp);
|
||||
// bit0: upper lock forw bit 1 backw bit2: lowLock forw bit3: LL backw
|
||||
break;
|
||||
|
||||
|
||||
case CMD2DC_RdBk_MifReader:
|
||||
case CMD2DC_RdBk_MifState:
|
||||
// get reader status and card type
|
||||
|
||||
gpi_storeMifReaderStateAndCardType(receivedData);
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBk_Mifcard:
|
||||
case CMD2DC_RdBk_MifData:
|
||||
// one block of data (64byte) comes in
|
||||
// blkNr 0...11 in "Addr"
|
||||
gpi_storeMifCardData(readAddress, receivedData);
|
||||
|
||||
//qDebug()<<"datif storing mif data: (adr/data) "<<readAddress<<receivedData;
|
||||
break;
|
||||
|
||||
case CMD2DC_RdBk_AtbCardType:
|
||||
@@ -1054,6 +1111,8 @@ char T_datif::loadRecDataFromFrame()
|
||||
// DB0: mdb_bus_ready (switched on)
|
||||
// DB1: rdBackV12devicePower
|
||||
// DB2: rdBackV5busPwr
|
||||
|
||||
//qDebug() << "got MDB state " << receivedData[0] << " " << receivedData[1] << " " << receivedData[2];
|
||||
gpi_storeMdbState(receivedData[0],receivedData[1],receivedData[2]);
|
||||
break;
|
||||
|
||||
@@ -1118,6 +1177,8 @@ void T_datif::datif_startSending(void)
|
||||
// egal ob WR und RD Daten gesetzt wurden
|
||||
myDCIF->sendUserData(selectedSlaveAddr); // starte Sendung
|
||||
gpi_startNewRequest();
|
||||
cycl_running=1;
|
||||
|
||||
}
|
||||
|
||||
// allgemeine Schreib/Lese-Funktion
|
||||
@@ -1135,12 +1196,14 @@ void T_datif::datif_sendIOrequest(uint16_t WRcmd, uint16_t RDcmd, uint8_t nrOfWr
|
||||
if (nrOfWrData>2)
|
||||
data[2]=datif_OutCmdpara3;
|
||||
if (nrOfWrData>3)
|
||||
data[3]=datif_OutCmdpara3;
|
||||
data[3]=datif_OutCmdpara4;
|
||||
data[4]=0; data[5]=0;
|
||||
|
||||
myDCIF->setUserWriteData(WRcmd, 0, nrOfWrData, data);
|
||||
myDCIF->setUserReadData(RDcmd);
|
||||
myDCIF->sendUserData(selectedSlaveAddr);
|
||||
cycl_running=1;
|
||||
|
||||
}
|
||||
|
||||
void T_datif::datif_send8byteOutCmd(uint16_t WRcmd, uint16_t RDcmd)
|
||||
@@ -1173,12 +1236,14 @@ void T_datif::datif_send8byteOutCmd(uint16_t WRcmd, uint16_t RDcmd)
|
||||
myDCIF->setUserWriteData(WRcmd, 0, 8, data);
|
||||
myDCIF->setUserReadData(RDcmd);
|
||||
myDCIF->sendUserData(selectedSlaveAddr);
|
||||
cycl_running=1;
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool T_datif::verifyLineTestresponse(uint8_t RdDlen, uint8_t *receivedData)
|
||||
{
|
||||
if (RdDlen !=16)
|
||||
if (RdDlen < 16)
|
||||
return false;
|
||||
QString myStr;
|
||||
myStr.clear();
|
||||
@@ -1186,7 +1251,13 @@ bool T_datif::verifyLineTestresponse(uint8_t RdDlen, uint8_t *receivedData)
|
||||
|
||||
for (int nn=0; nn<16; nn++)
|
||||
if (myStr[nn] !=receivedData[nn])
|
||||
{
|
||||
//qDebug() << " datif cmd 10: got wrong string ";
|
||||
//qDebug() << myStr;
|
||||
//qDebug() << receivedData;
|
||||
//qDebug() << nn;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1234,6 +1305,7 @@ void T_datif::datif_OUT_setTime(void)
|
||||
myDCIF->setUserWriteData(CMD2DC_sendTime,0,8, buff);
|
||||
myDCIF->setUserReadData(0);
|
||||
myDCIF->sendUserData(selectedSlaveAddr); // jetzt wegsckicken
|
||||
cycl_running=1;
|
||||
|
||||
}
|
||||
|
||||
@@ -1247,6 +1319,8 @@ uint8_t T_datif::datif_OUT_SendRandomData(uint8_t *buf, uint8_t Length)
|
||||
myDCIF->setBLsendData(len, buf );
|
||||
myDCIF->setUserReadData(0);
|
||||
myDCIF->sendUserData(selectedSlaveAddr);
|
||||
cycl_running=1;
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
@@ -1266,6 +1340,7 @@ void T_datif::datif_send64byteOutCmd(uint16_t WRcmd, uint16_t addr, uint16_t RDc
|
||||
myDCIF->setUserWriteData(WRcmd, addr, LL, data);
|
||||
myDCIF->setUserReadData(RDcmd);
|
||||
myDCIF->sendUserData(selectedSlaveAddr);
|
||||
cycl_running=1;
|
||||
|
||||
}
|
||||
|
||||
@@ -1285,6 +1360,7 @@ void T_datif::datif_sendToMemory(uint16_t WRcmd, uint16_t docNr, uint16_t blockN
|
||||
myDCIF->setUserWriteData(WRcmd, aa, 64, data64);
|
||||
myDCIF->setUserReadData(0);
|
||||
myDCIF->sendUserData(selectedSlaveAddr);
|
||||
cycl_running=1;
|
||||
|
||||
}
|
||||
|
||||
|
314
src/dcBL.cpp
314
src/dcBL.cpp
@@ -283,24 +283,28 @@ uint8_t dcBL_restartDC(uint8_t *sendData)
|
||||
uint8_t dcBL_activatBootloader(uint8_t *sendData)
|
||||
{
|
||||
// minimum size of sendData-buffer: 20 byte retval: length
|
||||
|
||||
uint8_t nn=0;
|
||||
|
||||
//sendData[nn++]='U'; nötig??
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
|
||||
sendData[nn++]=2;
|
||||
sendData[nn++]='c';
|
||||
sendData[nn++]='4';
|
||||
sendData[nn++]='5';
|
||||
sendData[nn++]='b';
|
||||
sendData[nn++]='3';
|
||||
sendData[nn++]=3;
|
||||
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]='U';
|
||||
sendData[nn++]=0;
|
||||
sendData[nn++]=0;
|
||||
return nn;
|
||||
}
|
||||
@@ -315,9 +319,11 @@ uint8_t dcBL_getResponse(uint8_t *respBuff, bool display)
|
||||
{
|
||||
epi_getRawReceivedData(respBuff);
|
||||
epi_clrRawReceivedString();
|
||||
dcBL_writeText("dcBL gotResponse");
|
||||
|
||||
if (display)
|
||||
{
|
||||
/*
|
||||
// Antwort ins Fenster schreiben:
|
||||
QString tmpStr="", myStr="~~> ";
|
||||
|
||||
@@ -332,8 +338,8 @@ uint8_t dcBL_getResponse(uint8_t *respBuff, bool display)
|
||||
myStr.append(" ");
|
||||
}
|
||||
dcBL_writeText(myStr);
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
return recLen;
|
||||
}
|
||||
@@ -355,6 +361,10 @@ uint8_t dcBL_ChkResponse()
|
||||
recLen=dcBL_getResponse(buf,0);
|
||||
if (recLen==0)
|
||||
return 0; // no response by now
|
||||
|
||||
qDebug()<<" DCBL_chkResp got answer " << recLen ;
|
||||
dcBL_writeText("DCBL_chkResp got answer");
|
||||
|
||||
if (buf[0]==2 && buf[1]==(dcBL_LastBLcmd | 0x80) )
|
||||
return 10; // OK
|
||||
|
||||
@@ -365,24 +375,28 @@ uint8_t dcBL_ChkResponse()
|
||||
{
|
||||
dcBL_writeText("error wrong length");
|
||||
//exactError=1;
|
||||
qDebug()<<" DCBL_chkResp wrong length ";
|
||||
return 10; // OK
|
||||
}
|
||||
if (buf[0] !=2)
|
||||
{
|
||||
dcBL_writeText("error wrong start");
|
||||
//exactError=2;
|
||||
qDebug()<<" DCBL_chkResp wrong start ";
|
||||
return 10; // OK
|
||||
}
|
||||
if (buf[0]==2 && buf[1]=='e' && buf[2]=='0' )
|
||||
{
|
||||
dcBL_writeText("error wrong crc");
|
||||
//exactError=3; // DC reports wrong crc
|
||||
qDebug()<<" DCBL_chkResp wrong crc";
|
||||
return 1; // error
|
||||
}
|
||||
if (buf[0]==2 && buf[1]==dcBL_LastBLcmd )
|
||||
{
|
||||
dcBL_writeText("error wrong cmd");
|
||||
//exactError=4; // wrong cmd
|
||||
qDebug()<<" DCBL_chkResp wrong cmd";
|
||||
return 10; // OK
|
||||
}
|
||||
//tmpStr.clear();
|
||||
@@ -393,6 +407,21 @@ uint8_t dcBL_ChkResponse()
|
||||
|
||||
|
||||
|
||||
uint8_t dcBL_sendSuccess(uint8_t lastCommand)
|
||||
{
|
||||
// return val: 0: no response by now 1:error 10: OK
|
||||
|
||||
uint8_t buf[152], recLen;
|
||||
|
||||
recLen=dcBL_getResponse(buf,0);
|
||||
if (recLen==0)
|
||||
return 0; // no response by now
|
||||
|
||||
if (buf[0]==2 && buf[1]==(lastCommand | 0x80) )
|
||||
return 10; // OK
|
||||
return 1;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
// --- ATB Bin-File Handling ---------------------------------------------------------------------
|
||||
// -----------------------------------------------------------------------------------------------
|
||||
@@ -502,7 +531,8 @@ static QByteArray dcBL_AtbBinFile;
|
||||
static uint32_t dcBL_fileSize;
|
||||
static uint16_t dcBL_nrOfBlocks;
|
||||
static uint16_t dcBL_fileCrc;
|
||||
static uint8_t dcBL_myBuf[257000]; // same content like "dcBL_AtbBinFile" but bytewise
|
||||
//static uint8_t dcBL_myBuf[2570000]; // same content like "dcBL_AtbBinFile" but bytewise
|
||||
static uint8_t dcBL_myBuf[300000]; // same content like "dcBL_AtbBinFile" but bytewise
|
||||
|
||||
bool dcBL_importBinFile(QByteArray readBinFile, uint32_t fileSize, char withDispl)
|
||||
{
|
||||
@@ -514,7 +544,10 @@ bool dcBL_importBinFile(QByteArray readBinFile, uint32_t fileSize, char withDisp
|
||||
dcBL_AtbBinFile=readBinFile;
|
||||
dcBL_fileSize=fileSize;
|
||||
|
||||
if (dcBL_fileSize>258048)
|
||||
//if (dcBL_fileSize>258048) // 27.3.23TS woher kommt die Zahl???
|
||||
// das hex file hat 278kB
|
||||
// hex file nicht erlaubt???
|
||||
if (dcBL_fileSize>=300000)
|
||||
return false; // keep last file
|
||||
ultmp=dcBL_fileSize;
|
||||
ultmp %=64;
|
||||
@@ -718,7 +751,7 @@ uint8_t dcBL_getFileBlock(uint16_t blockPointer, uint8_t *buf)
|
||||
|
||||
/*
|
||||
// Kontrolle:
|
||||
qDebug()<<"dcBL_getFileBlock myBuf: ";
|
||||
qDebug()<<"dcBL getFileBlock myBuf: ";
|
||||
int ii=0;
|
||||
do
|
||||
{
|
||||
@@ -729,7 +762,7 @@ uint8_t dcBL_getFileBlock(uint16_t blockPointer, uint8_t *buf)
|
||||
|
||||
} while (ii<64);
|
||||
|
||||
qDebug()<<"dcBL_getFileBlock myBuf: ";
|
||||
qDebug()<<"dcBL getFileBlock myBuf: ";
|
||||
ii=0;
|
||||
do
|
||||
{
|
||||
@@ -809,7 +842,6 @@ QString dcBL_readText(void)
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
static uint8_t dcBL_step, dcBL_state;
|
||||
static uint16_t dcBL_BlkCtr, dcBL_cyclCtr, repeatCtr;
|
||||
|
||||
@@ -826,8 +858,8 @@ void dcBL_iniChain(void)
|
||||
pBlResp=0;
|
||||
for (nn=0;nn<SIZEBLRESP; nn++)
|
||||
BlResp[nn]="";
|
||||
dcBL_writeText("**CLEAR**");
|
||||
|
||||
//dcBL_writeText("**CLEAR**");
|
||||
dcBL_writeText("bl chain ini");
|
||||
}
|
||||
|
||||
uint8_t dcBL_startChain(void)
|
||||
@@ -836,13 +868,15 @@ uint8_t dcBL_startChain(void)
|
||||
{
|
||||
dcBL_iniChain();
|
||||
dcBL_step=1;
|
||||
epi_clrRawReceivedString();
|
||||
//epi_clrRawReceivedString();
|
||||
qDebug()<<"starting chain...";
|
||||
//qDebug()<<pBlResp;
|
||||
dcBL_writeText("bl chain start");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint8_t dcBL_runChain(void)
|
||||
{
|
||||
// starting BL
|
||||
@@ -857,17 +891,14 @@ uint8_t dcBL_runChain(void)
|
||||
|
||||
QString tmpStr="";
|
||||
|
||||
uint8_t buf[70], sendBuf[160], len, sendLen, gotResp; //, uit8tmp; //, recLen; recBuff[160], ii,
|
||||
uint8_t buf[70], sendBuf[160], len, sendLen, gotResp, ii, uit8tmp;
|
||||
//static uint8_t lastBlkLength;
|
||||
QString stemp=" ";
|
||||
uint32_t ultmp;
|
||||
bool ret;
|
||||
//uint8_t recLen, recBuff[160], ;
|
||||
|
||||
//recLen=dcBL_getResponse(recBuff, (dcBL_step<=11)?1:0); // reads all responses
|
||||
// Antwort nur bis step 11 anzeigen
|
||||
// wird schon in dcBL_responseOK() gelesen
|
||||
|
||||
gotResp=dcBL_ChkResponse();
|
||||
gotResp=dcBL_ChkResponse(); //zum test hier raus, unten gehts nicht, darf nur 1x
|
||||
|
||||
switch (dcBL_step)
|
||||
{
|
||||
@@ -904,6 +935,7 @@ uint8_t dcBL_runChain(void)
|
||||
|
||||
case 5: // wait for answer: 2 99 52 53 98 51 3
|
||||
// Problem: kommt von app, nicht vom BL. Also wenn BL schon aktiv ist dann gehts nicht
|
||||
|
||||
/*
|
||||
dcBL_cyclCtr++;
|
||||
if (recLen>6 && recBuff[0]==2 && recBuff[1]==99 && recBuff[2]==52)
|
||||
@@ -922,7 +954,7 @@ uint8_t dcBL_runChain(void)
|
||||
dcBL_state=3;
|
||||
dcBL_step=0; // stop chain
|
||||
return 0;
|
||||
}*/
|
||||
} */
|
||||
|
||||
dcBL_step++;
|
||||
repeatCtr=0;
|
||||
@@ -1002,49 +1034,15 @@ uint8_t dcBL_runChain(void)
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
break;
|
||||
/*
|
||||
case 10: // send length and crc
|
||||
len=dcBL_getAtbFileHeader(buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
dcBL_writeText("sending header");
|
||||
|
||||
dcBL_BlkCtr=0; // normal 0
|
||||
|
||||
dcBL_cyclCtr=0;
|
||||
dcBL_step++;
|
||||
break;
|
||||
|
||||
case 11: // wait for answer 2 178 102 105 3
|
||||
|
||||
if (gotResp==ISOK)
|
||||
{
|
||||
dcBL_step++;
|
||||
repeatCtr=0;
|
||||
return 0;
|
||||
} else
|
||||
if (gotResp==ISWRONG)
|
||||
{
|
||||
if (++repeatCtr<3)
|
||||
{
|
||||
dcBL_step--;
|
||||
} else
|
||||
{
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
}
|
||||
if (++dcBL_cyclCtr>10)
|
||||
{
|
||||
dcBL_writeText("cancel");
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
break;
|
||||
*/
|
||||
case 12: // send binary 64 byte wise
|
||||
|
||||
len=dcBL_getFileBlock(dcBL_BlkCtr, buf); // read from file, len = 0...64
|
||||
//lastBlkLength=len; // recognize last block or end
|
||||
sendLen=dcBL_prepareDC_BLcmd(0x22, len, buf, sendBuf); // pack into protocol frame
|
||||
/*
|
||||
|
||||
|
||||
// Kontrolle:
|
||||
qDebug()<<"dcBL sending: ";
|
||||
ii=0;
|
||||
@@ -1056,7 +1054,7 @@ uint8_t dcBL_runChain(void)
|
||||
qDebug() << stemp << " "; // Anzeige in hex
|
||||
|
||||
} while (ii<100);
|
||||
*/
|
||||
|
||||
|
||||
sendWRcmd_setSendBlock160(sendLen, sendBuf); // send 140 bytes
|
||||
delay(100);
|
||||
@@ -1174,12 +1172,199 @@ uint8_t dcBL_runChain(void)
|
||||
case 18:
|
||||
dcBL_step=0;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void dcBL_iniLoading(void)
|
||||
{
|
||||
dcBL_iniChain();
|
||||
}
|
||||
|
||||
|
||||
void dcBL_startLoading(void)
|
||||
{
|
||||
if (dcBL_step==0 || dcBL_step>17)
|
||||
{
|
||||
//dcBL_iniChain();
|
||||
dcBL_step=1;
|
||||
//epi_clrRawReceivedString();
|
||||
qDebug()<<"DCBL start sending hexfile...";
|
||||
dcBL_writeText("DCBL start sending hexfile...");
|
||||
dcBL_BlkCtr=0;
|
||||
dcBL_cyclCtr=0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
uint8_t dcBL_sendHexfile(void)
|
||||
{
|
||||
QString tmpStr="";
|
||||
uint8_t buf[70], sendBuf[160], len, sendLen, gotResp; //, recLen; recBuff[160], ii,
|
||||
QString stemp=" ";
|
||||
uint32_t ultmp;
|
||||
uint8_t uit8tmp, ii;
|
||||
|
||||
|
||||
gotResp=dcBL_ChkResponse();
|
||||
|
||||
switch (dcBL_step)
|
||||
{
|
||||
case 1: // send start address
|
||||
if (dcBL_BlkCtr==0 || dcBL_BlkCtr==1024 || dcBL_BlkCtr==2048 || dcBL_BlkCtr==3072 || dcBL_BlkCtr==4096)
|
||||
{
|
||||
ultmp=uint32_t(dcBL_BlkCtr);
|
||||
ultmp*=64;
|
||||
len=dcBL_sendFlashStartAddr2BL(ultmp, buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
qDebug()<<" DCBL_CYCL_sending HexFile address ";
|
||||
dcBL_writeText("sending addr");
|
||||
dcBL_step++;
|
||||
return 0;
|
||||
} else
|
||||
dcBL_step=12;
|
||||
break;
|
||||
|
||||
case 2: // wait for answer 2 161 68 59 3
|
||||
if (gotResp==ISOK)
|
||||
{
|
||||
dcBL_step=12; // Header nicht senden, unnötig
|
||||
dcBL_BlkCtr=0; // 0
|
||||
repeatCtr=0;
|
||||
return 0;
|
||||
} else
|
||||
if (gotResp==ISWRONG)
|
||||
{
|
||||
if (++repeatCtr<3)
|
||||
{
|
||||
dcBL_step--;
|
||||
} else
|
||||
{
|
||||
dcBL_step=0; // stop chain
|
||||
qDebug()<<" DCBL_CYCL_got wrong resp to addr";
|
||||
dcBL_writeText("wrong resp");
|
||||
}
|
||||
}
|
||||
if (++dcBL_cyclCtr>100)
|
||||
{
|
||||
dcBL_writeText("cancel");
|
||||
qDebug()<<" DCBL_CYCL_step 2 got NO resp to addr";
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
break;
|
||||
|
||||
case 12: // send binary 64 byte wise
|
||||
|
||||
len=dcBL_getFileBlock(dcBL_BlkCtr, buf); // read from file, len = 0...64
|
||||
//lastBlkLength=len; // recognize last block or end
|
||||
sendLen=dcBL_prepareDC_BLcmd(0x22, len, buf, sendBuf); // pack into protocol frame
|
||||
|
||||
// Kontrolle:
|
||||
qDebug()<<"dcBL sending: ";
|
||||
ii=0;
|
||||
do
|
||||
{
|
||||
uit8tmp=(uint8_t)sendBuf[ii++];
|
||||
//qDebug() << uit8tmp << " "; // Anzeige in dez
|
||||
stemp.setNum(uit8tmp,16);
|
||||
qDebug() << stemp << " "; // Anzeige in hex
|
||||
|
||||
} while (ii<100);
|
||||
|
||||
sendWRcmd_setSendBlock160(sendLen, sendBuf); // send 140 bytes
|
||||
delay(100);
|
||||
dcBL_writeText("blk nr: ");
|
||||
tmpStr.setNum(dcBL_BlkCtr);
|
||||
dcBL_writeText(tmpStr);
|
||||
delay(100);
|
||||
qDebug()<<"DCBL sending blk nr: " << dcBL_BlkCtr;
|
||||
dcBL_cyclCtr=0;
|
||||
dcBL_BlkCtr++;
|
||||
dcBL_step++;
|
||||
break;
|
||||
|
||||
case 13: // wait for answer 2 162 116 88 3
|
||||
|
||||
if (gotResp==ISOK)
|
||||
{
|
||||
// check if next address is needed (every 1024Blocks = 65536bytes)
|
||||
if (dcBL_BlkCtr==1024 || dcBL_BlkCtr==2048 || dcBL_BlkCtr==3072 || dcBL_BlkCtr==4096)
|
||||
{
|
||||
dcBL_step=8;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// check for EOF:
|
||||
if (dcBL_BlkCtr >= dcBL_nrOfBlocks)
|
||||
{
|
||||
dcBL_writeText("last block successful sent...");
|
||||
dcBL_step++; // stop chain
|
||||
dcBL_state=3; // transmission SUCCESSFUL
|
||||
return 0;
|
||||
}
|
||||
dcBL_state=2; // transmission started
|
||||
dcBL_step--; // send next data block
|
||||
repeatCtr=0;
|
||||
return 0;
|
||||
}
|
||||
if (gotResp==ISWRONG)
|
||||
{
|
||||
if (++repeatCtr<3)
|
||||
{
|
||||
dcBL_writeText("error");
|
||||
dcBL_BlkCtr--;
|
||||
dcBL_step--; // send same block again
|
||||
} else
|
||||
{
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
}
|
||||
if (++dcBL_cyclCtr>30) // longer TO due to flashing
|
||||
{
|
||||
dcBL_writeText("cancel");
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
break;
|
||||
|
||||
case 14: //
|
||||
dcBL_writeText("finish writing flash");
|
||||
len=dcBL_writeLastPage(buf); // nur zur Sicherheit
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
dcBL_step++;
|
||||
break;
|
||||
|
||||
case 15: // wait for answer
|
||||
if (gotResp==ISOK)
|
||||
{
|
||||
dcBL_step++;
|
||||
repeatCtr=0;
|
||||
return 0;
|
||||
} else
|
||||
if (gotResp==ISWRONG)
|
||||
{
|
||||
if (++repeatCtr>3)
|
||||
{
|
||||
dcBL_step--;
|
||||
}
|
||||
}
|
||||
if (++dcBL_cyclCtr>10)
|
||||
{
|
||||
dcBL_writeText("cancel");
|
||||
dcBL_step=0; // stop chain
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
uint8_t dcBL_getResult(void)
|
||||
{
|
||||
// call after every step to what's going on....
|
||||
@@ -1190,6 +1375,9 @@ uint8_t dcBL_getResult(void)
|
||||
return dcBL_state;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------------
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
|
||||
static uint8_t Sdata_rawData[RAW_BL_DATALEN];
|
||||
@@ -1204,6 +1392,8 @@ void gpi_storeRawReceivedData(uint8_t RdDlen, uint8_t *receivedData)
|
||||
Sdata_LengthRawData=RAW_BL_DATALEN;
|
||||
for (nn=0; nn<Sdata_LengthRawData; nn++)
|
||||
Sdata_rawData[nn]=receivedData[nn];
|
||||
qDebug()<<"dcBL got data"<< Sdata_LengthRawData << "bytes :)";
|
||||
|
||||
}
|
||||
|
||||
uint8_t epi_getRawReceivedData(uint8_t *receivedData)
|
||||
@@ -1230,8 +1420,8 @@ QString epi_getRawReceivedString()
|
||||
QString myString=nullptr, tmpStr=nullptr;
|
||||
|
||||
myString.clear();
|
||||
//if (Sdata_LengthRawData==0)
|
||||
// return myString;
|
||||
if (Sdata_LengthRawData==0)
|
||||
return myString;
|
||||
|
||||
for (nn=0; nn<Sdata_LengthRawData; nn++)
|
||||
{
|
||||
|
289
src/hwapi.cpp
289
src/hwapi.cpp
@@ -17,7 +17,7 @@
|
||||
#include "storeINdata.h"
|
||||
#include "dcBL.h"
|
||||
#include <QDebug>
|
||||
#include "interfaces.h"
|
||||
#include <../plugins/interfaces.h>
|
||||
|
||||
|
||||
|
||||
@@ -458,28 +458,23 @@ uint8_t hwapi::lock_switchLowerLock(uint8_t dir) const
|
||||
|
||||
void hwapi::lock_switchVaultDoor(void) const
|
||||
{
|
||||
//qDebug() << "HWapi: send cmd open vault";
|
||||
|
||||
sendWRcmd_setSendCommand0(SENDDIR_OPENVAULT);
|
||||
}
|
||||
|
||||
void hwapi::coin_switchRejectMotor(uint8_t dir) const
|
||||
{
|
||||
//qDebug() << "HWapi: send cmd open vault";
|
||||
|
||||
sendWRcmd_setSendCommand4(SENDDIR_REJMOT_ON, dir, 0,0,0);
|
||||
}
|
||||
|
||||
void hwapi::coin_rejectCoins(void) const
|
||||
{
|
||||
//qDebug() << "HWapi: send cmd open vault";
|
||||
|
||||
sendWRcmd_setSendCommand0(SENDDIR_REJMOT_RUN);
|
||||
}
|
||||
|
||||
|
||||
void hwapi::led_switchLedIllumination(uint8_t on) const
|
||||
{
|
||||
sendWRcmd_setSendCommand4(SENDDIRCMD_LEDILLU, on, 0, 0, 0);
|
||||
}
|
||||
|
||||
void hwapi::led_switchLedService(uint8_t on) const
|
||||
{
|
||||
sendWRcmd_setSendCommand4(SENDDIRCMD_LEDINSIDE, on, 0, 0, 0);
|
||||
@@ -511,7 +506,7 @@ void hwapi::fan_switchFan(bool on) const
|
||||
sendWRcmd_setSendCommand4(SENDDIRCMD_FAN, on, 0, 0, 0);
|
||||
}
|
||||
|
||||
void hwapi::laerm_switchSiren(bool on) const
|
||||
void hwapi::alarm_switchSiren(bool on) const
|
||||
{
|
||||
//return epi_storeDOsToSend(DOBYTE4, LAERM, on);
|
||||
sendWRcmd_setSendCommand4(SENDDIRCMD_LAERM, on, 0, 0, 0);
|
||||
@@ -844,7 +839,11 @@ bool hwapi::door_isContactPowerOn(void) const
|
||||
|
||||
bool hwapi::mif_isMifarePowerOn(void) const
|
||||
{
|
||||
return epi_getDI_mifarePwr();
|
||||
bool mo=indat_isMifareOn();
|
||||
bool mi=epi_getDI_mifarePwr();
|
||||
if (mo && mi)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hwapi::mdb_testIsmdbTxDon(void) const
|
||||
@@ -893,9 +892,11 @@ bool hwapi::cash_getRejectMotorHomePos(void) const
|
||||
return epi_getDI_rejectMotor_homepos();
|
||||
}
|
||||
|
||||
bool hwapi::cash_getLowPaperSensor(void) const
|
||||
uint8_t hwapi::cash_getLowPaperSensor(void) const
|
||||
{
|
||||
// 0: Sensor sees paper 1: no paper 99: off
|
||||
return epi_getDI_npe_sensor();
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
@@ -972,24 +973,39 @@ void hwapi::request_PrinterStateComplete() const
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_PRN_ALL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void hwapi::request_MifareReaderState() const
|
||||
{
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_MIFREADER);
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_MIFSTATE);
|
||||
}
|
||||
|
||||
void hwapi::request_MifareCardType() const
|
||||
{
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_MIFCARD);
|
||||
//uint8_t blkAdr=0;
|
||||
//sendWRcmd_setSendCommand4(SEND_REQU_MIFDATA, blkAdr,0,0,0);
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_MIFSTATE);
|
||||
}
|
||||
|
||||
void hwapi::request_MifareAtbType() const
|
||||
{
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_MIF_ATB_TYPE);
|
||||
//sendWRcmd_setSendCommand0(SEND_REQU_MIF_ATB_TYPE);
|
||||
sendWRcmd_setSendCommand0(SEND_REQU_MIFSTATE);
|
||||
|
||||
}
|
||||
|
||||
void hwapi::request_MifareData() const
|
||||
void hwapi::request_MifareID() const
|
||||
{
|
||||
//sendWRcmd_setSendCommand0(SEND_REQU_MIF_DATA);
|
||||
uint8_t sequenceNumber=0;
|
||||
sendWRcmd_setSendCommand4(SEND_REQU_MIFDATA, sequenceNumber,0,0,0); // 1st data = card sequence =blk nr (0...15)
|
||||
}
|
||||
|
||||
void hwapi::request_MifareData(uint8_t dataBlockNumber) const
|
||||
{
|
||||
if (dataBlockNumber<12) // 1k cards return 12 data blocks, 4k cards would return 54 data blocks (not implemented)
|
||||
sendWRcmd_setSendCommand4(SEND_REQU_MIFDATA, dataBlockNumber,0,0,0); // 1st data = card sequence =blk nr (0...15)
|
||||
}
|
||||
|
||||
|
||||
@@ -1279,11 +1295,11 @@ uint8_t hwapi::lock_openLowerDoor(void) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
//uint8_t hwapi::lock_closeLowerDoor(void) const
|
||||
//{
|
||||
// sendWRcmd_setSendCommand4(SENDDIRCMD_OPENDN_DOOR, 2, 0, 0, 0);
|
||||
// return 0;
|
||||
//}
|
||||
uint8_t hwapi::lock_closeLowerDoor(void) const
|
||||
{
|
||||
sendWRcmd_setSendCommand4(SENDDIRCMD_OPENDN_DOOR, 2, 0, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hwapi::shut_openOnce(void) const
|
||||
{
|
||||
@@ -1342,10 +1358,28 @@ uint8_t hwapi::mif_returnReaderStateAndCardType(uint8_t *buf, uint8_t maxBufferS
|
||||
{
|
||||
// retval 0=OK 1=error host buffer too small
|
||||
|
||||
/* data description:
|
||||
|
||||
new fast version:
|
||||
byte 0= still the same: current read state:
|
||||
0=power off 1=reader-fault 2=ready
|
||||
3=just reading 4=read complete
|
||||
5=read partial, removed too early
|
||||
6=state unknown
|
||||
|
||||
byte 1: reader state 1=ok 0=nok
|
||||
byte 2: card present (0,1)
|
||||
byte 3: card selected (0)
|
||||
byte 4: card type: 0...5
|
||||
byte 5: card allowed (0=no 1=MifareClassic 1k or 4k)
|
||||
byte 6: CardSize: 1 or 4 (kB)
|
||||
byte 7: length of UID 4 or 7 (byte)
|
||||
*/
|
||||
|
||||
return epi_restoreMifState(buf, maxBufferSize);
|
||||
}
|
||||
|
||||
/* data description:
|
||||
/* OLD data description:
|
||||
byte 0: current read state: 0=power off 1=reader-fault 2=ready
|
||||
3=just reading 4=read complete
|
||||
5=read partial, removed too early
|
||||
@@ -1368,9 +1402,9 @@ byte 32: result, always 0
|
||||
bool hwapi::mif_readerIsOK(void) const
|
||||
{
|
||||
|
||||
uint8_t buf[40];
|
||||
uint8_t buf[40]; // old version had 40 bytes, new version only 8
|
||||
uint8_t ret= epi_restoreMifState(buf, 40);
|
||||
if (ret==0 && buf[0]>1 && buf[3]>0)
|
||||
if (ret==0 && buf[0]>1 && buf[1]>0)
|
||||
return 1;
|
||||
return 0; // error
|
||||
}
|
||||
@@ -1380,7 +1414,7 @@ bool hwapi::mif_cardAttached(void) const
|
||||
|
||||
uint8_t buf[40];
|
||||
uint8_t ret= epi_restoreMifState(buf, 40);
|
||||
if (ret==0 && buf[0]>1 && buf[3]>0) // reader OK
|
||||
if (ret==0 && buf[0]>1 && buf[2]>0) // reader OK
|
||||
if (buf[16]>0)
|
||||
return 1;
|
||||
return 0; // error
|
||||
@@ -1395,7 +1429,7 @@ uint8_t hwapi::mif_readResult(void) const
|
||||
uint8_t buf[40];
|
||||
uint8_t ret= epi_restoreMifState(buf, 40);
|
||||
// data read successful && Reader OK && card attached && ...
|
||||
if (ret==0 && buf[3]>0 && buf[16]>0)
|
||||
if (ret==0 && buf[1]>0 && buf[2]>0)
|
||||
{
|
||||
// byte 0: current read state: 0=power off 1=reader-fault 2=ready
|
||||
// 3=just reading 4=read complete
|
||||
@@ -1417,10 +1451,11 @@ QString hwapi::mif_cardUID(void) const
|
||||
{
|
||||
QString myStr;
|
||||
|
||||
uint8_t buf[40];
|
||||
uint8_t ret= epi_restoreMifState(buf, 40);
|
||||
myStr.clear();
|
||||
uint8_t buf[65], ret;
|
||||
|
||||
//uint8_t ret= epi_restoreMifState(buf, 40);
|
||||
myStr.clear();
|
||||
/*
|
||||
if (ret==0 && buf[0]==4 && buf[3]>0 && buf[16]>0 && buf[19]>0)
|
||||
{
|
||||
// UID in buf[22...29]
|
||||
@@ -1431,7 +1466,26 @@ QString hwapi::mif_cardUID(void) const
|
||||
myStr+=" "; // make a gap between numbers
|
||||
}
|
||||
}
|
||||
return myStr;
|
||||
*/
|
||||
|
||||
ret=epi_restoreMifData(0, buf, 64);
|
||||
if (ret)
|
||||
return myStr; // return empty string on error
|
||||
else
|
||||
{
|
||||
buf[8]=0;
|
||||
//myStr.append(buf);
|
||||
for (int ii=0;ii<8; ii++)
|
||||
{
|
||||
|
||||
myStr+=QString::number(buf[ii],16); // 16: return in hex format
|
||||
myStr+=" "; // make a gap between numbers
|
||||
}
|
||||
|
||||
return myStr;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2494,7 +2548,178 @@ uint8_t hwapi::bl_exitBL(uint8_t *sendData) const
|
||||
return dcBL_exitBL(sendData);
|
||||
}
|
||||
|
||||
|
||||
void hwapi::led_switchLedIllumination(uint8_t on) const
|
||||
{
|
||||
if (on)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// neu, 25.3.23
|
||||
|
||||
void hwapi::bl_rebootDC(void) const
|
||||
{
|
||||
uint8_t len, buf[20];
|
||||
|
||||
len=dcBL_restartDC(buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
}
|
||||
|
||||
void hwapi::bl_startBL(void) const
|
||||
{
|
||||
uint8_t len, buf[20];
|
||||
|
||||
len=dcBL_activatBootloader(buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
}
|
||||
|
||||
void hwapi::bl_checkBL(void) const
|
||||
{
|
||||
uint8_t len, buf[20];
|
||||
|
||||
//len=dcBL_readBLversion(buf);
|
||||
len=dcBL_readFWversion(buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
}
|
||||
|
||||
bool hwapi::bl_isUp(void) const
|
||||
{
|
||||
uint8_t receivedData[160];
|
||||
uint8_t LL, nn;
|
||||
|
||||
for (nn=0; nn<160; nn++) receivedData[nn]=0;
|
||||
LL=epi_getRawRecLength();
|
||||
if (LL>0)
|
||||
{
|
||||
epi_getRawReceivedData(receivedData);
|
||||
//epi_clrRawReceivedString();
|
||||
|
||||
//qDebug() << " *** got " << LL << " data bytes from BL: " <<
|
||||
// receivedData[0] << " " << receivedData[1] << " " << receivedData[2] << " " <<
|
||||
// receivedData[3] << " " << receivedData[4] << " " << receivedData[5] << " ";
|
||||
|
||||
// response to "readFWversion"
|
||||
if (receivedData[0]==2 && receivedData[1]==146 && receivedData[2]==45 &&
|
||||
receivedData[3]==45 && receivedData[4] ==95 && receivedData[5]==176)
|
||||
{
|
||||
dcBL_iniLoading();
|
||||
return true;
|
||||
}
|
||||
// response to "start BL"
|
||||
if (receivedData[0]==2 && receivedData[1]==101 && receivedData[2]==48 &&
|
||||
receivedData[3]==223 && receivedData[4] ==131 )
|
||||
{
|
||||
dcBL_iniLoading();
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void hwapi::bl_sendAddress(u_int16_t blockNumber) const
|
||||
{
|
||||
// send start address, nr of 64byte-block, start with 0
|
||||
// will be sent only for folling block-numbers:
|
||||
// 0, 1024, 2048, 3072 and 4096, so basically every 64kByte
|
||||
uint32_t dcBL_BlkCtr=(uint32_t)blockNumber;
|
||||
uint8_t len, buf[20];
|
||||
|
||||
tslib_strclr(buf, 0, 20);
|
||||
if (dcBL_BlkCtr==0 || dcBL_BlkCtr==1024 || dcBL_BlkCtr==2048 || dcBL_BlkCtr==3072 || dcBL_BlkCtr==4096)
|
||||
{
|
||||
dcBL_BlkCtr*=64;
|
||||
len=dcBL_sendFlashStartAddr2BL(dcBL_BlkCtr, buf); // make command string
|
||||
// uint8_t dcBL_sendFlashStartAddr2BL(uint32_t startAddr, uint8_t *sendData)
|
||||
// minimum size of sendData-buffer: 13byte retval: length (9...13)
|
||||
sendWRcmd_setSendBlock160(len, buf); // send command to BL
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t hwapi::bl_wasSendingAddOK(void) const
|
||||
{
|
||||
// return val: 0: no response by now 1:error 10: OK
|
||||
|
||||
return dcBL_sendSuccess(0x21);
|
||||
// return val: 0: no response by now 1:error 10: OK
|
||||
// lastCommand=0x21 for sendAddr or 0x22 for send data
|
||||
|
||||
}
|
||||
|
||||
|
||||
void hwapi::bl_sendDataBlock(uint8_t length, u_int8_t *buffer) const
|
||||
{
|
||||
// send 64 byte from bin file
|
||||
uint8_t LL=length, sendBuf[66], sendLen;
|
||||
if (LL>64) LL=64;
|
||||
|
||||
sendLen=dcBL_prepareDC_BLcmd(0x22, LL, buffer, sendBuf); // pack into protocol frame
|
||||
sendWRcmd_setSendBlock160(sendLen, sendBuf); // send 140 bytes
|
||||
delay(100);
|
||||
}
|
||||
|
||||
void hwapi::bl_sendLastBlock(void) const
|
||||
{
|
||||
uint8_t len, buf[20];
|
||||
|
||||
len=dcBL_writeLastPage(buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
|
||||
}
|
||||
|
||||
uint8_t hwapi::bl_wasSendingDataOK(void) const
|
||||
{
|
||||
// return val: 0: no response by now 1:error 10: OK
|
||||
|
||||
return dcBL_sendSuccess(0x22);
|
||||
// return val: 0: no response by now 1:error 10: OK
|
||||
// lastCommand=0x21 for sendAddr or 0x22 for send data
|
||||
|
||||
}
|
||||
|
||||
void hwapi::bl_stopBL(void) const
|
||||
{
|
||||
uint8_t len, buf[20];
|
||||
|
||||
len=dcBL_exitBL(buf);
|
||||
sendWRcmd_setSendBlock160(len, buf);
|
||||
|
||||
}
|
||||
|
||||
bool hwapi::bl_isDiagAvailable(void) const
|
||||
{
|
||||
|
||||
return dcBL_checkForText();
|
||||
}
|
||||
|
||||
|
||||
QString hwapi::dc_getDiagText(void) const
|
||||
{
|
||||
return dcBL_readText(); // read from 0...9 (oldest first)
|
||||
}
|
||||
|
||||
|
||||
|
||||
// geht noch nicht //////
|
||||
void hwapi::bl_startSending(void) const
|
||||
{
|
||||
|
||||
dcBL_startLoading();
|
||||
}
|
||||
|
||||
|
||||
void hwapi::bl_sendFile(void) const
|
||||
{
|
||||
//qDebug()<<" HWAPI_BL_CYCL_ISrunning ";
|
||||
|
||||
dcBL_sendHexfile();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
282
src/prot.cpp
282
src/prot.cpp
@@ -9,9 +9,33 @@ T_prot::T_prot()
|
||||
|
||||
mySerialPort = new T_com();
|
||||
connect(mySerialPort, SIGNAL(receivingFinished()), this, SLOT( analyseRecData() ));
|
||||
//connect(mySerialPort, SIGNAL(receivingFinished()), this, SLOT( receivFin() ));
|
||||
//connect(mySerialPort, SIGNAL(sendingFinished()), this, SLOT(sendeFin()));
|
||||
kindOfData=0; // 0: binaries, 1:text
|
||||
|
||||
for (int nn=0; nn<FRAME_DATALEN; nn++)
|
||||
{
|
||||
chOut_Data[nn]=0;
|
||||
ui8OutputData[nn]=0;
|
||||
InputData[nn]=0;
|
||||
}
|
||||
for (int nn=0; nn<BL_DATA_LEN; nn++)
|
||||
{
|
||||
ui8BLsendData[nn]=0;
|
||||
}
|
||||
WriteCommand=0;
|
||||
WriteAddr=0;
|
||||
WrDataLength=0;
|
||||
SendDataValid=0;
|
||||
kindOfData=0;
|
||||
slaveAddr=0;
|
||||
ReadCommand=0;
|
||||
ReadAddr=0;
|
||||
reserve =0;
|
||||
RecSlaveAddr =0;
|
||||
INdataValid=0;
|
||||
readSource =0;
|
||||
readAddress=0;
|
||||
RdDataLength=0;
|
||||
BLsendDataLength=0;
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +54,19 @@ bool T_prot::isSerialFree(void)
|
||||
return true; // ohne HS's kann er nicht blockiert sein
|
||||
}
|
||||
|
||||
void T_prot::setRecLen(uint16_t WriteCmd)
|
||||
{
|
||||
if (WriteCmd<100)
|
||||
{
|
||||
RdDataLength=DATALEN_RECEIVE_LONG; // store here already because it's no longer
|
||||
// returned from slave
|
||||
mySerialPort->receiveFixLen(TELEGRAMLEN_RECEIVE_LONG);
|
||||
} else
|
||||
{
|
||||
RdDataLength=DATALEN_RECEIVE_FAST;
|
||||
mySerialPort->receiveFixLen(TELEGRAMLEN_RECEIVE_FAST);
|
||||
}
|
||||
}
|
||||
|
||||
void T_prot::setUserWriteData(uint16_t WriteCmd, uint16_t WrAddr, uint8_t WrDatLen, uint8_t *data)
|
||||
{
|
||||
@@ -43,6 +80,8 @@ void T_prot::setUserWriteData(uint16_t WriteCmd, uint16_t WrAddr, uint8_t WrDat
|
||||
ui8OutputData[nn]=data[nn];
|
||||
SendDataValid=1; // always set WR first
|
||||
kindOfData=0; // 0: binaries, 1:text
|
||||
this->setRecLen(WriteCmd);
|
||||
|
||||
}
|
||||
|
||||
void T_prot::setUserWriteData(uint16_t WriteCmd, uint16_t WrAddr)
|
||||
@@ -54,6 +93,8 @@ void T_prot::setUserWriteData(uint16_t WriteCmd, uint16_t WrAddr)
|
||||
ui8OutputData[nn]=0;
|
||||
SendDataValid=1; // always set WR first
|
||||
kindOfData=0; // 0: binaries, 1:text
|
||||
this->setRecLen(WriteCmd);
|
||||
|
||||
}
|
||||
|
||||
void T_prot::setUserWriteData(uint16_t WriteCmd)
|
||||
@@ -65,6 +106,8 @@ void T_prot::setUserWriteData(uint16_t WriteCmd)
|
||||
ui8OutputData[nn]=0;
|
||||
SendDataValid=1; // always set WR first
|
||||
kindOfData=0; // 0: binaries, 1:text
|
||||
this->setRecLen(WriteCmd);
|
||||
|
||||
}
|
||||
|
||||
void T_prot::setUserWrite1DB(uint16_t WriteCmd, uint16_t WrAddr, uint8_t val)
|
||||
@@ -76,6 +119,8 @@ void T_prot::setUserWrite1DB(uint16_t WriteCmd, uint16_t WrAddr, uint8_t val)
|
||||
ui8OutputData[0]=val;
|
||||
SendDataValid=1; // always set WR first
|
||||
kindOfData=0; // 0: binaries, 1:text
|
||||
this->setRecLen(WriteCmd);
|
||||
|
||||
}
|
||||
|
||||
void T_prot::setUserWrite2DB(uint16_t WriteCmd, uint16_t WrAddr, uint8_t val0, uint8_t val1)
|
||||
@@ -87,6 +132,8 @@ void T_prot::setUserWrite2DB(uint16_t WriteCmd, uint16_t WrAddr, uint8_t val0, u
|
||||
ui8OutputData[1]=val1;
|
||||
SendDataValid=1; // always set WR first
|
||||
kindOfData=0; // 0: binaries, 1:text
|
||||
this->setRecLen(WriteCmd);
|
||||
|
||||
}
|
||||
|
||||
void T_prot::setUserWriteText(uint16_t WriteCmd, uint16_t WrAddr, uint8_t WrDatLen, char *data)
|
||||
@@ -101,6 +148,8 @@ void T_prot::setUserWriteText(uint16_t WriteCmd, uint16_t WrAddr, uint8_t WrDat
|
||||
chOut_Data[nn]=data[nn];
|
||||
SendDataValid=1; // always set WR first
|
||||
kindOfData=1; // 0: binaries, 1:text
|
||||
this->setRecLen(WriteCmd);
|
||||
|
||||
}
|
||||
|
||||
void T_prot::setUserReadData( uint16_t ReadCmd, uint16_t RdAddr, uint16_t reserv)
|
||||
@@ -109,6 +158,8 @@ void T_prot::setUserReadData( uint16_t ReadCmd, uint16_t RdAddr, uint16_t reser
|
||||
ReadAddr=RdAddr;
|
||||
reserve=reserv;
|
||||
SendDataValid |=2;
|
||||
readAddress=RdAddr; // store here already because it's no longer returned from slave
|
||||
readSource=ReadCmd;
|
||||
}
|
||||
|
||||
void T_prot::setUserReadData( uint16_t ReadCmd, uint16_t RdAddr)
|
||||
@@ -117,6 +168,8 @@ void T_prot::setUserReadData( uint16_t ReadCmd, uint16_t RdAddr)
|
||||
ReadAddr=RdAddr;
|
||||
reserve=0;
|
||||
SendDataValid |=2;
|
||||
readAddress=RdAddr; // store here already because it's no longer returned from slave
|
||||
readSource=ReadCmd;
|
||||
}
|
||||
|
||||
void T_prot::setUserReadData( uint16_t ReadCmd)
|
||||
@@ -125,6 +178,8 @@ void T_prot::setUserReadData( uint16_t ReadCmd)
|
||||
ReadAddr=0;
|
||||
reserve=0;
|
||||
SendDataValid |=2;
|
||||
readAddress=0; // store here already because it's no longer returned from slave
|
||||
readSource=ReadCmd;
|
||||
}
|
||||
|
||||
void T_prot::setBLsendData( uint8_t len, uint8_t *buf)
|
||||
@@ -137,8 +192,13 @@ void T_prot::setBLsendData( uint8_t len, uint8_t *buf)
|
||||
for (int nn=0; nn<BLsendDataLength; nn++)
|
||||
ui8BLsendData[nn]=buf[nn];
|
||||
WriteCommand=0xFFFF;
|
||||
this->setRecLen(100); // how many??
|
||||
//readAddress= // needed??
|
||||
|
||||
qDebug()<<"prot: got BL data " << len << "bytes, ";
|
||||
for (int i=0; i<len; ++i) {
|
||||
printf("%02x ", (unsigned char)buf[i]);
|
||||
} printf("\n");
|
||||
/*
|
||||
qDebug()<<buf[0] <<buf[1] <<buf[2] <<buf[3] <<buf[4] <<buf[5] <<buf[6] <<buf[7];
|
||||
qDebug() <<buf[8] <<buf[9] <<buf[10] <<buf[11] <<buf[12] <<buf[13]<<buf[14]<<buf[15];
|
||||
@@ -153,6 +213,11 @@ qDebug() <<buf[72] <<buf[73] <<buf[74] <<buf[75] <<buf[76] <<buf[77] <<buf[78]<<
|
||||
*/
|
||||
}
|
||||
|
||||
void T_prot::receiveFixLen(int64_t nrOfbytesToReceive)
|
||||
{
|
||||
mySerialPort->receiveFixLen(nrOfbytesToReceive);
|
||||
}
|
||||
|
||||
void T_prot::sendUserData(uint16_t slaveAdr)
|
||||
{
|
||||
// man könnte hier noch "SendDataValid" abfragen,
|
||||
@@ -167,14 +232,90 @@ void T_prot::sendUserData(uint16_t slaveAdr)
|
||||
// Bypass for bootloader, no protocol frame but send as is...
|
||||
packBuf_2.clear();
|
||||
for (int nn=0; nn<BLsendDataLength; nn++)
|
||||
packBuf_2[nn]=char(ui8BLsendData[nn]);
|
||||
packBuf_2[nn]=char(ui8BLsendData[nn]);
|
||||
mySerialPort->writeToSerial(packBuf_2, BLsendDataLength);
|
||||
|
||||
|
||||
} else
|
||||
startPacking();
|
||||
startFastPacking(); // quicker since 15.12.21TS
|
||||
//startPacking();
|
||||
}
|
||||
|
||||
void T_prot::startFastPacking(void)
|
||||
{
|
||||
uint16_t mycrc;
|
||||
uint16_t sendLen;
|
||||
uint8_t uctmp, nn, pp, CrcLp;
|
||||
char sendBuffer[FRAME_MAXLEN], ctmp;
|
||||
|
||||
//qDebug() << "prot start fast packing "<<slaveAddr;
|
||||
|
||||
for (int nn=0; nn<FRAME_MAXLEN; nn++)
|
||||
sendBuffer[nn]=0;
|
||||
|
||||
if (WriteCommand>9 && WriteCommand<100)
|
||||
{
|
||||
// long command 10...99
|
||||
// WriteCommand==0 if only read request, then use short sending
|
||||
sendBuffer[0]=STARTSIGN_SEND_LONG;
|
||||
WrDataLength=DATALEN_SEND_LONG; // immer
|
||||
//qDebug() << "send long cmd, len: " << WrDataLength;
|
||||
} else
|
||||
{
|
||||
// fast command
|
||||
sendBuffer[0]=STARTSIGN_SEND_FAST;
|
||||
WrDataLength=DATALEN_SEND_FAST; // immer
|
||||
//qDebug() << "send fast cmd, len: " << WrDataLength;
|
||||
}
|
||||
sendBuffer[1]= uint8_t(WriteCommand);
|
||||
sendBuffer[2]= uint8_t(ReadCommand);
|
||||
if (WriteAddr>0)
|
||||
sendBuffer[3]= char(WriteAddr); // bei fast nur EINE adresse, wr hat Vorrang
|
||||
else
|
||||
sendBuffer[3]= char(ReadAddr);
|
||||
// beim Fast prot. ist das reserve dann ists egal was drin steht
|
||||
|
||||
if (kindOfData) // 0: binaries, 1:text
|
||||
{
|
||||
for (nn=0; nn<WrDataLength; nn++)
|
||||
{
|
||||
pp=HEADERLEN_SEND+nn;
|
||||
ctmp=(chOut_Data[nn]); // text
|
||||
sendBuffer[pp]= char(ctmp);
|
||||
}
|
||||
|
||||
} else
|
||||
{
|
||||
for (nn=0; nn<WrDataLength; nn++)
|
||||
{
|
||||
pp=HEADERLEN_SEND+nn;
|
||||
uctmp=(ui8OutputData[nn]); // bin
|
||||
sendBuffer[pp]= char(uctmp);
|
||||
}
|
||||
}
|
||||
|
||||
CrcLp= HEADERLEN_SEND + WrDataLength;
|
||||
mycrc=0;
|
||||
for (nn=0; nn<CrcLp; nn++)
|
||||
{
|
||||
uctmp=sendBuffer[nn];
|
||||
mycrc+=uint16_t(uctmp);
|
||||
//qDebug() << mycrc;
|
||||
}
|
||||
sendBuffer[CrcLp]=char(mycrc);
|
||||
mycrc>>=8;
|
||||
sendBuffer[CrcLp+1]=char(mycrc);
|
||||
sendLen=CrcLp+2;
|
||||
|
||||
// send to VCP:
|
||||
QByteArray packBuff;
|
||||
packBuff.clear();
|
||||
packBuff.append(sendBuffer, sendLen); // ohne sendLen wird beim ersten \0 abgeschnitten!!!
|
||||
mySerialPort->writeToSerial(packBuff, sendLen);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
void T_prot::startPacking(void)
|
||||
{
|
||||
uint16_t mycrc;
|
||||
@@ -262,10 +403,8 @@ void T_prot::startPacking(void)
|
||||
packBuff.append(sendBuffer, sendLen); // ohne sendLen wird beim ersten \0 abgeschnitten!!!
|
||||
mySerialPort->writeToSerial(packBuff, sendLen);
|
||||
// void T_com::writeToSerial(const QByteArray &data, uint16_t sendLength)
|
||||
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// ---------------------------------------------------------------------------------------------------------
|
||||
// receiving.....
|
||||
@@ -293,7 +432,7 @@ uint8_t recBuffer[FRAME_MAXLEN];
|
||||
|
||||
// read from "VCP":
|
||||
mySerialPort->readFromSerial(Indata, recLength);
|
||||
|
||||
qDebug()<<"prot: got data " << recLength;
|
||||
if (recLength>FRAME_MAXLEN)
|
||||
recLength=FRAME_MAXLEN;
|
||||
for (int nn=0; nn<recLength; nn++)
|
||||
@@ -301,10 +440,11 @@ uint8_t recBuffer[FRAME_MAXLEN];
|
||||
|
||||
myString.clear();
|
||||
tempStr.clear();
|
||||
uint8_t result=FramecheckInData(recBuffer, recLength); // check input data (response from slave)
|
||||
//uint8_t result=FramecheckInData(recBuffer, recLength); // check input data (response from slave)
|
||||
uint8_t result=FastCheckInData(recBuffer, recLength); // check input data (response from slave)
|
||||
if (result>0)
|
||||
{
|
||||
// dann anzeigen und ende
|
||||
// dann anzeige
|
||||
switch (result)
|
||||
{
|
||||
case 1: gpi_setTxt4masterStateLine("wrong length received"); break;
|
||||
@@ -316,6 +456,7 @@ uint8_t recBuffer[FRAME_MAXLEN];
|
||||
}
|
||||
myString.setNum(result);
|
||||
|
||||
// Daten abspeichern, könnten vom BL sein:
|
||||
gpi_storeRawReceivedData(uint8_t(recLength), recBuffer);
|
||||
emit rawDataRecieved();
|
||||
|
||||
@@ -328,16 +469,59 @@ uint8_t recBuffer[FRAME_MAXLEN];
|
||||
// konnte der Slave die geforderten Daten ausgeben (DOs, AOs)?
|
||||
// konnte der Slave die geforderten Daten einlesen (AIs, DIs)?
|
||||
|
||||
CheckInResult(recBuffer); // Ergebnisse des Slaves anzeigen
|
||||
//CheckInResult(recBuffer); // Ergebnisse des Slaves anzeigen
|
||||
// stimmt nicht mehr bei FastProt
|
||||
|
||||
CheckInData(recBuffer); // Eingangs-Daten des Slaves anzeigen
|
||||
ShowFastInData(recBuffer); // Eingangs-Daten des Slaves anzeigen
|
||||
}
|
||||
emit framerecieved();
|
||||
//qDebug() << "framereceived emitted";
|
||||
}
|
||||
|
||||
|
||||
uint8_t T_prot::FastCheckInData(uint8_t *Inbuf, uint16_t LL)
|
||||
{
|
||||
|
||||
uint16_t rawInLen=LL, crcL_Addr, recCrc, myCrc, nn, datalen, nxt;
|
||||
|
||||
if (Inbuf[0]!=STARTSIGN_RECEIVE_FAST && Inbuf[0]!=STARTSIGN_RECEIVE_LONG)
|
||||
{
|
||||
//qDebug() << "prot: got wrong start sign: " << Inbuf[0];
|
||||
return 2; // wrong start sign
|
||||
}
|
||||
if ( (rawInLen<TELEGRAMLEN_RECEIVE_FAST && Inbuf[0]==STARTSIGN_RECEIVE_FAST) ||
|
||||
(rawInLen<TELEGRAMLEN_RECEIVE_LONG && Inbuf[0]==STARTSIGN_RECEIVE_LONG) )
|
||||
{
|
||||
//qDebug("prot: got %d bytes only", rawInLen);
|
||||
return 1; // wrong length
|
||||
}
|
||||
if (Inbuf[0]==0x5F)
|
||||
datalen=DATALEN_RECEIVE_FAST;
|
||||
else
|
||||
datalen=DATALEN_RECEIVE_LONG;
|
||||
|
||||
crcL_Addr=datalen+HEADERLEN_RECEIVE; // weil im definierten protocol 2 bytes vor den Daten stehen
|
||||
recCrc=0;
|
||||
recCrc=uchar2uint(uint8_t(Inbuf[crcL_Addr+1]), uint8_t(Inbuf[crcL_Addr]));
|
||||
myCrc=0;
|
||||
for (nn=0; nn<crcL_Addr; nn++)
|
||||
{
|
||||
nxt=uint16_t (Inbuf[nn]);
|
||||
nxt &=0x00FF; // the casting makes 0xFFFF out of 0xFF !!!!!!!!!
|
||||
myCrc+=nxt;
|
||||
//qDebug("CRC: nxt: %d sum: %d", nxt, myCrc);
|
||||
}
|
||||
|
||||
if (myCrc != recCrc)
|
||||
{
|
||||
//qDebug() << "crc does not match: mycrc=" << myCrc<< " receivedCRC=" << recCrc;
|
||||
//qDebug("calculated over %d bytes", crcL_Addr);
|
||||
return 5; // crc wrong
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
uint8_t T_prot::FramecheckInData(uint8_t *Inbuf, uint16_t LL)
|
||||
{
|
||||
|
||||
@@ -385,7 +569,7 @@ uint8_t T_prot::FramecheckInData(uint8_t *Inbuf, uint16_t LL)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
uint8_t T_prot::CheckInResult(uint8_t *Inbuf)
|
||||
{
|
||||
@@ -438,24 +622,27 @@ uint8_t T_prot::CheckInResult(uint8_t *Inbuf)
|
||||
|
||||
|
||||
|
||||
uint8_t T_prot::CheckInData(uint8_t *recBuffer)
|
||||
uint8_t T_prot::ShowFastInData(uint8_t *recBuffer)
|
||||
{
|
||||
QString myString=nullptr, tempStr=nullptr;
|
||||
uint8_t result;
|
||||
|
||||
RecSlaveAddr=recBuffer[1];
|
||||
if (recBuffer[2]==0 && recBuffer[4]==0) // comand result=OK und read result =OK,
|
||||
// dann sind die Eingangsdaten gültig
|
||||
RecSlaveAddr=0;
|
||||
result=recBuffer[1]; // total result
|
||||
result &=0x60; // only read result (bit 5,6)
|
||||
|
||||
if (result==0) // read result =OK,
|
||||
// dann sind die Eingangsdaten gültig
|
||||
{
|
||||
myString.append("valid INdata: ");
|
||||
INdataValid=true;
|
||||
readSource=uchar2uint(recBuffer[6],recBuffer[5]);
|
||||
readAddress=uchar2uint(recBuffer[8],recBuffer[7]);
|
||||
//lastWakeSrc=uint8_t(recBuffer[4]);
|
||||
RdDataLength=uint8_t(recBuffer[9]);
|
||||
//readSource already set with sending
|
||||
readAddress=0;
|
||||
// RdDataLength already set with sending
|
||||
if (RdDataLength>FRAME_DATALEN)
|
||||
RdDataLength=FRAME_DATALEN;
|
||||
for (int ii=0; ii<RdDataLength; ii++)
|
||||
InputData[ii]=uint8_t(recBuffer[ii+10]);
|
||||
InputData[ii]=uint8_t(recBuffer[ii+HEADERLEN_RECEIVE]);
|
||||
|
||||
tempStr.setNum(readSource,16);
|
||||
myString.append(tempStr);
|
||||
@@ -486,6 +673,57 @@ uint8_t T_prot::CheckInData(uint8_t *recBuffer)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
uint8_t T_prot::ShowInData(uint8_t *recBuffer)
|
||||
{
|
||||
QString myString=nullptr, tempStr=nullptr;
|
||||
|
||||
RecSlaveAddr=recBuffer[1];
|
||||
if (recBuffer[2]==0 && recBuffer[4]==0) // comand result=OK und read result =OK,
|
||||
// dann sind die Eingangsdaten gültig
|
||||
{
|
||||
myString.append("valid INdata: ");
|
||||
INdataValid=true;
|
||||
readSource=uchar2uint(recBuffer[6],recBuffer[5]);
|
||||
readAddress=uchar2uint(recBuffer[8],recBuffer[7]);
|
||||
//lastWakeSrc=uint8_t(recBuffer[4]);
|
||||
RdDataLength=uint8_t(recBuffer[9]);
|
||||
if (RdDataLength>FRAME_DATALEN)
|
||||
RdDataLength=FRAME_DATALEN;
|
||||
for (int ii=0; ii<RdDataLength; ii++)
|
||||
InputData[ii]=uint8_t(recBuffer[ii+10]);
|
||||
|
||||
tempStr.setNum(readSource,16);
|
||||
myString.append(tempStr);
|
||||
myString.append(" add:");
|
||||
|
||||
tempStr.setNum(readAddress);
|
||||
myString.append(tempStr);
|
||||
//myString.append(" wakeSrc:");
|
||||
//tempStr.setNum(lastWakeSrc);
|
||||
//myString.append(tempStr);
|
||||
myString.append(" Dlen:");
|
||||
tempStr.setNum(RdDataLength);
|
||||
myString.append(tempStr);
|
||||
|
||||
} else
|
||||
{
|
||||
myString=" "; // Eingangsdaten nicht gültig, sieht man aber weiter oben schon
|
||||
|
||||
}
|
||||
|
||||
gpi_setTxt4dataStateLine(myString);
|
||||
//qDebug() << myString;
|
||||
//qDebug("prot_checkInData_bindata: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d ",
|
||||
// InputData[0], InputData[1], InputData[2], InputData[3],
|
||||
// InputData[4], InputData[5], InputData[6], InputData[7],
|
||||
// InputData[8], InputData[9], InputData[10], InputData[11],
|
||||
// InputData[12], InputData[13], InputData[14], InputData[15]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
bool T_prot::ifDataReceived()
|
||||
{
|
||||
|
@@ -53,7 +53,7 @@ bool sendWRcmd_setSendCommand0(uint16_t nextCmd)
|
||||
return false; // not possible
|
||||
}
|
||||
nextAsynchsendCmd0[nrOfCmdsInQueue++]=nextCmd;
|
||||
qDebug() << "PI cmd queued:"<< nextCmd << ", saved, pp=" << nrOfCmdsInQueue;
|
||||
//qDebug() << "PI cmd queued:"<< nextCmd << ", saved, pp=" << nrOfCmdsInQueue;
|
||||
return true; // ok, will be sent
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ uint16_t sendWRcmd_getSendCommand0(void)
|
||||
nextAsynchsendCmd0[nn]=nextAsynchsendCmd0[nn+1];
|
||||
if (nrOfCmdsInQueue>0)
|
||||
nrOfCmdsInQueue--;
|
||||
qDebug() << "PI cmd queued:"<< nxtAsynchCmd << ", restored, pp now =" << nrOfCmdsInQueue;
|
||||
//qDebug() << "PI cmd queued:"<< nxtAsynchCmd << ", restored, pp now =" << nrOfCmdsInQueue;
|
||||
return nxtAsynchCmd;
|
||||
}
|
||||
|
||||
|
@@ -99,13 +99,13 @@ QString epi_getSlaveParamSTR()
|
||||
|
||||
|
||||
|
||||
static QString genStrings[3];
|
||||
static QString genStrings[MAXNROF_GENSTR];
|
||||
// 0=HW 1=SW 2=State
|
||||
|
||||
void gpi_storeGenerals(uint8_t genNr, QString text)
|
||||
{
|
||||
// 0=HW 1=SW 2=State
|
||||
if (genNr<3)
|
||||
if (genNr<MAXNROF_GENSTR)
|
||||
{
|
||||
genStrings[genNr]=text;
|
||||
//qDebug() << "store gen's: " << genNr << " " <<text;
|
||||
@@ -116,7 +116,13 @@ void gpi_storeGenerals(uint8_t genNr, QString text)
|
||||
QString epi_loadGenerals(uint8_t genNr)
|
||||
{
|
||||
if (genNr<MAXNROF_GENSTR)
|
||||
{
|
||||
if (genNr==2) // DC2 State is shorter (8byte, not 64)
|
||||
//genStrings[2][8]=0;
|
||||
genStrings[2].chop(8);
|
||||
|
||||
return genStrings[genNr];
|
||||
}
|
||||
return " ";
|
||||
}
|
||||
|
||||
@@ -132,8 +138,12 @@ void gpi_storeUID(uint8_t *buf8byteUid)
|
||||
{
|
||||
uint64_t udltmp=0;
|
||||
|
||||
//qDebug()<< "store UID ";
|
||||
|
||||
for (int ii=0; ii<8; ii++)
|
||||
{
|
||||
//qDebug()<< buf8byteUid[ii] << " ";
|
||||
|
||||
Sdata_UIDstr[ii]=buf8byteUid[ii];
|
||||
udltmp|=buf8byteUid[ii];
|
||||
udltmp<<=8;
|
||||
@@ -143,8 +153,10 @@ void gpi_storeUID(uint8_t *buf8byteUid)
|
||||
|
||||
void epi_getUIDdec(uint8_t *buf8byteUid)
|
||||
{
|
||||
//qDebug()<< "get UID ";
|
||||
for (int ii=0; ii<8; ii++)
|
||||
{
|
||||
//qDebug()<<Sdata_UIDstr[ii] << " ";
|
||||
buf8byteUid[ii]=Sdata_UIDstr[ii];
|
||||
}
|
||||
}
|
||||
@@ -156,8 +168,12 @@ QString epi_getUIDstr()
|
||||
|
||||
QString myStr;
|
||||
for (int ii=0;ii<8; ii++)
|
||||
{
|
||||
|
||||
myStr+=QString::number(Sdata_UIDstr[ii],16);
|
||||
return myStr;
|
||||
myStr+=" ";
|
||||
}
|
||||
return myStr;
|
||||
}
|
||||
|
||||
|
||||
@@ -232,6 +248,7 @@ uint8_t epi_getSquareMode()
|
||||
|
||||
void gpi_backupTime(uint8_t *timeBuffer, uint8_t Leng)
|
||||
{
|
||||
/*
|
||||
// Daten kommen in gleicher Reihenfolge vom Slave
|
||||
uint8_t *pTime;
|
||||
pTime=&getGlobalTime.hour;
|
||||
@@ -239,7 +256,20 @@ void gpi_backupTime(uint8_t *timeBuffer, uint8_t Leng)
|
||||
for (int nn=0; nn<Leng; nn++)
|
||||
{
|
||||
*pTime++=timeBuffer[nn];
|
||||
}
|
||||
}*/
|
||||
|
||||
// new, FastProt: 0=dayOfWeek 1=min 2=sec 3=hours 4=year 5=month 6=dayOfMonth
|
||||
getGlobalTime.second=Leng; // nur damit CompilerWarnung weg ist
|
||||
|
||||
getGlobalTime.DayOfWeek=timeBuffer[0];
|
||||
getGlobalTime.minute=timeBuffer[1];
|
||||
getGlobalTime.second=timeBuffer[2];
|
||||
getGlobalTime.hour=timeBuffer[3];
|
||||
getGlobalTime.Year=timeBuffer[4];
|
||||
getGlobalTime.Month=timeBuffer[5];
|
||||
getGlobalTime.DayOfMonth=timeBuffer[6];
|
||||
|
||||
|
||||
}
|
||||
|
||||
void epi_getTime(uint8_t *hh, uint8_t *mm, uint8_t *ss)
|
||||
@@ -604,6 +634,9 @@ void gpi_storeDI_doorSwitches(uint8_t upperDoor, uint8_t lowerDoor, uint8_t vaul
|
||||
if (lowerDoor) di_doorSwitch |=2;
|
||||
if (vaultDoor) di_doorSwitch |=4;
|
||||
|
||||
// qDebug()<<"storeINdata: "<<upperDoor << lowerDoor << vaultDoor;
|
||||
// qDebug()<<"storeINdata: "<<di_doorSwitch;
|
||||
|
||||
}
|
||||
|
||||
uint8_t epi_getDI_doorSwitches(void)
|
||||
@@ -897,14 +930,15 @@ bool epi_getDI_rejectMotor_homepos(void)
|
||||
return di_rejMot_home;
|
||||
}
|
||||
|
||||
static bool di_npe_sensor;
|
||||
static uint8_t di_npe_sensor;
|
||||
|
||||
void gpi_storeDI_paperLow(bool di)
|
||||
void gpi_storeDI_paperLow(uint8_t di)
|
||||
{
|
||||
// 0: Sensor sees paper 1: no paper 99: off
|
||||
di_npe_sensor=di;
|
||||
}
|
||||
|
||||
bool epi_getDI_npe_sensor(void)
|
||||
uint8_t epi_getDI_npe_sensor(void)
|
||||
{
|
||||
return di_npe_sensor;
|
||||
}
|
||||
@@ -966,8 +1000,8 @@ uint8_t epi_getDO_motorOuts(void)
|
||||
|
||||
|
||||
|
||||
static uint8_t do_serialSwitch; // serial drv on/off, Serial mux1, Serial mux2
|
||||
void gpi_storeDO_serialSwitch(uint8_t state)// serial drv on/off, Serial mux1, Serial mux2
|
||||
static uint8_t do_serialSwitch; // serial drv on/off, Serial mux1, Serial mux2
|
||||
void gpi_storeDO_serialSwitch(uint8_t state) // serial drv on/off, Serial mux1, Serial mux2
|
||||
{
|
||||
do_serialSwitch=state;
|
||||
}
|
||||
@@ -1026,6 +1060,7 @@ bool epi_getDO_serialMux2isSetToMifare(void)
|
||||
static uint8_t do_ledsAndFan;
|
||||
void gpi_storeDO_ledsAndFan(uint8_t ledState)
|
||||
{
|
||||
// bit0: coinled 1:front_illu 2: paper-led 3:pinpad-led 4:start-led 5:service-led 6:fan
|
||||
do_ledsAndFan=ledState;
|
||||
}
|
||||
|
||||
@@ -1083,6 +1118,7 @@ bool epi_getDO_fan(void)
|
||||
static uint8_t do_laermUndRelay;
|
||||
void gpi_storeDO_sirenAndRelay(uint8_t sirenRelay)
|
||||
{
|
||||
// bit0: siren 1:relay
|
||||
do_laermUndRelay=sirenRelay;
|
||||
}
|
||||
|
||||
@@ -1190,11 +1226,31 @@ uint8_t gpi_storeMifReaderStateAndCardType(uint8_t *buf)
|
||||
{
|
||||
// retval 0=OK 1=error host buffer too small
|
||||
for (uint8_t nn=0; nn<NROFMIFSTATEBYTES; nn++)
|
||||
Sdata_MIF_STATE[nn]=0;
|
||||
for (uint8_t nn=0; nn<8; nn++)
|
||||
Sdata_MIF_STATE[nn]=buf[nn];
|
||||
return 0; // OK
|
||||
}
|
||||
|
||||
/* data description:
|
||||
|
||||
new fast version:
|
||||
byte 0= still the same: current read state:
|
||||
0=power off 1=reader-fault 2=ready
|
||||
3=just reading 4=read complete
|
||||
5=read partial, removed too early
|
||||
6=state unknown
|
||||
|
||||
byte 1: reader state 1=ok 0=nok
|
||||
byte 2: card preent (0,1)
|
||||
byte 3: card selected (0)
|
||||
byte 4: card type: 0...5
|
||||
byte 5: card allowed (0=no 1=MifareClassic 1k or 4k)
|
||||
byte 6: CardSize: 1 or 4 (kB)
|
||||
byte 7: length of UID 4 or 7 (byte)
|
||||
|
||||
|
||||
old long version
|
||||
byte 0: current read state: 0=power off 1=reader-fault 2=ready
|
||||
3=just reading 4=read complete
|
||||
5=read partial, removed too early
|
||||
@@ -1217,10 +1273,10 @@ byte 32: result, always 0
|
||||
uint8_t epi_restoreMifState(uint8_t *buf, uint8_t maxBufferSize)
|
||||
{
|
||||
// HWapi can read States from DC
|
||||
if (maxBufferSize<NROFMIFSTATEBYTES)
|
||||
if (maxBufferSize<8)
|
||||
return 1; // error
|
||||
|
||||
for (uint8_t nn=0; nn<NROFMIFSTATEBYTES; nn++)
|
||||
for (uint8_t nn=0; nn<8; nn++)
|
||||
buf[nn]=Sdata_MIF_STATE[nn];
|
||||
return 0; // OK
|
||||
|
||||
@@ -1425,15 +1481,15 @@ void gpi_storeEmpCoinSignal(uint8_t leng, uint8_t *data)
|
||||
uint8_t LL=leng; // nr of coin records
|
||||
uint16_t vv, pp=0;
|
||||
|
||||
qDebug()<<"store emp data, len: "<<LL;
|
||||
//qDebug()<<"store emp data, len: "<<LL;
|
||||
|
||||
while (LL>0)
|
||||
//while (LL>0) // with FastProtocol only one coin
|
||||
{
|
||||
vv=uchar2uint(data[pp+4], data[pp+3]);
|
||||
sub_enterData(data[pp], data[pp+1], data[pp+2], vv );
|
||||
|
||||
qDebug()<< "emp IN data: " << data[pp] << " " << data[pp+1]
|
||||
<< " " <<data[pp+2] <<" " <<data[pp+3] <<" " <<data[pp+4] <<" ";
|
||||
//qDebug()<< "emp IN data: " << data[pp] << " " << data[pp+1]
|
||||
// << " " <<data[pp+2] <<" " <<data[pp+3] <<" " <<data[pp+4] <<" ";
|
||||
|
||||
pp+=5;
|
||||
LL--;
|
||||
@@ -1456,12 +1512,12 @@ void epi_restoreEmpCoinSignal(uint8_t *valid, uint8_t *signal, uint8_t *error, u
|
||||
*error=gotCoin[ctr_gotCoin].error;
|
||||
*value=gotCoin[ctr_gotCoin].value;
|
||||
}
|
||||
|
||||
/*
|
||||
qDebug()<<"read emp data, nr "<<ctr_gotCoin << "valid: " << *valid
|
||||
<< "signal: " << *signal
|
||||
<< "error: " << *error
|
||||
<< "value: " << *value;
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user