Forráskód Böngészése

2020.03.12 / Folus Wen

Actions:
1. EVSE/Modularization/Module_Wifi.c add socket server function and fix AP config logic bug.
2. EVSE/Modularization/Module_ProductUtil.c bind interface modify to any.

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 5 éve
szülő
commit
5fbfde8666

+ 1 - 1
EVSE/Modularization/Module_ProduceUtils.c

@@ -274,7 +274,7 @@ int main(void)
 
 	bzero(&serverInfo,sizeof(serverInfo));
 	serverInfo.sin_family = PF_INET;
-	serverInfo.sin_addr.s_addr = INADDR_ANY;
+	serverInfo.sin_addr.s_addr = htonl(INADDR_ANY);
 	serverInfo.sin_port = htons(LISTEN_PORT);
 	bind(sockFd, (struct sockaddr *)&serverInfo, sizeof(serverInfo));
 	listen(sockFd, CONNECTION_LIMIT);

+ 153 - 19
EVSE/Modularization/Module_Wifi.c

@@ -42,22 +42,22 @@
 #define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
 
 #define Debug
-#define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))
-#define PASS				1
-#define FAIL			   -1
-#define true			    1
-#define false				0
-#define IP_TYPE_DHCP		0
-#define IP_TYPE_STATIC		1
-#define AUTH_TYPE_NONE		0
-#define AUTH_TYPE_WEP		1
-#define AUTH_TYPE_WPAPSK	2
-#define AUTH_TYPE_WPA2PSK	3
-
-#define WIFI_MODE_DISABLE	0
-#define WIFI_MODE_STA		1
-#define WIFI_MODE_AP		2
-#define WIFI_MODE_ADHOC		3
+#define ARRAY_SIZE(A)				(sizeof(A) / sizeof(A[0]))
+#define PASS						1
+#define FAIL			   			-1
+#define true			    		1
+#define false						0
+#define IP_TYPE_DHCP				0
+#define IP_TYPE_STATIC				1
+#define AUTH_TYPE_NONE				0
+#define AUTH_TYPE_WEP				1
+#define AUTH_TYPE_WPAPSK			2
+#define AUTH_TYPE_WPA2PSK			3
+
+#define WIFI_MODE_DISABLE			0
+#define WIFI_MODE_STA				1
+#define WIFI_MODE_AP				2
+#define WIFI_MODE_ADHOC				3
 
 #define STA_STATE_INIT        		0
 #define STA_STATE_DEVICE_DETECT		1
@@ -69,6 +69,10 @@
 #define AP_STATE_AP_START			2
 #define AP_STATE_SERVER_LISTEN		3
 
+#define LISTEN_PORT					8856
+#define	CONNECTION_LIMIT			1
+#define PROTOCOL_ADDR				0
+
 #define UBLOX
 //#define MT7601U
 
@@ -126,6 +130,7 @@ void trim(char *s);
 int mystrcmp(char *p1,char *p2);
 void substr(char *dest, const char* src, unsigned int start, unsigned int cnt);
 void split(char **arr, char *str, const char *del);
+int isValidCheckSum(uint8_t *message);
 
 char *Support_InterfaceSTA[2] = {"mlan0", "wlan0"};
 char *Support_InterfaceAP[1]  = {"uap0"};
@@ -637,6 +642,10 @@ int setWPAconf()
 			sprintf(cmdBuf, "/root/uaputl bss_stop");
 			system(cmdBuf);
 
+			// Reset AP configuration
+			sprintf(cmdBuf, "/root/uaputl sys_reset");
+			system(cmdBuf);
+
 			// Set SSID to uaputl.conf
 			sprintf(cmdBuf, "sed -i 's/ SSID=.*$/ SSID=\"%s\"/' /root/uaputl_config/uaputl.conf", Wifi_A.ssid);
 			system(cmdBuf);
@@ -671,15 +680,116 @@ int setWPAconf()
 
 	}
 
-
 	result = PASS;
 
 	return result;
 }
 
