Procházet zdrojové kódy

2020-06-05 / Alston Lin

Actions
1. add features for using infypower

Files
1. As follow commit history
Alston před 4 roky
rodič
revize
45c92a0901

+ 106 - 0
EVSE/Modularization/Infypwr_PsuCommObj.c

@@ -118,6 +118,21 @@ void RefreshIavailable(void *func)
 	return_iavail_info = func;
 }
 
+void AutoMode_RefreshOutputAndTemp(void *func)
+{
+	return_output_temp = func;
+}
+
+void AutoMode_RefreshModuleStatus(void *func)
+{
+	return_module_status = func;
+}
+
+void AutoMode_RefreshModuleInput(void *func)
+{
+	return_module_input = func;
+}
+
 //================================================
 // CANBUS initialization
 //================================================
@@ -305,6 +320,52 @@ void ReceiveDataFromCanBus()
 					//PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
 				}
 					break;
+				case INFYPWR_GROUP_SHIFT | AUTO_OUTPUT_TEMP:
+				{
+					/*Test mode used*/
+					// 回傳輸出值與入風口溫度
+					address = frame.can_id & 0x000000FF;
+
+					short outputVol = ((frame.data[0] << 8) + frame.data[1]);
+					short outputCur = ((frame.data[2] << 8) + frame.data[3]);
+					short outputPow = ((frame.data[4] << 8) + frame.data[5]);
+					byte temp = frame.data[6];
+
+					return_output_temp(address, outputVol, outputCur, outputPow, temp);
+					//PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
+				}
+					break;
+				case INFYPWR_GROUP_SHIFT | AUTO_MODULE_STATUS:
+				{
+					/*Test mode used*/
+					// 回傳輸出值與入風口溫度
+					address = frame.can_id & 0x000000FF;
+
+					byte isErr =  (frame.data[0] >> 0) & 0x01;
+					byte status = (frame.data[0] >> 1) & 0x01;
+					byte err1 = frame.data[2];
+					byte err2 = frame.data[3];
+					byte err3 = frame.data[4];
+					byte err4 = frame.data[5];
+
+					return_module_status(address, isErr, status, err1, err2, err3, err4);
+					//PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
+				}
+					break;
+				case INFYPWR_GROUP_SHIFT | AUTO_MODULE_INPUT:
+				{
+					/*Test mode used*/
+					// 回傳輸出值與入風口溫度
+					address = frame.can_id & 0x000000FF;
+
+					short vR = ((frame.data[0] << 8) + frame.data[1]);
+					short vS = ((frame.data[2] << 8) + frame.data[3]);
+					short vT = ((frame.data[4] << 8) + frame.data[5]);
+
+					return_module_input(address, vR, vS, vT);
+					//PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
+				}
+					break;
 			}
 		}
 		usleep(10000);
@@ -456,6 +517,51 @@ void FanNoiseInfo(byte group, byte value)
 	SendCmdToPsu(cmd, data, sizeof(data));
 }
 
+
+void SetWalkInConfig(byte group, byte enable, byte sec)
+{
+	byte data[8];
+	uint cmd = INFYPWR_CMD | WALK_IN_MODE;  //0x180100E5
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+	unsigned short _Sec = sec * 100;
+
+	// Walk-in mode enable
+	data[0] = enable;
+	// Walk-in time (default == 5s)
+	data[6] = (_Sec >> 8) & 0xFF;
+	data[7] = _Sec & 0xFF;
+
+	if (group == SYSTEM_CMD)
+		cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
+	else
+		cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
+	SendCmdToPsu(cmd, data, sizeof(data));
+}
+
+void SetDirModulePresentOutput(byte group, int voltage, int current, byte _switch)
+{
+	byte data[8];
+	uint cmd = TEST_PRESENT_OUT;  //0x180100E5
+
+	memset(data, 0x00, ARRAY_SIZE(data));
+
+	// 輸出電壓
+	data[0] = (voltage >> 8) & 0xFF;
+	data[1] = voltage & 0xFF;
+	// 輸出電流
+	data[2] = (current >> 8) & 0xFF;
+	data[3] = current & 0xFF;
+	// 開 / 關
+	data[4] = _switch;
+
+	if (group == SYSTEM_CMD)
+		cmd |= INFYPWR_BROADCAST;
+	else
+		cmd |= (group << 8);
+	SendCmdToPsu(cmd, data, sizeof(data));
+}
+
 /**********************************************************************************/
 /***                                                                            ***/
 /***                                   Get                                      ***/

