Compare commits
	
		
			5 Commits
		
	
	
		
			kleipeda
			...
			fix-galtue
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 861a405ec0 | |||
| 6b88213644 | |||
| dda04434fc | |||
| a7f3477752 | |||
| 8367eb9fa8 | 
@@ -115,7 +115,7 @@ public:
 | 
				
			|||||||
    uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, quint64 durationMinutes, int paymentOptionIndex=0) const;
 | 
					    uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, quint64 durationMinutes, int paymentOptionIndex=0) const;
 | 
				
			||||||
    uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, QDateTime const &end, int paymentOptionIndex=0) const;
 | 
					    uint32_t GetCostFromDuration(Configuration *cfg, QDateTime const &start, QDateTime const &end, int paymentOptionIndex=0) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					// private:
 | 
				
			||||||
    Ticket private_GetCostFromDuration(Configuration const* cfg,
 | 
					    Ticket private_GetCostFromDuration(Configuration const* cfg,
 | 
				
			||||||
                                       QDateTime const &start,
 | 
					                                       QDateTime const &start,
 | 
				
			||||||
                                       int durationMinutes,
 | 
					                                       int durationMinutes,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,10 @@ public:
 | 
				
			|||||||
        pop_carry_over_time_range_id = -1;
 | 
					        pop_carry_over_time_range_id = -1;
 | 
				
			||||||
        pop_carry_over_start_time_range = -1;
 | 
					        pop_carry_over_start_time_range = -1;
 | 
				
			||||||
        pop_carry_over_end_time_range = -1;
 | 
					        pop_carry_over_end_time_range = -1;
 | 
				
			||||||
 | 
					        pop_prepay = false;
 | 
				
			||||||
 | 
					        pop_prepay_time_range_id = -1;
 | 
				
			||||||
 | 
					        pop_prepay_over_start_time_range = -1;
 | 
				
			||||||
 | 
					        pop_prepay_end_time_range = -1;
 | 
				
			||||||
        pop_daily_card_price = -1;
 | 
					        pop_daily_card_price = -1;
 | 
				
			||||||
        pop_business_hours = -1;
 | 
					        pop_business_hours = -1;
 | 
				
			||||||
        pop_time_step_config = -1;
 | 
					        pop_time_step_config = -1;
 | 
				
			||||||
@@ -48,6 +52,10 @@ public:
 | 
				
			|||||||
    int pop_carry_over_time_range_id;
 | 
					    int pop_carry_over_time_range_id;
 | 
				
			||||||
    int pop_carry_over_start_time_range;
 | 
					    int pop_carry_over_start_time_range;
 | 
				
			||||||
    int pop_carry_over_end_time_range;
 | 
					    int pop_carry_over_end_time_range;
 | 
				
			||||||
 | 
					    bool pop_prepay;
 | 
				
			||||||
 | 
					    int pop_prepay_time_range_id;
 | 
				
			||||||
 | 
					    int pop_prepay_over_start_time_range;
 | 
				
			||||||
 | 
					    int pop_prepay_end_time_range;
 | 
				
			||||||
    int pop_daily_card_price;
 | 
					    int pop_daily_card_price;
 | 
				
			||||||
    uint64_t pop_business_hours;
 | 
					    uint64_t pop_business_hours;
 | 
				
			||||||
    int pop_time_step_config;
 | 
					    int pop_time_step_config;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										113
									
								
								main/cc_iuc_asynchpos.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										113
									
								
								main/cc_iuc_asynchpos.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,113 @@
 | 
				
			|||||||
 | 
					#ifndef CC_IUC_ASYNCHPOS_H
 | 
				
			||||||
 | 
					#define CC_IUC_ASYNCHPOS_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * cc_iuc_asynchpos.c
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Created: 21.11.2017
 | 
				
			||||||
 | 
					 *  Author: Matthias
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <cstdlib>
 | 
				
			||||||
 | 
					#include <cinttypes>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//#define IUC_ASYCHNPOS_TESTMODE 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_COINCOIDE_H               0x09
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_COINCOIDE_L               0x78
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_MAX_ARRAY_SIZE	        1024
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_MAX_TX_MESSAGE_SIZE	    300
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_MAX_RX_MESSAGE_SIZE	    10000   // 17000
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_MIN_PACKET_SIZE	        16
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE        32
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE   16
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_POLYNOME	                0xedb88320	// 0x04C11DB7
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_POLYNOME_INITIAL	        0		    // 0xFFFFFFFF
 | 
				
			||||||
 | 
					#define IUC_ASYNCHPOS_PRINTTIMOUT               1000
 | 
				
			||||||
 | 
					//#define IUC_ASYNCHPOS_RECEIPT_LENGTH 16384
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define STX     0x01
 | 
				
			||||||
 | 
					#define ETX1    0x02
 | 
				
			||||||
 | 
					#define ETX2    0x03
 | 
				
			||||||
 | 
					#define EOT     0x04
 | 
				
			||||||
 | 
					#define ENQ     0x05
 | 
				
			||||||
 | 
					#define ACK1    0x06
 | 
				
			||||||
 | 
					#define ACK2    0x07
 | 
				
			||||||
 | 
					#define DLE     0x10
 | 
				
			||||||
 | 
					#define NAK     0x15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned static char terminalID[IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE];
 | 
				
			||||||
 | 
					unsigned static char terminalAPAK[IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE];
 | 
				
			||||||
 | 
					unsigned static char rxAsynchData[IUC_ASYNCHPOS_MAX_RX_MESSAGE_SIZE];
 | 
				
			||||||
 | 
					unsigned static char terminalSignature[16];
 | 
				
			||||||
 | 
					//unsigned static char messageData[IUC_ASYNCHPOS_MAX_ARRAY_SIZE];
 | 
				
			||||||
 | 
					unsigned static char receiptData[IUC_ASYNCHPOS_MAX_ARRAY_SIZE + 1];
 | 
				
			||||||
 | 
					unsigned static char txAsynchData[IUC_ASYNCHPOS_MAX_ARRAY_SIZE];
 | 
				
			||||||
 | 
					unsigned static char ENQrecieved;
 | 
				
			||||||
 | 
					unsigned static int rxCounter;
 | 
				
			||||||
 | 
					unsigned static int messageLength;
 | 
				
			||||||
 | 
					unsigned static long timeInitalized;
 | 
				
			||||||
 | 
					unsigned static long timeHoldISMAS;
 | 
				
			||||||
 | 
					unsigned static long crcTable[256];
 | 
				
			||||||
 | 
					unsigned static char tableCreated;
 | 
				
			||||||
 | 
					unsigned static int asynchState;
 | 
				
			||||||
 | 
					unsigned static char asynchSessionClosed;
 | 
				
			||||||
 | 
					unsigned static char iuc_asynch_PRNrecieved;
 | 
				
			||||||
 | 
					unsigned static char iuc_asynch_keepAlive;
 | 
				
			||||||
 | 
					unsigned static char iuc_asynch_PrintControl;
 | 
				
			||||||
 | 
					unsigned static char iuc_asynchpos_crc_old;
 | 
				
			||||||
 | 
					unsigned static int iuc_print_counter;
 | 
				
			||||||
 | 
					unsigned static int iuc_asynch_printTimeout;
 | 
				
			||||||
 | 
					unsigned static char iucAsynchpoxDataContext;
 | 
				
			||||||
 | 
					//Prozessdaten - highly private
 | 
				
			||||||
 | 
					struct billAsynchData {
 | 
				
			||||||
 | 
						unsigned char time[20]; //UCHAR tagValue[] = "2017-12-19 13:40:00";
 | 
				
			||||||
 | 
						unsigned char id[37];
 | 
				
			||||||
 | 
						unsigned char printId[129];
 | 
				
			||||||
 | 
						unsigned char docNr[33];
 | 
				
			||||||
 | 
						//unsigned char amount[10];
 | 
				
			||||||
 | 
						//unsigned char token[25];
 | 
				
			||||||
 | 
						//unsigned char result[8];
 | 
				
			||||||
 | 
						//unsigned char authCode[7];
 | 
				
			||||||
 | 
						//unsigned char rrn[13];
 | 
				
			||||||
 | 
						//unsigned char stan[7];
 | 
				
			||||||
 | 
						//unsigned char cardtype[33];
 | 
				
			||||||
 | 
						unsigned char errCode[17];
 | 
				
			||||||
 | 
						//unsigned char receiptData[IUC_ASYNCHPOS_RECEIPT_LENGTH];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//private
 | 
				
			||||||
 | 
					unsigned int iuc_asynchpos_send(unsigned char packetType, unsigned char* pData, unsigned int length, unsigned char needRTS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//void iuc_asynchpos_interpretCommand(unsigned int readLength_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//public
 | 
				
			||||||
 | 
					void iuc_asynchpos_setTerminalID(unsigned char *pID, unsigned int length);
 | 
				
			||||||
 | 
					void iuc_asynchpos_setTerminalAPAK(unsigned char *pAPAK, unsigned int length);
 | 
				
			||||||
 | 
					unsigned char iuc_asynchpos_recieve_serial(unsigned char waitforACK);
 | 
				
			||||||
 | 
					void iuc_asynchpos_init();
 | 
				
			||||||
 | 
					void iuc_asynchpos_handleCommand(unsigned char command, unsigned char status);
 | 
				
			||||||
 | 
					int iuc_asynchpos_checkTime();
 | 
				
			||||||
 | 
					unsigned char iuc_asynchpos_getIsSaleRunning();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//commands
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_ping_terminal(void);
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_Login();
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_Logout();
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_authorize(unsigned int vkPreis);
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_cancel_authorize();
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_close_Document(unsigned char isStorno);
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_print_Result(unsigned char status);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//void iuc_asynchpos_handleCommand(unsigned char command, unsigned char status);
 | 
				
			||||||
 | 
					//void iuc_asynchpos_init();
 | 
				
			||||||
 | 
					//int iuc_asynchpos_checkTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//unsigned char iuc_asynchpos_getCurrentStatus();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//int iuc_asynchpos_heartbeat();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t iuc_asynchpos_sub_updateCRC(uint32_t crc, char* pData, size_t len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										899
									
								
								main/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										899
									
								
								main/main.cpp
									
									
									
									
									
								
							@@ -35,6 +35,9 @@ extern "C" char* strptime(const char* s,
 | 
				
			|||||||
#include <sstream>
 | 
					#include <sstream>
 | 
				
			||||||
#include "calculator_functions.h"
 | 
					#include "calculator_functions.h"
 | 
				
			||||||
#include "calculate_price.h"
 | 
					#include "calculate_price.h"
 | 
				
			||||||
 | 
					#include "aes128.h"
 | 
				
			||||||
 | 
					#include "cc_iuc_asynchpos.h"
 | 
				
			||||||
 | 
					#include "MessageHelper.h"
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SZEGED                                  (0)
 | 
					#define SZEGED                                  (0)
 | 
				
			||||||
@@ -42,13 +45,12 @@ extern "C" char* strptime(const char* s,
 | 
				
			|||||||
#define NEUHAUSER_KORNEUBURG                    (0)
 | 
					#define NEUHAUSER_KORNEUBURG                    (0)
 | 
				
			||||||
#define NEUHAUSER_LINSINGER_MASCHINENBAU        (0)
 | 
					#define NEUHAUSER_LINSINGER_MASCHINENBAU        (0)
 | 
				
			||||||
#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0)
 | 
					#define NEUHAUSER_NORDISCHES_AUSBILDUNGSZENTRUM (0)
 | 
				
			||||||
#define NEUHAUSER_BILEXA_GALTUER                (0)
 | 
					#define NEUHAUSER_BILEXA_GALTUER                (1)
 | 
				
			||||||
#define BAD_NEUENAHR_AHRWEILER                  (0)
 | 
					#define BAD_NEUENAHR_AHRWEILER                  (0)
 | 
				
			||||||
#define NEUHAUSER_CHRISTOPH_REISEN              (0)
 | 
					#define NEUHAUSER_CHRISTOPH_REISEN              (0)
 | 
				
			||||||
#define NEUHAUSER_PERNEGG_AN_DER_MUR            (0)
 | 
					#define NEUHAUSER_PERNEGG_AN_DER_MUR            (0)
 | 
				
			||||||
#define NEUHAUSER_STOCKERAU                     (0)
 | 
					#define NEUHAUSER_STOCKERAU                     (0)
 | 
				
			||||||
#define KLEIPEDA_LITAUEN                        (0)
 | 
					#define KLEIPEDA_LITAUEN                        (0)
 | 
				
			||||||
#define SEXTEN                                  (1)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if NEUHAUSER_KIRCHDORF==1
 | 
					#if NEUHAUSER_KIRCHDORF==1
 | 
				
			||||||
static bool test_neuhauser_kirchdorf(int step, double cost) {
 | 
					static bool test_neuhauser_kirchdorf(int step, double cost) {
 | 
				
			||||||
@@ -208,6 +210,721 @@ static bool test_neuhauser_kirchdorf(int step, double cost) {
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//https://lxp32.github.io/docs/a-simple-example-crc32-calculation/
 | 
				
			||||||
 | 
					uint32_t crc32(const char *s, size_t n) {
 | 
				
			||||||
 | 
					    uint32_t crc=0xFFFFFFFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for(size_t i=0;i<n;i++) {
 | 
				
			||||||
 | 
					        char ch=s[i];
 | 
				
			||||||
 | 
					        for(size_t j=0;j<8;j++) {
 | 
				
			||||||
 | 
					            uint32_t b=(ch^crc)&1;
 | 
				
			||||||
 | 
					            crc>>=1;
 | 
				
			||||||
 | 
					            if(b) crc=crc^0xEDB88320;
 | 
				
			||||||
 | 
					            ch>>=1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ~crc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define UINT unsigned int
 | 
				
			||||||
 | 
					#define UCHAR unsigned char
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct billAsynchData asynchBill;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iuc_asynchpos_sub_initArray(unsigned char* pArray, int length) {
 | 
				
			||||||
 | 
					    unsigned int uitemp = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uitemp = 0; uitemp < length; ++uitemp)
 | 
				
			||||||
 | 
					        pArray[uitemp] = 0x00;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned int biox_StrLen(unsigned char *str) {
 | 
				
			||||||
 | 
					    unsigned int zz;
 | 
				
			||||||
 | 
					    for (zz=0; zz<0xF000; zz++)
 | 
				
			||||||
 | 
					        if (str[zz]==0)
 | 
				
			||||||
 | 
					            return(zz);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void biox_CopyBlock(unsigned char *src, UINT srcPos, UCHAR *dest, UINT destPos, UINT len) {
 | 
				
			||||||
 | 
					  UINT xx,yy,zz,ii;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xx = srcPos;
 | 
				
			||||||
 | 
					  yy = destPos;
 | 
				
			||||||
 | 
					  zz = len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (ii = 0; ii < zz; ++ii) {
 | 
				
			||||||
 | 
					      dest[yy + ii] = src[xx + ii];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iuc_asynchpos_sub_synchTime() {
 | 
				
			||||||
 | 
					    QDateTime current = QDateTime::currentDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    current.setTime(QTime(12, 0, 0));
 | 
				
			||||||
 | 
					    current.setDate(QDate(2024, 6, 18));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QString const &s = current.toString(Qt::ISODate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QByteArray time(s.toStdString().c_str());
 | 
				
			||||||
 | 
					    time[10] = ' ';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    strncpy((char *)asynchBill.time, time.toStdString().c_str(), sizeof(asynchBill.time));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint32_t iuc_asynchpos_sub_updateCRC(uint32_t crc, unsigned char* pData, size_t len) {
 | 
				
			||||||
 | 
					    // berechne CRC32 nach Polynom x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QByteArray a((char *)pData, len);
 | 
				
			||||||
 | 
					    qCritical() << "updateCRC" << a.toHex(' ');
 | 
				
			||||||
 | 
					    qCritical() << "updateCRC" << len << hex << crc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int i = 0;
 | 
				
			||||||
 | 
					    int j = 0;
 | 
				
			||||||
 | 
					//	unsigned long rem;
 | 
				
			||||||
 | 
					//	unsigned char octet;
 | 
				
			||||||
 | 
					//	UCHAR *p, *q;
 | 
				
			||||||
 | 
					    unsigned char ucCarry = 0x00;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    crc = ~crc;
 | 
				
			||||||
 | 
					    while (len > 0) {
 | 
				
			||||||
 | 
					        crc ^= (uint32_t)pData[i];
 | 
				
			||||||
 | 
					        ++i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (j = 0; j < 8; ++j) {
 | 
				
			||||||
 | 
					            ucCarry = crc & 1;
 | 
				
			||||||
 | 
					            crc >>= 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (ucCarry) {
 | 
				
			||||||
 | 
					                crc ^= IUC_ASYNCHPOS_POLYNOME;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        --len;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ~crc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned char biox_ah2ui_char(unsigned char AscString)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					          // change hex ascii string ( of ascii numbers '0'..'9', 'A' or 'a' ...'F','f') to number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          unsigned char uctmp1;
 | 
				
			||||||
 | 
					          unsigned char uitmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          uitmp = 0;
 | 
				
			||||||
 | 
					          uctmp1=AscString;//[zz];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (uctmp1>=0x30 && uctmp1<=0x39)
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					                  //uitmp<<=4;      // nur wenn eine neue Ziffer dazukommt und vor der addition!
 | 
				
			||||||
 | 
					                  uctmp1-=0x30;
 | 
				
			||||||
 | 
					                  uitmp+=/*(UINT)*/uctmp1;
 | 
				
			||||||
 | 
					          } else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (uctmp1>='A' && uctmp1<='F')
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					                  //uitmp<<=4;
 | 
				
			||||||
 | 
					                  uctmp1-=0x37;
 | 
				
			||||||
 | 
					                  uitmp+=/*(UINT)*/uctmp1;
 | 
				
			||||||
 | 
					          } else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          if (uctmp1>='a' && uctmp1<='f')
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					                  //uitmp<<=4;
 | 
				
			||||||
 | 
					                  uctmp1-=0x57;
 | 
				
			||||||
 | 
					                  uitmp+=/*(UINT)*/uctmp1;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          return(uitmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unsigned char iuc_asynchpos_send_serial(unsigned char* pData, unsigned int length, unsigned char needRTS, unsigned char overrideACK) {
 | 
				
			||||||
 | 
					    unsigned int uitmp = 0;
 | 
				
			||||||
 | 
					    unsigned int uitmp2 = 0;
 | 
				
			||||||
 | 
					    unsigned int uitmp3 = 0;
 | 
				
			||||||
 | 
					    unsigned int txCounter = 0;
 | 
				
			||||||
 | 
					    unsigned int dxCounter = 0;
 | 
				
			||||||
 | 
					    unsigned char uctmp = 0x00;
 | 
				
			||||||
 | 
					//	unsigned char uctmp2 =0x00;
 | 
				
			||||||
 | 
					    unsigned char chksum = 0x00;
 | 
				
			||||||
 | 
					    //unsigned char dataContext = 0x00;
 | 
				
			||||||
 | 
					    unsigned int retryCount = 0;
 | 
				
			||||||
 | 
					    unsigned long lastRetry = 0;
 | 
				
			||||||
 | 
					    unsigned int dxLength;
 | 
				
			||||||
 | 
					//	unsigned int dx = biox_StrLen(pData) + 1;
 | 
				
			||||||
 | 
					    unsigned char rxBuf[8];
 | 
				
			||||||
 | 
					    //unsigned char pData_[IUC_ASYNCHPOS_MAX_ARRAY_SIZE];
 | 
				
			||||||
 | 
					//	unsigned int loopCount = 1000;
 | 
				
			||||||
 | 
					//	unsigned char retVal = 0x01;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //preparing to send
 | 
				
			||||||
 | 
					    //if (needRTS) {
 | 
				
			||||||
 | 
					        //brd_SendDiagStr("->IUC ASYNCHPOS sending 0x04 (EOT).",1);
 | 
				
			||||||
 | 
					    //    uctmp = iuc_asynchpos_rts();
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //sending data
 | 
				
			||||||
 | 
					    if (!uctmp) {
 | 
				
			||||||
 | 
					        //brd_SendDiagStr("----->IUC ASYNCHPOS",1);
 | 
				
			||||||
 | 
					        iuc_asynchpos_sub_initArray(txAsynchData, IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					        //iuc_asynchpos_sub_initArray(pData_, IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //biox_CopyBlock(pData,0,pData_,0,IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*dxCounter = 0;
 | 
				
			||||||
 | 
					        for (uitmp = 0; uitmp < dx + dxCounter; ++uitmp) {
 | 
				
			||||||
 | 
					            if ((pData[uitmp] >= STX  && pData[uitmp] <= ACK2)
 | 
				
			||||||
 | 
					                || (pData[uitmp] == DLE) || (pData[uitmp] == NAK)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                pData[uitmp] = (pData[uitmp] + 0x30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (uitmp2 = uitmp; uitmp2 < dx + dxCounter; ++uitmp2) {
 | 
				
			||||||
 | 
					                    pData[uitmp2 + 1] = pData[uitmp2];
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                pData[uitmp] = DLE;
 | 
				
			||||||
 | 
					                ++dxCounter;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dxCounter = 0;*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (uitmp = 0; uitmp < length; uitmp += IUC_ASYNCHPOS_MIN_PACKET_SIZE) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //if (dxCounter > 0)
 | 
				
			||||||
 | 
					                //uitmp -= dxCounter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            uctmp = 0x00;
 | 
				
			||||||
 | 
					            dxCounter = 0;
 | 
				
			||||||
 | 
					            chksum = 0x00;
 | 
				
			||||||
 | 
					            dxLength = IUC_ASYNCHPOS_MIN_PACKET_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (length - uitmp <= IUC_ASYNCHPOS_MIN_PACKET_SIZE)
 | 
				
			||||||
 | 
					                dxLength = 2 + length - uitmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            iuc_asynchpos_sub_initArray(txAsynchData, 3 + IUC_ASYNCHPOS_MIN_PACKET_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Packet structure is STX <packet_data> ETX1|ETX2 {LRC}
 | 
				
			||||||
 | 
					            txAsynchData[0] = STX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (txCounter = 0; (txCounter/* + dxCounter*/) < dxLength; ++txCounter) {
 | 
				
			||||||
 | 
					            //for (txCounter = 0; txCounter < dxLength; ++txCounter) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                /*if ((pData[uitmp + txCounter] >= STX  && pData[uitmp + txCounter] <= ACK2)
 | 
				
			||||||
 | 
					                    || (pData[uitmp + txCounter] == DLE) || (pData[uitmp + txCounter] == NAK)) {
 | 
				
			||||||
 | 
					                    txAsynchData[1 + txCounter + dxCounter] = DLE;
 | 
				
			||||||
 | 
					                    uctmp = (pData[uitmp + txCounter] + 0x30);
 | 
				
			||||||
 | 
					                    ++dxCounter;
 | 
				
			||||||
 | 
					                    txAsynchData[1 + txCounter + dxCounter] = uctmp; //(pData[uitmp + txCounter] + 0x30);
 | 
				
			||||||
 | 
					                } else {*/
 | 
				
			||||||
 | 
					                    txAsynchData[1 + txCounter/* + dxCounter*/] = pData[uitmp + txCounter];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if ((pData[uitmp + txCounter] >= STX  && pData[uitmp + txCounter] <= ACK2)
 | 
				
			||||||
 | 
					                || (pData[uitmp + txCounter] == DLE) || (pData[uitmp + txCounter] == NAK)) {
 | 
				
			||||||
 | 
					                    ++dxCounter;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (uitmp2 = 1; uitmp2 < dxLength + dxCounter; ++uitmp2) {
 | 
				
			||||||
 | 
					                if ((txAsynchData[uitmp2] >= STX  && txAsynchData[uitmp2] <= ACK2)
 | 
				
			||||||
 | 
					                || (txAsynchData[uitmp2] == DLE) || (txAsynchData[uitmp2] == NAK)) {
 | 
				
			||||||
 | 
					                    for (uitmp3 = dxLength + dxCounter; uitmp3 > uitmp2; --uitmp3) {
 | 
				
			||||||
 | 
					                        txAsynchData[uitmp3] = txAsynchData[uitmp3 - 1];
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    txAsynchData[uitmp2 + 1] = (txAsynchData[uitmp2 + 1] + 0x30);
 | 
				
			||||||
 | 
					                    txAsynchData[uitmp2] = DLE;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /*if (dxLength < IUC_ASYNCHPOS_MIN_PACKET_SIZE && txAsynchData[txCounter + dxCounter] != 0x00) {
 | 
				
			||||||
 | 
					                ++dxCounter;
 | 
				
			||||||
 | 
					            }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (uitmp2 = 1; uitmp2 <= (txCounter + dxCounter); ++uitmp2) {
 | 
				
			||||||
 | 
					                chksum ^= txAsynchData[uitmp2];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!iucAsynchpoxDataContext) {
 | 
				
			||||||
 | 
					                txAsynchData[1 + txCounter + dxCounter] = ETX1;
 | 
				
			||||||
 | 
					                chksum ^= ETX1;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                txAsynchData[1 + txCounter + dxCounter] = ETX2;
 | 
				
			||||||
 | 
					                chksum ^= ETX2;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            txAsynchData[2 + txCounter + dxCounter] = chksum;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            QByteArray c((char*)txAsynchData, 2 + txCounter + dxCounter + 1);
 | 
				
			||||||
 | 
					            qCritical() << "txCounter" << txCounter;
 | 
				
			||||||
 | 
					            qCritical() << "dxCounter" << dxCounter;
 | 
				
			||||||
 | 
					            qCritical() << "check" << chksum;
 | 
				
			||||||
 | 
					            qCritical() << "txAsyncData" << c.toHex(' ');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					unsigned int iuc_asynchpos_send(unsigned char packetType,
 | 
				
			||||||
 | 
					                                unsigned char* pData,
 | 
				
			||||||
 | 
					                                unsigned int length,
 | 
				
			||||||
 | 
					                                unsigned char needRTS) {
 | 
				
			||||||
 | 
					    unsigned char txData_[IUC_ASYNCHPOS_MAX_ARRAY_SIZE];
 | 
				
			||||||
 | 
					    unsigned char tempID [IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE];
 | 
				
			||||||
 | 
					    unsigned char tempID_ [IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE];
 | 
				
			||||||
 | 
					    unsigned char tempAPAK [IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE];
 | 
				
			||||||
 | 
					    unsigned long uitmp = 0;
 | 
				
			||||||
 | 
					    unsigned int posID = 0;
 | 
				
			||||||
 | 
					    unsigned long chksum = 0;
 | 
				
			||||||
 | 
					    unsigned int messageLength = length + 1;
 | 
				
			||||||
 | 
					    unsigned int length_ = length + 1;
 | 
				
			||||||
 | 
					    unsigned char pData_[IUC_ASYNCHPOS_MAX_ARRAY_SIZE];
 | 
				
			||||||
 | 
					    unsigned char uctemp = 0;
 | 
				
			||||||
 | 
					//	unsigned char retries = 4;
 | 
				
			||||||
 | 
					    unsigned char rxBuf[8];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynchpos_crc_old = 0;
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(rxBuf, 8);
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(pData_, IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					    biox_CopyBlock(pData,0,pData_,0,length_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(txData_, IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(tempID, IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE);
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(tempID_, IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE);
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(tempAPAK, IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //header
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    The header of the message is composed of:
 | 
				
			||||||
 | 
					    ?  1 byte packet Type, which indicates the type of the packet;
 | 
				
			||||||
 | 
					    ?  8 bytes Packet ID, a unique ID to achieve maximum security (for information on forming
 | 
				
			||||||
 | 
					    Packet ID see chapter 3.4 Communication security);
 | 
				
			||||||
 | 
					    ?  1 byte P.O.S. ID length;
 | 
				
			||||||
 | 
					    ?  ASCII encoded P.O.S. ID (up to 255 bytes);	((gemeint ist Terminal ID)
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    txData_[2] = packetType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //1 byte P.O.S. ID length
 | 
				
			||||||
 | 
					    /*for (uitmp = 0; uitmp < 32 && terminalID[uitmp] != 0x00; ++uitmp) {
 | 
				
			||||||
 | 
					        ++posID; // -= uitmp;
 | 
				
			||||||
 | 
					    }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    posID = biox_StrLen(terminalID)/* + 1*/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //++posID;
 | 
				
			||||||
 | 
					    txData_[11] = (UCHAR) posID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    messageLength += (10 + posID);	//Added header
 | 
				
			||||||
 | 
					    txData_[0] = (messageLength) & 0xFF00;	//high byte
 | 
				
			||||||
 | 
					    txData_[1] = (messageLength) & 0x00FF;	//low byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //8 byte Packet ID
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    Apak: 9D547268976ADE1BBB39DE90F3A449E5
 | 
				
			||||||
 | 
					    Terminal id: T-LT-OPT-01
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //calculate CRC32
 | 
				
			||||||
 | 
					    uctemp = (UCHAR) posID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fprintf(stderr, "POSID=%0X\n", uctemp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    chksum = IUC_ASYNCHPOS_POLYNOME_INITIAL;
 | 
				
			||||||
 | 
					    chksum = iuc_asynchpos_sub_updateCRC(chksum,&uctemp,1);
 | 
				
			||||||
 | 
					    fprintf(stderr, "%d CRC32=%04X\n", __LINE__, chksum);
 | 
				
			||||||
 | 
					    chksum = iuc_asynchpos_sub_updateCRC(chksum,terminalID,posID);
 | 
				
			||||||
 | 
					    fprintf(stderr, "%d CRC32=%04X\n", __LINE__, chksum);
 | 
				
			||||||
 | 
					    //for (uitmp = 0; uitmp < length_; ++uitmp) {
 | 
				
			||||||
 | 
					    chksum = iuc_asynchpos_sub_updateCRC(chksum,pData_/*[uitmp]*/,length_);
 | 
				
			||||||
 | 
					    fprintf(stderr, "%d CRC32=%04X\n", __LINE__, chksum);
 | 
				
			||||||
 | 
					    //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //XOR crc value with APAK
 | 
				
			||||||
 | 
					    //chksum = 2502456899;	//HACK FOR TESTING, REMOVE LATER!
 | 
				
			||||||
 | 
					    for(uitmp = 0; uitmp < IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE; ++uitmp) {
 | 
				
			||||||
 | 
					        tempAPAK[uitmp] |= biox_ah2ui_char(terminalAPAK[uitmp * 2]) << 4;
 | 
				
			||||||
 | 
					        tempAPAK[uitmp] |= biox_ah2ui_char(terminalAPAK[(uitmp * 2) + 1]);
 | 
				
			||||||
 | 
					        //tempAPAK[uitmp] = (terminalAPAK[uitmp * 2] << 8) | (terminalAPAK[(uitmp * 2) + 1]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    tempID[0] = (chksum >> 24) & 0xFF;
 | 
				
			||||||
 | 
					    tempID[1] = (chksum >> 16) & 0xFF;
 | 
				
			||||||
 | 
					    tempID[2] = (chksum >> 8) & 0xFF;
 | 
				
			||||||
 | 
					    tempID[3] = chksum & 0xFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uitmp = 0; uitmp < 4; ++uitmp) {
 | 
				
			||||||
 | 
					        tempID[uitmp] ^= tempAPAK[uitmp]; //terminalAPAK[uitmp];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (uitmp = 4; uitmp < IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE; ++uitmp) {
 | 
				
			||||||
 | 
					        tempID[uitmp] = tempAPAK[uitmp]; //terminalAPAK[uitmp];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Eyncrypt result with APAK, according to AES128
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QByteArray x((char *)tempID, IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE);
 | 
				
			||||||
 | 
					    QByteArray z((char *)tempAPAK, IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qCritical() << "AES-INPUT" << x.toHex();
 | 
				
			||||||
 | 
					    qCritical() << "APAK" << z.toHex();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    aes_encrypt(tempID,tempID_,tempAPAK);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QByteArray y((char *)tempID_, IUC_ASYNCHPOS_MIN_BASE_BYTE_DATA_SIZE);
 | 
				
			||||||
 | 
					    qCritical() << "AES-OUTPUT" << y.toHex();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //get the leftmost 8 byte of that value and set then as Packet ID
 | 
				
			||||||
 | 
					    for (uitmp = 0; uitmp < 8; ++uitmp) {
 | 
				
			||||||
 | 
					        txData_[3 + uitmp] = tempID_[uitmp];
 | 
				
			||||||
 | 
					        fprintf(stderr, "%0X", txData_[3 + uitmp]);
 | 
				
			||||||
 | 
					    } fprintf(stderr, "\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //P.O.S.ID
 | 
				
			||||||
 | 
					    for (uitmp = 0; uitmp < posID; ++uitmp) {
 | 
				
			||||||
 | 
					        txData_[12 + uitmp] = terminalID[uitmp];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Message
 | 
				
			||||||
 | 
					    //1 byte - marker
 | 
				
			||||||
 | 
					    //0 . 7F bytes - tag name
 | 
				
			||||||
 | 
					    //2 + N bytes - data
 | 
				
			||||||
 | 
					    for (uitmp = 0; uitmp < length_; ++uitmp) {
 | 
				
			||||||
 | 
					        txData_[12 + posID + uitmp] = pData_[uitmp];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QByteArray a((char *)(&txData_[0]), messageLength+1);
 | 
				
			||||||
 | 
					    qCritical() << "MESSAGE" << a.toHex(' ');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynchpos_send_serial(txData_, (messageLength/* + 1*/),needRTS,0x00);
 | 
				
			||||||
 | 
					    //QByteArray b((char *)(&txAsynchData[0]), IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					    //qCritical() << "EXPANDED MESSAGE" << b.toHex(' ');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
					    brd_SendDiagStr("->IUC ASYNCHPOS send message: ",0);
 | 
				
			||||||
 | 
					    brd_SendDiagBlock(txData_,1,messageLength);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Message compiled, now send it via serial
 | 
				
			||||||
 | 
					    uitmp = 1;
 | 
				
			||||||
 | 
					    //while (retries > 0 && uitmp > 0) {
 | 
				
			||||||
 | 
					        //uitmp = iuc_asynchpos_send_serial(txData_, (messageLength + 1));
 | 
				
			||||||
 | 
					        //--retries;
 | 
				
			||||||
 | 
					        if (iuc_asynchpos_send_serial(txData_, (messageLength/* + 1*/),needRTS,0x00)) {
 | 
				
			||||||
 | 
					            //brd_SendDiagStr("->IUC ASYNCHPOS Message failed!",1);
 | 
				
			||||||
 | 
					            //TODO Message sending failed -> Error handling here
 | 
				
			||||||
 | 
					            //return 1;
 | 
				
			||||||
 | 
					            uitmp = 0x00;
 | 
				
			||||||
 | 
					            //brd_SendDiagStr("->IUC ASYNCHPOS Message NOT send",1);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            //brd_SendDiagStr("->IUC ASYNCHPOS Message send",1);
 | 
				
			||||||
 | 
					        } /*else {
 | 
				
			||||||
 | 
					            --retries;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //if (!uitmp)
 | 
				
			||||||
 | 
					        //return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*if (retries == 0) {
 | 
				
			||||||
 | 
					        brd_SendDiagStr("->IUC ASYNCHPOS Message failed!",1);
 | 
				
			||||||
 | 
					        rxBuf[0] = 0x45;
 | 
				
			||||||
 | 
					        rxBuf[1] = 0x00;
 | 
				
			||||||
 | 
					        rxBuf[2] = 0xFF;
 | 
				
			||||||
 | 
					        vmc_SendWithBuffer(rxBuf,20,0x69,0);
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rxBuf[0] = 0x45;
 | 
				
			||||||
 | 
					    rxBuf[1] = 0x00;
 | 
				
			||||||
 | 
					    rxBuf[2] = 0x00;
 | 
				
			||||||
 | 
					    vmc_SendWithBuffer(rxBuf,20,0x69,0);*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //brd_SendDiagStr("->IUC ASYNCHPOS Message send",1);
 | 
				
			||||||
 | 
					    //while(iuc_asynchpos_recieve_serial());
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_Login() {	//Kasse registrieren
 | 
				
			||||||
 | 
					    unsigned char message[IUC_ASYNCHPOS_MAX_TX_MESSAGE_SIZE];
 | 
				
			||||||
 | 
					    unsigned char packetType = 0x00;
 | 
				
			||||||
 | 
					    unsigned int uitemp = 0;
 | 
				
			||||||
 | 
					    unsigned char command[] = "Login";
 | 
				
			||||||
 | 
					    unsigned char tagName[] = "Time";
 | 
				
			||||||
 | 
					    //unsigned char tag2Name[] = "IdleText";
 | 
				
			||||||
 | 
					    unsigned char tag3Name[] = "Flags";
 | 
				
			||||||
 | 
					    unsigned char tag3Value[] = "AP3|LR";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Constructing the message
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(message,IUC_ASYNCHPOS_MAX_TX_MESSAGE_SIZE);
 | 
				
			||||||
 | 
					    uitemp = (unsigned char) biox_StrLen(command);
 | 
				
			||||||
 | 
					    message[0] = (unsigned char) uitemp + 0x80;					//constructed element, tag name length
 | 
				
			||||||
 | 
					    biox_CopyBlock(command,0,message,1,uitemp);	//tag name
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (unsigned char) biox_StrLen(tagName);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tagName,0,message,uitemp, biox_StrLen(tagName));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tagName));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Time
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_synchTime();
 | 
				
			||||||
 | 
					    message[uitemp] = (unsigned char) biox_StrLen(asynchBill.time);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(asynchBill.time,0,message,uitemp, biox_StrLen(asynchBill.time));//value
 | 
				
			||||||
 | 
					    uitemp += biox_StrLen(asynchBill.time);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Flags
 | 
				
			||||||
 | 
					    message[uitemp] = (unsigned char) biox_StrLen(tag3Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag3Name,0,message,uitemp, biox_StrLen(tag3Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag3Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (unsigned char) biox_StrLen(tag3Value);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag3Value,0,message,uitemp, biox_StrLen(tag3Value));//value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uitemp += biox_StrLen(tag3Value)/* + 1*/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynchpos_send(packetType,message,uitemp,0x01);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void biox_ClearMem(UCHAR *targ, UCHAR FillByte, UINT Len)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // fill buffer and terminate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    UINT    zz=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (zz=0; zz<Len; zz++)
 | 
				
			||||||
 | 
					            targ[zz]=FillByte;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void biox_ultoa(unsigned long n, char *str)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    UCHAR   pp, zi[12];
 | 
				
			||||||
 | 
					    int pi=0;
 | 
				
			||||||
 | 
					    unsigned long ltmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (pp=0;pp<12;pp++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        str[pp]=0;
 | 
				
			||||||
 | 
					        zi[pp]=0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ltmp=n;
 | 
				
			||||||
 | 
					    pp=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (ltmp==0)
 | 
				
			||||||
 | 
					        str[pp++]=0x30;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while(ltmp>0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        zi[pi++]=ltmp%10;
 | 
				
			||||||
 | 
					        ltmp/=10;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (pi>0)
 | 
				
			||||||
 | 
					        str[pp++]=zi[--pi]+0x30;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void biox_MemCpPos(UCHAR *src, UCHAR *dest, UINT pos)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    //  copy src to destination, start from position "pos".
 | 
				
			||||||
 | 
					    // 1=start from beginning
 | 
				
			||||||
 | 
					    // terminierung nicht eintragen, dest Puffer wird extern abgeschlossen
 | 
				
			||||||
 | 
					    // dest must be long enough !!!!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    UINT    zz, len, pp;
 | 
				
			||||||
 | 
					    UCHAR   uctmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pp=pos;     // unbedingt Zwischenspeichern, geht sonst verloren!!!!!!!
 | 
				
			||||||
 | 
					    len=biox_StrLen(src);
 | 
				
			||||||
 | 
					    zz=0;
 | 
				
			||||||
 | 
					    do
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        uctmp=src[zz];
 | 
				
			||||||
 | 
					        if (uctmp>0)                // terminierung
 | 
				
			||||||
 | 
					            dest[zz+pp]=uctmp;
 | 
				
			||||||
 | 
					        zz++;
 | 
				
			||||||
 | 
					    } while(uctmp>0 && zz<len);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef uint32_t ULONG;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void generate_UniqueTransNr(UCHAR *buf)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // TODO: wieder entfernen
 | 
				
			||||||
 | 
					    QDateTime dt(QDateTime::fromString("2024-06-12T12:00:00", Qt::ISODate));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ULONG transID = MessageHelper::secsSinceJan2017(dt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QByteArray unique(QByteArray(std::to_string(transID).c_str(), 9).rightJustified(10, '0'));
 | 
				
			||||||
 | 
					    unique = unique.append(QByteArray("1000").rightJustified(5, '0'));
 | 
				
			||||||
 | 
					    unique = unique.append(QByteArray("100").rightJustified(4, '0'));
 | 
				
			||||||
 | 
					    memcpy(buf, unique.toStdString().c_str(), 19);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // qCritical() << "XX" << QByteArray((char *)buf, 19).toHex(':');
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // buf>=20 bytes!
 | 
				
			||||||
 | 
					    UCHAR  tmp12[12];
 | 
				
			||||||
 | 
					    ULONG ultmp = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // a) Transaction ID, max 19 chars
 | 
				
			||||||
 | 
					    //      ab April 2017: TID muss über alle Automaten und über alle Zeiten eindeutig sein,
 | 
				
			||||||
 | 
					    //      sonst gibt SessionBase keine Antwort.
 | 
				
			||||||
 | 
					    //uitmp=VKdata.TransID;  sub_BufferNummEntry(ultmp);      // einfache Version bis März 2017
 | 
				
			||||||
 | 
					    biox_ClearMem(buf, '0', 19);
 | 
				
			||||||
 | 
					    biox_ClearMem(tmp12, 0, 12);
 | 
				
			||||||
 | 
					    //VdKdata.TransID = com_totalSecSince1jan2017();
 | 
				
			||||||
 | 
					    //biox_ultoa(VKdata.TransID, tmp12);
 | 
				
			||||||
 | 
					    biox_ultoa(transID, (char *)tmp12);
 | 
				
			||||||
 | 
					    biox_MemCpPos(tmp12, buf, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qCritical() << "TransID 222" << hex << QByteArray((char *)buf, 20).toHex(':');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Automaten-nr auch rein, sonst können versch. Automaten die gleiche Nummer haben!
 | 
				
			||||||
 | 
					    biox_ClearMem(tmp12, 0, 12);
 | 
				
			||||||
 | 
					    //ultmp=(ULONG) Conf.MachNr; //.MachineID;
 | 
				
			||||||
 | 
					    ultmp=1000; //.MachineID;
 | 
				
			||||||
 | 
					    biox_ultoa(ultmp, (char *)tmp12);
 | 
				
			||||||
 | 
					    biox_MemCpPos(tmp12, buf, 11);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qCritical() << "TransID 333" << hex << QByteArray((char *)buf, 20).toHex(':');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    biox_ClearMem(tmp12, 0, 12);
 | 
				
			||||||
 | 
					    //ultmp=(ULONG)Conf.CustomNr; //.CustID;
 | 
				
			||||||
 | 
					    ultmp=100; //.CustID;
 | 
				
			||||||
 | 
					    biox_ultoa(ultmp, (char *)tmp12);
 | 
				
			||||||
 | 
					    biox_MemCpPos(tmp12, buf, 16);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qCritical() << "TransID 444" << hex << QByteArray((char *)buf, 20).toHex(':');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    buf[19]=0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void iuc_asynchpos_command_authorize(unsigned int vkPreis) {
 | 
				
			||||||
 | 
					    UCHAR message[IUC_ASYNCHPOS_MAX_ARRAY_SIZE];
 | 
				
			||||||
 | 
					    UCHAR packetType = 0x00;
 | 
				
			||||||
 | 
					    UINT uitemp = 0;
 | 
				
			||||||
 | 
					    UCHAR command[] = "Authorize";
 | 
				
			||||||
 | 
					    UCHAR tag1Name[] = "Amount";
 | 
				
			||||||
 | 
					    UCHAR tag2Name[] = "Cash";
 | 
				
			||||||
 | 
					    UCHAR tag3Name[] = "Currency";
 | 
				
			||||||
 | 
					    UCHAR tag4Name[] = "DocNr";
 | 
				
			||||||
 | 
					    UCHAR tag5Name[] = "Time";
 | 
				
			||||||
 | 
					    UCHAR tag6Name[] = "Lang";
 | 
				
			||||||
 | 
					    //UCHAR tag1Value[10];
 | 
				
			||||||
 | 
					    UCHAR tag2Value[] = "0";
 | 
				
			||||||
 | 
					    UCHAR tag3Value[] = "978";
 | 
				
			||||||
 | 
					    UCHAR tag6Value[] = "lt";
 | 
				
			||||||
 | 
					    UINT vkPreis_ = vkPreis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qCritical() << "START" << __func__;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynch_PRNrecieved = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Constructing the message
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_initArray(message,IUC_ASYNCHPOS_MAX_ARRAY_SIZE);
 | 
				
			||||||
 | 
					    //iuc_asynchpos_sub_initArray(tag1Value,10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uitemp = (UCHAR) biox_StrLen(command);
 | 
				
			||||||
 | 
					    message[0] = (UCHAR) uitemp + 0x80;					//constructed element, tag name length
 | 
				
			||||||
 | 
					    biox_CopyBlock(command,0,message,1,uitemp);	//tag name
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Amount
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag1Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag1Name,0,message,uitemp, biox_StrLen(tag1Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag1Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    std::string tag1Value = std::to_string(vkPreis_);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen((uint8_t *)tag1Value.c_str());//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock((uint8_t *)tag1Value.c_str(),0,message,uitemp, biox_StrLen((uint8_t *)tag1Value.c_str()));//value
 | 
				
			||||||
 | 
					    uitemp += (/*1 + */biox_StrLen((uint8_t *)tag1Value.c_str()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Cash
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag2Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag2Name,0,message,uitemp, biox_StrLen(tag2Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag2Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag2Value);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag2Value,0,message,uitemp, biox_StrLen(tag2Value));//value
 | 
				
			||||||
 | 
					    uitemp += (/*1 + */biox_StrLen(tag2Value));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Currency
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag3Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag3Name,0,message,uitemp, biox_StrLen(tag3Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag3Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag3Value);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag3Value,0,message,uitemp, biox_StrLen(tag3Value));//value
 | 
				
			||||||
 | 
					    uitemp += (/*1 + */biox_StrLen(tag3Value));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //DocNr
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag4Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag4Name,0,message,uitemp, biox_StrLen(tag4Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag4Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //biox_ltoa(asynchBill.docuNr,asynchBill.docNr);
 | 
				
			||||||
 | 
					    //++asynchBill.docuNr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    generate_UniqueTransNr(asynchBill.docNr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(asynchBill.docNr);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(asynchBill.docNr,0,message,uitemp, biox_StrLen(asynchBill.docNr));//value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uitemp += biox_StrLen(asynchBill.docNr)/* + 1*/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Time
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag5Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag5Name,0,message,uitemp, biox_StrLen(tag5Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag5Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynchpos_sub_synchTime();
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(asynchBill.time);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(asynchBill.time,0,message,uitemp, biox_StrLen(asynchBill.time));//value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uitemp += biox_StrLen(asynchBill.time)/* + 1*/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //Language
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag6Name);//data element, tag name length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag6Name,0,message,uitemp, biox_StrLen(tag6Name));// tag name
 | 
				
			||||||
 | 
					    uitemp += (1 + biox_StrLen(tag6Name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    message[uitemp] = (UCHAR) biox_StrLen(tag6Value);//value length
 | 
				
			||||||
 | 
					    ++uitemp;
 | 
				
			||||||
 | 
					    biox_CopyBlock(tag6Value,0,message,uitemp, biox_StrLen(tag6Value));//value
 | 
				
			||||||
 | 
					    uitemp += biox_StrLen(tag6Value)/* + 1*/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    iuc_asynchpos_send(packetType,message,uitemp,0x00);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -216,7 +933,7 @@ int main() {
 | 
				
			|||||||
    msgHelp.createAuthorizeMessageChunksToSend(0x02);
 | 
					    msgHelp.createAuthorizeMessageChunksToSend(0x02);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    qCritical() << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" << endl;
 | 
					    qCritical() << "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ssh -i ~/.ssh/id_ed25519_ptu5 root@10.0.15.175<< endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // unsigned static char terminalID[IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE];
 | 
					    // unsigned static char terminalID[IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE];
 | 
				
			||||||
    // unsigned static char terminalAPAK[IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE];
 | 
					    // unsigned static char terminalAPAK[IUC_ASYNCHPOS_MIN_BASE_DATA_SIZE];
 | 
				
			||||||
@@ -455,171 +1172,6 @@ int main() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if SEXTEN==1
 | 
					 | 
				
			||||||
    std::ifstream input;
 | 
					 | 
				
			||||||
    int pop_min_time;
 | 
					 | 
				
			||||||
    int pop_max_time;
 | 
					 | 
				
			||||||
    int pop_min_price;
 | 
					 | 
				
			||||||
    int pop_max_price;
 | 
					 | 
				
			||||||
    int pop_daily_card_price;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    input.open("/opt/ptu5/opt/customer_501/etc/psa_tariff/tariff01.json");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    std::stringstream sstr;
 | 
					 | 
				
			||||||
    while(input >> sstr.rdbuf());
 | 
					 | 
				
			||||||
    std::string json(sstr.str());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Configuration cfg;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    bool isParsed = cfg.ParseJson(&cfg, json.c_str());
 | 
					 | 
				
			||||||
    cout << endl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (isParsed) {
 | 
					 | 
				
			||||||
        pop_min_time = get_minimal_parkingtime(&cfg);
 | 
					 | 
				
			||||||
        pop_max_time = get_maximal_parkingtime(&cfg);
 | 
					 | 
				
			||||||
        pop_min_price = get_minimal_parkingprice(&cfg);
 | 
					 | 
				
			||||||
        pop_max_price = get_maximal_parkingprice(&cfg);
 | 
					 | 
				
			||||||
        pop_daily_card_price = cfg.getPaymentOptions().pop_daily_card_price;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        qCritical() << "        pop_min_time: " << pop_min_time;
 | 
					 | 
				
			||||||
        qCritical() << "        pop_max_time: " << pop_max_time;
 | 
					 | 
				
			||||||
        qCritical() << "       pop_min_price: " << pop_min_price;
 | 
					 | 
				
			||||||
        qCritical() << "       pop_max_price: " << pop_max_price;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        QList<int> timeSteps = Calculator::GetInstance().GetTimeSteps(&cfg);
 | 
					 | 
				
			||||||
        qCritical() << "TimeSteps" << timeSteps;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // return 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        CalcState cs;
 | 
					 | 
				
			||||||
        double cost;
 | 
					 | 
				
			||||||
        int durationInMinutes = 0;
 | 
					 | 
				
			||||||
        int offsetInMinutes = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // for (int day = Qt::Monday; day <= Qt::Sunday; ++day) {
 | 
					 | 
				
			||||||
        for (int day = Qt::Monday; day <= Qt::Monday; ++day) {
 | 
					 | 
				
			||||||
            QDateTime s(QDate(2024, 7, 14 + day), QTime()); // 20: (whit) monday,..., 26: sunday
 | 
					 | 
				
			||||||
            QDateTime end;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            switch (day) {
 | 
					 | 
				
			||||||
            case (int)Qt::Monday:
 | 
					 | 
				
			||||||
                qCritical() << "Monday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case (int)Qt::Tuesday:
 | 
					 | 
				
			||||||
                qCritical() << "Tuesday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case (int)Qt::Wednesday:
 | 
					 | 
				
			||||||
                qCritical() << "Wednesday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case (int)Qt::Thursday:
 | 
					 | 
				
			||||||
                qCritical() << "Thursday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case (int)Qt::Friday:
 | 
					 | 
				
			||||||
                qCritical() << "Friday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case (int)Qt::Saturday:
 | 
					 | 
				
			||||||
                qCritical() << "Saturday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case (int)Qt::Sunday:
 | 
					 | 
				
			||||||
                qCritical() << "Sunday";
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            /*
 | 
					 | 
				
			||||||
            CalcState CALCULATE_LIBRARY_API compute_price_for_parking_ticket(
 | 
					 | 
				
			||||||
                                                        parking_tariff_t *tariff,
 | 
					 | 
				
			||||||
                                                        QDateTime &start_parking_time,
 | 
					 | 
				
			||||||
                                                        int netto_parking_time,
 | 
					 | 
				
			||||||
                                                        QDateTime &end_parking_time,    // return value
 | 
					 | 
				
			||||||
                                                        struct price_t *price,          // return value
 | 
					 | 
				
			||||||
                                                        bool prepaid = true);
 | 
					 | 
				
			||||||
            */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //for (int minutes = 0; minutes < 1440; ++minutes) {
 | 
					 | 
				
			||||||
            for (int minutes = 480; minutes < 481; minutes += 1) {
 | 
					 | 
				
			||||||
                QDateTime start = s.addSecs(minutes * 60);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                qCritical() << "start" << start.toString(Qt::ISODate);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                QDateTime effectiveStart = start;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (start.time() < QTime(8, 0, 0)) {
 | 
					 | 
				
			||||||
                    effectiveStart.setTime(QTime(8, 0, 0));
 | 
					 | 
				
			||||||
                } else
 | 
					 | 
				
			||||||
                if (start.time() <= QTime(19, 0, 0)) {
 | 
					 | 
				
			||||||
                    effectiveStart = start;
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    effectiveStart = start.addDays(1);
 | 
					 | 
				
			||||||
                    effectiveStart.setTime(QTime(8, 0, 0)); // next day
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                for (int i = 100; i <= 100; i += 10) {
 | 
					 | 
				
			||||||
                //for (int i = 2100; i <= 2100; i += 10) {
 | 
					 | 
				
			||||||
                    cost = i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if ((cs = compute_duration_for_parking_ticket(&cfg, start, cost, end))) {      // return value
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        qCritical() << "end" << end.toString(Qt::ISODate);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        durationInMinutes = pop_min_time;
 | 
					 | 
				
			||||||
                        if (i > 0) {
 | 
					 | 
				
			||||||
                            durationInMinutes += (i/10) * 4;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        offsetInMinutes = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if (effectiveStart.time() >= QTime(8, 0, 0) && effectiveStart.time() <= QTime(19, 0, 0)) {
 | 
					 | 
				
			||||||
                            if (effectiveStart.time().secsTo(QTime(19, 0, 0)) < (durationInMinutes * 60)) {
 | 
					 | 
				
			||||||
                                offsetInMinutes = 780; // 19:00 -> 8:00
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if (i == 0) {
 | 
					 | 
				
			||||||
                            i += 20;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
                        if ((durationInMinutes + offsetInMinutes) == (effectiveStart.secsTo(end) / 60)) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            if (day == Qt::Monday && minutes >= 480 && minutes <= 1140) {
 | 
					 | 
				
			||||||
                                qCritical() << "| start ............................" << start.toString(Qt::ISODate);
 | 
					 | 
				
			||||||
                                qCritical() << "| cost ............................." << cost;
 | 
					 | 
				
			||||||
                                qCritical() << "| durationInMinutes ................" << durationInMinutes
 | 
					 | 
				
			||||||
                                            << "(" << (durationInMinutes - 60) << "+ 60 )";
 | 
					 | 
				
			||||||
                                qCritical() << "| offsetInMinutes .................." << offsetInMinutes;
 | 
					 | 
				
			||||||
                                qCritical() << "| end .............................." << end.toString(Qt::ISODate) << endl;
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            continue;
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (!cs) {
 | 
					 | 
				
			||||||
                        qCritical() << "ERROR CalcState" << cs.toString() << endl;
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        qCritical() << cs.toString();
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if 0
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "start ............................" << start.toString(Qt::ISODate);
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "effectiveStart ..................." << effectiveStart.toString(Qt::ISODate);
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "cost ............................." << cost;
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "durationInMinutes ................" << durationInMinutes;
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "offsetInMinutes .................." << offsetInMinutes;
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "effectiveStart.secsTo(end) / 60 .." << effectiveStart.secsTo(end) / 60;
 | 
					 | 
				
			||||||
                    qCritical() << __LINE__ << "end .............................." << end.toString(Qt::ISODate) << endl;
 | 
					 | 
				
			||||||
                    exit(-1);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if NEUHAUSER_STOCKERAU==1
 | 
					#if NEUHAUSER_STOCKERAU==1
 | 
				
			||||||
    std::ifstream input;
 | 
					    std::ifstream input;
 | 
				
			||||||
    int pop_min_time;
 | 
					    int pop_min_time;
 | 
				
			||||||
@@ -2203,7 +2755,7 @@ int main() {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if NEUHAUSER_BILEXA_GALTUER==1
 | 
					#if NEUHAUSER_BILEXA_GALTUER==1
 | 
				
			||||||
    std::ifstream input("/opt/ptu5/opt/customer_745/etc/psa_tariff/tariff01.json");
 | 
					    std::ifstream input("/home/linux/customer_745/etc/psa_tariff/tariff01.json");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::stringstream sstr;
 | 
					    std::stringstream sstr;
 | 
				
			||||||
    while(input >> sstr.rdbuf());
 | 
					    while(input >> sstr.rdbuf());
 | 
				
			||||||
@@ -2220,7 +2772,14 @@ int main() {
 | 
				
			|||||||
        qCritical() << timeSteps;
 | 
					        qCritical() << timeSteps;
 | 
				
			||||||
        int Down = 0;
 | 
					        int Down = 0;
 | 
				
			||||||
        int Up = 1;
 | 
					        int Up = 1;
 | 
				
			||||||
        //compute_next_timestep(&cfg, )
 | 
					        QDateTime current = QDateTime::currentDateTime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int minParkTime = get_minimal_parkingtime(&cfg, PERMIT_TYPE::DAY_TICKET,  0);
 | 
				
			||||||
 | 
					        qCritical() << "minParkTime" << minParkTime;
 | 
				
			||||||
 | 
					        qCritical() << "min_pop_time" << cfg.getPaymentOptions(0).pop_min_time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int nextStep = compute_next_timestep(&cfg, minParkTime + 1, 1);
 | 
				
			||||||
 | 
					        qCritical() << "nextStep" << nextStep;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        QDateTime const start = QDateTime::currentDateTime();
 | 
					        QDateTime const start = QDateTime::currentDateTime();
 | 
				
			||||||
        int paymentOptionIndex = cfg.getPaymentOptionIndex(start);
 | 
					        int paymentOptionIndex = cfg.getPaymentOptionIndex(start);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,9 +25,16 @@ CONFIG(debug, debug|release) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SOURCES += main.cpp
 | 
					SOURCES += main.cpp \
 | 
				
			||||||
 | 
					    aes128.cpp \
 | 
				
			||||||
 | 
					    cc_iuc_asynchpos.cpp \
 | 
				
			||||||
 | 
					    terminal_utils.cpp \
 | 
				
			||||||
 | 
					    MessageHelper.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# HEADERS +=
 | 
					HEADERS += aes128.h \
 | 
				
			||||||
 | 
					    cc_iuc_asynchpos.h \
 | 
				
			||||||
 | 
					    terminal_utils.h \
 | 
				
			||||||
 | 
					    MessageHelper.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# OTHER_FILES += \
 | 
					# OTHER_FILES += \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user