Browse Source

2019-08-26 / Eason Yang
1.Added file Module_RFID.c
2.Added file Module_RFID.h
3.Changed makefile commands for create Module_RFID's lib

Eason 5 years ago
parent
commit
78cdd9fd76
3 changed files with 904 additions and 2 deletions
  1. 6 2
      EVSE/Modularization/Makefile
  2. 846 0
      EVSE/Modularization/Module_RFID.c
  3. 52 0
      EVSE/Modularization/Module_RFID.h

+ 6 - 2
EVSE/Modularization/Makefile

@@ -2,10 +2,14 @@
 export PATH=/bin:/sbin:/usr/bin:$(SDK_PATH_TARGET)/usr/bin:$PATH
 
 
-all: Internal485ProtocolTaskLib PsuCommProtocolLib
+all: Internal485ProtocolTaskLib PsuCommProtocolLib Module_RFIDLib
 	
 Internal485ProtocolTaskLib:
 	rm -f libInternal485Protocol.a; $(CC) -static Internal485Protocol.c -lInternal485Protocol
 	
 PsuCommProtocolLib:
-	rm -f libPsuCommProtocol.a; $(CC) -static PsuCommProtocol.c -lPsuCommProtocol
+	rm -f libPsuCommProtocol.a; $(CC) -static PsuCommProtocol.c -lPsuCommProtocol
+
+Module_RFIDLib:
+	rm -f libModule_RFID.a; $(CC) -static Module_RFID.c -lModule_RFID
+

+ 846 - 0
EVSE/Modularization/Module_RFID.c

