Browse Source

2020-03-18 / Alston

Alston 5 years ago
parent
commit
50e169bbd8
44 changed files with 1760 additions and 1082 deletions
  1. 23 19
      EVSE/Projects/PlugIt360/Apps/Config.h
  2. 13 0
      EVSE/Projects/PlugIt360/Apps/Ev_Comm.c
  3. 8 9
      EVSE/Projects/PlugIt360/Apps/FactoryConfig.c
  4. 8 2
      EVSE/Projects/PlugIt360/Apps/Makefile
  5. BIN
      EVSE/Projects/PlugIt360/Apps/Module_EvComm
  6. 120 81
      EVSE/Projects/PlugIt360/Apps/Module_EvComm.c
  7. 2 0
      EVSE/Projects/PlugIt360/Apps/Module_EvComm.h
  8. BIN
      EVSE/Projects/PlugIt360/Apps/Module_EventLogging
  9. 28 24
      EVSE/Projects/PlugIt360/Apps/Module_EventLogging.c
  10. BIN
      EVSE/Projects/PlugIt360/Apps/Module_InternalComm
  11. 177 86
      EVSE/Projects/PlugIt360/Apps/Module_InternalComm.c
  12. 3 1
      EVSE/Projects/PlugIt360/Apps/Module_LcmContro.h
  13. BIN
      EVSE/Projects/PlugIt360/Apps/Module_LcmControl
  14. 47 39
      EVSE/Projects/PlugIt360/Apps/Module_LcmControl.c
  15. 337 0
      EVSE/Projects/PlugIt360/Apps/Module_Modbus.c
  16. BIN
      EVSE/Projects/PlugIt360/Apps/Module_PrimaryComm
  17. 42 12
      EVSE/Projects/PlugIt360/Apps/Module_PrimaryComm.c
  18. BIN
      EVSE/Projects/PlugIt360/Apps/Module_PsuComm
  19. 349 506
      EVSE/Projects/PlugIt360/Apps/Module_PsuComm.c
  20. 8 49
      EVSE/Projects/PlugIt360/Apps/Module_PsuComm.h
  21. BIN
      EVSE/Projects/PlugIt360/Apps/ReadCmdline
  22. 42 33
      EVSE/Projects/PlugIt360/Apps/ReadCmdline.c
  23. 1 11
      EVSE/Projects/PlugIt360/Apps/internalComm.c
  24. BIN
      EVSE/Projects/PlugIt360/Apps/main
  25. 372 152
      EVSE/Projects/PlugIt360/Apps/main.c
  26. 1 2
      EVSE/Projects/PlugIt360/Apps/timeout.h
  27. BIN
      EVSE/Projects/PlugIt360/Images/MLO
  28. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_4g
  29. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_EvComm
  30. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_EventLogging
  31. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_InternalComm
  32. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_LcmControl
  33. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_PrimaryComm
  34. BIN
      EVSE/Projects/PlugIt360/Images/root/Module_PsuComm
  35. BIN
      EVSE/Projects/PlugIt360/Images/root/ReadCmdline
  36. BIN
      EVSE/Projects/PlugIt360/Images/root/WebService
  37. BIN
      EVSE/Projects/PlugIt360/Images/root/main
  38. BIN
      EVSE/Projects/PlugIt360/Images/u-boot.img
  39. BIN
      EVSE/Projects/PlugIt360/Images/zImage
  40. BIN
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/.tmp_vmlinux1
  41. BIN
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/.tmp_vmlinux2
  42. 1 1
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/.version
  43. 98 19
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/arch/arm/boot/dts/.am335x-evm.dtb.dts.tmp
  44. 80 36
      board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/arch/arm/boot/dts/am335x-evm.dts

+ 23 - 19
EVSE/Projects/PlugIt360/Apps/Config.h

@@ -10,7 +10,7 @@
 typedef unsigned char			byte;
 
 #define TOTAL_QUANTITY_GUN			4				//Max Count
-#define DEBUG						0
+#define DEBUG						1
 
 #define MODE_BOOT					0
 #define MODE_IDLE					1
@@ -76,7 +76,6 @@ enum _GUN_TYPE
 	_Type_Chademo = 		0,
 	_Type_CCS_2,
 	_Type_GB,
-
 };
 
 enum _LCM_INDEX
@@ -101,17 +100,15 @@ enum _SELF_TEST_SEQ
 	_STEST_PSU_DETECT = 0x02,
 	_STEST_PSU_CAP = 0x03,
 	_STEST_FAIL = 0x04,
-	_STEST_COMPLETE = 0xFE,
+	_STEST_COMPLETE = 0xEE,
 };
 
 enum _MODULE_PSU_WORK_STEP
 {
-	ASSIGN_START 	= 			0,
-	ASSIGN_COMP 	= 			1,
-	ENABLE_POW		=			2,
-	_TEST_LINE_STEP 	= 		3,
-	_TEST_POWER_STEP 	= 		4,
-	_TEST_COMPLETE 		= 		5,
+	INITIAL_START 		= 			0,
+	GET_PSU_COUNT 		= 			1,
+	GET_SYS_CAP			=			2,
+	BOOTING_COMPLETE 	= 			3,
 
 	_WORK_CHARGING 	= 			10,
 
@@ -135,16 +132,17 @@ enum _SYS_AUTHORIZE_MODE
 
 enum _REASSIGNED_RESOURCE_STEP
 {
-	_REASSIGNED_NONE = 			0,	//
-	_REASSIGNED_PREPARE = 		1,	// 系統收到需要降載需求 (輸出總電流降低),PSU Task 收到將狀態切換至下個狀態
-	_REASSIGNED_GET_NEW_CAP = 	2,	// 充電中的重新取得屬於自己火線上的總能量並透過小板通知車端 - 超過10秒直接跳下一步
-	_REASSIGNED_MAIN = 			3,  // 重新分配 PSU
-	_REASSIGNED_ADJUST = 		4,	// 模塊重新分配完成
-	_REASSIGNED_RELAY = 		5,	// 切斷橋接的 Relay
-	_REASSIGNED_COMP = 			6,	// 完成
-	_REASSIGNED_M_RELAY = 		7,	// 搭接橋接的 Relay
-	_REASSIGNED_M_MAIN = 		8,	// 重新分配 PSU (最大充)
-	_REASSIGNED_M_GET_NEW_CAP = 9	// 取得新的 CAP 並通知車端
+	_REASSIGNED_NONE = 				0,	//
+	_REASSIGNED_PREPARE_M_TO_A =	1,	// 系統收到需要降載需求 (輸出總電流降低),PSU Task 收到將狀態切換至下個狀態
+	_REASSIGNED_GET_NEW_CAP = 		2,	// 充電中的重新取得屬於自己火線上的總能量並透過小板通知車端 - 超過10秒直接跳下一步
+	_REASSIGNED_ADJUST_M_TO_A = 	3,	// 模塊重新分配完成
+	_REASSIGNED_RELAY_M_TO_A =		4,	// 切斷橋接的 Relay
+
+	_REASSIGNED_PREPARE_A_TO_M = 	11,
+	_REASSIGNED_ADJUST_A_TO_M = 	12, // 模塊升壓
+	_REASSIGNED_RELAY_A_TO_M = 		13,	// 搭接橋接的 Relay
+	_REASSIGNED_WAITING = 			14,
+	_REASSIGNED_COMP = 				15
 };
 
 enum _MAIN_CHARGING_MODE
@@ -153,4 +151,10 @@ enum _MAIN_CHARGING_MODE
 	_MAIN_CHARGING_MODE_AVER = 1,
 };
 
+enum _EXTRA_ERR_PROCESS
+{
+	_EXTRA_ERR_PROCESS_NONE = 0,
+	_EXTRA_ERR_PROCESS_INUVP = 1
+};
+
 #endif /* CONFIG_H_ */

+ 13 - 0
EVSE/Projects/PlugIt360/Apps/Ev_Comm.c

@@ -56,6 +56,19 @@ void GetFirmwareVersion(byte gun_index, byte toId)
 	SendCmdToEvboard(id, data, 0);
 }
 