+ 24 - 1
EVSE/Modularization/Infypwr_PsuCommObj.h

@@ -87,9 +87,12 @@ enum PSU_SET_CMD
 {
 	MIS_INFO = 					0x008F0000,		// 現在只能改變降噪模式
 	FLASH_LED = 				0x00940000,
+	WALK_IN_MODE = 				0x00930000,
 	SLEEP_MODE =  	            0x00990000,		// 當 SWITCH POWER 打開時,可透過該指令讓模塊休眠 (風扇會停)
     SWITCH_POWER = 	            0x009A0000,		// 打開,則模塊依照設定的輸出功率輸出
 	PRESENT_OUT_VOL = 			0x009B0000,
+	/*Test mode used*/
+	TEST_PRESENT_OUT = 			0x180100E5,
 };
 
 enum PSU_GET_CMD
@@ -102,7 +105,11 @@ enum PSU_GET_CMD
 	MODULE_CAP = 				0x008A0000,		// 取得當前 Group 的最大電壓、最大電流、最小電壓、額定功率
 	MODULE_BARCODE =			0x008B0000,		// 取得 BarCode
 	MODULE_IAVAILABLE =			0x008C0000,		// 取得實際模塊可輸出的電流能力 (降載)
-	MODULE_MIS_INFO = 			0x008E0000		// 取得模塊資訊 (Tdc、Tpfc、風扇速度)
+	MODULE_MIS_INFO = 			0x008E0000,		// 取得模塊資訊 (Tdc、Tpfc、風扇速度)
+	/*Test mode used*/
+	AUTO_OUTPUT_TEMP = 			0x00010000,
+	AUTO_MODULE_STATUS = 		0x00020000,
+	AUTO_MODULE_INPUT = 		0x00030000,
 };
 
 union FloatingPointIEEE754
@@ -125,6 +132,10 @@ void SleepMode(byte group, byte value);
 void FlashLed(byte group, byte value);
 void PresentOutputVol(byte group, int voltage, int current);
 void FanNoiseInfo(byte group, byte value);
+void SetWalkInConfig(byte group, byte enable, byte sec);
+
+/*Test mode used*/
+void SetDirModulePresentOutput(byte group, int voltage, int current, byte _switch);
 /*Get Cmd*/
 void GetStatus(byte group);
 void GetFanSpeed(byte group);
@@ -161,5 +172,17 @@ void (*return_fanspeed_info)(byte address, unsigned int fanSpeed);
 void RefreshIavailable(void *func);
 void (*return_iavail_info)(byte address, unsigned short Iavail, unsigned short Vext);
 
+/*Test mode used*/
+void AutoMode_RefreshOutputAndTemp(void *func);
+void (*return_output_temp)(byte address, unsigned short outputVol,
+		unsigned short outputCur, unsigned short outputPower, unsigned char Temperature);
+
+void AutoMode_RefreshModuleStatus(void *func);
+void (*return_module_status)(byte address, unsigned char isErr, unsigned char status,
+		unsigned char err1, unsigned char err2, unsigned char err3, unsigned char err4);
+
+void AutoMode_RefreshModuleInput(void *func);
+void (*return_module_input)(byte address, unsigned short inputR,
+		unsigned short inputS, unsigned short inputT);
 /* Callback Function end */
 #endif /* INFYPWR_PSUCOMMOBJ_H_ */