-//=================================
+//==========================================
+// Socket server routine
+//==========================================
+int socketServerStart()
+{
+	int 				sockFd = 0;
+	int 				clientSockFd = 0;
+	uint8_t 			inputBuffer[2048] = {};
+	uint8_t 			outBuffer[2048] = {};
+	uint8_t				cmdBuf[128];
+	uint8_t				chksum;
+	int8_t 				read_size;
+	int8_t				tx_size;
+	struct sockaddr_in 	serverInfo, clientInfo;
+	socklen_t 			addrlen = sizeof(clientInfo);
+
+	sockFd = socket(AF_INET , SOCK_STREAM , 0);
+	if(sockFd == -1)
+	{
+		DEBUG_ERROR("InitSocketServer NG\n");
+		sleep(5);
+		return 0;
+	}
+
+	bzero(&serverInfo,sizeof(serverInfo));
+	serverInfo.sin_family = PF_INET;
+	serverInfo.sin_addr.s_addr = htonl(INADDR_ANY);
+	serverInfo.sin_port = htons(LISTEN_PORT);
+	bind(sockFd, (struct sockaddr *)&serverInfo, sizeof(serverInfo));
+	listen(sockFd, CONNECTION_LIMIT);
+
+	// Main loop
+	for(;;)
+	{
+		clientSockFd = accept(sockFd, (struct sockaddr*) &clientInfo, &addrlen);
+		DEBUG_INFO("Client connect in.\r\n");
+
+		while((read_size = recv(clientSockFd, inputBuffer, sizeof(inputBuffer), 0)) > 0)
+		{
+			if(isValidCheckSum(inputBuffer))
+			{
+				chksum = 0;
+				memset(outBuffer, 0x00, sizeof(outBuffer));
+
+				switch(inputBuffer[3])
+				{
+					case 0:
+						tx_size = 9;
+						outBuffer[0] = 0xaa;
+						outBuffer[1] = PROTOCOL_ADDR;
+						outBuffer[2] = inputBuffer[1];
+						outBuffer[3] = 0x00;
+						outBuffer[4] = 0x01;
+						outBuffer[5] = 0x00;
+						outBuffer[6] = 0x01;
+						outBuffer[7] = 0x01;
+						break;
+					default:
+						tx_size = 9;
+						outBuffer[0] = 0xaa;
+						outBuffer[1] = PROTOCOL_ADDR;
+						outBuffer[2] = inputBuffer[1];
+						outBuffer[3] = inputBuffer[3];
+						outBuffer[4] = 0x01;
+						outBuffer[5] = 0x00;
+						outBuffer[6] = 0x00;
+						outBuffer[7] = 0x00;
+						break;
+				}
+			}
+			else
+			{
+				tx_size = 9;
+				outBuffer[0] = 0xaa;
+				outBuffer[1] = PROTOCOL_ADDR;
+				outBuffer[2] = inputBuffer[1];
+				outBuffer[3] = inputBuffer[3];
+				outBuffer[4] = 0x01;
+				outBuffer[5] = 0x00;
+				outBuffer[6] = 0x00;
+				outBuffer[7] = 0x00;
+			}
+
+			send(clientSockFd, outBuffer, tx_size, 0);
+		}
+
+		if(read_size == 0)
+		{
+			DEBUG_INFO("Client disconnected.\r\n");
+			fflush(stdout);
+		}
+		else if(read_size == -1)
+		{
+			DEBUG_ERROR("Socket recv failed.\r\n");
+		}
+
+		sleep(1);
+	}
+
+	return -1;
+}
+
+//==========================================
 // Common routine
-//=================================
+//==========================================
 char* getTimeString(void)
 {
 	char *result=malloc(21);
@@ -744,6 +854,18 @@ void split(char **arr, char *str, const char *del)
 	}
 }
 
+int isValidCheckSum(uint8_t *message)
+{
+	uint8_t	chksum=0;
+
+	for(int idx = 0;idx<((message[4] | message[5]<<8)>1024?1024:(message[4] | message[5]<<8));idx++)
+	{
+		chksum ^= message[6+idx];
+	}
+
+	return ((chksum == message[6+((message[4] | message[5]<<8)>1024?1024:(message[4] | message[5]<<8))]) ? PASS : FAIL);
+}
+
 int checkIP(void)
 {
 	// DHCP or static setting
@@ -1100,8 +1222,13 @@ void proc_ap()
 	}
 }
 
+//==========================================
+// Main loop
+//==========================================
 int main(void)
 {
+	pid_t pid;
+
 	if(InitShareMemory() == FAIL)
 	{
 		#ifdef SystemLogMessage
@@ -1115,6 +1242,13 @@ int main(void)
 		return 0;
 	}
 
+	//check internet status
+	pid = fork();
+	if(pid == 0)
+	{
+		socketServerStart();
+	}
+
 	//=============================================
 	// Install WIFI module driver
 	//=============================================

BIN
EVSE/Projects/AW-Regular/Images/FactoryDefaultConfig.bin


BIN
EVSE/Projects/AW-Regular/Images/ramdisk.gz