+void SyncRtcInfo(byte gun_index, byte toId, int epoch)
+{
+	int id = PackageIdCmd(Ev_Cmd.sync_rtc_info + toId);
+	byte data[8];
+
+	data[0] = epoch & 0xff;
+	data[1] = (epoch >> 8) & 0xff;
+	data[2] = (epoch >> 16) & 0xff;
+	data[3] = (epoch >> 24) & 0xff;
+
+	SendCmdToEvboard(id, data, 4);
+}
+
 void GetHardwareVersion(byte gun_index, byte toId)
 {
 	int id = PackageIdCmd(Ev_Cmd.get_hardware_ver + toId);

+ 8 - 9
EVSE/Projects/PlugIt360/Apps/FactoryConfig.c

@@ -103,7 +103,7 @@ int main(int argc,char *argv[])
 	*/
 	//********** System **********// udhcpc -i eth1 -s ./dhcp_script/eth1.script
 	//
-	strcpy((char *)SysConfig.ModelName, "DSYE601J0EW2PH");
+	strcpy((char *)SysConfig.ModelName, "DSYE36200E02L0");
 	strcpy((char *)SysConfig.SerialNumber, "");
 
 	memset(SysConfig.SystemId, 0x00, sizeof(SysConfig.SystemId));
@@ -123,10 +123,10 @@ int main(int argc,char *argv[])
 	SysConfig.Ccs2PlugInTimes = 0;
 	SysConfig.ChademoPlugInTimes = 0;
 	//********** Charging **********//
-	SysConfig.RatingCurrent = 1200;			// 最大可輸出電流 120 A
+	SysConfig.RatingCurrent = 500;			// 最大可輸出電流
 	SysConfig.MaxChargingEnergy = 0;
-	SysConfig.MaxChargingPower = 600; 		// 最大功率 : 跟著 model name 跑
-	SysConfig.MaxChargingCurrent = 1200;		// 最大可輸出電流 120 A
+	SysConfig.MaxChargingPower = 360; 		// 最大功率 : 跟著 model name 跑
+	SysConfig.MaxChargingCurrent = 500;		// 最大可輸出電流
 	SysConfig.MaxChargingDuration = 0;
 	SysConfig.PhaseLossPolicy = 0;
 	for(unsigned char i = 0; i < 10; i++)
@@ -136,12 +136,10 @@ int main(int argc,char *argv[])
 	//********** Network **********//
 	strcpy((char *)SysConfig.FtpServer, "");
 	SysConfig.Eth0Interface.EthDhcpClient = 0;
-	strcpy((char *) SysConfig.Eth0Interface.EthMacAddress, "AA:BB:CC:DD:EE:FF");
 	strcpy((char *) SysConfig.Eth0Interface.EthIpAddress, "192.168.1.10");
 	strcpy((char *) SysConfig.Eth0Interface.EthSubmaskAddress, "255.255.255.0");
 	strcpy((char *) SysConfig.Eth0Interface.EthGatewayAddress, "192.168.1.254");
 	SysConfig.Eth1Interface.EthDhcpClient = 0;
-	strcpy((char *) SysConfig.Eth1Interface.EthMacAddress, "AA:BB:CC:DD:EE:FF");
 	strcpy((char *) SysConfig.Eth1Interface.EthIpAddress, "192.168.0.10");
 	strcpy((char *) SysConfig.Eth1Interface.EthSubmaskAddress, "255.255.255.0");
 	strcpy((char *) SysConfig.Eth1Interface.EthGatewayAddress, "192.168.0.254");
@@ -158,7 +156,8 @@ int main(int argc,char *argv[])
 	SysConfig.AthInterface.WifiNetworkConn = 0;
 	strcpy((char *) SysConfig.TelecomInterface.TelcomModelName, "");
 	strcpy((char *) SysConfig.TelecomInterface.TelcomSoftwareVer, "");
-	strcpy((char *) SysConfig.TelecomInterface.TelcomApn, "Internet");
+	//strcpy((char *) SysConfig.TelecomInterface.TelcomApn, "Internet");
+	strcpy((char *) SysConfig.TelecomInterface.TelcomApn, "");
 	SysConfig.TelecomInterface.TelcomRssi = 0;
 	strcpy((char *) SysConfig.TelecomInterface.TelcomChapPapId, " ");
 	strcpy((char *) SysConfig.TelecomInterface.TelcomChapPapPwd, " ");
@@ -175,8 +174,8 @@ int main(int argc,char *argv[])
 	SysConfig.OfflinePolicy = 0;
 	SysConfig.OfflineMaxChargeEnergy = 0;
 	SysConfig.OfflineMaxChargeDuration = 0;
-	strcpy((char *) SysConfig.OcppServerURL, "ws://test.evsocket.phihong.com.cn:2012/ocpp/");
-	strcpy((char *) SysConfig.ChargeBoxId, "DemoDC_Alston");
+	strcpy((char *) SysConfig.OcppServerURL, "");
+	strcpy((char *) SysConfig.ChargeBoxId, "");
 
 	//copy default configuration to pointer
 	memcpy(ptr,&SysConfig,sizeof(struct SysConfigData));

+ 8 - 2
EVSE/Projects/PlugIt360/Apps/Makefile

@@ -8,7 +8,7 @@ Internal485ProtocolLib = -L ../../../Modularization/Internal485Protocol -lIntern
 all: CopyFile apps
 #apps: Module_CSU Module_EvComm Module_EventLogging Module_InternalComm Module_LcmControl Module_PrimaryComm Module_PsuComm 
 # ReadCmdline kill.sh
-apps: MainTask EvCommTask EventLoggingTask InternalCommTask LcmControlTask PrimaryCommTask PsuCommTask ReadCmdlineTask WebService 4GTask FactoryConfigApp OtherTools
+apps: MainTask EvCommTask EventLoggingTask InternalCommTask LcmControlTask PrimaryCommTask PsuCommTask ReadCmdlineTask WebService 4GTask ModbusTask FactoryConfigApp OtherTools
 
 MainTask:
 	rm -f *.o
@@ -56,7 +56,13 @@ PsuCommTask:
 	$(CC) -D $(Project) -include../../../Modularization/Infypwr_PsuCommObj.h -includeConfig.h -O0 -g3 -Wall -c -fmessage-length=0 -o Module_PsuComm.o Module_PsuComm.c
 	$(CC) -o Module_PsuComm Module_PsuComm.o ../../../Modularization/libInfypwr_PsuCommObj.a
 	cp -f Module_PsuComm ../Images/root	
-	
+
+ModbusTask:
+	rm -f Module_Modbus; 
+	$(CC) -D $(Project) -I../../../rootfs/include -includeConfig.h -O0 -g3 -Wall -c -fmessage-length=0 -o Module_Modbus.o Module_Modbus.c
+	$(CC) -L../../../rootfs/lib -o Module_Modbus Module_Modbus.o -lmodbus
+	cp -f Module_Modbus ../Images/root
+
 ReadCmdlineTask:
 	rm -f ReadCmdline; 
 	$(CC) -D $(Project) -includeConfig.h -O0 -g3 -Wall -c -fmessage-length=0 -o ReadCmdline.o ReadCmdline.c

BIN
EVSE/Projects/PlugIt360/Apps/Module_EvComm


+ 120 - 81
EVSE/Projects/PlugIt360/Apps/Module_EvComm.c

@@ -45,12 +45,12 @@ struct FanModuleData			*ShmFanModuleData;
 struct CHAdeMOData				*ShmCHAdeMOData;
 struct CcsData					*ShmCcsData;
 
-byte gun_count = CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY;
+byte gun_count;
 int chargingTime[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
 
 // 限制最大充電電壓,因應不同 type 槍線來限制
 // Chademo : 500V, CCS : 950V
-float maxChargingVol[2] = { 5000, 9500 };			// 限制最大充電電壓,如依照模塊則填上 0
+float maxChargingVol[2] = { 10000, 9500 };			// 限制最大充電電壓,如依照模塊則填上 0
 // 限制最大充電電流與能量透過 Web
 float maxChargingCur[2] = { 0, 0 };					// 限制最大充電電流,如依照模塊則填上 0
 float maxChargingPow = 0;							// 限制最大充電能量,如依照模塊則填上 0
@@ -77,6 +77,7 @@ struct Ev_Board_Cmd Ev_Cmd={
 		0x00001100,
 
 		0x00001200,
+		0x00001400,
 		0x00001500,
 };
 
@@ -136,16 +137,16 @@ int DiffTimeb(struct timeb ST, struct timeb ET)
 
 void PRINTF_FUNC(char *string, ...)
 {
-	if (DEBUG)
-	{
-		va_list args;
-		char buffer[4096];
+	va_list args;
+	char buffer[4096];
+	va_start(args, string);
+	vsnprintf(buffer, sizeof(buffer), string, args);
+	va_end(args);
 
-		va_start(args, string);
-		vsnprintf(buffer, sizeof(buffer), string, args);
-		va_end(args);
+	if (DEBUG)
 		printf("%s \n", buffer);
-	}
+	else
+		DEBUG_INFO("%s \n", buffer);
 }
 
 //=================================
@@ -364,6 +365,8 @@ void AddrAssignment(byte *data)
 	memcpy(target_number, data, sizeof(target_number));
 	index = *(data + 4);
 
+	if (gun_count == 1)
+		index = 0x01;
 	if (CheckUniqNumber(index))
 	{
 		PRINTF_FUNC("EV board id = %x \n", index);
@@ -749,6 +752,8 @@ void CANReceiver()
 		struct timeval _cmd_ack_timeout[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
 
 		bool isPass = false;
+		gun_count = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount;
+
 		while(!isPass)
 		{
 			isPass = true;
@@ -944,7 +949,7 @@ void CANReceiver()
 					{
 						// 車端要求停止
 						// frame.data[0] : 0x01 => normal stop, 0x02 => ev emergency stop
-						PRINTF_FUNC("NOTIFICATION_EV_STOP -----------------------------\n");
+						PRINTF_FUNC("NOTIFICATION_EV_STOP err level = %d-----------------------------\n", frame.data[0]);
 						if (frame.data[0] == 0x02)
 						{
 							AbnormalStopAnalysis(targetGun, frame.data + 1);
@@ -1003,31 +1008,17 @@ void SetPresentChargingOutputCap(struct ChargingInfoData *chargingData_1, struct
 	float pow2 = 0, cur2 = 0;
 	float vol = 0;
 
-	if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag != _REASSIGNED_NONE)
-	{
-		pow1 = chargingData_1->DeratingChargingPower;
-		cur1 = chargingData_1->DeratingChargingCurrent;
-	}
-	else
-	{
-		pow1 = chargingData_1->AvailableChargingPower;
-		cur1 = chargingData_1->AvailableChargingCurrent;
-	}
+	pow1 = chargingData_1->AvailableChargingPower;
+	cur1 = chargingData_1->AvailableChargingCurrent;
+
 	vol = chargingData_1->MaximumChargingVoltage;
 	GetMaxVolAndCurMethod(chargingData_1->Index, &vol, &cur1);
 	GetMaxPowerMethod(&pow1);
 
-	if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag != _REASSIGNED_NONE)
-	{
-		pow2 = chargingData_2->DeratingChargingPower;
-		cur2 = chargingData_2->DeratingChargingCurrent;
-	}
-	else
-	{
-		pow2 = chargingData_2->AvailableChargingPower;
-		cur2 = chargingData_2->AvailableChargingCurrent;
-	}
+	pow2 = chargingData_2->AvailableChargingPower;
+	cur2 = chargingData_2->AvailableChargingCurrent;
 	vol = chargingData_2->MaximumChargingVoltage;
+
 	GetMaxVolAndCurMethod(chargingData_2->Index, &vol, &cur2);
 	GetMaxPowerMethod(&pow2);
 
@@ -1068,6 +1059,28 @@ void GetMaxPowerMethod(float *pow)
 		*pow = maxChargingPow;
 }
 
+time_t GetRtcInfoForEpoch()
+{
+	struct timeb csuTime;
+	struct tm *tmCSU;
+	struct tm t;
+	time_t result;
+
+	ftime(&csuTime);
+	tmCSU = localtime(&csuTime.time);
+
+	t.tm_year = tmCSU->tm_year;
+	t.tm_mon = tmCSU->tm_mon;
+	t.tm_mday = tmCSU->tm_mday;
+	t.tm_hour = tmCSU->tm_hour;
+	t.tm_min = tmCSU->tm_min;
+	t.tm_sec = tmCSU->tm_sec;
+	t.tm_isdst = -1;
+	result = mktime(&t);
+
+	return result;
+}
+
 byte GetStopChargingReasonByEvse(byte gunIndex, byte *reason)
 {
 	byte result = NO;
@@ -1075,7 +1088,7 @@ byte GetStopChargingReasonByEvse(byte gunIndex, byte *reason)
 	if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.EmergencyStopTrip == 0x01)
 	{
 		// 012251
-		*(reason + 5) = 0;
+		*(reason + 5)  = 0;
 		*(reason + 4)  = 1;
 		*(reason + 3)  = 2;
 		*(reason + 2)  = 2;
@@ -1083,29 +1096,56 @@ byte GetStopChargingReasonByEvse(byte gunIndex, byte *reason)
 		*(reason + 0)  = 1;
 		result = YES;
 	}
-	else if (_chargingData[gunIndex]->Type == _Type_Chademo &&
-			ShmStatusCodeData->FaultCode.FaultEvents.bits.ChademoOutputRelayDrivingFault == 0x01)
+
+	if (_chargingData[gunIndex]->Type == _Type_Chademo)
 	{
-		// 011012
-		*(reason + 5) = 0;
-		*(reason + 4) = 1;
-		*(reason + 3) = 1;
-		*(reason + 2) = 0;
-		*(reason + 1) = 1;
-		*(reason + 0) = 2;
-		result = YES;
+		if (ShmStatusCodeData->FaultCode.FaultEvents.bits.ChademoOutputRelayDrivingFault == YES)
+		{
+			// 011012
+			*(reason + 5) = 0;
+			*(reason + 4) = 1;
+			*(reason + 3) = 1;
+			*(reason + 2) = 0;
+			*(reason + 1) = 1;
+			*(reason + 0) = 2;
+			result = YES;
+		}
+		else if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.ChademoOutputUVPFail == YES)
+		{
+			// 012289
+			*(reason + 5) = 0;
+			*(reason + 4) = 1;
+			*(reason + 3) = 2;
+			*(reason + 2) = 2;
+			*(reason + 1) = 8;
+			*(reason + 0) = 9;
+			result = YES;
+		}
 	}
-	else if (_chargingData[gunIndex]->Type == _Type_CCS_2 &&
-			ShmStatusCodeData->FaultCode.FaultEvents.bits.CcsOutputRelayDrivingFault == 0x01)
+	else if (_chargingData[gunIndex]->Type == _Type_CCS_2)
 	{
-		// 011014
-		*(reason + 5) = 0;
-		*(reason + 4) = 1;
-		*(reason + 3) = 1;
-		*(reason + 2) = 0;
-		*(reason + 1) = 1;
-		*(reason + 0) = 4;
-		result = YES;
+		if (ShmStatusCodeData->FaultCode.FaultEvents.bits.CcsOutputRelayDrivingFault == YES)
+		{
+			// 011014
+			*(reason + 5) = 0;
+			*(reason + 4) = 1;
+			*(reason + 3) = 1;
+			*(reason + 2) = 0;
+			*(reason + 1) = 1;
+			*(reason + 0) = 4;
+			result = YES;
+		}
+		else if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CcsOutputUVPFail == YES)
+		{
+			// 012288
+			*(reason + 5) = 0;
+			*(reason + 4) = 1;
+			*(reason + 3) = 2;
+			*(reason + 2) = 2;
+			*(reason + 1) = 8;
+			*(reason + 0) = 8;
+			result = YES;
+		}
 	}
 
 	return result;
@@ -1126,11 +1166,13 @@ int main(int argc, char *argv[])
 		return 0;
 	}
 
+	gun_count = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount;
 	Initialization();
 	CanFd = InitCanBus();
 	CANReceiver();
 
 	byte priorityLow = 1;
+	time_t rtc = GetRtcInfoForEpoch();
 	while(CanFd)
 	{
 		for(byte _index = 0; _index < gun_count; _index++)
@@ -1141,6 +1183,7 @@ int main(int argc, char *argv[])
 				if (_chargingData[_index]->Type == _Type_Chademo &&
 						ShmCHAdeMOData->evse[_chargingData[_index]->type_index].SelfTest_Comp != PASS)
 				{
+					SyncRtcInfo(_index, _chargingData[_index]->Evboard_id, (int)rtc);
 					GetFirmwareVersion(_index, _chargingData[_index]->Evboard_id);
 					GetHardwareVersion(_index, _chargingData[_index]->Evboard_id);
 				}
@@ -1149,6 +1192,7 @@ int main(int argc, char *argv[])
 					if (ShmCcsData->CommProtocol == 0x01 &&
 						ShmCcsData->V2GMessage_DIN70121[_chargingData[_index]->type_index].SelfTest_Comp != PASS)
 					{
+						SyncRtcInfo(_index, _chargingData[_index]->Evboard_id, (int)rtc);
 						GetFirmwareVersion(_index, _chargingData[_index]->Evboard_id);
 						GetHardwareVersion(_index, _chargingData[_index]->Evboard_id);
 					}
@@ -1180,20 +1224,29 @@ int main(int argc, char *argv[])
 
 					if (priorityLow == 1)
 					{
-						maxChargingCur[_index] = ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent;
-						maxChargingPow = ShmSysConfigAndInfo->SysConfig.MaxChargingPower;
+						maxChargingCur[_index] = ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent * 10;
+						maxChargingPow = (ShmSysConfigAndInfo->SysConfig.MaxChargingPower * 10);
 					}
 					break;
+				case S_PREPARNING:
+				{
+					// 設定當前輸出
+					if (gun_count == 1)
+						SetPresentChargingOutputPower(_chargingData[0], _chargingData[0]);
+					else if (gun_count == 2)
+						SetPresentChargingOutputPower(_chargingData[0], _chargingData[1]);
+				}
+					break;
 				case S_PREPARING_FOR_EV:
 				{
 					// 開始確認車端是否同意開始充電 : 1.SOC, 2.Target Vol, 3.Target Cur, 4.Charging remaining time
 					GetOutputReq(_index, _chargingData[_index]->Evboard_id);
 
-					//PRINTF_FUNC("PresentChargingVoltage = %f \n", _chargingData[_index]->PresentChargingVoltage);
-					//PRINTF_FUNC("PresentChargingCurrent = %f \n", _chargingData[_index]->PresentChargingCurrent);
-					//PRINTF_FUNC("AvailableChargingPower = %f \n", _chargingData[_index]->AvailableChargingPower);
-					//PRINTF_FUNC("AvailableChargingCurrent = %f \n", _chargingData[_index]->AvailableChargingCurrent);
-					//PRINTF_FUNC("MaximumChargingVoltage = %f \n", _chargingData[_index]->MaximumChargingVoltage);
+//					PRINTF_FUNC("PresentChargingVoltage = %f \n", _chargingData[_index]->PresentChargingVoltage);
+//					PRINTF_FUNC("PresentChargingCurrent = %f \n", _chargingData[_index]->PresentChargingCurrent);
+//					PRINTF_FUNC("AvailableChargingPower = %f \n", _chargingData[_index]->AvailableChargingPower);
+//					PRINTF_FUNC("AvailableChargingCurrent = %f \n", _chargingData[_index]->AvailableChargingCurrent);
+//					PRINTF_FUNC("MaximumChargingVoltage = %f \n", _chargingData[_index]->MaximumChargingVoltage);
 
 					// 設定當前輸出
 					if (gun_count == 1)
@@ -1205,19 +1258,12 @@ int main(int argc, char *argv[])
 					{
 						float maxVol, maxCur;
 						// 樁端輸出能力
-						if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag != _REASSIGNED_NONE)
-						{
-							maxVol = _chargingData[_index]->MaximumChargingVoltage;
-							maxCur = _chargingData[_index]->DeratingChargingCurrent;
-						}
-						else
-						{
-							maxVol = _chargingData[_index]->MaximumChargingVoltage;
-							maxCur = _chargingData[_index]->AvailableChargingCurrent;
-						}
+						maxVol = _chargingData[_index]->MaximumChargingVoltage;
+						maxCur = _chargingData[_index]->AvailableChargingCurrent;
+
 						GetMaxVolAndCurMethod(_index, &maxVol, &maxCur);
 
-						PRINTF_FUNC("To EV Max_Vol = %f, Cap_Cur = %f \n", maxVol, maxCur);
+						PRINTF_FUNC("To EV_%d Max_Vol = %f, Cap_Cur = %f, Cap_Pow = %f \n", _index, maxVol, maxCur, _chargingData[_index]->AvailableChargingPower);
 						SetChargingPermission(_index, START,
 						_chargingData[_index]->AvailableChargingPower,
 								maxCur,
@@ -1332,7 +1378,8 @@ int main(int argc, char *argv[])
 						SetPresentChargingOutputPower(_chargingData[0], _chargingData[1]);
 
 					// 槍鎖還在,則代表是樁端要求的停止
-					if (_chargingData[_index]->GunLocked == START)
+					if (_chargingData[_index]->GunLocked == START ||
+							_chargingData[_index]->Type == _Type_CCS_2)
 					{
 						byte normalStop = 0x01;
 						byte stopReason[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
@@ -1354,16 +1401,8 @@ int main(int argc, char *argv[])
 						float maxVol, maxCur;
 
 						// 樁端輸出能力
-						if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag != _REASSIGNED_NONE)
-						{
-							maxVol = _chargingData[_index]->MaximumChargingVoltage;
-							maxCur = _chargingData[_index]->DeratingChargingCurrent;
-						}
-						else
-						{
-							maxVol = _chargingData[_index]->MaximumChargingVoltage;
-							maxCur = _chargingData[_index]->AvailableChargingCurrent;
-						}
+						maxVol = _chargingData[_index]->MaximumChargingVoltage;
+						maxCur = _chargingData[_index]->AvailableChargingCurrent;
 
 						GetMaxVolAndCurMethod(_index, &maxVol, &maxCur);
 						SetChargingPermission(_index, STOP,

+ 2 - 0
EVSE/Projects/PlugIt360/Apps/Module_EvComm.h

@@ -27,6 +27,7 @@ extern struct Ev_Board_Cmd
 	int download_finish;				// 0x00001100
 
 	int isolation_status;				// 0x00001200
+	int sync_rtc_info;					// 0x00001400
 	int evse_precharge_info;			// 0x00001500
 }Ev_Cmd;
 
@@ -42,6 +43,7 @@ struct timeval _id_assign_time;
 void SetTargetAddr(byte *target_number, byte index);
 
 void GetFirmwareVersion(byte gun_index, byte toId);
+void SyncRtcInfo(byte gun_index, byte toId, int epoch);
 void GetHardwareVersion(byte gun_index, byte toId);
 void SetChargingPermission(byte gun_index, byte permissionStatus, short aOutputPw, short aOutputVol, short aOutputCur, byte toId);
 void SetPresentOutputPower(short outputVol_b1, short outputCur_b1, short outputVol_b2, short outputCur_b2);

BIN
EVSE/Projects/PlugIt360/Apps/Module_EventLogging


+ 28 - 24
EVSE/Projects/PlugIt360/Apps/Module_EventLogging.c

@@ -78,16 +78,16 @@ int DiffTimeb(struct timeb ST, struct timeb ET)
 
 void PRINTF_FUNC(char *string, ...)
 {
-	if (DEBUG)
-	{
-		va_list args;
-		char buffer[4096];
+	va_list args;
+	char buffer[4096];
+	va_start(args, string);
+	vsnprintf(buffer, sizeof(buffer), string, args);
+	va_end(args);
 
-		va_start(args, string);
-		vsnprintf(buffer, sizeof(buffer), string, args);
-		va_end(args);
+	if (DEBUG)
 		printf("%s \n", buffer);
-	}
+	else
+		DEBUG_INFO("%s \n", buffer);
 }
 
 //=================================
@@ -171,30 +171,34 @@ void RemoveFaultCodeToBuf(unsigned char *Code)
 	char _code[7];
 	sprintf(_code,"%s", Code);
 
-	for(unsigned char i = 0; i < ShmSysConfigAndInfo->SysWarningInfo.WarningCount; i++)
+	// 把相關的錯誤碼一次移除,避免重複顯示
+	while(!find)
 	{
-		if (find == 0x00)
+		for(unsigned char i = 0; i < ShmSysConfigAndInfo->SysWarningInfo.WarningCount; i++)
 		{
-			if(memcmp(&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i][0], _code, 7) != 0)
+			if (find == 0x00)
 			{
-				find = 0x01;
-			}
-		}
-		else
-		{
-			if(i == ShmSysConfigAndInfo->SysWarningInfo.WarningCount - 1)
-			{
-				memcpy(&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i][0], "", 7);
+				if(memcmp(&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i][0], _code, 7) != 0)
+				{
+					find = 0x01;
+				}
 			}
 			else
 			{
-				memcpy(&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i][0],
-						&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i + 1][0], 7);
+				if(i == ShmSysConfigAndInfo->SysWarningInfo.WarningCount - 1)
+				{
+					memcpy(&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i][0], "", 7);
+				}
+				else
+				{
+					memcpy(&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i][0],
+							&ShmSysConfigAndInfo->SysWarningInfo.WarningCode[i + 1][0], 7);
+				}
 			}
 		}
