|
@@ -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
|
|
|
//=============================================
|