#include #include #include #include "storeINdata.h" #include "tslib.h" // gpi: grafical access to PI: access from external devices over device controller FOR GUI // epi: external access from GUI to PI: FOR external devices (DC) // store power on/off condition of the devices to control the data request static bool indat_savePrnPwr; void indat_storePrinterPower(bool isOn) { indat_savePrnPwr=isOn; } bool indat_isPrinterOn() { return indat_savePrnPwr; } static bool indat_saveMifPwr; void indat_storeMifarePower(bool isOn) { indat_saveMifPwr=isOn; } bool indat_isMifareOn() { return indat_saveMifPwr; } static bool indat_MdbIsOn; void indat_storeMDBisOn(bool isOn) { indat_MdbIsOn=isOn; } bool indat_isMdbOn() { return indat_MdbIsOn; } // ////////////////////////////////////////////////////////////////////////// static uint8_t ndbs, pari, nsb, br; void gpi_storeSlaveSerParams(uint8_t slaveBaudRate, uint8_t NrDataBits, uint8_t parity, uint8_t NrStopBits) { // store numbers ndbs=NrDataBits; pari=parity; nsb=NrStopBits; br=slaveBaudRate; } void epi_getSlaveSerParams(uint8_t *slaveBaudRate, uint8_t *NrDataBits, uint8_t *parity, uint8_t *NrStopBits) { *NrDataBits=ndbs; *parity=pari; *NrStopBits=nsb; *slaveBaudRate=br; } QString epi_getSlaveParamSTR() { QString mySt; mySt.clear(); switch (br) { case 1: mySt="1200 ";break; case 2: mySt="9600 ";break; case 3: mySt="19200 ";break; case 4: mySt="38400 ";break; case 5: mySt="57600 ";break; case 6: mySt="115200 ";break; } mySt.append(ndbs+0x30); mySt.append(pari); mySt.append(nsb+0x30); //mySt="Hallo"; return mySt; } 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 umformen in hexstring QString myStr; for (int ii=0;ii<8; ii++) { myStr+=QString::number(Sdata_UIDstr[ii],16); myStr+=" "; } return myStr; } // /////////////////////////////////////////////////////////////////////////////////// // Time and Date // /////////////////////////////////////////////////////////////////////////////////// struct T_globTime { // Reihenfolge nicht vertauschen!!!!! uint8_t hour; uint8_t minute; uint8_t second; uint8_t Year; uint8_t Month; uint8_t DayOfMonth; uint8_t DayOfWeek; // 1=monday...7 uint8_t reserve1; uint16_t MinutesOfToday; uint16_t reserve2; uint32_t SecondsOfToday; uint8_t IsLeapyear; uint8_t nextLeap; uint8_t lastLeap; uint8_t hoursOfWeek; uint16_t minOfWeek; uint16_t hoursOfMonth; uint16_t minOfMonth; uint16_t dayOfYear; uint16_t hoursOfYear; uint16_t reserve3; uint32_t minOfYear; uint8_t squareOutMode; uint8_t free1; uint16_t reserve4; uint32_t minOfMillenium; // bis hierher 44byts uint32_t free2; uint32_t free3; uint32_t free4; }; static T_globTime getGlobalTime; void gpi_backupSquareMode(uint8_t squMode) { getGlobalTime.squareOutMode=squMode; } uint8_t epi_getSquareMode() { return getGlobalTime.squareOutMode; } void gpi_backupTime(uint8_t *timeBuffer, uint8_t Leng) { /* // Daten kommen in gleicher Reihenfolge vom Slave uint8_t *pTime; pTime=&getGlobalTime.hour; if (Leng>44) Leng=44; // mehr brauch ma ned for (int nn=0; nn05 mystr.append(':'); //tempStr.clear(); tempStr.setNum(getGlobalTime.minute,10); // mit 16 statt 10 wirds in HEX angezeigt //mystr.append(tempStr); mystr+=tempStr.rightJustified(2,'0',false); //mystr.append(':'); // so //mystr+=':'; // oder so, =gleich if (timeStyle==1) // hh:mm:ss { mystr.append(':'); tempStr.setNum(getGlobalTime.second,10); mystr.append(tempStr.rightJustified(2,'0',false)); // wie += } return mystr; } QString epi_getRtcDateStr(uint8_t dateStyle) { // 1=german dd.mm.yy 2=american yy/mm/dd 3=mm.dd.yy QString tmpStr=nullptr, YYstr=nullptr, MMstr=nullptr, DDstr=nullptr, mystr=nullptr; mystr.clear(); tmpStr.setNum(getGlobalTime.Year,10); // itoa decimal YYstr=tmpStr.rightJustified(4,'0',false); // immer vierstellig YYstr[0]='2'; // 2000 dazu tmpStr.setNum(getGlobalTime.Month,10); MMstr=tmpStr.rightJustified(2,'0',false); tmpStr.setNum(getGlobalTime.DayOfMonth,10); DDstr=tmpStr.rightJustified(2,'0',false); if (dateStyle==1) // Germany dd.mm.yy { mystr=DDstr + '.' + MMstr + '.' + YYstr; } else if (dateStyle==2) // american yy/mm/dd { mystr=YYstr + '/' + MMstr + '/' + DDstr; } else // mm.dd.yy { mystr=MMstr + '.' + DDstr + '.' + YYstr; } return mystr; } QString epi_getSlaveTimeDateStr() { QString myStr; myStr=epi_getRtcTimeStr(1) + " " + epi_getRtcDateStr(1); return myStr; } // /////////////////////////////////////////////////////////////////////////////////// // analog values // /////////////////////////////////////////////////////////////////////////////////// static uint16_t AI_val[MAXNROF_AI]; uint8_t gpi_getMaxNrAIs() { return MAXNROF_AI; } void gpi_storeAIs(uint8_t aiNr, uint16_t val) { if (aiNr9) { myStr[pp++]=char(vor/10)+0x30; } myStr[pp++]=char(vor%10)+0x30; myStr[pp++]=','; ke=char(nach/100); //qDebug() << "ke: " << ke; myStr[pp++]=char(ke)+0x30; tmp32=nach%100; ke=char(tmp32/10); //qDebug() << "ke: " << ke; myStr[pp++]=char(ke)+0x30; tmp32=nach%10; ke=char(tmp32); //qDebug() << "ke: " << ke; myStr[pp++]=char(ke)+0x30; myStr[pp++]='V'; myqStr.append(myStr); return myqStr; } // /////////////////////////////////////////////////////////////////////////////////// // digital inputs // /////////////////////////////////////////////////////////////////////////////////// /* come all in with 0x1201: 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 D7: 0 D7: DI_contact Power Is On 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 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 */ static uint8_t di_doorSwitch; void gpi_storeDI_doorSwitches(uint8_t upperDoor, uint8_t lowerDoor, uint8_t vaultDoor) { di_doorSwitch=0; if (upperDoor) di_doorSwitch |=1; if (lowerDoor) di_doorSwitch |=2; if (vaultDoor) di_doorSwitch |=4; // qDebug()<<"storeINdata: "<0) return true; return false; } bool epi_getDO_serialMux2isSetToCredit(void) { // mux2 off: serial is switched to credit card terminal if ((do_serialSwitch & 4)==0) return true; return false; } bool epi_getDO_serialMux2isSetToMifare(void) { // mux2 on: serial is switched to mifare reader if ((do_serialSwitch & 4)>0) return true; return false; } 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; } bool epi_getDO_led_coin(void) { if (do_ledsAndFan & 1) return true; return false; } bool epi_getDO_led_front(void) { if (do_ledsAndFan & 2) return true; return false; } bool epi_getDO_led_ticket(void) { if (do_ledsAndFan & 4) return true; return false; } bool epi_getDO_led_pin(void) { if (do_ledsAndFan & 8) return true; return false; } bool epi_getDO_led_start(void) { if (do_ledsAndFan & 16) return true; return false; } bool epi_getDO_led_inside(void) { if (do_ledsAndFan & 32) return true; return false; } bool epi_getDO_fan(void) { if (do_ledsAndFan & 64) return true; return false; } static uint8_t do_laermUndRelay; void gpi_storeDO_sirenAndRelay(uint8_t sirenRelay) { // bit0: siren 1:relay do_laermUndRelay=sirenRelay; } bool epi_getDO_sirene(void) { if (do_laermUndRelay & 1) return true; return false; } bool epi_getDO_relay(void) { if (do_laermUndRelay & 2) return true; return false; } static uint8_t do_ptuWake; void gpi_storeDO_ptuWake(uint8_t state) { do_ptuWake=state; } bool epi_getDO_ptuWake(void) { if (do_ptuWake>0) return true; return false; } static uint8_t do_auxPower; void gpi_storeDO_auxPower(uint8_t pwr) { do_auxPower=pwr; } bool epi_getDO_auxPower(void) { if (do_auxPower>0) return true; return false; } static uint8_t do_coinShutter; void gpi_storeDO_coinShutter(uint8_t state) { do_coinShutter=state; } bool epi_getDO_coinShutterOpen(void) { // bit0: Coin shutter output, bit1: input-test-output if (do_coinShutter & 1) return true; return false; } bool epi_getDO_coinShutterTest(void) { // bit0: Coin shutter output, bit1: input-test-output if (do_coinShutter & 2) return true; return false; } static uint8_t do_coinEscrow; void gpi_storeDO_coinEscrow(uint8_t state) { do_coinEscrow=state; } uint8_t epi_getDO_coinEscrow(void) { // retval: 1:return flap is open 2:take flap is open 0:closed if (do_coinEscrow &1) return 1; // return flap is open if (do_coinEscrow &2) return 2; // take flap is open return 0; } static uint8_t do_printerPower; void gpi_storeDO_printerPwrOn(uint8_t state) { do_printerPower=state; } uint8_t epi_getDO_printerPwr(void) { return do_printerPower; } //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ //----------------------------- Mifare Card Reader ----------------------------------- #define NROFMIFSTATEBYTES 40 static uint8_t Sdata_MIF_STATE[NROFMIFSTATEBYTES]; uint8_t gpi_storeMifReaderStateAndCardType(uint8_t *buf) { // retval 0=OK 1=error host buffer too small for (uint8_t nn=0; nn11 || maxBufferSize<64) return 1; // error for (uint8_t nn=0; nn<64; nn++) buf[nn]=Sdata_MIF_DATA[blkNr][nn]; return 0; // ois OK } //------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------ static uint8_t Sdata_PRN_STATE[pi_prnStateArraySize]; void epi_restorePrinterState(uint8_t *buf) { uint8_t nn; for (nn=0; nn64) leng=64; Sdata_empNrOfsettings=leng; tslib_strcpy(data, Sdata_emp_settingsBuff, leng); } void epi_restoreEmpSettings(uint8_t *leng, uint8_t *data) { *leng=Sdata_empNrOfsettings; tslib_strcpy(Sdata_emp_settingsBuff, data, Sdata_empNrOfsettings); } // ...................................................................... // Münzbuffer[10]: Münze für Münze auslesen (LIFO) // 4.5.21 struct T_coin { uint8_t valid; uint8_t signal; uint8_t error; uint8_t pad; uint16_t value; }; static struct T_coin gotCoin[MEMDEPTH_GOTCOINS]; static uint8_t ctr_gotCoin; void sub_enterData(uint8_t valid, uint8_t signal, uint8_t error, uint16_t value ) { if (ctr_gotCoin0) // 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] // << " " <64) leng=64; Sdata_NrOfDeviceSetting=leng; tslib_strcpy(data, Sdata_DeviceSettingBuff, leng); // getestet am 12.4.23TS } void epi_restoreRbDeviceSettings(uint8_t *leng, uint8_t *data) // getestet am 12.4.23TS { *leng=Sdata_NrOfDeviceSetting; tslib_strcpy(Sdata_DeviceSettingBuff, data, Sdata_NrOfDeviceSetting); } static uint8_t Sdata_NrOfMachineIDSetting; static uint8_t Sdata_NrOfMachineIDBuff[66]; void gpi_storeMachineIDsettings(uint8_t leng, uint8_t *data) { if (leng>64) leng=64; Sdata_NrOfMachineIDSetting=leng; tslib_strcpy(data, Sdata_NrOfMachineIDBuff, leng); } void epi_restoreMachineIDsettings(uint8_t *leng, uint8_t *data) { *leng=Sdata_NrOfMachineIDSetting; tslib_strcpy(Sdata_NrOfMachineIDBuff, data, Sdata_NrOfMachineIDSetting); } static uint32_t store_insertedAmount; static uint16_t store_lastCoinType[64]; static uint16_t store_lastCoinValue[64]; static uint8_t p_lastCoin; void epi_clearCurrentPayment(void) { // call at beginning of coin collection store_insertedAmount=0; p_lastCoin=0; } void gpi_storeCurrentPayment(uint32_t insertedAmount, uint16_t lastCoinType, uint16_t lastCoinValue) { store_insertedAmount=insertedAmount; store_lastCoinType[p_lastCoin]=lastCoinType; store_lastCoinValue[p_lastCoin]=lastCoinValue; p_lastCoin++; } uint32_t epi_CurrentPaymentGetAmount(void) { return store_insertedAmount; } uint16_t epi_CurrentPaymentGetLastCoin(void) { uint8_t pp; pp=p_lastCoin; if (pp==0) return 0; // noch keine Münze erhalten if (pp>0) pp--; return store_lastCoinValue[pp]; } bool epi_CurrentPaymentGetAllCoins(uint16_t *types, uint16_t *values) { // alle bei diesem Verkauf eingeworfenen Münzen sind gespeichert falls die jmd. braucht uint8_t nn; if (p_lastCoin==0) return false; for (nn=0; nn<64; nn++) { types[nn]=store_lastCoinType[nn]; values[nn]=store_lastCoinValue[nn]; } return true; } uint64_t stor_wakSrc; void gpi_storeWakeSources(uint8_t *receivedData) { uint8_t uctmp; int nn; stor_wakSrc=0; for (nn=7; nn>=0; nn--) { uctmp=receivedData[nn]; stor_wakSrc |=uctmp; stor_wakSrc<<=8; } } uint64_t epi_getWakeSources(void) { return stor_wakSrc; } static uint8_t store_rbDevParamLen; static uint8_t store_rbDevParams[66]; void gpi_storeExtendedTime(uint8_t leng, uint8_t *data) { if (leng>64) leng=64; store_rbDevParamLen=leng; tslib_strcpy(data, store_rbDevParams, leng); } void epi_restoreExtendedTime(uint8_t *leng, uint8_t *data) { *leng=store_rbDevParamLen; tslib_strcpy(store_rbDevParams, data, store_rbDevParamLen); } // store device conditions static uint8_t store_deviceCondLen; static uint8_t store_deviceCond[66]; void gpi_storeDeviceConditions(uint8_t leng, uint8_t *data) { if (leng>64) leng=64; store_deviceCondLen=leng; tslib_strcpy(data, store_deviceCond, leng); } void epi_restoreDeviceConditions(uint8_t *leng, uint8_t *data) { *leng=store_deviceCondLen; tslib_strcpy(store_deviceCond, data, store_deviceCondLen); } // store dynamic machine conditions static uint8_t store_machCondLen; static uint8_t store_machCond[66]; void gpi_storeDynMachineConditions(uint8_t leng, uint8_t *data) { if (leng>64) leng=64; store_machCondLen=leng; tslib_strcpy(data, store_machCond, leng); } void epi_restoreDynMachineConditions(uint8_t *leng, uint8_t *data) { *leng=store_machCondLen; tslib_strcpy(store_machCond, data, store_machCondLen); }