-	}
 
-	ShmSysConfigAndInfo->SysWarningInfo.WarningCount--;
+		ShmSysConfigAndInfo->SysWarningInfo.WarningCount--;
+	}
 }
 
 int main(void)
@@ -248,7 +252,7 @@ int main(void)
 		}
 
 		//check Alarm Status
-		for(ByteCount=0;ByteCount<11;ByteCount++)
+		for(ByteCount=0;ByteCount<12;ByteCount++)
 		{
 			if(ShmStatusCodeData->AlarmCode.AlarmEvents.AlarmVal[ByteCount] != ShmStatusCodeData->AlarmCode.PreviousAlarmVal[ByteCount])
 			{

BIN
EVSE/Projects/PlugIt360/Apps/Module_InternalComm


+ 177 - 86
EVSE/Projects/PlugIt360/Apps/Module_InternalComm.c

@@ -37,6 +37,8 @@
 #define YES					1
 #define NO					0
 #define TEN_MINUTES			600
+#define ENV_TEMP_MIN		45
+#define ENV_TEMP_MAX		50
 
 struct SysConfigAndInfo			*ShmSysConfigAndInfo;
 struct StatusCodeData 			*ShmStatusCodeData;
@@ -44,9 +46,10 @@ struct FanModuleData			*ShmFanModuleData;
 struct RelayModuleData			*ShmRelayModuleData;
 struct CHAdeMOData				*ShmCHAdeMOData;
 struct CcsData					*ShmCcsData;
+struct PsuData 					*ShmPsuData;
 
 #define VIN_MAX_VOLTAGE		250	// 大於該值 : OVP
-#define VIN_MIN_VOLTAGE		170	// 小於該值 : UVP
+#define VIN_MIN_VOLTAGE		150	// 小於該值 : UVP
 #define VIN_DROP_VOLTAGE	150	// 小於該值 : ac drop
 
 #define VOUT_MAX_VOLTAGE	750
@@ -55,6 +58,7 @@ struct CcsData					*ShmCcsData;
 
 #define MAX_FAN_SPEED		13500
 #define MIN_FAN_SPEED		2800
+#define NORMAL_FAN_SPEED	7000
 
 // GFD Status
 #define GFD_IDLE			0
@@ -72,7 +76,7 @@ struct CcsData					*ShmCcsData;
 // 確認 Relay Welding 電壓
 #define RELAY_WELDING_DET					300
 
-byte gunCount = CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY;
+byte gunCount;
 // 槍資訊
 struct ChargingInfoData *_chargingData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
 byte gfdChkFailCount[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
@@ -164,16 +168,16 @@ unsigned short MaxValue(unsigned short value1, unsigned short value2)
 
 void PRINTF_FUNC(char *string, ...)
 {
-	if (DEBUG)
-	{
-		va_list args;
-		char buffer[4096];
+	va_list args;
+	char buffer[4096];
+	va_start(args, string);
+	vsnprintf(buffer, sizeof(buffer), string, args);
+	va_end(args);
 
-		va_start(args, string);
-		vsnprintf(buffer, sizeof(buffer), string, args);
-		va_end(args);
+	if (DEBUG)
 		printf("%s \n", buffer);
-	}
+	else
+		DEBUG_INFO("%s \n", buffer);
 }
 
 //==========================================
@@ -305,28 +309,26 @@ void GetPresentInputVol()
 	if (Query_Present_InputVoltage(Uart5Fd, Addr.Relay, &inputVoltage) == PASS)
 	{
 		// resolution : 0.1
-		//PRINTF_FUNC("InputVoltageR = %f \n", inputVoltage.L1N_L12);
-		//PRINTF_FUNC("InputVoltageS = %f \n", inputVoltage.L2N_L23);
-		//PRINTF_FUNC("InputVoltageT = %f \n", inputVoltage.L3N_L31);
-
-		ShmRelayModuleData->InputL1Volt = inputVoltage.L1N_L12;
-		ShmRelayModuleData->InputL2Volt = inputVoltage.L2N_L23;
-		ShmRelayModuleData->InputL3Volt = inputVoltage.L3N_L31;
+		ShmSysConfigAndInfo->SysInfo.InputVoltageR = ShmRelayModuleData->InputL1Volt = inputVoltage.L1N_L12;
+		ShmSysConfigAndInfo->SysInfo.InputVoltageS = ShmRelayModuleData->InputL2Volt = inputVoltage.L2N_L23;
+		ShmSysConfigAndInfo->SysInfo.InputVoltageT = ShmRelayModuleData->InputL3Volt = inputVoltage.L3N_L31;
 
 		//********************************************************************************************************//
 		// VIN < 170
 		if (inputVoltage.L1N_L12 < VIN_MIN_VOLTAGE)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP = 0x01;
-		}
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP = YES;
+		else
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP = NO;
+
 		if (inputVoltage.L2N_L23 < VIN_MIN_VOLTAGE)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP = 0x01;
-		}
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP = YES;
+		else
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP = NO;
+
 		if (inputVoltage.L3N_L31 < VIN_MIN_VOLTAGE)
-		{
-			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP = 0x01;
-		}
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP = YES;
+		else
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP = NO;
 
 		//********************************************************************************************************//
 		// VIN > 250
@@ -506,7 +508,6 @@ void CheckK1K2RelayOutput(byte index)
 				else
 					_chargingData[index]->RelayKPK2Status = NO;
 			}
-
 		}
 	}
 	else if (index == 1)
@@ -529,6 +530,9 @@ void CheckK1K2RelayOutput(byte index)
 		ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = YES;
 	else
 		ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus = NO;
+
+//	PRINTF_FUNC("Check Relay Output. index = %d, RelayKPK2Status = %d, BridgeRelayStatus = %d \n",
+//			index, _chargingData[index]->RelayKPK2Status, ShmSysConfigAndInfo->SysInfo.BridgeRelayStatus);
 }
 
 void GetGfdAdc()
@@ -547,6 +551,8 @@ void GetGfdAdc()
 				{
 					DEBUG_ERROR("GFD Fail. index = %d, R = %d, Vol = %d \n",
 							i, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
+					PRINTF_FUNC("GFD Fail. index = %d, R = %d, Vol = %d \n",
+							i, gfd_adc.Resister_conn1, gfd_adc.voltage_conn1);
 				}
 			}
 			else if (i == 1)
@@ -556,6 +562,8 @@ void GetGfdAdc()
 				{
 					DEBUG_ERROR("GFD Fail. index = %d, R = %d, Vol = %d \n",
 							i, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
+					PRINTF_FUNC("GFD Fail. index = %d, R = %d, Vol = %d \n",
+							i, gfd_adc.Resister_conn2, gfd_adc.voltage_conn2);
 				}
 			}
 		}
@@ -863,9 +871,19 @@ void SetK1K2RelayStatus(byte index)
 	}
 }
 
