浏览代码

[Improve][Moduralization][Module_4g]

2021.03.16 / Folus Wen

Actions:
1. CSQ value transfer to RSSI value.
2. Network current mode parsing result add LTE & HSPA.

Files:
1. As follow commit history

Image version: V0.10
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 4 年之前
父节点
当前提交
0d0a3d8542
共有 3 个文件被更改,包括 66 次插入38 次删除
  1. 58 36
      EVSE/Modularization/Module_4g.c
  2. 1 1
      EVSE/Projects/define.h
  3. 7 1
      EVSE/rootfs/var/www/set_network.php

+ 58 - 36
EVSE/Modularization/Module_4g.c

@@ -39,14 +39,16 @@
 #define DONGLE_QUECTEL	1
 #define DONGLE_UBLOX	2
 
-// Define Module mode
-#define NO_SERVICE		0
-#define CDMA			1
-#define GMS_GPRS		2
-#define WCDMA			3
-#define GMS_WCDMA		4
-#define TD_SCDMA		5
-#define UNKNOW			6
+// Define Module network mode
+#define NET_MODE_NO_SERVICE		0
+#define NET_MODE_CDMA			1
+#define NET_MODE_GMS_GPRS		2
+#define NET_MODE_WCDMA			3
+#define NET_MODE_GSM_WCDMA		4
+#define NET_MODE_TD_SCDMA		5
+#define NET_MODE_HSPA			6
+#define NET_MODE_LTE			7
+#define NET_MODE_UNKNOWN		9
 
 // Define interval
 #define SystemInterval				30	// Seconds
@@ -80,7 +82,7 @@ void substr(char *dest, const char* src, unsigned int start, unsigned int cnt);
 
 char *portName[3] 				= {"/dev/ttyUSB2", "/dev/ttyUSB2", "/dev/ttyACM2"};
 char *valid_Internet[2] 		= {"8.8.8.8", "180.76.76.76"};
-char *Version_And_Date[2]		= {"V0.09","2021-03-11"};
+char *Version_And_Date[2]		= {"V0.10","2021-03-16"};
 pid_t	pid;
 
 struct dongle_info
@@ -286,7 +288,6 @@ int isReadInfo(void)
 	char rx[512];
 	char tmp[512];
 	char Length;
-	int modeStatus;
 
 	if((uart = openPort(portName[Dongle.Model])) != FAIL)
 	{
@@ -411,31 +412,30 @@ int isReadInfo(void)
 				//==============================
 				// Read Mode
 				//==============================
-				Length = at_command(uart, "at+qcfg= \"nwscanmode\"\r", rx);
+				Length = at_command(uart, "at+qnwinfo\r", rx);
 				if(Length > 0)
 				{
 					memset(tmp, 0, sizeof tmp);
-					memcpy(tmp, rx, strcspn(rx,"OK"));
-					strncpy(rx, tmp + strcspn(tmp,",")+1, 1);
-
-					modeStatus = atoi(rx);
-
-					if(modeStatus == 0)
-						Dongle.MODE = UNKNOW;
-					else if(modeStatus == 1)
-						Dongle.MODE = GMS_GPRS;
-					else if(modeStatus == 2)
-						Dongle.MODE = WCDMA;
-					else if(modeStatus == 3)
-						Dongle.MODE = UNKNOW;
-					else if(modeStatus == 4)
-						Dongle.MODE = TD_SCDMA;
-					else if(modeStatus == 5)
-						Dongle.MODE = UNKNOW;
-					else if(modeStatus == 6)
-						Dongle.MODE = CDMA;
+
+					strncpy(tmp, &rx[strcspn(rx,":")+2], strcspn(rx,",")-(strcspn(rx,":")+2));
+
+
+					if(strstr(tmp, "CDMA") != NULL)
+						Dongle.MODE = NET_MODE_CDMA;
+					else if((strstr(tmp, "GPRS") != NULL) || (strstr(tmp, "EDGE") != NULL))
+						Dongle.MODE = NET_MODE_GMS_GPRS;
+					else if(strstr(tmp, "WCDMA") != NULL)
+						Dongle.MODE = NET_MODE_WCDMA;
+					else if(strstr(tmp, "GSM") != NULL)
+						Dongle.MODE = NET_MODE_GSM_WCDMA;
+					else if(strstr(tmp, "TDSCDMA") != NULL)
+						Dongle.MODE = NET_MODE_TD_SCDMA;
+					else if(strstr(tmp, "LTE") != NULL)
+						Dongle.MODE = NET_MODE_LTE;
+					else if((strstr(tmp, "HSDPA") != NULL) || (strstr(tmp, "HSUPA") != NULL) || (strstr(tmp, "HSPA+") != NULL))
+						Dongle.MODE = NET_MODE_HSPA;
 					else
-						Dongle.MODE = UNKNOW;
+						Dongle.MODE = NET_MODE_UNKNOWN;
 				}
 				else
 					result = FAIL;
@@ -1174,6 +1174,28 @@ void substr(char *dest, const char* src, unsigned int start, unsigned int cnt)
 	dest[cnt] = 0;
 }
 
