ソースを参照

2020.03.13 / Folus Wen

Actions:
1. EVSE/Modularization/Module_Wifi.c UDP server create.

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 年 前
コミット
f1a89d24a8

+ 78 - 12
EVSE/Modularization/Module_Wifi.c

@@ -69,7 +69,9 @@
 #define AP_STATE_AP_START			2
 #define AP_STATE_SERVER_LISTEN		3
 
-#define LISTEN_PORT					8856
+#define LISTEN_PORT_UDP				8857
+#define LISTEN_PORT_TCP				8856
+
 #define	CONNECTION_LIMIT			1
 #define PROTOCOL_ADDR				0
 
@@ -686,18 +688,63 @@ int setWPAconf()
 }
 
 //==========================================
-// Socket server routine
+// UDP socket server routine
+//==========================================
+int udpSocketServerStart()
+{
+	 int sockFd;
+	 struct sockaddr_in servaddr;
+	 struct sockaddr_in peeraddr;
+	 socklen_t 			peerlen = sizeof(peeraddr);
+	 uint8_t 			inputBuffer[2048] = {};
+	 uint8_t 			outBuffer[2048] = {};
+	 int16_t			read_size;
+	 int16_t			tx_size;
+
+	 memset(&servaddr, 0, sizeof(servaddr));
+	 servaddr.sin_family = AF_INET;
+	 servaddr.sin_port = htons(LISTEN_PORT_UDP);
+	 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
+
+	 if ((sockFd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
+		 return FAIL;
+
+	 if (bind(sockFd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
+	     return FAIL;
+
+	 for(;;)
+	 {
+		 if((read_size = recvfrom(sockFd, inputBuffer, sizeof(inputBuffer), 0, (struct sockaddr *)&peeraddr, &peerlen)) > 0)
+		 {
+			 DEBUG_INFO("Revieve from: %s:%d\r\n", inet_ntoa(peeraddr.sin_addr), htons(peeraddr.sin_port));
+			 DEBUG_INFO("Data: %s\r\n", inputBuffer);
+
+			 /*
+			  * TODO:
+			  *   - UDP broadcast protocol process here
+			  */
+			 memcpy(outBuffer, inputBuffer, read_size);
+			 tx_size = read_size;
+
+			 sendto(sockFd, outBuffer, tx_size, 0, (struct sockaddr *)&peeraddr, peerlen);
+		 }
+	 }
+
+	return FAIL;
+}
+
+//==========================================
+// TCP socket server routine
 //==========================================
-int socketServerStart()
+int tcpSocketServerStart()
 {
 	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;
+	int16_t 			read_size;
+	int16_t				tx_size;
 	struct sockaddr_in 	serverInfo, clientInfo;
 	socklen_t 			addrlen = sizeof(clientInfo);
 
@@ -706,13 +753,13 @@ int socketServerStart()
 	{
 		DEBUG_ERROR("InitSocketServer NG\n");
 		sleep(5);
-		return 0;
+		return FAIL;
 	}
 
 	bzero(&serverInfo,sizeof(serverInfo));
 	serverInfo.sin_family = PF_INET;
 	serverInfo.sin_addr.s_addr = htonl(INADDR_ANY);
-	serverInfo.sin_port = htons(LISTEN_PORT);
+	serverInfo.sin_port = htons(LISTEN_PORT_TCP);
 	bind(sockFd, (struct sockaddr *)&serverInfo, sizeof(serverInfo));
 	listen(sockFd, CONNECTION_LIMIT);
 
@@ -728,6 +775,10 @@ int socketServerStart()
 			{
 				chksum = 0;
 				memset(outBuffer, 0x00, sizeof(outBuffer));
+				/*
+				 * TODO:
+				 *   - TCP broadcast protocol process here
+				 */
 
 				switch(inputBuffer[3])
 				{
@@ -765,7 +816,7 @@ int socketServerStart()
 				outBuffer[4] = 0x01;
 				outBuffer[5] = 0x00;
 				outBuffer[6] = 0x00;
-				outBuffer[7] = 0x00;
+				outBuffer[7] = chksum;
 			}
 
 			send(clientSockFd, outBuffer, tx_size, 0);
@@ -784,7 +835,7 @@ int socketServerStart()
 		sleep(1);
 	}
 
-	return -1;
+	return FAIL;
 }
 
 //==========================================
@@ -1242,11 +1293,26 @@ int main(void)
 		return 0;
 	}
 
-	//check internet status
+	// UDP socket server start
+	pid = fork();
+	if(pid == 0)
+	{
+		if(udpSocketServerStart() == FAIL)
+		{
+			DEBUG_ERROR("UDP socket server down.\r\n");
+			return 0;
+		}
+	}
+
+	// TCP socket server start
 	pid = fork();
 	if(pid == 0)
 	{
-		socketServerStart();
+		if(tcpSocketServerStart() == FAIL)
+		{
+			DEBUG_ERROR("TCP socket server down.\r\n");
+			return 0;
+		}
 	}
 
 	//=============================================

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


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