+void CheckPhaseLossStatus(byte index)
+{
+	if (ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP == YES ||
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP == YES ||
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP == YES)
+	{
+		_chargingData[index]->StopChargeFlag = YES;
+	}
+}
+
 void SetParalleRelayStatus()
 {
-	if (gunCount >= 2 && ONE_CONNECTOR_USE == NO)
+	if (gunCount >= 2 && ShmSysConfigAndInfo->SysInfo.IsAlternatvieConf == NO)
 	{
 		if (_chargingData[0]->SystemStatus == S_BOOTING || _chargingData[1]->SystemStatus == S_BOOTING)
 		{
@@ -877,33 +895,49 @@ void SetParalleRelayStatus()
 		}
 		else
 		{
-			// 單槍充電中 - 搭上橋接
-			if((_chargingData[0]->IsReadyToCharging == YES && _chargingData[1]->IsReadyToCharging == NO) ||
-					(_chargingData[0]->IsReadyToCharging == NO && _chargingData[1]->IsReadyToCharging == YES))
+			if (_chargingData[0]->IsReadyToCharging == YES ||
+					_chargingData[1]->IsReadyToCharging == YES)
 			{
-				if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag >= _REASSIGNED_RELAY)
+				// ************需考慮在切換中 - 切開 relay 與搭回 relay 的時機點************
+				if (ShmSysConfigAndInfo->SysInfo.MainChargingMode == _MAIN_CHARGING_MODE_MAX)
 				{
-					if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
-						outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
-					else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
-						outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
+					if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag < _REASSIGNED_RELAY_M_TO_A)
+					{
+						// 最大充 - 搭上橋接
+						if (regRelay.relay_event.bits.Gun1_Parallel_N == NO)
+							outputRelay.relay_event.bits.Gun1_Parallel_N = YES;
+						else if (regRelay.relay_event.bits.Gun1_Parallel_P == NO)
+							outputRelay.relay_event.bits.Gun1_Parallel_P = YES;
+					}
+					else
+					{
+						// 平均充 - 不搭
+						if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
+							outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
+						else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
+							outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
+					}
 				}
-				else
+				else if (ShmSysConfigAndInfo->SysInfo.MainChargingMode == _MAIN_CHARGING_MODE_AVER)
 				{
-					if (regRelay.relay_event.bits.Gun1_Parallel_N == NO)
-						outputRelay.relay_event.bits.Gun1_Parallel_N = YES;
-					else if (regRelay.relay_event.bits.Gun1_Parallel_P == NO)
-						outputRelay.relay_event.bits.Gun1_Parallel_P = YES;
+					if (ShmSysConfigAndInfo->SysInfo.ReAssignedFlag < _REASSIGNED_RELAY_A_TO_M)
+					{
+						// 平均充 - 不搭
+						if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
+							outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
+						else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
+							outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
+					}
+					else
+					{
+						// 最大充 - 搭上橋接
+						if (regRelay.relay_event.bits.Gun1_Parallel_N == NO)
+							outputRelay.relay_event.bits.Gun1_Parallel_N = YES;
+						else if (regRelay.relay_event.bits.Gun1_Parallel_P == NO)
+							outputRelay.relay_event.bits.Gun1_Parallel_P = YES;
+					}
 				}
 			}
-			else
-			{
-				// 雙槍充電中~ 不搭橋接
-				if (regRelay.relay_event.bits.Gun1_Parallel_P == YES)
-					outputRelay.relay_event.bits.Gun1_Parallel_P = NO;
-				else if (regRelay.relay_event.bits.Gun1_Parallel_N == YES)
-					outputRelay.relay_event.bits.Gun1_Parallel_N = NO;
-			}
 		}
 	}
 }
@@ -979,6 +1013,23 @@ int InitShareMemory()
 		result = FAIL;
 	}
 
+	//creat ShmPsuData
+	if ((MeterSMId = shmget(ShmPsuKey, sizeof(struct PsuData),  0777)) < 0)
+	{
+		#ifdef SystemLogMessage
+		DEBUG_ERROR("shmget ShmPsuData NG \n");
+		#endif
+		result = FAIL;
+	}
+	else if ((ShmPsuData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+	{
+		#ifdef SystemLogMessage
+		DEBUG_ERROR("shmat ShmPsuData NG \n");
+		#endif
+		result = FAIL;
+	}
+	memset(ShmPsuData,0,sizeof(struct PsuData));
+
 	if(CHAdeMO_QUANTITY > 0)
 	{
 		if ((MeterSMId = shmget(ShmCHAdeMOCommKey, sizeof(struct CHAdeMOData),	IPC_CREAT | 0777)) < 0)
@@ -1226,7 +1277,9 @@ void CheckOutputPowerOverCarReq(byte index)
 	float carV = _chargingData[index]->EvBatterytargetVoltage;
 
 	if (_chargingData[index]->EvBatterytargetVoltage > 1500 &&
-			(_chargingData[index]->Type == _Type_Chademo || _chargingData[index]->Type == _Type_CCS_2 || _chargingData[index]->Type == _Type_GB))
+			(_chargingData[index]->Type == _Type_Chademo ||
+				_chargingData[index]->Type == _Type_CCS_2 ||
+				_chargingData[index]->Type == _Type_GB))
 	{
 		if (fireV >= (carV + (carV * 0.1)))
 		{
@@ -1242,7 +1295,9 @@ void CheckOutputPowerOverCarReq(byte index)
 void CheckOutputVolNoneMatchFire(byte index)
 {
 	if (_chargingData[index]->EvBatterytargetVoltage > 1500 &&
-			(_chargingData[index]->Type == _Type_Chademo || _chargingData[index]->Type == _Type_CCS_2 || _chargingData[index]->Type == _Type_GB))
+			(_chargingData[index]->Type == _Type_Chademo ||
+					_chargingData[index]->Type == _Type_CCS_2 ||
+					_chargingData[index]->Type == _Type_GB))
 	{
 		if ((_chargingData[index]->PresentChargingVoltage < _chargingData[index]->FireChargingVoltage - 300) ||
 				(_chargingData[index]->PresentChargingVoltage > _chargingData[index]->FireChargingVoltage + 300))
@@ -1256,15 +1311,43 @@ void CheckOutputVolNoneMatchFire(byte index)
 			{
 				if ((GetTimeoutValue(_checkOutputNoneMatchTimer[index]) / 1000) >= 5000)
 				{
-					PRINTF_FUNC("[Module_InternalComm]CheckOutputVolNoneMatchFire NG : pre = %f, fire = %f \n",
-					_chargingData[index]->PresentChargingVoltage, _chargingData[index]->FireChargingVoltage);
-					DEBUG_ERROR("[Module_InternalComm]CheckOutputVolNoneMatchFire NG : pre = %f, fire = %f \n",
-					_chargingData[index]->PresentChargingVoltage, _chargingData[index]->FireChargingVoltage);
+					PRINTF_FUNC("[Module_InternalComm]CheckOutputVolNoneMatchFire NG (%d) : pre = %f, fire = %f \n",
+							index, _chargingData[index]->PresentChargingVoltage, _chargingData[index]->FireChargingVoltage);
+					DEBUG_ERROR("[Module_InternalComm]CheckOutputVolNoneMatchFire NG (%d): pre = %f, fire = %f \n",
+							index, _chargingData[index]->PresentChargingVoltage, _chargingData[index]->FireChargingVoltage);
 					_chargingData[index]->StopChargeFlag = YES;
 				}
 			}
 		}
+		else
+			_isOutputNoneMatch[index] = NO;
+	}
+}
+
+void GetPsuTempForFanSpeed()
+{
+	char temp = 0;
+	for (byte index = 0; index < ShmPsuData->GroupCount; index++)
+	{
+		for (byte count = 0; count < ShmPsuData->PsuGroup[index].GroupPresentPsuQuantity; count++)
+		{
+			if (temp < ShmPsuData->PsuGroup[index].PsuModule[count].ExletTemp)
+				temp = ShmPsuData->PsuGroup[index].PsuModule[count].ExletTemp;
+		}
+	}
+
+	if (ShmFanModuleData->TestFanSpeed == NORMAL_FAN_SPEED)
+	{
+		if (temp >= ENV_TEMP_MAX)
+			ShmFanModuleData->TestFanSpeed = MAX_FAN_SPEED;
+	}
+	else if (ShmFanModuleData->TestFanSpeed == MAX_FAN_SPEED)
+	{
+		if (temp <= ENV_TEMP_MIN)
+			ShmFanModuleData->TestFanSpeed = NORMAL_FAN_SPEED;
 	}
+	else
+		ShmFanModuleData->TestFanSpeed = NORMAL_FAN_SPEED;
 }
 
 int main(void)
@@ -1281,6 +1364,8 @@ int main(void)
 		sleep(5);
 		return 0;
 	}
+
+	gunCount = ShmSysConfigAndInfo->SysConfig.TotalConnectorCount;
 	// Open Uart5 for RB
 	Uart5Fd = InitComPort();
 	Initialization();
@@ -1288,7 +1373,7 @@ int main(void)
 
 	if(Uart5Fd < 0)
 	{
-		printf ("open port error. \n");
+		PRINTF_FUNC("(Internal) open port error. \n");
 		return 0;
 	}
 
@@ -1348,6 +1433,9 @@ int main(void)
 				// 依據當前各槍的狀態選擇 搭上/放開 Relay
 				SetK1K2RelayStatus(i);
 
+				if (ShmSysConfigAndInfo->SysConfig.PhaseLossPolicy == YES)
+					CheckPhaseLossStatus(i);
+
 				if (_chargingData[i]->SystemStatus == S_IDLE)
 					gfdChkFailCount[i] = 0;
 
@@ -1384,25 +1472,25 @@ int main(void)
 			else
 				outputRelay.relay_event.bits.AC_Contactor = NO;
 
-//			if (isCharging)
-//			{
-//				isStopChargingCount = false;
-//				outputRelay.relay_event.bits.AC_Contactor = YES;
-//			}
-//			else
-//			{
-//				if (!isStopChargingCount)
-//				{
-//					gettimeofday(&_close_ac_contactor, NULL);
-//					isStopChargingCount = true;
-//				}
-//				else
-//				{
-//					if (!isSystemBooting ||
-//						(outputRelay.relay_event.bits.AC_Contactor == YES && GetTimeoutValue(_close_ac_contactor) / 1000 >= (TEN_MINUTES * 1000)))
-//						outputRelay.relay_event.bits.AC_Contactor = NO;
-//				}
-//			}
+			if (isCharging)
+			{
+				isStopChargingCount = false;
+				outputRelay.relay_event.bits.AC_Contactor = YES;
+			}
+			else
+			{
+				if (!isStopChargingCount)
+				{
+					gettimeofday(&_close_ac_contactor, NULL);
+					isStopChargingCount = true;
+				}
+				else
+				{
+					if (!isSystemBooting ||
+						(outputRelay.relay_event.bits.AC_Contactor == YES && GetTimeoutValue(_close_ac_contactor) / 1000 >= (TEN_MINUTES * 1000)))
+						outputRelay.relay_event.bits.AC_Contactor = NO;
+				}
+			}
 
 			// 搭上/鬆開 Relay
 			// 放開 Relay 之前要先確認輸出的電壓電流是否已經降到某個值
@@ -1446,12 +1534,14 @@ int main(void)
 		{
 			if (GetTimeoutValue(_priority_time) / 1000 >= 1000)
 			{
+				GetPsuTempForFanSpeed();
+
 				GetFanSpeed();
+				//				printf("ShmFanModuleData->PresentFan1Speed = %d \n", ShmFanModuleData->PresentFan1Speed);
+				//				printf("ShmFanModuleData->PresentFan2Speed = %d \n", ShmFanModuleData->PresentFan2Speed);
+				//				printf("ShmFanModuleData->PresentFan3Speed = %d \n", ShmFanModuleData->PresentFan3Speed);
+				//				printf("ShmFanModuleData->PresentFan4Speed = %d \n", ShmFanModuleData->PresentFan4Speed);
 				gettimeofday(&_priority_time, NULL);
-//				printf("ShmFanModuleData->PresentFan1Speed = %d \n", ShmFanModuleData->PresentFan1Speed);
-//				printf("ShmFanModuleData->PresentFan2Speed = %d \n", ShmFanModuleData->PresentFan2Speed);
-//				printf("ShmFanModuleData->PresentFan3Speed = %d \n", ShmFanModuleData->PresentFan3Speed);
-//				printf("ShmFanModuleData->PresentFan4Speed = %d \n", ShmFanModuleData->PresentFan4Speed);
 				if (isCharging)
 				{
 					if (ShmFanModuleData->PresentFan1Speed < MAX_FAN_SPEED ||
@@ -1464,6 +1554,14 @@ int main(void)
 						ShmFanModuleData->SetFan3Speed = MAX_FAN_SPEED;
 						ShmFanModuleData->SetFan4Speed = MAX_FAN_SPEED;
 					}
+
+					if (ShmFanModuleData->TestFanSpeed > 0)
+					{
+						ShmFanModuleData->SetFan1Speed = ShmFanModuleData->TestFanSpeed;
+						ShmFanModuleData->SetFan2Speed = ShmFanModuleData->TestFanSpeed;
+						ShmFanModuleData->SetFan3Speed = ShmFanModuleData->TestFanSpeed;
+						ShmFanModuleData->SetFan4Speed = ShmFanModuleData->TestFanSpeed;
+					}
 				}
 				else
 				{
@@ -1479,13 +1577,6 @@ int main(void)
 					}
 				}
 
-				if (ShmFanModuleData->TestFanSpeed > 0)
-				{
-					ShmFanModuleData->SetFan1Speed = ShmFanModuleData->TestFanSpeed;
-					ShmFanModuleData->SetFan2Speed = ShmFanModuleData->TestFanSpeed;
-					ShmFanModuleData->SetFan3Speed = ShmFanModuleData->TestFanSpeed;
-					ShmFanModuleData->SetFan4Speed = ShmFanModuleData->TestFanSpeed;
-				}
 				//PRINTF_FUNC("set fan = %d \n", ShmFanModuleData->SetFan1Speed);
 				SetFanModuleSpeed();
 			}

+ 3 - 1
EVSE/Projects/PlugIt360/Apps/Module_LcmContro.h

@@ -51,11 +51,13 @@ struct FanModuleData			*ShmFanModuleData;
 #define CMD_BACKLIGHT			0x01
 #define CMD_REGISTER			0x03
 
+#define GUN_COUNT				CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY
+
 int _port;
 //char* pPortName = "/dev/ttyO2";
 char* pPortName = "/dev/ttyS3";
 char* moduleName = "DMT80480T070_09WT";
-byte _totalCount = CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY;
+byte _totalCount;
 struct ChargingInfoData *_chargingInfoData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
 
 // ·í«e¿ï¾Üªººj¸¹

BIN
EVSE/Projects/PlugIt360/Apps/Module_LcmControl


+ 47 - 39
EVSE/Projects/PlugIt360/Apps/Module_LcmControl.c

@@ -51,16 +51,16 @@ char* getTimeString(void)
 
 void PRINTF_FUNC(char *string, ...)
 {
-	if (DEBUG)
-	{
-		va_list args;
-		char buffer[4096];
+	va_list args;
+	char buffer[4096];
+	va_start(args, string);
+	vsnprintf(buffer, sizeof(buffer), string, args);
+	va_end(args);
 
-		va_start(args, string);
-		vsnprintf(buffer, sizeof(buffer), string, args);
-		va_end(args);
+	if (DEBUG)
 		printf("%s \n", buffer);
-	}
+	else
+		DEBUG_INFO("%s \n", buffer);
 }
 
 //==========================================
@@ -166,7 +166,7 @@ void ReadMsgFromLcm(byte *msg, byte readLen)
 				case CMD_REGISTER:
 				{
 					// 頁面
-					_currentPage = (unsigned short) (*(msg + 6) << 8) + (unsigned short) *(msg + 7);
+					strcpy((char *)ShmSysConfigAndInfo->SysInfo.LcmHwRev, moduleName);
 				}
 				break;
 			}