+int csq2rssi(int csq)
+{
+	int result = 0;
+
+	switch(csq)
+	{
+		case 0 ... 31:
+			result = -113+(2*csq);
+			break;
+		case 100 ... 191:
+			result = -116 + (csq-102);
+			break;
+		case 99:
+		case 199:
+		default:
+			result = csq;
+			break;
+	}
+
+	return result;
+}
+
 //==========================================
 // Main process
 //==========================================
@@ -1232,7 +1254,7 @@ TOP:
 							memset(ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemImei, 0x00, ARRAY_SIZE(ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemImei));
 						memcpy(ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemImei, Dongle.IMEI, sizeof Dongle.IMEI);
 
-						ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi = Dongle.CSQ;
+						ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi = csq2rssi(Dongle.CSQ);
 						ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemMode = Dongle.MODE;
 
 						DEBUG_INFO("========================================\n");
@@ -1242,7 +1264,7 @@ TOP:
 						DEBUG_INFO("Device MODEL: %s\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModelName);
 						DEBUG_INFO("Device REVISION: %s\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomSoftwareVer);
 						DEBUG_INFO("Device IMEI: %s\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemImei);
-						DEBUG_INFO("Device RSSI: %d\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi);
+						DEBUG_INFO("Device RSSI: %d dBm (CSQ:%d)\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi, Dongle.CSQ);
 						DEBUG_INFO("Device MODE: %d\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemMode);
 						DEBUG_INFO("========================================\n");
 						
@@ -1289,7 +1311,7 @@ TOP:
 									if(CheckSignalRssi() != PASS)
 										DEBUG_INFO("No RSSI\n");
 									else
-										ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi = Dongle.CSQ;
+										ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi = csq2rssi(Dongle.CSQ);
 
 									DEBUG_INFO("========================================\n");
 									DEBUG_INFO("Status: 4G Device connecting...\n");
@@ -1409,7 +1431,7 @@ TOP:
 					{
 						DEBUG_ERROR("Device info read error fail: %d\n", Dongle.cnt_ReadInfoFail);
 						
-						Dongle.MODE = NO_SERVICE;
+						Dongle.MODE = NET_MODE_NO_SERVICE;
 						memset(ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModelName, 0, sizeof ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModelName);
 						memset(ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomSoftwareVer, 0, sizeof ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomSoftwareVer);
 						memset(ShmSysConfigAndInfo->SysInfo.TelcomModemFwRev, 0, sizeof ShmSysConfigAndInfo->SysInfo.TelcomModemFwRev);
@@ -1423,7 +1445,7 @@ TOP:
 						DEBUG_INFO("Device MODEL: %s\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModelName);
 						DEBUG_INFO("Device REVISION: %s\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomSoftwareVer);
 						DEBUG_INFO("Device IMEI: %s\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemImei);
-						DEBUG_INFO("Device RSSI: %d\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi);
+						DEBUG_INFO("Device RSSI: %d dBm (CSQ:%d)\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomRssi, Dongle.CSQ);
 						DEBUG_INFO("Device MODE: %d\n", ShmSysConfigAndInfo->SysConfig.TelecomInterface.TelcomModemMode);
 						DEBUG_INFO("========================================\n");
 

+ 1 - 1
EVSE/Projects/define.h

@@ -342,7 +342,7 @@ struct TeleConfigData
 	unsigned char		TelcomSimImsi[16];			//default: Null
 	unsigned char		TelcomSimIccid[22];			//default: Null
 	unsigned char		TelcomSimStatus;			//0: no SIM card is found, 1: valid SIM card, 2: invalid SIM card
-	unsigned char		TelcomModemMode;			//0: No services, 1: CDMA, 2: GSM/GPRS, 3: WCDMA, 4: GSM/WCDMA, 5: TD_SCDMA mode, 6: Unknow
+	unsigned char		TelcomModemMode;			//0: No services, 1: CDMA, 2: GSM/GPRS, 3: WCDMA, 4: GSM/WCDMA, 5: TD_SCDMA, 6: HSPA, 7: LTE 9: Unknown
 	unsigned char		TelcomIpAddress[16];		//default: Null
 	unsigned char		TelcomNetworkConn;			//0: disconnected, 1: connected
 	unsigned char		TelcomEnabled;				//0: disable, 1: enable

+ 7 - 1
EVSE/rootfs/var/www/set_network.php

@@ -66,7 +66,13 @@
 			$TelcomModemMode='TD_SCDMA mode';
 			break;
 		case 6:
-			$TelcomModemMode='Unknow';
+                        $TelcomModemMode='HSPA';
+                        break;
+		case 7:
+                        $TelcomModemMode='LTE';
+                        break;
+		case 9:
+			$TelcomModemMode='Unknown';
 			break;
 	}
 ?>