Эх сурвалжийг харах

[Improve][Moduralization][Module_RFID]

2021.12.17 / Folus Wen

Actions:
1. Module_RIFD API implement response chksum and length check.

Files:
1. As follow commit history

Image version: D0.00.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 3 жил өмнө
parent
commit
54217a1665

+ 94 - 70
EVSE/Modularization/Module_RFID.c

@@ -198,6 +198,25 @@ char ClaCheckSum(unsigned char *buffer, int len)
 	return chksum;
 }
 
+int chksumValid(unsigned char * buffer)
+{
+	int result = FAIL;
+	int chksum = 0;
+
+	if(buffer[0] > 2)
+	{
+		for(int idx=0;idx<(buffer[0]);idx++)
+		{
+			chksum ^= buffer[idx];
+		}
+
+		if(chksum == buffer[buffer[0]])
+			result = PASS;
+	}
+
+	return result;
+}
+
 bool getRequestCardSN(int Fd, int moduleType, RFID* rfid)
 {
 	bool isSuccess = false;
@@ -250,15 +269,14 @@ bool ISO14443A_REQUEST_SN(int Fd, int moduleType, unsigned char *data)
 {
 	bool isSuccess = false;
 	int tx_len = 4;
-	unsigned char txByte[tx_len];
-	unsigned char rxByte[254];
-	unsigned char tmp[254];
+	unsigned char txByte[4] 		= {0};
+	unsigned char rxByte[254] 		= {0};
 	
-	unsigned char TX_MESSAGE[254];
-	unsigned char RX_MESSAGE[254];
-	unsigned char TMP_MESSAGE[254];
-	unsigned char TX_LENGTH;
-	unsigned char RX_LENGTH;
+	unsigned char TX_MESSAGE[254] 	= {0};
+	unsigned char RX_MESSAGE[254] 	= {0};
+	unsigned char TMP_MESSAGE[254] 	= {0};
+	unsigned char TX_LENGTH 		= 0;
+	unsigned char RX_LENGTH			= 0;
 
 	switch(moduleType)
 	{
@@ -274,41 +292,42 @@ bool ISO14443A_REQUEST_SN(int Fd, int moduleType, unsigned char *data)
 
 			if(Fd > 0)
 			{
-				memset(rxByte, 0, sizeof (rxByte));
 				if(system_command(Fd, txByte, tx_len, rxByte) > 0)
 				{
-					memset(tmp, 0, sizeof tmp);
-					memcpy(tmp, rxByte, sizeof(rxByte));
-					if(tmp[1] == RFID_CMD_ISO1443A_REQUEST)
+					if(chksumValid(rxByte) == PASS)
 					{
-						if(tmp[0] == 0x09)
+						if((rxByte[1] == RFID_CMD_ISO1443A_REQUEST))
 						{
-							DEBUG_INFO_1("MIFARE CLASSIC.\n");
-
-							cardLength = LENGTH_4;
-							memcpy(data, rxByte+2, cardLength);
-
-							isSuccess = true;
+							if(rxByte[0] == 0x09)
+							{
+								cardLength = LENGTH_4;
+								memcpy(data, rxByte+2, cardLength);
+								DEBUG_INFO_1("MIFARE CLASSIC SN: %02X-%02X-%02X-%02X\n", data[0], data[1], data[2], data[3]);
+								isSuccess = true;
+							}
+							else if(rxByte[0] == 0x0C)
+							{
+								cardLength = LENGTH_7;
+								memcpy(data, rxByte+2, cardLength);
+								DEBUG_INFO_1("MIFARE PLUS SN: %02X-%02X-%02X-%02X-%02X-%02X-%02X\n", data[0], data[1], data[2], data[3], data[4], data[5], data[6]);
+
+								isSuccess = true;
+							}
+							else
+							{}
 						}
-						else if(tmp[0] == 0x0C)
+						else if (rxByte[1] == 0xDF)
 						{
-							DEBUG_INFO_1("MIFARE PLUS.\n");
-
-							cardLength = LENGTH_7;
-							memcpy(data, rxByte+2, cardLength);
-
-							isSuccess = true;
+							cardLength = LENGTH_0;
+							isSuccess = false;
 						}
 						else
 						{}
 					}
-					else if (tmp[1] == 0xDF)
+					else
 					{
-						cardLength = LENGTH_0;
-						isSuccess = false;
+						//DEBUG_ERROR_1("Response check sum mismatch.\n");
 					}
-					else
-					{}
 				}
 				else
 				{}
@@ -394,9 +413,8 @@ bool ISO14443B_REQUEST_SN(int Fd, int moduleType, unsigned char *data)
 	bool isSuccess = false;
 	int cardLength;
 	int tx_len = 5;
-	unsigned char txByte[tx_len];
-	unsigned char rxByte[254];
-	unsigned char tmp[254];
+	unsigned char txByte[5] 	= {0};
+	unsigned char rxByte[254] 	= {0};
 	
 	/*
 	unsigned char TX_MESSAGE[254];
@@ -421,27 +439,30 @@ bool ISO14443B_REQUEST_SN(int Fd, int moduleType, unsigned char *data)
 
 			if(Fd > 0)
 			{
-				memset(rxByte, 0, sizeof (rxByte));
 				if(system_command(Fd, txByte, tx_len, rxByte) > 0)
 				{
-					memset(tmp, 0, sizeof tmp);
-					memcpy(tmp, rxByte, sizeof(rxByte));
-					if(tmp[1] == RFID_CMD_ISO1443B_REQUEST)
+					if(chksumValid(rxByte) == PASS)
 					{
-						DEBUG_INFO_1("ISO14443 TYPE B.\n");
-
-						cardLength = LENGTH_4;
-						memcpy(data, rxByte+3, cardLength);
+						if((rxByte[1] == RFID_CMD_ISO1443B_REQUEST) && (rxByte[0] >= 12))
+						{
+							cardLength = LENGTH_4;
+							memcpy(data, rxByte+3, cardLength);
+							DEBUG_INFO_1("ISO14443-B SN: %02X-%02X-%02X-%02X\n", data[0], data[1], data[2], data[3]);
 
-						isSuccess = true;
+							isSuccess = true;
+						}
+						else if(rxByte[1] == 0x9F)
+						{
+							cardLength = LENGTH_0;
+							isSuccess = false;
+						}
+						else
+						{}
 					}
-					else if(tmp[1] == 0x9F)
+					else
 					{
-						cardLength = LENGTH_0;
-						isSuccess = false;
+						//DEBUG_ERROR_1("Response check sum mismatch.\n");
 					}
-					else
-					{}
 				}
 				else
 				{}
@@ -515,15 +536,14 @@ bool FELICA_REQUEST_SN(int Fd, int moduleType, unsigned char *data)
 	bool isSuccess = false;
 	int cardLength;
 	int tx_len = 9;
-	unsigned char txByte[tx_len];
-	unsigned char rxByte[254];
-	unsigned char tmp[254];
+	unsigned char txByte[9] 		= {0};
+	unsigned char rxByte[254]		= {0};
 	
-	unsigned char TX_MESSAGE[254];
-	unsigned char RX_MESSAGE[254];
-	unsigned char TMP_MESSAGE[254];
-	unsigned char TX_LENGTH;
-	unsigned char RX_LENGTH;
+	unsigned char TX_MESSAGE[254]	= {0};
+	unsigned char RX_MESSAGE[254]	= {0};
+	unsigned char TMP_MESSAGE[254]	= {0};
+	unsigned char TX_LENGTH			= 0;
+	unsigned char RX_LENGTH			= 0;
 
 	switch(moduleType)
 	{
@@ -547,24 +567,28 @@ bool FELICA_REQUEST_SN(int Fd, int moduleType, unsigned char *data)
 				memset(rxByte, 0, sizeof (rxByte));
 				if(system_command(Fd, txByte, tx_len, rxByte) > 0)
 				{
-					memset(tmp, 0, sizeof tmp);
-					memcpy(tmp, rxByte, sizeof(rxByte));
-					if(tmp[1] == RFID_CMD_FELICA_POLLING_REQUEST)
+					if(chksumValid(rxByte) == PASS)
 					{
-						DEBUG_INFO_1("FELICA.\n");
-
-						cardLength = LENGTH_6;
-						memcpy(data, rxByte+6, cardLength);
+						if((rxByte[1] == RFID_CMD_FELICA_POLLING_REQUEST) && (rxByte[0] >= 22))
+						{
+							cardLength = LENGTH_6;
+							memcpy(data, rxByte+6, cardLength);
+							DEBUG_INFO_1("FELICA SN: %02X-%02X-%02X-%02X-%02X-%02X\n", data[0], data[1], data[2], data[3], data[4], data[5]);
 
-						isSuccess = true;
+							isSuccess = true;
+						}
+						else if(rxByte[1] == 0xD0)
+						{
+							cardLength = LENGTH_0;
+							isSuccess = false;
+						}
+						else
+						{}
 					}
-					else if(tmp[1] == 0xD0)
+					else
 					{
-						cardLength = LENGTH_0;
-						isSuccess = false;
+						//DEBUG_ERROR_1("Response check sum mismatch.\n");
 					}
-					else
-					{}
 				}
 				else
 				{}
@@ -1023,4 +1047,4 @@ bool setDefaultOfAutomaticDetectingCard(int Fd, int moduleType, int Value)
 	}
 	
 	return isSuccess;
-}
+}