@@ -184,9 +184,6 @@ void ReadMsgFromLcm(byte *msg, byte readLen)
 //			}
 		}
 	}
-
-//	for (byte idx = 0; idx < len; idx++)
-//		PRINTF_FUNC("[system_command]-RX: %X\n", *(msg + idx));
 }
 
 //================================================
@@ -506,10 +503,11 @@ void ChangeBattMapAndValue(short page, int soc)
 			ChangeDisplay2Value(__batt_map, _battery_soc_100);
 	}
 
-	byte cmd[4];
-	byte value[4];
+	byte cmd[5];
+	byte value[5];
 
 	memset(cmd, 0x00, sizeof(cmd));
+	memset(value, 0x00, sizeof(value));
 	sprintf((char *)value, "%d%%", soc);
 	string2ByteArray(value, cmd);
 	DisplayValueToLcm(__soc_value_charging, cmd, sizeof(cmd));
@@ -815,7 +813,7 @@ void ProcessPageInfo()
 
 void Initialization()
 {
-	strcpy((char *)ShmSysConfigAndInfo->SysInfo.LcmHwRev, moduleName);
+	//strcpy((char *)ShmSysConfigAndInfo->SysInfo.LcmHwRev, moduleName);
 
 	bool isPass = false;
 	byte count = 5;
@@ -857,46 +855,56 @@ int main(void)
 	byte changeWarningPriority = 0;
 	byte curWarningCount = 255;
 	//ChangeBackLight(true);
+	_totalCount = GUN_COUNT;
 	Initialization();
 
 //	ChangeToOtherPage(_LCM_FIX);
 //	return 0;
 	while(_port != -1)
 	{
-		//DemoFunction();
-
-		// Warning 處理
-		if(curWarningCount != ShmSysConfigAndInfo->SysWarningInfo.WarningCount)
+		if (strlen((char *)ShmSysConfigAndInfo->SysInfo.LcmHwRev) != 0 ||
+				ShmSysConfigAndInfo->SysInfo.LcmHwRev[0] != '\0')
 		{
-			changeWarningPriority = 0;
-			ShmSysConfigAndInfo->SysWarningInfo.PageIndex = 0;
-			curWarningCount = ShmSysConfigAndInfo->SysWarningInfo.WarningCount;
-			ChangeWarningFunc();
+			GetCurrentPage();
+			sleep(1);
 		}
-		else if (ShmSysConfigAndInfo->SysWarningInfo.WarningCount > 5 && changeWarningPriority == 0)
+		else
 		{
-			// 當有兩頁 Warning 則每隔三秒改變一次
-			if(ShmSysConfigAndInfo->SysWarningInfo.PageIndex == 0)
-				ShmSysConfigAndInfo->SysWarningInfo.PageIndex = 1;
-			else
+			//DemoFunction();
+
+			// Warning 處理
+			if(curWarningCount != ShmSysConfigAndInfo->SysWarningInfo.WarningCount)
+			{
+				changeWarningPriority = 0;
 				ShmSysConfigAndInfo->SysWarningInfo.PageIndex = 0;
+				curWarningCount = ShmSysConfigAndInfo->SysWarningInfo.WarningCount;
+				ChangeWarningFunc();
+			}
+			else if (ShmSysConfigAndInfo->SysWarningInfo.WarningCount > 5 && changeWarningPriority == 0)
+			{
+				// 當有兩頁 Warning 則每隔三秒改變一次
+				if(ShmSysConfigAndInfo->SysWarningInfo.PageIndex == 0)
+					ShmSysConfigAndInfo->SysWarningInfo.PageIndex = 1;
+				else
+					ShmSysConfigAndInfo->SysWarningInfo.PageIndex = 0;
 
-			ChangeWarningFunc();
-		}
+				ChangeWarningFunc();
+			}
 
-		// 頁面資訊處理
-		ProcessPageInfo();
+			// 頁面資訊處理
+			ProcessPageInfo();
 
-		// 網路 - wifi - 連線訊號處理
-		RefreshConnStatus();
+			// 網路 - wifi - 連線訊號處理
+			RefreshConnStatus();
 
-		// 換頁處理
-		ChangeCurPage();
+			// 換頁處理
+			ChangeCurPage();
 
-		RefreshPageAnimation(_everyPageRollChange);
+			RefreshPageAnimation(_everyPageRollChange);
 
-		changeWarningPriority >= 30 ? changeWarningPriority = 0 : changeWarningPriority++;
-		usleep(100000);
+			changeWarningPriority >= 30 ? changeWarningPriority = 0 : changeWarningPriority++;
+			usleep(100000);
+		}
 	}
 
 	CloseCommunicationLcmPort();

+ 337 - 0
EVSE/Projects/PlugIt360/Apps/Module_Modbus.c

@@ -0,0 +1,337 @@
+/*
+ * Module_Modbus.c
+ *
+ *  Created on: 2020年3月11日
+ *      Author: 7564
+ */
+
+#include 	<sys/time.h>
+#include 	<sys/timeb.h>
+#include    <sys/types.h>
+#include    <sys/stat.h>
+#include 	<sys/types.h>
+#include 	<sys/ioctl.h>
+#include 	<sys/socket.h>
+#include 	<sys/ipc.h>
+#include 	<sys/shm.h>
+#include 	<sys/shm.h>
+#include 	<sys/mman.h>
+#include 	<linux/wireless.h>
+#include 	<arpa/inet.h>
+#include 	<netinet/in.h>
+
+#include 	<unistd.h>
+#include 	<stdarg.h>
+#include    <stdio.h>      /*標準輸入輸出定義*/
+#include    <stdlib.h>     /*標準函數庫定義*/
+#include    <unistd.h>     /*Unix 標準函數定義*/
+#include    <fcntl.h>      /*檔控制定義*/
+#include    <termios.h>    /*PPSIX 終端控制定義*/
+#include    <errno.h>      /*錯誤號定義*/
+#include 	<errno.h>
+#include 	<string.h>
+#include	<time.h>
+#include	<ctype.h>
+#include 	<ifaddrs.h>
+#include 	<stdbool.h>
+#include	"../../define.h"
+#include 	"modbus.h"
+
+#define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))
+#define PASS				1
+#define FAIL				-1
+#define YES					1
+#define NO					0
+
+#define MODBUS_SERVER_PORT     502
+#define MODBUS_DEBUG           OFF
+
+modbus_t						*ctx;
+int								server_socket;
+modbus_mapping_t 				*mb_mapping;
+int 							header_length;
+uint8_t         				bits[MODBUS_MAX_READ_BITS] = {0};
+uint16_t        				regs[MODBUS_MAX_READ_REGISTERS] = {0};
+
+struct SysConfigAndInfo			*ShmSysConfigAndInfo;
+struct StatusCodeData 			*ShmStatusCodeData;
+
+unsigned char _gunCount = CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY;
+struct ChargingInfoData *chargingInfo[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
+
+void PRINTF_FUNC(char *string, ...);
+
+int StoreLogMsg(const char *fmt, ...);
+#define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+#define DEBUG_WARN(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+#define DEBUG_ERROR(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
+
+int StoreLogMsg(const char *fmt, ...)
+{
+	char Buf[4096+256];
+	char buffer[4096];
+	time_t CurrentTime;
+	struct tm *tm;
+	va_list args;
+
+	va_start(args, fmt);
+	int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+
+	memset(Buf,0,sizeof(Buf));
+	CurrentTime = time(NULL);
+	tm=localtime(&CurrentTime);
+	sprintf(Buf,"echo \"%04d-%02d-%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
+			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
+			buffer,
+			tm->tm_year+1900,tm->tm_mon+1);
+	system(Buf);
+
+	return rc;
+}
+
+void PRINTF_FUNC(char *string, ...)
+{
+	va_list args;
+	char buffer[4096];
+	va_start(args, string);
+	vsnprintf(buffer, sizeof(buffer), string, args);
+	va_end(args);
+
+	if (DEBUG)
+		PRINTF_FUNC("%s \n", buffer);
+	else
+		DEBUG_INFO("%s \n", buffer);
+}
+
+//=================================
+// Save data to share memory Function
+//=================================
+bool FindChargingInfoData(byte target, struct ChargingInfoData **chargingData)
+{
+	for (byte index = 0; index < CHAdeMO_QUANTITY; index++)
+	{
+		if (ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index].Index == target)
+		{
+			chargingData[target] = &ShmSysConfigAndInfo->SysInfo.ChademoChargingData[index];
+			return true;
+		}
+	}
+
+	for (byte index = 0; index < CCS_QUANTITY; index++)
+	{
+		if (ShmSysConfigAndInfo->SysInfo.CcsChargingData[index].Index == target)
+		{
+			chargingData[target] = &ShmSysConfigAndInfo->SysInfo.CcsChargingData[index];
+			return true;
+		}
+	}
+
+	for (byte index = 0; index < GB_QUANTITY; index++)
+	{
+		if (ShmSysConfigAndInfo->SysInfo.GbChargingData[index].Index == target)
+		{
+			chargingData[target] = &ShmSysConfigAndInfo->SysInfo.GbChargingData[index];
+			return true;
+		}
+	}
+
+	return false;
+}
+
+//==========================================
+// Init all share memory
+//==========================================
+int InitShareMemory()
+{
+	int result = PASS;
+	int MeterSMId;
+
+	//creat ShmSysConfigAndInfo
+	if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo),  0777)) < 0)
+    {
+		#ifdef SystemLogMessage
+		DEBUG_ERROR("shmget ShmSysConfigAndInfo NG %d \n");
+		#endif
+		result = FAIL;
+	}
+    else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+    	#ifdef SystemLogMessage
+    	DEBUG_ERROR("shmat ShmSysConfigAndInfo NG \n");
+		#endif
+    	result = FAIL;
+   	 }
+    else
+    {}
+
+   	//creat ShmStatusCodeData
+   	if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData),  0777)) < 0)
+    {
+		#ifdef SystemLogMessage
+   		DEBUG_ERROR("shmget ShmStatusCodeData NG \n");
+		#endif
+   		result = FAIL;
+	}
+    else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
+    {
+    	#ifdef SystemLogMessage
+    	DEBUG_ERROR("shmat ShmStatusCodeData NG \n");
+		#endif
+    	result = FAIL;
+   	}
+
+    return result;
+}
+
+void Initialization()
+{
+	bool isPass = false;
+	while(!isPass)
+	{
+		isPass = true;
+		for (byte _index = 0; _index < _gunCount; _index++)
+		{
+			if (!FindChargingInfoData(_index, &chargingInfo[0]))
+			{
+				DEBUG_ERROR("EvComm (main) : FindChargingInfoData false \n");
+				isPass = false;
+				break;
+			}
+		}
+	}
+}
+//================================================
+// Main process
+//================================================
+int InitModbus()
+{
+	int result = PASS;
+
+	ctx = modbus_new_tcp(NULL, MODBUS_SERVER_PORT);
+	server_socket = modbus_tcp_listen(ctx, 1);
+	mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, MODBUS_MAX_WRITE_BITS, MODBUS_MAX_READ_REGISTERS, MODBUS_MAX_WR_READ_REGISTERS);
+	if (mb_mapping == NULL)
+	{
+		PRINTF_FUNC("mb_mapping error.\r\n");
+		modbus_free(ctx);
+		result = FAIL;
+	}
+	modbus_set_debug(ctx, MODBUS_DEBUG);
+
+	return result;
+}
+
+void updateInfo()
+{
+	// Start or Stop Charging
+	if (mb_mapping->tab_registers[0] == YES)
+		ShmSysConfigAndInfo->SysInfo.StartToChargingFlag = YES;
+	else
+		ShmSysConfigAndInfo->SysInfo.StartToChargingFlag = NO;
+
+	// Hard Reset
+	if (mb_mapping->tab_registers[1] == YES && chargingInfo[0]->SystemStatus == S_IDLE)
+	{
+		sleep(3);
+		system("reboot -f");
+	}
+
+	// State
+	mb_mapping->tab_registers[2] = chargingInfo[0]->SystemStatus;
+
+	// Plug Status
+	mb_mapping->tab_registers[3] = chargingInfo[0]->ConnectorPlugIn;
+
+	// Max Current
+	mb_mapping->tab_registers[4] = (ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent >> 8) & 0xFF;
+	mb_mapping->tab_registers[5] = ShmSysConfigAndInfo->SysConfig.MaxChargingCurrent & 0xFF;
+
+	// Soc
+	mb_mapping->tab_registers[10] = chargingInfo[0]->EvBatterySoc;
+
+	// Output Pow
+	mb_mapping->tab_registers[11] = ((int)chargingInfo[0]->PresentChargingPower >> 24) & 0xFF;
+	mb_mapping->tab_registers[12] = ((int)chargingInfo[0]->PresentChargingPower >> 16) & 0xFF;
+	mb_mapping->tab_registers[13] = ((int)chargingInfo[0]->PresentChargingPower >> 8) & 0xFF;
+	mb_mapping->tab_registers[14] = chargingInfo[0]->PresentChargingPower;
+
+	// Output Vol
+	mb_mapping->tab_registers[20] = ((int)chargingInfo[0]->PresentChargingVoltage >> 24) & 0xFF;
+	mb_mapping->tab_registers[21] = ((int)chargingInfo[0]->PresentChargingVoltage >> 16) & 0xFF;
+	mb_mapping->tab_registers[22] = ((int)chargingInfo[0]->PresentChargingVoltage >> 8) & 0xFF;
+	mb_mapping->tab_registers[23] = chargingInfo[0]->PresentChargingVoltage;
+
+	// Output Cur
+	mb_mapping->tab_registers[25] = ((int)chargingInfo[0]->PresentChargingCurrent >> 24) & 0xFF;
+	mb_mapping->tab_registers[26] = ((int)chargingInfo[0]->PresentChargingCurrent >> 16) & 0xFF;
+	mb_mapping->tab_registers[27] = ((int)chargingInfo[0]->PresentChargingCurrent >> 8) & 0xFF;
+	mb_mapping->tab_registers[28] = chargingInfo[0]->PresentChargingCurrent;
+
+	// Remain Time
+	mb_mapping->tab_registers[30] = (chargingInfo[0]->PresentChargedDuration  >> 24) & 0xFF;
+	mb_mapping->tab_registers[31] = (chargingInfo[0]->PresentChargedDuration  >> 16) & 0xFF;
+	mb_mapping->tab_registers[32] = (chargingInfo[0]->PresentChargedDuration >> 8) & 0xFF;
+	mb_mapping->tab_registers[33] = chargingInfo[0]->PresentChargedDuration;
+
+	// Charging Time
+	mb_mapping->tab_registers[35] = (chargingInfo[0]->RemainChargingDuration  >> 24) & 0xFF;
+	mb_mapping->tab_registers[36] = (chargingInfo[0]->RemainChargingDuration  >> 16) & 0xFF;
+	mb_mapping->tab_registers[37] = (chargingInfo[0]->RemainChargingDuration >> 8) & 0xFF;
+	mb_mapping->tab_registers[38] = chargingInfo[0]->RemainChargingDuration;
+}
+
+int main(void)
+{
+	PRINTF_FUNC("Psu Task boot .... \n");
+	if(InitShareMemory() == FAIL)
+	{
+		#ifdef SystemLogMessage
+		DEBUG_ERROR("InitShareMemory NG\n");
+		#endif
+		if(ShmStatusCodeData != NULL)
+		{
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory = 1;
+		}
+		sleep(5);
+		return 0;
+	}
+
+	Initialization();
+	int rc;
+	uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
+
+	if(InitModbus() == FAIL)
+	{
+		PRINTF_FUNC("InitModbus NG\r\n");
+		return FAIL;
+	}
+	else
+	{
+		PRINTF_FUNC("Modbus TCP initial OK.\r\n");
+	}
+
+	//=================================
+	// Modbus TCP loop
+	//=================================
+	for(;;)
+	{
+		modbus_tcp_accept(ctx, &server_socket);
+
+		while((rc = modbus_receive(ctx, query)) > 0)
+		{
+			modbus_reply(ctx, query, rc, mb_mapping);
+			// Update EVSE info
+			updateInfo();
+
+			usleep(100000);
+		}
+
+		if(rc == -1)
+			PRINTF_FUNC("Client disconnect...\r\n");
+		else
+			PRINTF_FUNC("Client communication error...\r\n");
+	}
+
+	return FAIL;
+}

