Przeglądaj źródła

2021-01-13 / Eason Yang
Action
1. Added : Ethernet down speed to 10.
2. Fixed : Disconnect with the backend system and change the light from white to yellow.
3. Fixed : Over time backend authoriztion.
4. Added : Rfid authorization timeout reaction.
5. Added : Logic for change the light intensity from Ocpp command 10% 20% 50% 100%
6. Rename : Version.
7. Added : LightIntensityLevel constant.

File
1) main.c
Action 1
Action 2
Action 3
Action 4
Action 5
Action 6

2) main.h
Action 7

Version : V0.49.XX.XXXX.XX

8009 4 lat temu
rodzic
commit
67f022c9ab

+ 186 - 3
EVSE/Projects/Noodoe/Apps/main.c

@@ -52,6 +52,8 @@ int GetCardSerialNumber();
 void setLedMotion(unsigned char gun_index,unsigned char led_mode);
 void setRelay(unsigned char gun_index,unsigned char isOn);
 void setSpeaker(unsigned char isOn, unsigned char speaker_mode);
+void setLightIntensity(unsigned char gun_index);
+void initialLightIntensity(unsigned char gun_index);
 
 //==========================
 // Declare RFID module type
@@ -941,6 +943,8 @@ void InitEthernet()
 	sprintf(tmpbuf,"/sbin/ifconfig eth0 %s netmask %s up &",
 	ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
 	ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
+	DEBUG_INFO("eth0 config as ip: %s, netmask: %s\n", ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress,
+													   ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress);
 	system(tmpbuf);
 	memset(tmpbuf,0,256);
 	sprintf(tmpbuf,"route add default gw %s eth0 &",
@@ -948,6 +952,7 @@ void InitEthernet()
 	system(tmpbuf);
 	system("/sbin/ifconfig eth0:1 192.168.201.201 netmask 255.255.255.248 up &");
 	system("ifconfig lo up &");
+	system("/sbin/ethtool -s eth0 speed 10 duplex full autoneg off");
 
 	if(isInterfaceUp("eth1")==PASS)
 	{
@@ -1270,7 +1275,7 @@ void get_firmware_version(unsigned char gun_index)
 	strcpy((char*)ShmSysConfigAndInfo->SysInfo.CsuPrimFwRev, ShmCharger->gun_info[gun_index].ver.Version_FW);
 
 	// Get CSU root file system version
-	sprintf((char*)ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev, "V0.48.00.0000.00");
+	sprintf((char*)ShmSysConfigAndInfo->SysInfo.CsuRootFsFwRev, "V0.49.00.0000.00");
 
 	// Get AC connector type from model name
 	for(uint8_t idx=0;idx<3;idx++)
@@ -1728,9 +1733,9 @@ int isReachableInternet()
 	char buf[512];
 	char tmp[512];
 	
+	// Get ip address & net mask
 	strcpy(cmd, "ifconfig eth0");
 	fp = popen(cmd, "r");
-
 	if(fp != NULL)
 	{
 		while(fgets(buf, sizeof(buf), fp) != NULL)
@@ -1739,16 +1744,43 @@ int isReachableInternet()
 			{
 				sscanf(buf, "%*s%s", tmp);
 				substr(tmp, tmp, strspn(tmp, "addr:"), strlen(buf)-strspn(tmp, "addr:"));
-
 				if (strcmp(tmp, (char *)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress) != 0)
 				{
 					strcpy((char *) ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthIpAddress, tmp);
 				}
+
+				sscanf(buf, "%*s%*s%*s%s", tmp);
+				substr(tmp, tmp, strspn(tmp, "Mask:"), strlen(buf)-strspn(tmp, "Mask:"));
+				if (strcmp(tmp, (char *)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress) != 0)
+				{
+					strcpy((char *) ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthSubmaskAddress, tmp);
+				}
 			}
 		}
 	}
 	pclose(fp);
 	memset(buf, 0x00, sizeof(buf));
+	
+	// Get gateway
+	fp = popen("ip route", "r");
+	if(fp == NULL)
+		result = FAIL;
+	else
+	{
+		while(fgets(buf, sizeof(buf), fp) != NULL)
+		{
+			if((strstr(buf, "default") != NULL) && (strstr(buf, "eth0") != NULL))
+				break;
+		}
+
+		if(strstr(buf, "default") != NULL)
+		{
+			sscanf(buf, "%*s%*s%s", tmp);
+			substr((char*)ShmSysConfigAndInfo->SysConfig.Eth0Interface.EthGatewayAddress, tmp, 0, strlen(tmp));
+		}
+	}
+	pclose(fp);
+	memset(buf, 0x00, sizeof(buf));
 
 	for(int idx=0;idx<ARRAY_SIZE(valid_Internet);idx++)
 	{
@@ -2091,6 +2123,153 @@ void checkConnectionTimeout()
 	}
 }
 
+//===============================================
+// Set Light Internsity from ocpp
+//===============================================
+void setLightIntensity(unsigned char gun_index)
+{
+	switch(atoi((char*)ShmOCPP16Data->ConfigurationTable.CoreProfile[LightIntensity].ItemData))
+	{
+		case 0 ... 15:		
+			if(ShmCharger->gun_info[gun_index].LightIntensityLevel != 0x00)
+			{
+				// 12 sector change to level 0
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_1  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_2  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_3  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_4  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_5  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_6  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_7  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_8  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_9  = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_10 = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_11 = 0x00;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_12 = 0x00;
+				
+				ShmCharger->gun_info[gun_index].LightIntensityLevel = 0x00;
+				ShmCharger->gun_info[gun_index].isSetLedBrightness = ON;
+				
+				DEBUG_INFO("Light intensity level : [%X] == Level 0.\r\n", ShmCharger->gun_info[gun_index].LightIntensityLevel);
+			}
+			
+			break;
+		case 16 ... 35:
+			if(ShmCharger->gun_info[gun_index].LightIntensityLevel != 0x11)
+			{
+				// 12 sector change to level 1
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_1  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_2  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_3  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_4  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_5  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_6  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_7  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_8  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_9  = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_10 = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_11 = 0x11;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_12 = 0x11;
+				
+				ShmCharger->gun_info[gun_index].LightIntensityLevel = 0x11;
+				ShmCharger->gun_info[gun_index].isSetLedBrightness = ON;
+				
+				DEBUG_INFO("Light intensity level : [%X] == Level 1.\r\n", ShmCharger->gun_info[gun_index].LightIntensityLevel);
+			}
+			break;
+		case 36 ... 75:
+			if(ShmCharger->gun_info[gun_index].LightIntensityLevel != 0x22)
+			{
+				// 12 sector change to level 2
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_1  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_2  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_3  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_4  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_5  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_6  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_7  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_8  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_9  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_10 = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_11 = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_12 = 0x22;
+				
+				ShmCharger->gun_info[gun_index].LightIntensityLevel = 0x22;
+				ShmCharger->gun_info[gun_index].isSetLedBrightness = ON;
+				
+				DEBUG_INFO("Light intensity level : [%X] == Level 2.\r\n", ShmCharger->gun_info[gun_index].LightIntensityLevel);
+			}
+			break;
+		case 76 ... 100:
+			if(ShmCharger->gun_info[gun_index].LightIntensityLevel != 0x33)
+			{
+				// 12 sector change to level 3
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_1  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_2  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_3  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_4  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_5  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_6  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_7  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_8  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_9  = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_10 = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_11 = 0x33;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_12 = 0x33;
+				
+				ShmCharger->gun_info[gun_index].LightIntensityLevel = 0x33;
+				ShmCharger->gun_info[gun_index].isSetLedBrightness = ON;
+				
+				DEBUG_INFO("Light intensity level : [%X] == Level 3.\r\n", ShmCharger->gun_info[gun_index].LightIntensityLevel);
+			}
+			break;
+		default:
+			if(ShmCharger->gun_info[gun_index].LightIntensityLevel != 2)
+			{
+				// 12 sector change to level 2
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_1  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_2  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_3  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_4  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_5  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_6  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_7  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_8  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_9  = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_10 = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_11 = 0x22;
+				ShmCharger->gun_info[gun_index].setLedBrightness.sector_12 = 0x22;
+				
+				ShmCharger->gun_info[gun_index].LightIntensityLevel = 0x22;
+				ShmCharger->gun_info[gun_index].isSetLedBrightness = ON;
+				
+				DEBUG_INFO("Default light intensity level : [%X] == Level 2.\r\n", ShmCharger->gun_info[gun_index].LightIntensityLevel);
+			}
+		break;
+	}
+}
+
+void initialLightIntensity(unsigned char gun_index)
+{	
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_1  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_2  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_3  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_4  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_5  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_6  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_7  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_8  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_9  = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_10 = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_11 = 0xff;
+	ShmCharger->gun_info[gun_index].setLedBrightness.sector_12 = 0xff;
+	
+	
+	ShmCharger->gun_info[gun_index].LightIntensityLevel = 0xff;
+	DEBUG_INFO("Initial light intensity gun_index %d to : [%X] .\r\n", gun_index, ShmCharger->gun_info[0].LightIntensityLevel);
+}
+
+
 //===============================================
 // Main process
 //===============================================
@@ -2122,6 +2301,7 @@ int main(void)
 		ShmCharger->gun_info[gun_index].isInitialPass = NO;
 		ShmCharger->gun_info[gun_index].isSetBreatheLedTiming = OFF;
 		ShmCharger->gun_info[gun_index].isSetLedBrightness = OFF;
+		initialLightIntensity(gun_index);
 	}
 
 	// Main loop
@@ -2250,6 +2430,9 @@ int main(void)
 			{
 				setChargerMode(gun_index, SYS_MODE_BOOTING);
 			}
+			
+			// Set light intensity
+			setLightIntensity(gun_index);
 
 			// Check initialization "PASS" or "FAIL"
 			if(ShmCharger->gun_info[gun_index].isInitialPass == YES)

+ 1 - 0
EVSE/Projects/Noodoe/Apps/main.h

@@ -422,6 +422,7 @@ typedef struct GUN_INFO
 	uint16_t										isUnlockerConnetor:1;
 	uint16_t										isOperactive:1;
 	uint16_t										isChargerStopByCondition:1;
+	uint16_t										LightIntensityLevel;
 }Gun_Info;
 
 struct Charger

BIN
EVSE/Projects/Noodoe/Images/ramdisk.gz


BIN
EVSE/rootfs/root/OcppBackend20