|
@@ -6,7 +6,7 @@
|
|
|
*/
|
|
|
|
|
|
#include "Module_Payment.h"
|
|
|
-
|
|
|
+unsigned char version[] = {'D', '0', '.', '0', '1'};
|
|
|
unsigned char CMD_C8[30] = {0xc8,0x01, // Activate the reader
|
|
|
0x9f,0x02,0x06,0x00,0x00,0x00,0x01,0x00,0x00, // Amount, Authorized, sample: 100.00 dollar
|
|
|
0x5f,0x2a,0x02,0x08,0x40, // Transaction Currency Code follow ISO-4217, sample: 0840(USD)
|
|
@@ -52,7 +52,7 @@ int StoreLogMsg(const char *fmt, ...)
|
|
|
tm=localtime(&CurrentTime);
|
|
|
gettimeofday(&tv, NULL); // get microseconds, 10^-6
|
|
|
|
|
|
- sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >> /Storage/System/[%04d.%02d]PaymentLog",
|
|
|
+ sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >> /Storage/SystemLog/[%04d.%02d]PaymentLog",
|
|
|
tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
|
|
|
buffer,
|
|
|
tm->tm_year+1900,tm->tm_mon+1);
|
|
@@ -350,6 +350,7 @@ int main(void)
|
|
|
int rx_len = 0;
|
|
|
int data_len = 0;
|
|
|
|
|
|
+ DEBUG_INFO("Task version: %s\n", version);
|
|
|
//===============================================
|
|
|
// Initialization
|
|
|
//===============================================
|
|
@@ -520,24 +521,26 @@ int main(void)
|
|
|
case Master_MagStripe:
|
|
|
case AMEX_EMV:
|
|
|
case AMEX_MSD:
|
|
|
- for (int i=5; i<(5 + 16); i++)
|
|
|
- {
|
|
|
- C9_Result.u_id[i] = C9_Result.result_data[i];
|
|
|
- }
|
|
|
+ memset(C9_Result.u_id, 0x00, ARRAY_SIZE(C9_Result.u_id));
|
|
|
+ memcpy(C9_Result.u_id, &C9_Result.result_data[4], 16);
|
|
|
+ DEBUG_INFO("Credit card SN:\n");
|
|
|
+ show_data(C9_Result.u_id, 16);
|
|
|
|
|
|
DEBUG_INFO("Payment card\n");
|
|
|
for(uint8_t idx=0;idx<getSentinelQuantity(C9_Result.result_data, rx_len);idx++)
|
|
|
{
|
|
|
+ memset(C9_Result.tkData[idx], 0x00, ARRAY_SIZE(C9_Result.tkData[idx]));
|
|
|
memcpy(C9_Result.tkData[idx],
|
|
|
&C9_Result.result_data[((idx==0)?3:getSentinelPosition(C9_Result.result_data, rx_len, idx-1)+2)],
|
|
|
(idx==0?getSentinelPosition(C9_Result.result_data, rx_len, idx)+1-3+1:getSentinelPosition(C9_Result.result_data, rx_len, idx)+1-getSentinelPosition(C9_Result.result_data, rx_len, idx-1)+2+1));
|
|
|
|
|
|
DEBUG_INFO("TK[%d]: \n", idx);
|
|
|
- show_data(C9_Result.tkData[idx], ARRAY_SIZE(C9_Result.tkData[idx]));
|
|
|
+ show_data(C9_Result.tkData[idx], getSentinelPosition(C9_Result.tkData[idx], ARRAY_SIZE(C9_Result.tkData[idx]), 0)+2);
|
|
|
}
|
|
|
break;
|
|
|
case Mifare:
|
|
|
data_len = C9_Result.result_data[6];
|
|
|
+ memset(C9_Result.u_id, 0x00, ARRAY_SIZE(C9_Result.u_id));
|
|
|
memcpy(C9_Result.u_id, &C9_Result.result_data[7], data_len);
|
|
|
|
|
|
switch(C9_Result.result_data[3])
|
|
@@ -573,6 +576,7 @@ int main(void)
|
|
|
break;
|
|
|
case ISO_15693:
|
|
|
data_len =(C9_Result.result_data[5]<<8) | C9_Result.result_data[6];
|
|
|
+ memset(C9_Result.u_id, 0x00, ARRAY_SIZE(C9_Result.u_id));
|
|
|
memcpy(C9_Result.u_id, &C9_Result.result_data[4+data_len-8], 8);
|
|
|
|
|
|
DEBUG_INFO("ISO_15693, UID: %02X-%02X-%02X-%02X-%02X-%02X-%02X-%02X\n", C9_Result.u_id[0], C9_Result.u_id[1], C9_Result.u_id[2], C9_Result.u_id[3], C9_Result.u_id[4], C9_Result.u_id[5], C9_Result.u_id[6], C9_Result.u_id[7]);
|
|
@@ -586,11 +590,10 @@ int main(void)
|
|
|
(idx==0?getSentinelPosition(C9_Result.result_data, rx_len, idx)+1-3+1:getSentinelPosition(C9_Result.result_data, rx_len, idx)+1-getSentinelPosition(C9_Result.result_data, rx_len, idx-1)+2+1));
|
|
|
|
|
|
DEBUG_INFO("TK[%d]: \n", idx);
|
|
|
- show_data(C9_Result.tkData[idx], ARRAY_SIZE(C9_Result.tkData[idx]));
|
|
|
+ show_data(C9_Result.tkData[idx], getSentinelPosition(C9_Result.tkData[idx], ARRAY_SIZE(C9_Result.tkData[idx]), 0)+2);
|
|
|
}
|
|
|
break;
|
|
|
case No_Data:
|
|
|
-
|
|
|
DEBUG_INFO("--> No any data.\n");
|
|
|
break;
|
|
|
default:
|