BIN
EVSE/Projects/PlugIt360/Apps/Module_PrimaryComm


+ 42 - 12
EVSE/Projects/PlugIt360/Apps/Module_PrimaryComm.c

@@ -54,6 +54,9 @@ Ver ver;
 Gpio_in gpio_in;
 Rtc rtc;
 
+struct timeval _flash_time;
+byte fresh = YES;
+
 void PRINTF_FUNC(char *string, ...);
 
 int StoreLogMsg(const char *fmt, ...);
@@ -97,16 +100,16 @@ int DiffTimeb(struct timeb ST, struct timeb ET)
 
 void PRINTF_FUNC(char *string, ...)
 {
-	if (DEBUG)
-	{
-		va_list args;
-		char buffer[4096];
+	va_list args;
+	char buffer[4096];
+	va_start(args, string);
+	vsnprintf(buffer, sizeof(buffer), string, args);
+	va_end(args);
 
-		va_start(args, string);
-		vsnprintf(buffer, sizeof(buffer), string, args);
-		va_end(args);
+	if (DEBUG)
 		printf("%s \n", buffer);
-	}
+	else
+		DEBUG_INFO("%s \n", buffer);
 }
 //=================================
 // Common routine
@@ -272,11 +275,11 @@ void GetInputGpioStatus()
 	}
 }
 
-void SetOutputGpio()
+void SetOutputGpio(byte flash)
 {
 	Gpio_out gpio;
-	gpio.Button_LED[0] = 0x01;
-	gpio.Button_LED[1] = 0x01;
+	gpio.Button_LED[0] = flash;
+	gpio.Button_LED[1] = flash;
 
 	gpio.System_LED[0] = 0x00;
 	gpio.System_LED[1] = 0x00;
@@ -359,6 +362,14 @@ int InitComPort()
 	return fd;
 }
 
+unsigned long GetTimeoutValue(struct timeval _sour_time)
+{
+	struct timeval _end_time;
+	gettimeofday(&_end_time, NULL);
+
+	return 1000000 * (_end_time.tv_sec - _sour_time.tv_sec) + _end_time.tv_usec - _sour_time.tv_usec;
+}
+
 int main(void)
 {
 	if(InitShareMemory() == FAIL)
@@ -390,10 +401,29 @@ int main(void)
 		return 0;
 	}
 
-	SetOutputGpio();
 	SetRtcData();