@@ -0,0 +1,846 @@
+#include "Module_RFID.h"
+
+//==================================
+// PRINT OUT LOG FORMAT
+//==================================
+#define SystemLogMessage
+#define DEBUG_INFO_1(format, args...) StoreLogMessage("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN_1(format, args...) StoreLogMessage("[%s:%d][%s][Warn] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR_1(format, args...) StoreLogMessage("[%s:%d][%s][Error] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+
+//==================================
+// SYSTEM CONSTANT
+//==================================
+#define Debug
+#define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))
+#define PASS				1
+#define FAIL				-1
+
+//==================================
+// MODULE CONSTANT
+//==================================
+#define NO_MODULE			-1
+#define MODULE_EWT			0
+#define MODULE_ELATEC		1
+
+//==================================
+// ACTION CONSTANT
+//==================================
+#define SEARCH				1
+#define READ				2
+#define WRITE				3
+
+//==================================
+// RFID MODE CONSTANT
+//==================================
+unsigned char WUPA = 0;
+unsigned char REQA = 1;
+unsigned int STATUS = 0;
+
+//==================================
+// MIFARE SECTOR SPACE
+//==================================
+#define ROW					6
+#define COLUMN				16
+
+unsigned char sectorKeyA[COLUMN][ROW] = {	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+											{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
+	 	 	 	 	 	 	 	 	 	 };
+
+//==================================
+// RFID CMD CONSTANT
+//==================================
+unsigned int RFID_CMD_REQUEST_SN    = 0x20;
+unsigned int RFID_CMD_HALT_14443A   = 0x28;
+unsigned int RFID_CMD_BLOCK_READ	= 0x21;
+unsigned int RFID_CMD_BLOCK_WRITE	= 0X22;
+unsigned int RFID_CMD_BUZZER_SET	= 0X14;
+
+//==================================
+// SystemLog message
+//==================================
+#ifdef SystemLogMessage
+int StoreLogMessage(const char *fmt, ...)
+{
+	char Buf[4096+256];
+	char buffer[4096];
+	time_t CurrentTime;
+	struct tm *tm;
+	va_list args;
+
+	va_start(args, fmt);
+	int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+
+	memset(Buf,0,sizeof(Buf));
+	CurrentTime = time(NULL);
+	tm=localtime(&CurrentTime);
+	sprintf(Buf,"echo \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
+			buffer,
+			tm->tm_year+1900,tm->tm_mon+1);
+	system(Buf);
+	#ifdef Debug
+	printf("[%04d.%02d.%02d %02d:%02d:%02d] - %s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec, buffer);
+	#endif
+
+	return rc;
+}
+#endif
+
+//=================================
+// Common routine
+//=================================
+char* getTimeString(void)
+{
+	char *result=malloc(21);
+	time_t timep;
+	struct tm *p;
+	time(&timep);
+	p=gmtime(&timep);
+
+	sprintf(result, "[%04d-%02d-%02d %02d:%02d:%02d]", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday, p->tm_hour, p->tm_hour, p->tm_sec);
+
+	return result;
+}
+
+//==========================================
+// Module's command send/receive
+//==========================================
+int system_command(int uart, unsigned char* cmd,int length, unsigned char* rx)
+{
+	int len;
+
+	//sleep(2); //required to make flush work, for some reason
+	tcflush(uart,TCIOFLUSH);
+	if(write(uart, cmd, length) >= 0)
+	{
+		usleep(500000);
+		len = read(uart, rx, 256);
+	}
+	else
+	{
+		#ifdef SystemLogMessage
+		DEBUG_ERROR_1("system command %s response fail.\n", cmd);
+		#endif
+	}
+
+	return len;
+}
+
+//==========================================
+// Calculation checksum function
+//==========================================
+char ClaCheckSum(unsigned char *buffer, int len)
+{
+	int idx;
+	char chksum = 0;
+
+	for(idx = 0 ; idx < len-1 ; idx++)
+	{
+		chksum ^= *(buffer+idx);
+	}
+
+	return chksum;
+}
+
+//==========================================
+// Read RFID card's serial number
+//==========================================
+bool getRequestCardSN(int Fd, int moduleType, unsigned char *serialNumber)
+{
+	bool isSuccess = false;
+	int cardLength;
+	int len = 4;
+	unsigned char txByte[len];
+	unsigned char rxByte[254];
+	unsigned char tmp[254];
+
+	switch(moduleType)
+	{
+		case MODULE_EWT:
+		default:
+
+			// Command
+			txByte[0] = 0x03;
+			txByte[1] =	RFID_CMD_REQUEST_SN;
+			txByte[2] = REQA;
+			txByte[ARRAY_SIZE(txByte)-1] = ClaCheckSum(txByte,ARRAY_SIZE(txByte));
+
+			if(Fd > 0)
+			{
+				memset(rxByte, 0, sizeof (rxByte));
+
+				// Send commands
+				if(system_command(Fd, txByte, len, rxByte) > 0)
+				{
+					memset(tmp, 0, sizeof tmp);
+					memcpy(tmp, rxByte, sizeof(rxByte));
+
+					if(tmp[1] == RFID_CMD_REQUEST_SN)
+					{
+						if(tmp[0] == 0x09)
+						{
+							#ifdef SystemLogMessage
+							DEBUG_INFO_1("Card type : MIFARE classic.\n");
+							#endif
+
+							cardLength = 4;
+							*(serialNumber) = cardLength;
+							memcpy(serialNumber+1, rxByte+2, cardLength);
+
+							isSuccess = true;
+						}
+						else if(tmp[0] == 0x0C)
+						{
+
+							#ifdef SystemLogMessage
+							DEBUG_INFO_1("Card type : Plus, UltraLight or DESFire.\n");
+							#endif
+
+							cardLength = 7;
+							*(serialNumber) = cardLength;
+							memcpy(serialNumber+1, rxByte+2, cardLength);
+
+							isSuccess = true;
+						}
+						else
+						{
+							#ifdef SystemLogMessage
+							DEBUG_INFO_1("Please try again.\n");
+							#endif
+							isSuccess = false;
+						}
+					}
+					else if (tmp[1] == 0xDF)
+					{
+						cardLength = 0;
+						isSuccess = false;
+					}
+				}
+				else
+				{}
+			}
+			else
+			{}
+
+			break;
+		case MODULE_ELATEC:
+			break;
+	}
+
+	return isSuccess;
+}
+
+//==========================================
+// Read block data from RFID card
+//==========================================
+bool getBlockRead(int Fd, int moduleType, int block, unsigned char keyId, unsigned char *data)
+{
+	bool isSuccess = false;
+	int i;
+	int j = 0;
+	int len = 11;
+	unsigned char txByte[len];
+	unsigned char rxByte[19];
+	unsigned char tmp[19];
+
+	switch(moduleType)
+	{
+		case MODULE_EWT:
+			default:
+
+			// Command
+			txByte[0] = 0x0A;
+			txByte[1] = RFID_CMD_BLOCK_READ;
+			txByte[2] = keyId;
+			txByte[3] = block;
+			for(i = 4; i < 10; i++)
+			{
+				if( j < sizeof (sectorKeyA[0]))
+				{
+					txByte[i] = sectorKeyA[(int)(block/4)][j];
+					j++;
+				}
+			}
+			txByte[ARRAY_SIZE(txByte)-1] = ClaCheckSum(txByte,ARRAY_SIZE(txByte));
+
+			if(Fd > 0)
+			{
+				memset(rxByte, 0, sizeof(rxByte));
+
+				// Send commands
+				if(system_command(Fd, txByte, len, rxByte) > 0)
+				{
+					memset(tmp, 0, sizeof tmp);
+					memcpy(tmp, rxByte, sizeof (rxByte));
+
+					if((tmp[1] == RFID_CMD_BLOCK_READ))
+					{
+						#ifdef SystemLogMessage
+						DEBUG_INFO_1("Read block ok.\n");
+						#endif
+
+						memcpy(data, rxByte+2, 16);
+
+						isSuccess = true;
+					}
+					else if (tmp[1] == 0xDE)
+					{
+						#ifdef SystemLogMessage
+						DEBUG_INFO_1("Read block failed.\n");
+						#endif
+					}
+					else
+					{}
+				}
+				else
+				{}
+			}
+			else
+			{}
+
+			break;
+
+		case MODULE_ELATEC:
+			break;
+	}
+
+	return isSuccess;
+}
+
+//==========================================
+// Write data into RFID card block
+//==========================================
+bool setBlockWrite(int Fd, int moduleType, int block, unsigned char keyid, unsigned char *data)
+{
+	bool isSuccess = false;
+	int i;
+	int j = 0;
+	int len = 27;
+	unsigned char txByte[len];
+	unsigned char rxByte[3];
+	unsigned char tmp[3];
+
+	switch(moduleType)
+	{
+		case MODULE_EWT:
+			default:
+
+			// Command
+			txByte[0] = 0x1A;
+			txByte[1] = RFID_CMD_BLOCK_WRITE;
+			txByte[2] = keyid;
+			txByte[3] = block;
+
+			for(i = 4; i < 10; i++)
+			{
+				if( j < sizeof (sectorKeyA[0]))
+				{
+					txByte[i] = sectorKeyA[(int)(block/4)][j];
+					j++;
+				}
+			}
+			memcpy(txByte+10, data, 16);
+			txByte[ARRAY_SIZE(txByte)-1] = ClaCheckSum(txByte,(ARRAY_SIZE(txByte)));
+
+			if(Fd > 0)
+			{
+				memset(rxByte, 0, sizeof(rxByte));
+
+				// Send commands
+				if(system_command(Fd, txByte, len, rxByte) > 0)
+				{
+					memset(tmp, 0, sizeof tmp);
+					memcpy(tmp, rxByte, sizeof (rxByte));
+
+					if(tmp[1] == RFID_CMD_BLOCK_WRITE)
+					{
+						#ifdef SystemLogMessage
+						DEBUG_INFO_1("Write block ok.\n");
+						#endif
+
+						isSuccess = true;
+					}
+					else if(tmp[1] == 0xDD)
+					{
+						#ifdef SystemLogMessage
+						DEBUG_INFO_1("Write block failed.\n");
+						#endif
+
+						isSuccess = false;
+					}
+				}
+				else
+				{}
+			}
+			else
+			{}
+
+			break;
+		case MODULE_ELATEC:
+			break;
+	}
+
+	return isSuccess;
+}
+
+//==========================================
+// Buzzer set (EWT Module)
+//==========================================
+void setBuzzer(int Fd, int moduleType, unsigned char time)
+{
+	int len = 4;
+	unsigned char txByte[len];
+	unsigned char rxByte[3];
+	unsigned char tmp[3];
+
+	switch(moduleType)
+	{
+		case MODULE_EWT:
+			default:
+
+			// Command
+			txByte[0] = 0x03;
+			txByte[1] = RFID_CMD_BUZZER_SET;
+			if(time > 0x0A)
+			{
+				time = 0x05;
+				txByte[2] = time;
+
+				#ifdef SystemLogMessage
+				DEBUG_WARN_1("Value is out of range.\n");
+				#endif
+			}
+			else
+			{
+				txByte[2] = time;
+			}
+			txByte[ARRAY_SIZE(txByte)-1] = ClaCheckSum(txByte,ARRAY_SIZE(txByte));
+
+			if(Fd > 0)
+			{
+				memset(rxByte, 0, sizeof(rxByte));
+
+				// Send commands
+				if(system_command(Fd, txByte, len, rxByte) > 0)
+				{
+					memset(tmp, 0, sizeof tmp);
+					memcpy(tmp, rxByte, sizeof (rxByte));
+
+					if(tmp[1] == 0x14)
+					{
+						#ifdef SystemLogMessage
+						DEBUG_INFO_1("Set Buzzer ok.\n");
+						DEBUG_INFO_1("Set Buzzer %d ms.\n",time);
+						#endif
+
+					}
+					else if(tmp[1] == 0xEC)
+					{
+						#ifdef SystemLogMessage
+						DEBUG_INFO_1("Set Buzzer fail.\n");
+						#endif
+					}
+				}
+				else
+				{}
+			}
+			else
+			{}
+
+			break;
+
+		case MODULE_ELATEC:
+			break;
+	}
+}
+
+//==========================================
+// Halt RFID card (EWT)
+//==========================================
+void sethaltCard(int Fd, int moduleType)
+{
+	int len = 3;
+	unsigned char txByte[len];
+	unsigned char rxByte[3];
+	unsigned char tmp[3];
+
+	switch(moduleType)
+	{
+		case MODULE_EWT:
+				default:
+
+				// Command
+				txByte[0] = 0x02;
+				txByte[1] = RFID_CMD_HALT_14443A;
+				txByte[ARRAY_SIZE(txByte)-1] = ClaCheckSum(txByte,ARRAY_SIZE(txByte));
+
+				if(Fd > 0)
+				{
+					memset(rxByte, 0, sizeof(rxByte));
+
+					// Send commands
+					if(system_command(Fd, txByte, len, rxByte) > 0)
+					{
+						memset(tmp, 0, sizeof tmp);
+						memcpy(tmp, rxByte, sizeof (rxByte));
+
+						if(tmp[1] == 0x28)
+						{
+							#ifdef SystemLogMessage
+							DEBUG_INFO_1("Halt card pass.\n");
+							#endif
+						}
+						else if(tmp[1] == 0xD7)
+						{
+							#ifdef SystemLogMessage
+							DEBUG_INFO_1("Halt card fail.\n");
+							#endif
+						}
+						else
+						{}
+					}
+					else
+					{}
+				}
+				else
+				{}
+
+				break;
+
+		case MODULE_ELATEC:
+			break;
+	}
+}
+
+//==========================================
+// Searchtag function (ELATEC Module)
+//==========================================
+bool searchTag(int Fd, int moduleType, unsigned char *serialNumber, int status)
+{
+	bool isSuccess = false;
+	int cardLength;
+	int len = 5;
+	unsigned char txByte[len];
+	unsigned char rxByte[254];
+	unsigned char tmp[254];
+
+	// Command
+	txByte[0] = 0x03;
+	txByte[1] = 0x00;
+	txByte[2] = 0x05;
+	txByte[3] = 0x00;
+	txByte[4] = 0x10;
+
+	// Open port
+	if(Fd > 0)
+	{
+		memset(rxByte, 0, sizeof (rxByte));
+
+		// Send commands
+		if(system_command(Fd, txByte, len, rxByte) > 0)
+		{
+			memset(tmp, 0, sizeof tmp);
+			memcpy(tmp, rxByte, sizeof(rxByte));
+
+			if(tmp[3] == 0x01)
+			{
+				if(tmp[6] == 0x04)
+				{
+					if(status == SEARCH)
+					{
+						cardLength = 4;
+						*(serialNumber) = cardLength;
+						memcpy(serialNumber+1, rxByte+7, cardLength);
+					}
+
+					#ifdef SystemLogMessage
+					DEBUG_INFO_1("Card type: MIFARE classic.\n");
+					#endif
+				}
+				else if (tmp[6] == 0x07)
+				{
+					cardLength = 7;
+					*(serialNumber) = cardLength;
+					memcpy(serialNumber+1, rxByte+7, cardLength);
+
+					#ifdef SystemLogMessage
+					DEBUG_INFO_1("Card type: Plus, UltraLight or DESFire.\n");
+					#endif
+				}
+
+				isSuccess = true;
+			}
+			else if(tmp[3] == 0x00)
+			{
+				cardLength = 0;
+				isSuccess = false;
+			}
+		}
+		else
+		{}
+	}
+	else
+	{}
+
+	return isSuccess;
+}
+
+//==========================================
+// MifareClassic_Login function (ELATEC Module)
+//==========================================
+bool MifareClassic_Login(int Fd, int moduleType, int block, unsigned char keyid)
+{
+	bool isSuccess = false;
+	int i;
+	int j = 0;
+	int len = 12;
+	unsigned char txByte[len];
+	unsigned char rxByte[254];
+	unsigned char tmp[254];
+
+	// Command
+	txByte[0] = 0x0A;
+	txByte[1] = 0x00;
+	txByte[2] = 0x0B;
+	txByte[3] = 0x00;
+	for(i = 4; i < 10; i++)
+	{
+		if( j < sizeof (sectorKeyA[0]))
+		{
+			txByte[i] = sectorKeyA[(int)(block/4)][j];
+			j++;
+		}
+	}
+	txByte[10] = keyid;
+	txByte[11] = block/4;
+
+	if(Fd > 0)
+	{
+		memset(rxByte, 0, sizeof (rxByte));
+
+		// Send commands
+		if(system_command(Fd, txByte, len, rxByte) > 0)
+		{
+			memset(tmp, 0, sizeof tmp);
+			memcpy(tmp, rxByte, sizeof(rxByte));
+
+			if(tmp[3] == 0x01)
+			{
+				#ifdef SystemLogMessage
+				DEBUG_INFO_1("MIFARE classic login pass.\n");
+				#endif
+				isSuccess = true;
+			}
+			else if(tmp[3] == 0x00)
+			{
+				#ifdef SystemLogMessage
+				DEBUG_INFO_1("MIFARE classic login fail.\n");
+				#endif
+				isSuccess = false;
+			}
+			else
+			{
+				#ifdef SystemLogMessage
+				DEBUG_WARN_1("Please try again.\n");
+				#endif
+				isSuccess = false;
+			}
+		}
+		else
+		{}
+	}
+	else
+	{}
+
+	return isSuccess;
+}
+
+//==========================================
+// MifareClassic_ReadBlock (ELATEC Module)
+//==========================================
+bool MifareClassic_ReadBlock(int Fd, int moduleType, int block,unsigned char *data)
+{
+	bool isSuccess = false;
+	int len = 5;
+	unsigned char txByte[len];
+	unsigned char rxByte[254];
+	unsigned char tmp[254];
+
+	// Command
+	txByte[0] = 0x03;
+	txByte[1] = 0x00;
+	txByte[2] = 0x0B;
+	txByte[3] = 0x01;
+	txByte[4] = block;
+
+	if(Fd > 0)
+	{
+		memset(rxByte, 0, sizeof (rxByte));
+
+		// Send commands
+		if(system_command(Fd, txByte, len, rxByte) > 0)
+		{
+			memset(tmp, 0, sizeof tmp);
+			memcpy(tmp, rxByte, sizeof(rxByte));
+
+			if(tmp[3] == 0x01)
+			{
+				#ifdef SystemLogMessage
+				DEBUG_INFO_1("Read block successfully.\n");
+				#endif
+
+				memcpy(data, rxByte+4, 16);
+
+				isSuccess = true;
+			}
+			else if(tmp[3] == 0x00)
+			{
+				#ifdef SystemLogMessage
+				DEBUG_INFO_1("Unsuccessful to read block.\n");
+				#endif
+
+				isSuccess = false;
+			}
+			else
+			{
+				#ifdef SystemLogMessage
+				DEBUG_WARN_1("Please try again.\n");
+				#endif
+
+				isSuccess = false;
+			}
+		}
+		else
+		{}
+	}
+	else
+	{}
+
+	return isSuccess;
+}
+
+//==========================================
+// MifareClassic_WriteBlock (ELATEC Module)
+//==========================================
+bool MifareClassic_WriteBlock(int Fd, int moduleType, int block, unsigned char *data)
+{
+	bool isSuccess = false;
+	int len = 21;
+	unsigned char txByte[len];
+	unsigned char rxByte[254];
+	unsigned char tmp[254];
+
+	// Command
+	txByte[0] = 0x13;
+	txByte[1] = 0x00;
+	txByte[2] = 0x0B;
+	txByte[3] = 0x02;
+	txByte[4] = block;
+	memcpy(txByte+5, data, 16);
+
+	if(Fd > 0)
+	{
+		memset(rxByte, 0, sizeof (rxByte));
+
+		// Send command
+		if(system_command(Fd, txByte, len, rxByte) > 0)
+		{
+			memset(tmp, 0, sizeof tmp);
+			memcpy(tmp, rxByte, sizeof(rxByte));
+
+			if(tmp[3] == 0x01)
+			{
+				#ifdef SystemLogMessage
+				DEBUG_INFO_1("Write block successfully.\n");
+				#endif
+
+				memcpy(data, rxByte+4, 16);
+				isSuccess = true;
+			}
+			else if(tmp[3] == 0x00)
+			{
+				#ifdef SystemLogMessage
+				DEBUG_INFO_1("Unsuccessful to Write block.\n");
+				#endif
+
+				isSuccess = false;
+			}
+			else
+			{
+				#ifdef SystemLogMessage
+				DEBUG_WARN_1("Please try again.\n");
+				#endif
+
+				isSuccess = false;
+			}
+		}
+		else
+		{}
+	}
+	else
+	{}
+
+	return isSuccess;
+}
+
+//==========================================
+// Beep (ELATEC Module)
+//==========================================
+bool SetBeep(int Fd, int moduleType, unsigned char sound)
+{
+	bool isSuccess = false;
+	int len = 11;
+	unsigned char txByte[len];
+	unsigned char rxByte[254];
+	unsigned char tmp[254];
+
+	// Command
+	txByte[0] = 0x09;
+	txByte[1] = 0x00;
+	txByte[2] = 0x04;
+	txByte[3] = 0x07;
+	txByte[4] = sound;
+	txByte[5] = 0x60;
+	txByte[6] = 0x09;
+	txByte[7] = 0xF4;
+	txByte[8] = 0x01;
+	txByte[9] = 0xF4;
+	txByte[10] = 0x01;
+
+	if(Fd > 0)
+	{
+		memset(rxByte, 0, sizeof(rxByte));
+
+		// Send command
+		if(system_command(Fd, txByte, len, rxByte) > 0)
+		{
+			memset(tmp, 0, sizeof tmp);
+			memcpy(tmp, rxByte, sizeof(rxByte));
+			isSuccess = true;
+		}
+		else
+		{
+			isSuccess = true;
+		}
+	}
+	else
+	{}
+
+	return isSuccess;
+}

+ 52 - 0
EVSE/Modularization/Module_RFID.h

@@ -0,0 +1,52 @@
+/*
+ * Module_RFID.h
+ *
+ *  Created on: 2019¦~8¤ë12¤é
+ *      Author: USER
+ */
+#ifndef LIB_RFID_H_
+#define LIB_RFID_H_
+
+#include 	<sys/time.h>
+#include 	<sys/timeb.h>
+#include    <sys/types.h>
+#include    <sys/stat.h>
+#include 	<sys/types.h>
+#include 	<sys/ioctl.h>
+#include 	<sys/socket.h>
+#include 	<sys/ipc.h>
+#include 	<sys/shm.h>
+#include 	<sys/shm.h>
+#include 	<sys/mman.h>
+#include 	<linux/wireless.h>
+#include 	<arpa/inet.h>
+#include 	<netinet/in.h>
+
+#include 	<unistd.h>
+#include 	<stdarg.h>
+#include    <stdio.h>	/* Standard input/output definitions */
+#include    <stdlib.h>
+#include    <unistd.h>	/* UNIX standard function definitions */
+#include    <fcntl.h>	/* File control definitions */
+#include    <termios.h>	/* POSIX terminal control definitions */
+#include    <errno.h>	/* Error number definitions */
+#include 	<string.h>	/* String function definitions */
+#include	<time.h>
+#include	<ctype.h>
+#include 	<ifaddrs.h>
+#include	<stdbool.h>
+
+char ClaCheckSum(unsigned char *buffer, int len);
+int system_command(int uart, unsigned char* cmd,int length, unsigned char* rx);
+bool getRequestCardSN(int Fd, int moduleType, unsigned char *serialNumber);
+bool getBlockRead(int Fd, int moduleType,int block, unsigned char keyid, unsigned char *data);
+bool setBlockWrite(int Fd, int moduleType,int block, unsigned char keyid, unsigned char *data);
+bool searchTag(int Fd, int moduleType, unsigned char *serialNumber, int status);
+bool MifareClassic_Login(int Fd, int moduleType, int block, unsigned char keyId);
+bool MifareClassic_ReadBlock(int Fd, int moduleType, int block, unsigned char *data);
+bool MifareClassic_WriteBlock(int Fd, int moduleType, int block, unsigned char *data);
+bool SetBeep(int Fd, int moduleType, unsigned char sound);
+void setBuzzer(int Fd, int moduleType, unsigned char time);
+void sethaltCard(int Fd, int moduleType);
+
+#endif