+	gettimeofday(&_flash_time, NULL);
 	for(;;)
 	{
+		if (strlen((char *)ShmSysConfigAndInfo->SysInfo.LcmHwRev) != 0 ||
+						ShmSysConfigAndInfo->SysInfo.LcmHwRev[0] != '\0')
+		{
+			if ((GetTimeoutValue(_flash_time) / 1000) > 1000)
+			{
+				SetOutputGpio(fresh);
+				fresh = NO;
+				gettimeofday(&_flash_time, NULL);
+			}
+		}
+		else
+		{
+			if (fresh == NO)
+			{
+				fresh = YES;
+				SetOutputGpio(fresh);
+			}
+		}
+
 		// 程序開始之前~ 必須先確定 FW 版本與硬體版本,確認後!!~ 該模組才算是真正的 Initial Comp.
 		// 模組更新 FW 後,需重新做
 		if(ShmPrimaryMcuData->SelfTest_Comp != PASS)

BIN
EVSE/Projects/PlugIt360/Apps/Module_PsuComm


File diff suppressed because it is too large
+ 349 - 506
EVSE/Projects/PlugIt360/Apps/Module_PsuComm.c


+ 8 - 49
EVSE/Projects/PlugIt360/Apps/Module_PsuComm.h

@@ -32,60 +32,19 @@
 #include	"../../define.h"
 #include 	<stdbool.h>
 
-
 typedef unsigned char 		byte;
-typedef unsigned short 		word;
+typedef unsigned short 	word;
 typedef unsigned int 		unit;
 
-#define SELF_TEST_VOL				1600
-#define SELF_TEST_CUR				10
-#define ZERO_VOL					0
-#define ZERO_CUR					0
-#define NONE_CARE_ADDRESS			0
-#define SWITCH_ON		2
-#define SWITCH_OFF		0
-
-
-#define SET_MODULE_CMD              0
-#define SET_GROUP_CMD              1
-
-enum _FIRMWARE_TYPE
-{
-	_Fw_pri_app = 		0,
-	_Fw_sec_app,
-	_Fw_pri_bootload,
-	_Fw_sec_bootload
-};
-
-struct _RecordPsuData
-{
-	byte 				_phy_addr;
-	char 				_serial_num[32];
-	byte 				_fire_index;
-
-};
-
-unsigned char _gunCount = CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY;
+unsigned char _gunCount;
 struct ChargingInfoData *chargingInfo[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
-bool rework = false;
-
-struct timeval _id_assign_time;
-struct timeval _chk_output_time;
-bool isCheckOutputTimeStart = false;
-
-byte _curCheckPsuIndexForFireLine = 0x00;
-struct _RecordPsuData recordPsuData[PSU_QUANTITY];
 
-struct timeval _chk_cap_time;
-bool _chkTotalCapStart = false;
-
-bool isUpgradeFlag = false;
-
-struct timeval _workModePriority_time;
+struct timeval _cmdSubPriority_time;
+byte _getCapDelayCount;
+struct timeval _averageComp_time;
 struct timeval _derating_time;
-int deratingTime = 0;
+
+struct timeval _test_time;
 
 int connector_1[] = {0};
-int connector_2[] = {1};
-int conn_1_count = 0;
-int conn_2_count = 0;
+int connector_2[] = {1, 2};

BIN
EVSE/Projects/PlugIt360/Apps/ReadCmdline


+ 42 - 33
EVSE/Projects/PlugIt360/Apps/ReadCmdline.c

@@ -203,6 +203,8 @@ void RunStatusProc(char *v1, char *v2)
 	{
 		// get
 		printf ("index = %x, status = %x (%d)\n", _index, _chargingData[_index]->SystemStatus, _chargingData[_index]->IsAvailable);
+		printf ("SystemTimeoutFlag = %d, PageIndex = %d\n",
+				ShmSysConfigAndInfo->SysInfo.SystemTimeoutFlag, ShmSysConfigAndInfo->SysInfo.PageIndex);
 	}
 	else
 	{
@@ -248,15 +250,14 @@ void RunGunPlugitProc(char *v1, char *v2)
 
 void GetGunLockStatusProc(char *v1, char *v2)
 {
-	if (strcmp(v1, "0") == 0)
+	int _index = atoi(v1);
+	if (!FindChargingInfoData(_index, &_chargingData[0]))
 	{
-		printf("Gun Locked Status = %x \n", _chargingData[0]->GunLocked);
+		printf("FindChargingInfoData error\n");
+		return;
 	}
 
-	if (strcmp(v1, "1") == 0)
-	{
-		printf("Gun Locked Status = %x \n", _chargingData[1]->GunLocked);
-	}
+	printf("Gun Locked Status = %x \n", _chargingData[_index]->GunLocked);
 }
 
 void SetSystemIDProc()
@@ -283,8 +284,8 @@ void GetFwVerProc(char *v1)
 	}
 	else if (strcmp(v1, "1") == 0)
 	{
-		printf("Ev board 2 FW Version = %s \n", ShmCHAdeMOData->evse[1].version);
 		printf("Ev board 2 FW Version = %s \n", ShmCcsData->V2GMessage_DIN70121->version);
+		printf("Ev board 2 FW Version = %s \n", ShmCHAdeMOData->evse[1].version);
 	}
 	else if (strcmp(v1, "rb") == 0)
 	{
@@ -327,20 +328,15 @@ void SetCableChkStatus(char *v1, char *v2)
 
 void SetPowerValue(char *v1, char *v2)
 {
-//	int _index = atoi(v1);
-//	if (!FindChargingInfoData(_index, &_chargingData[0])) {
-//		printf("FindChargingInfoData error\n");
-//		return;
-//	}
-//
-//	if (strcmp(v2, "-1") == 0 || strcmp(v2, "") == 0) {
-//		// get
-//		printf("index = %x, max cur = %f\n", _index,
-//				_chargingData[_index]->MaxChargingCurrentForTest);
-//	} else {
-//		// set
-//		_chargingData[_index]->MaxChargingCurrentForTest = atoi(v2);
-//	}
+	int _index = atoi(v1);
+	float _Current = atof(v2);
+	if (!FindChargingInfoData(_index, &_chargingData[0]))
+	{
+		printf ("FindChargingInfoData error\n");
+		return;
+	}
+
+	_chargingData[_index]->EvBatterytargetCurrent = _Current * 10;
 }
 
 void GetGunSelectedNum(char *v1)
@@ -434,7 +430,7 @@ void RunUnconditionalChargeIndex1(char *v1, char *v2, char *v3)
 {
 	int _GunIndex = atoi(v1);
 	float _Voltage = atof(v2);
-	int _Current = atoi(v3);
+	float _Current = atof(v3);
 	unsigned char PreviousSystemStatus = 0xff;
 	int ch = 0;
 
@@ -444,9 +440,10 @@ void RunUnconditionalChargeIndex1(char *v1, char *v2, char *v3)
 		return;
 	}
 
-    printf ("ReqVoltage = %f, ReqCurrent = %d\n", _Voltage,_Current);
+    printf ("ReqVoltage = %f, ReqCurrent = %f\n", _Voltage, _Current);
 
-    if(_Voltage > 1000 || _Voltage < 150){
+    if(_Voltage > 1000 || _Voltage < 50)
+    {
 
         printf ("Input Voltage over range\n");
         return;
@@ -530,7 +527,7 @@ void RunUnconditionalChargeIndex1(char *v1, char *v2, char *v3)
         	        PreviousSystemStatus = _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus;
 
         	        printf ("[UnconditionalCharge - S_PREPARING_FOR_EV]\n");
-        	        printf ("ReqVoltage = %f, ReqCurrent = %d\n", _Voltage,_Current);
+        	        printf ("ReqVoltage = %f, ReqCurrent = %f \n", _Voltage,_Current);
 
         	    }
     		    //清除 main timeout 機制
@@ -610,14 +607,14 @@ void RunUnconditionalChargeIndex1(char *v1, char *v2, char *v3)
         	    {
         	        PreviousSystemStatus = _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->SystemStatus;
 
-        	        printf ("[UnconditionalCharge - S_CHARGING]\n");
+        	        //充電電壓電流
+        	        _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->EvBatterySoc = 50;
+        	        _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->EvBatterytargetVoltage = _Voltage;
+        	        _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->EvBatterytargetCurrent = _Current;
+        	        _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->AvailableChargingCurrent = 1000;
 
+        	        printf ("[UnconditionalCharge - S_CHARGING]\n");
         	    }
-    		    //充電電壓電流
-    		    _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->EvBatterySoc = 50;
-    		    _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->EvBatterytargetVoltage = _Voltage;
-    		    _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->EvBatterytargetCurrent = _Current;
-    		    _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->AvailableChargingCurrent = 1000;
 
     		    //ev task do this
     		    _chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->PresentChargingPower = ((float)((_chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->PresentChargingVoltage / 10) * (_chargingData[ShmSysConfigAndInfo->SysInfo.CurGunSelected]->PresentChargingCurrent / 10)) / 1000);
@@ -707,6 +704,14 @@ void RunUnconditionalChargeIndex1(char *v1, char *v2, char *v3)
 
 }
 
+void test()
+{
+	printf("L1 = %d, L2 = %d, L3 = %d \n", ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL1InputUVP,
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL2InputUVP,
+			ShmStatusCodeData->AlarmCode.AlarmEvents.bits.SystemL3InputUVP);
+	printf("ExtraErrProcess = %d \n", ShmSysConfigAndInfo->SysWarningInfo.ExtraErrProcess);
+}
+
 int main(void)
 {
 	if(InitShareMemory() == FAIL)
@@ -843,6 +848,10 @@ int main(void)
 			// 取得 PSU 資訊
 			GetPsuInformation(newString[1]);
 		}
+		else if(strcmp(newString[0], "test") == 0)
+		{
+			test();
+		}
 		else if(strcmp(newString[0], "strchg") == 0)
 		{
 			//如果連一個參數都沒有 (此命令不理會) 加上判斷第二參數
@@ -856,8 +865,8 @@ int main(void)
 			// 槍狀態
 			RunUnconditionalChargeIndex1(newString[1], newString[2], newString[3]);
 		}
-
-		printf ("%s\n", msg);
+		else
+			printf ("%s\n", msg);
 		usleep(100000);
 	}
 

+ 1 - 11
EVSE/Projects/PlugIt360/Apps/internalComm.c

@@ -48,7 +48,7 @@ int tranceive(int fd, unsigned char* cmd, unsigned char cmd_len, unsigned char*
 	tcflush(fd,TCIOFLUSH);
 	if(write(fd, cmd, cmd_len) >= cmd_len)
 	{
-		usleep(10000);
+		usleep(30000);
 		len = read(fd, rx, 512);
 	}
 	else
@@ -205,11 +205,6 @@ unsigned char Query_Fan_Speed(unsigned char fd, unsigned char targetAddr, FanSpe
 	unsigned char chksum = 0x00;
 	unsigned char len = tranceive(fd, tx, sizeof(tx), rx);
 
-//		for (int i = 0; i < 7; i++)
-//			printf("tx = %x \n", tx[i]);
-//		for (int i = 0; i < len; i++)
-//			printf("rx = %x \n", rx[i]);
-
 	if(len > 6)
 	{
 		if (len < 6+(rx[4] | rx[5]<<8))
@@ -454,12 +449,7 @@ unsigned char Config_Fan_Speed(unsigned char fd, unsigned char targetAddr, FanSp
 		chksum ^= tx[6+idx];
 	tx[14] = chksum;
 
-//		for(int i = 0; i < 15; i++)
-//			printf ("tx = %x \n", tx[i]);
-
 	unsigned char len = tranceive(fd, tx, sizeof(tx), rx);
-//	for(int i = 0; i < len; i++)
-//				printf ("rx = %x \n", rx[i]);
 	if(len > 6)
 	{
 		if (len < 6+(rx[4] | rx[5]<<8))

BIN
EVSE/Projects/PlugIt360/Apps/main


File diff suppressed because it is too large
+ 372 - 152
EVSE/Projects/PlugIt360/Apps/main.c


+ 1 - 2
EVSE/Projects/PlugIt360/Apps/timeout.h

@@ -44,8 +44,7 @@ enum Timeout_flag
 	Timeout_Preparing = 				6,
 	Timeout_EvChargingDet = 			7,
 	Timeout_EvseChargingDet = 			8,
-	Timeout_WaitforCompleteDet = 		9,
-
+	Timeout_EvseCompleteDet = 			9,
 	Timeout_ForCcsPrechargeDet = 		10,
 	Timeout_ReturnToChargingGunDet = 	11
 };

BIN
EVSE/Projects/PlugIt360/Images/MLO


BIN
EVSE/Projects/PlugIt360/Images/root/Module_4g


BIN
EVSE/Projects/PlugIt360/Images/root/Module_EvComm


BIN
EVSE/Projects/PlugIt360/Images/root/Module_EventLogging


BIN
EVSE/Projects/PlugIt360/Images/root/Module_InternalComm


BIN
EVSE/Projects/PlugIt360/Images/root/Module_LcmControl


BIN
EVSE/Projects/PlugIt360/Images/root/Module_PrimaryComm


BIN
EVSE/Projects/PlugIt360/Images/root/Module_PsuComm


BIN
EVSE/Projects/PlugIt360/Images/root/ReadCmdline


BIN
EVSE/Projects/PlugIt360/Images/root/WebService


BIN
EVSE/Projects/PlugIt360/Images/root/main


BIN
EVSE/Projects/PlugIt360/Images/u-boot.img


BIN
EVSE/Projects/PlugIt360/Images/zImage


BIN
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/.tmp_vmlinux1


BIN
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/.tmp_vmlinux2


+ 1 - 1
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/.version

@@ -1 +1 @@
-19
+21

+ 98 - 19
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/arch/arm/boot/dts/.am335x-evm.dtb.dts.tmp

@@ -1199,22 +1199,35 @@
 
 
 
+   0x020 (((1 << 5) | (1 << 3)) | 7)
+   0x024 (((1 << 5) | (1 << 3)) | 7)
+   0x028 (((1 << 5) | (1 << 3)) | 7)
+   0x02C (((1 << 5) | (1 << 3)) | 7)
    0x144 (((1 << 5) | (1 << 3)) | 7)
    0x1B0 (((1 << 3)) | 7)
    0x1B4 (((1 << 5) | (1 << 3)) | 7)
 
 
-   0x08C (((1 << 3)) | 7)
-   0x0A0 (((1 << 3)) | 7)
-   0x0A4 (((1 << 3)) | 7)
-   0x0A8 (((1 << 3)) | 7)
-   0x0AC (((1 << 3)) | 7)
-   0x0B0 (((1 << 3)) | 7)
-   0x0B4 (((1 << 3)) | 7)
+   0x030 (((1 << 5) | (1 << 3)) | 7)
+   0x034 (((1 << 5) | (1 << 3)) | 7)
+   0x038 (((1 << 5) | (1 << 3)) | 7)
+   0x03C (((1 << 5) | (1 << 3)) | 7)
+
+
+   0x0EC (((1 << 3)) | 7)
+   0x0E4 (((1 << 3)) | 7)
    0x0E8 (((1 << 5) | (1 << 3)) | 7)
-   0x0E0 (((1 << 3)) | 7)
+   0x0E0 (((1 << 5) | (1 << 3)) | 7)
+
 
+   0x194 (((1 << 5) | (1 << 3)) | 7)
+   0x1A0 (((1 << 5) | (1 << 3)) | 7)
+   0x19C (((1 << 5) | (1 << 3)) | 7)
+   0x190 (((1 << 3)) | 7)
+   0x1A4 (((1 << 3)) | 7)
+   0x198 (((1 << 3)) | 7)
    0x1A8 (((1 << 3)) | 7)
+
   >;
  };
 
@@ -1259,7 +1272,14 @@
    0x164 (0 | 1)
   >;
  };
-# 136 "arch/arm/boot/dts/am335x-evm.dts"
+
+ uart5_pins: pinmux_uart5_pins {
+  pinctrl-single,pins = <
+   0x0C0 (0 | 4)
+   0x0C4 (((1 << 5) | (1 << 4)) | 4)
+  >;
+ };
+
  clkout2_pin: pinmux_clkout2_pin {
   pinctrl-single,pins = <
    0x1b4 (0 | 3)
@@ -1310,12 +1330,12 @@
   pinctrl-single,pins = <
 
 
-
-
+   0x108 (((1 << 5) | (1 << 4)) | 0)
+   0x10C(((1 << 5) | (1 << 4)) | 0)
    0x110 (((1 << 5) | (1 << 4)) | 0)
-   0x118 (((1 << 5) | (1 << 4)) | 0)
    0x12c (((1 << 5) | (1 << 4)) | 0)
    0x130 (((1 << 5) | (1 << 4)) | 0)
+   0x118 (((1 << 5) | (1 << 4)) | 0)
    0x134 (((1 << 5) | (1 << 4)) | 0)
    0x138 (((1 << 5) | (1 << 4)) | 0)
    0x13c (((1 << 5) | (1 << 4)) | 0)
@@ -1326,6 +1346,23 @@
    0x124 (0 | 0)
    0x128 (0 | 0)
 
+
+   ((((0x878)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x888)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 2)
+
+   ((((0x858)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x85c)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x844)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x860)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x864)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x868)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x86c)) & 0xffff) - (0x0800)) (((1 << 5) | (1 << 4)) | 1)
+   ((((0x840)) & 0xffff) - (0x0800)) (0 | 1)
+   ((((0x848)) & 0xffff) - (0x0800)) (0 | 1)
+   ((((0x84c)) & 0xffff) - (0x0800)) (0 | 1)
+   ((((0x850)) & 0xffff) - (0x0800)) (0 | 1)
+   ((((0x854)) & 0xffff) - (0x0800)) (0 | 1)
+
   >;
  };
 
@@ -1345,6 +1382,23 @@
    0x13c (((1 << 5)) | 7)
    0x140 (((1 << 5)) | 7)
 
+
+   ((((0x888)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x840)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x844)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x848)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x84c)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x850)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x854)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x858)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x85c)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x860)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x864)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x868)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+   ((((0x86c)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+
+   ((((0x878)) & 0xffff) - (0x0800)) (((1 << 5)) | 7)
+
   >;
  };
 
@@ -1383,7 +1437,14 @@
    0x17C (((1 << 5)) | 2)
   >;
  };
-# 280 "arch/arm/boot/dts/am335x-evm.dts"
+
+ dcan1_pins_default: dcan1_pins_default {
+  pinctrl-single,pins = <
+   0x168 (((1 << 4)) | 2)
+   0x16C (((1 << 5)) | 2)
+  >;
+ };
+# 327 "arch/arm/boot/dts/am335x-evm.dts"
 };
 
 
@@ -1415,7 +1476,14 @@
 
  status = "okay";
 };
-# 319 "arch/arm/boot/dts/am335x-evm.dts"
+
+&uart5 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart5_pins>;
+
+ status = "okay";
+};
+
 &i2c0 {
  pinctrl-names = "default";
  pinctrl-0 = <&i2c0_pins>;
@@ -1444,7 +1512,6 @@
                 compatible = "nxp,pcf85063";
                 reg = <0x51>;
         };
-
 };
 
 &usb {
@@ -1479,7 +1546,7 @@
 &elm {
  status = "okay";
 };
-# 403 "arch/arm/boot/dts/am335x-evm.dts"
+# 449 "arch/arm/boot/dts/am335x-evm.dts"
 &gpmc {
  status = "okay";
  pinctrl-names = "default", "sleep";
@@ -1665,7 +1732,7 @@
   };
  };
 };
-# 509 "arch/arm/boot/dts/am335x-evm.dts" 2
+# 555 "arch/arm/boot/dts/am335x-evm.dts" 2
 
 &tps {
  vcc1-supply = <&vbat>;
@@ -1748,6 +1815,7 @@
  pinctrl-names = "default", "sleep";
  pinctrl-0 = <&cpsw_default>;
  pinctrl-1 = <&cpsw_sleep>;
+ dual_emac = <1>;
  status = "okay";
 };
 
@@ -1756,15 +1824,20 @@
  pinctrl-0 = <&davinci_mdio_default>;
  pinctrl-1 = <&davinci_mdio_sleep>;
  status = "okay";
-
 };
 
 &cpsw_emac0 {
  phy_id = <&davinci_mdio>, <1>;
   phy-mode = "mii";
+  dual_emac_res_vlan = <1>;
+};
 
+&cpsw_emac1 {
+ phy_id = <&davinci_mdio>, <2>;
+  phy-mode = "mii";
+  dual_emac_res_vlan = <2>;
 };
-# 615 "arch/arm/boot/dts/am335x-evm.dts"
+
 &tscadc {
  status = "okay";
 
@@ -1811,3 +1884,9 @@
  pinctrl-names = "default";
  pinctrl-0 = <&dcan0_pins_default>;
 };
+
+&dcan1 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&dcan1_pins_default>;
+};

+ 80 - 36
board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/arch/arm/boot/dts/am335x-evm.dts

@@ -64,23 +64,36 @@
 		pinctrl-single,pins = <
 		
 			/** Offset: 0x800 */
-			/** GPIO 0 */ 
+			/** GPIO 0 */   
+			0x020 (PIN_INPUT | MUX_MODE7)			/* GPMC_AD8			=> 	GPIO0_22 */	/*ID BD1_1*/
+			0x024 (PIN_INPUT | MUX_MODE7)    			/* GPMC_AD9			=>	GPIO0_23 */	/*ID BD1_2*/
+			0x028 (PIN_INPUT | MUX_MODE7)    			/* GPMC_AD10		=>	GPIO0_26 */	/*IO BD1_1*/
+			0x02C (PIN_INPUT | MUX_MODE7)    		/* GPMC_AD11		=>	GPIO0_27 */	/*IO BD1_2*/
 			0x144 (PIN_INPUT | MUX_MODE7)    			/* RMII1_REF_CLK		=>	GPIO0_29 */	/*USB 0 OCP detection*/
 			0x1B0 (PIN_OUTPUT | MUX_MODE7)			/*XDMA_EVENT_INTR0	=>	GPIO0_19 */	/*AM_RFID_RST*/
 			0x1B4 (PIN_INPUT | MUX_MODE7)			/*XDMA_EVENT_INTR1	=>	GPIO0_20 */	/*AM_RFID_ICC*/
-			/** GPIO 1 */			
+			
+			/** GPIO 1 */
+			0x030 (PIN_INPUT | MUX_MODE7)			/* GPMC_AD12	=> 	GPIO1_12 */	/*ID BD2_1*/
+			0x034 (PIN_INPUT | MUX_MODE7)    			/* GPMC_AD13	=>	GPIO1_13 */	/*ID BD2_2*/
+			0x038 (PIN_INPUT | MUX_MODE7)    			/* GPMC_AD14	=>	GPIO1_14 */	/*IO BD2_1*/
+			0x03C (PIN_INPUT | MUX_MODE7)    		/* GPMC_AD15	=>	GPIO1_15 */	/*IO BD2_2*/
+			
 			/** GPIO 2 */
-			0x08C (PIN_OUTPUT | MUX_MODE7)			/*GPMC_CLK	=>	GPIO2_1*/	/*Speaker*/
-			0x0A0 (PIN_OUTPUT | MUX_MODE7)			/*LCD_DATA0	=>	GPIO2_6*/	/*Panel LED control-BB_LEDR1*/
-			0x0A4 (PIN_OUTPUT | MUX_MODE7)			/*LCD_DATA1	=>	GPIO2_7*/	/*Panel LED control-BB_LEDG1*/
-			0x0A8 (PIN_OUTPUT | MUX_MODE7)			/*LCD_DATA2	=>	GPIO2_8*/	/*Panel LED control-BB_LEDB1*/
-			0x0AC (PIN_OUTPUT | MUX_MODE7)			/*LCD_DATA3	=>	GPIO2_9*/	/*Panel LED control-BB_LEDR2*/
-			0x0B0 (PIN_OUTPUT | MUX_MODE7)			/*LCD_DATA4	=>	GPIO2_10*/	/*Panel LED control-BB_LEDG2*/
-			0x0B4 (PIN_OUTPUT | MUX_MODE7)			/*LCD_DATA5	=>	GPIO2_11*/	/*Panel LED control-BB_LEDB2*/
-			0x0E8 (PIN_INPUT | MUX_MODE7)			/*LCD_PCLK	=>	GPIO2_24*/	/*communication board proximity*/
-			0x0E0 (PIN_OUTPUT | MUX_MODE7)			/*LCD_VSYNC	=>	GPIO2_22*/	/*Breath LED*/
+			0x0EC (PIN_OUTPUT | MUX_MODE7)			/*LCD_AC_BIAS_EN	=>	GPIO2_25*/	/*RS-485 for module DE control*/
+			0x0E4 (PIN_OUTPUT | MUX_MODE7)			/*LCD_HSYNC		=>	GPIO2_23*/	/*RS-485 for module RE control*/
+			0x0E8 (PIN_INPUT | MUX_MODE7)			/*LCD_PCLK		=>	GPIO2_24*/	/*CCS communication board 1 proximity*/
+			0x0E0 (PIN_INPUT | MUX_MODE7)			/*LCD_VSYNC		=>	GPIO2_22*/	/*CCS communication board 2 proximity*/
+			
 			/** GPIO 3 */
-			0x1A8 (PIN_OUTPUT | MUX_MODE7)			/* MCASP0_AXR1	=>	GPIO3_20 */	/*control MCU to output CP PWM*/
+			0x194 (PIN_INPUT | MUX_MODE7)			/*MCASP0_FSX		=>	GPIO3_15*/	/*Emergency Stop button detect*/
+			0x1A0 (PIN_INPUT | MUX_MODE7)			/*MCASP0_ACLKR	=>	GPIO3_18*/	/*USB1 OCP detect*/
+			0x19C (PIN_INPUT | MUX_MODE7)			/*MCASP0_AHCLKR	=>	GPIO3_17*/	/*Emergency IO for AM3352 and STM32F407*/
+			0x190 (PIN_OUTPUT | MUX_MODE7)			/*MCASP0_ACLKX	=>	GPIO3_14*/	/*Ethernet PHY reset*/
+			0x1A4 (PIN_OUTPUT | MUX_MODE7)			/* MCASP0_FSR		=>	GPIO3_19 */	/*SMR Enable control_1*/
+			0x198 (PIN_OUTPUT | MUX_MODE7)			/* MCASP0_AXR0	=>	GPIO3_16 */	/*CSU board function OK indicator.*/
+			0x1A8 (PIN_OUTPUT | MUX_MODE7)			/* MCASP0_AXR1	=>	GPIO3_20 */	/*SMR Enable control_2*/
+			
 		>;
 	};
 	
@@ -125,14 +138,14 @@
 			0x164 (PIN_OUTPUT_PULLDOWN | MUX_MODE1)	/* ECAP0_IN_PWM0_OUT		=>	uart3_txd */
 		>;
 	};
-#if 0
+
 	uart5_pins: pinmux_uart5_pins {
 		pinctrl-single,pins = <
-			0x0C0 (PIN_INPUT_PULLUP | MUX_MODE4)		/* LCD_DATA8	=>	UART5_RXD*/
-			0x0C4 (PIN_OUTPUT_PULLDOWN | MUX_MODE4)	/* LCD_DATA9	=>	UART5_TXD*/
+			0x0C0 (PIN_OUTPUT_PULLDOWN | MUX_MODE4)		/* LCD_DATA8	=>	DUART5_TX*/
+			0x0C4 (PIN_INPUT_PULLUP | MUX_MODE4)			/* LCD_DATA9	=>	UART5_RX*/
 		>;
 	};
-#endif	
+	
 	clkout2_pin: pinmux_clkout2_pin {
 		pinctrl-single,pins = <
 			0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3)	/* xdma_event_intr1.clkout2 */
@@ -183,12 +196,12 @@
 		pinctrl-single,pins = <					
 		
 			/* Slave 1 */
-			//0x108 (PIN_INPUT_PULLDOWN | MUX_MODE0)		/* MII1_COL.gmii1_col */
-			//0x10C(PIN_INPUT_PULLDOWN | MUX_MODE0)		/* MII1_CRS.MII1_CRS */
+			0x108 (PIN_INPUT_PULLUP | MUX_MODE0)		/* MII1_COL.gmii1_col */
+			0x10C(PIN_INPUT_PULLUP | MUX_MODE0)		/* MII1_CRS.MII1_CRS */
 			0x110 (PIN_INPUT_PULLUP | MUX_MODE0)		/* MII1_RX_ER.gmii1_rxerr */
-			0x118 (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_rxdv.mii1_rxdv */
 			0x12c (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_txclk.mii1_txclk */
 			0x130 (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_rxclk.mii1_rxclk */
+			0x118 (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_rxdv.mii1_rxdv */
 			0x134 (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_rxd3.rgmii1_rd3 */
 			0x138 (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_rxd2.rgmii1_rd2 */
 			0x13c (PIN_INPUT_PULLUP | MUX_MODE0)		/* mii1_rxd1.rgmii1_rd1 */
@@ -197,7 +210,24 @@
 			0x11c (PIN_OUTPUT_PULLDOWN | MUX_MODE0)		/* mii1_txd3.rgmii1_td3 */
 			0x120 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)		/* mii1_txd2.rgmii1_td2 */
 			0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)		/* mii1_txd1.rgmii1_td1 */
-			0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)		/* mii1_txd0.rgmii1_td0 */      
+			0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE0)		/* mii1_txd0.rgmii1_td0 */      	
+			
+			/* Slave 2 */
+			AM33XX_IOPAD(0x878, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_ben1.mii2_col */
+			AM33XX_IOPAD(0x888, PIN_INPUT_PULLUP | MUX_MODE2)					/* GPMC_CSn3.rmii2_crs_dv*/								
+			/*AM33XX_IOPAD(0x874, PIN_INPUT_PULLUP | MUX_MODE1)*/					/* gpmc_wpn.mii2_rxerr */
+			AM33XX_IOPAD(0x858, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a6.mii2_txclk */
+			AM33XX_IOPAD(0x85c, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a7.mii2_rxclk */
+			AM33XX_IOPAD(0x844, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a1.mii2_rxdv */
+			AM33XX_IOPAD(0x860, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a8.mii2_rxd3 */
+			AM33XX_IOPAD(0x864, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a9.mii2_rxd2 */
+			AM33XX_IOPAD(0x868, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a10.mii2_rxd1 */
+			AM33XX_IOPAD(0x86c, PIN_INPUT_PULLUP | MUX_MODE1)					/* gpmc_a11.mii2_rxd0 */
+			AM33XX_IOPAD(0x840, PIN_OUTPUT_PULLDOWN | MUX_MODE1)				/* gpmc_a0.mii2_txen */
+			AM33XX_IOPAD(0x848, PIN_OUTPUT_PULLDOWN | MUX_MODE1)				/* gpmc_a2.mii2_txd3 */
+			AM33XX_IOPAD(0x84c, PIN_OUTPUT_PULLDOWN | MUX_MODE1)				/* gpmc_a3.mii2_txd2 */
+			AM33XX_IOPAD(0x850, PIN_OUTPUT_PULLDOWN | MUX_MODE1)				/* gpmc_a4.mii2_txd1 */
+			AM33XX_IOPAD(0x854, PIN_OUTPUT_PULLDOWN | MUX_MODE1)				/* gpmc_a5.mii2_txd0 */
 
 		>;
 	};
@@ -218,6 +248,23 @@
 			0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
 			0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)		
 			
+			/* Slave 2 */
+			AM33XX_IOPAD(0x888, PIN_INPUT_PULLDOWN | MUX_MODE7)					/* GPMC_CSn3.rmii2_crs_dv*/	
+			AM33XX_IOPAD(0x840, PIN_INPUT_PULLDOWN | MUX_MODE7)				/* gpmc_a0.mii2_txen */
+			AM33XX_IOPAD(0x844, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a1.mii2_rxdv */
+			AM33XX_IOPAD(0x848, PIN_INPUT_PULLDOWN | MUX_MODE7)				/* gpmc_a2.mii2_txd3 */
+			AM33XX_IOPAD(0x84c, PIN_INPUT_PULLDOWN | MUX_MODE7)			/* gpmc_a3.mii2_txd2 */
+			AM33XX_IOPAD(0x850, PIN_INPUT_PULLDOWN | MUX_MODE7)				/* gpmc_a4.mii2_txd1 */
+			AM33XX_IOPAD(0x854, PIN_INPUT_PULLDOWN | MUX_MODE7)				/* gpmc_a5.mii2_txd0 */
+			AM33XX_IOPAD(0x858, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a6.mii2_txclk */
+			AM33XX_IOPAD(0x85c, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a7.mii2_rxclk */
+			AM33XX_IOPAD(0x860, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a8.mii2_rxd3 */
+			AM33XX_IOPAD(0x864, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a9.mii2_rxd2 */
+			AM33XX_IOPAD(0x868, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a10.mii2_rxd1 */
+			AM33XX_IOPAD(0x86c, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_a11.mii2_rxd0 */
+			/*AM33XX_IOPAD(0x874, PIN_INPUT_PULLDOWN | MUX_MODE7)*/	/* gpmc_wpn.mii2_rxerr */
+			AM33XX_IOPAD(0x878, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* gpmc_ben1.mii2_col */
+			
 		>;
 	};
 
@@ -256,14 +303,14 @@
 			0x17C (PIN_INPUT_PULLDOWN | MUX_MODE2)		/* uart1_rtsn	=>	d_can0_rx */
 		>;
 	};
-#if 0	
+	
 	dcan1_pins_default: dcan1_pins_default {
 		pinctrl-single,pins = <
 			0x168 (PIN_OUTPUT_PULLUP | MUX_MODE2)		/* UART0_CTSn		=>	d_can1_tx */
 			0x16C (PIN_INPUT_PULLDOWN | MUX_MODE2)	/* UART0_RTSn		=>	d_can1_rx */
 		>;
 	};
-
+#if 0
 	ehrpwm1_pins: ehrpwm1_pins {
 		pinctrl-single,pins = <			
 			0x0C8 (PIN_OUTPUT | MUX_MODE2) /* LCD_DATA10.eHRPWM1A */
@@ -308,14 +355,14 @@
 
 	status = "okay";
 };
-#if 0
+
 &uart5 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&uart5_pins>;
 
 	status = "okay";
 };
-#endif
+
 &i2c0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&i2c0_pins>;
@@ -326,11 +373,11 @@
 	tps: tps@2d {
 		reg = <0x2d>;
 	};
-
+	
 /*	rtc0: rtc@51 {
-		compatible = "nxp,pcf85063";
-		reg = <0x51>;
-	};*/
+                compatible = "nxp,pcf85063";
+                reg = <0x51>;
+        };*/	
 };
 #if 1
 &i2c1 {
@@ -344,7 +391,6 @@
                 compatible = "nxp,pcf85063";
                 reg = <0x51>;
         };
-
 };
 #endif
 &usb {
@@ -588,6 +634,7 @@
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&cpsw_default>;
 	pinctrl-1 = <&cpsw_sleep>;
+	dual_emac = <1>;
 	status = "okay";
 };
 
@@ -596,21 +643,19 @@
 	pinctrl-0 = <&davinci_mdio_default>;
 	pinctrl-1 = <&davinci_mdio_sleep>;
 	status = "okay";
-	//reset-gpios = <&gpio3 14 GPIO_ACTIVE_LOW>;
 };
 
 &cpsw_emac0 {
 	phy_id = <&davinci_mdio>, <1>;
  	phy-mode = "mii";
-
+ 	dual_emac_res_vlan = <1>;
 };
-#if 0
+
 &cpsw_emac1 {
 	phy_id = <&davinci_mdio>, <2>;
  	phy-mode = "mii";
-
+ 	dual_emac_res_vlan = <2>;
 };
-#endif
 
 &tscadc {
 	status = "okay";
@@ -658,10 +703,9 @@
 	pinctrl-names = "default";
 	pinctrl-0 = <&dcan0_pins_default>;
 };
-#if 0
+
 &dcan1 {
 	status = "okay";	
 	pinctrl-names = "default";
 	pinctrl-0 = <&dcan1_pins_default>;
 };
-#endif

Some files were not shown because too many files changed in this diff