|
@@ -39,19 +39,15 @@ void PRINTF_LIB_FUNC(char *string, ...)
|
|
|
|
|
|
float IEEE_754_to_float(const byte raw[4])
|
|
|
{
|
|
|
- int sign = (raw[0] >> 7) ? -1 : 1;
|
|
|
+ float fValue = 0;
|
|
|
+ byte *pbyte = (byte *)&fValue;
|
|
|
|
|
|
- byte exponent = (raw[0] << 1) + (raw[1] >> 7) - 126;
|
|
|
+ *(pbyte + 0) = raw[3];
|
|
|
+ *(pbyte + 1) = raw[2];
|
|
|
+ *(pbyte + 2) = raw[1];
|
|
|
+ *(pbyte + 3) = raw[0];
|
|
|
|
|
|
- unsigned int fraction_bits = ((raw[1] & 0x7F) << 16) + (raw[2] << 8) + raw[3];
|
|
|
-
|
|
|
- float fraction = 0.5f;
|
|
|
- for (byte ii = 0; ii < 24; ++ii)
|
|
|
- fraction += ldexpf((fraction_bits >> (23 - ii)) & 1, -(ii + 1));
|
|
|
-
|
|
|
- float significand = sign * fraction;
|
|
|
-
|
|
|
- return ldexpf(significand, exponent);
|
|
|
+ return fValue;
|
|
|
}
|
|
|
|
|
|
void IEEE_754_to_bytes(float target, byte *bytes2)
|
|
@@ -248,7 +244,7 @@ void ReceiveDataFromCanBus()
|
|
|
{
|
|
|
int nbytes;
|
|
|
struct can_frame frame;
|
|
|
- int intCmd = 0;
|
|
|
+ PwrFrame *PwrFrameMsg;
|
|
|
byte group, address;
|
|
|
byte _totalModuleCount = 0;
|
|
|
bool colFinished = false;
|
|
@@ -270,304 +266,305 @@ void ReceiveDataFromCanBus()
|
|
|
|
|
|
if (nbytes > 0)
|
|
|
{
|
|
|
- if (isFilterValue(frame.can_id & 0xFFFF0000) == YES)
|
|
|
- continue;
|
|
|
-
|
|
|
-// if (frame.can_id == 0x82caf000 || frame.can_id == 0x82caf001 ||
|
|
|
-// frame.can_id == 0x82c1f000 || frame.can_id == 0x82c1f001 ||
|
|
|
-// frame.can_id == 0x82ccf000 || frame.can_id == 0x82ccf001 ||
|
|
|
-// frame.can_id == 0x9901ff00 || frame.can_id == 0x9902ff00 || frame.can_id == 0x9903ff00 ||
|
|
|
-// frame.can_id == 0x9901ff01 || frame.can_id == 0x9902ff01 || frame.can_id == 0x9903ff01 ||
|
|
|
-// frame.can_id == 0x82c7f000 || frame.can_id == 0x82c7f001)
|
|
|
-// {}
|
|
|
-// else
|
|
|
-// printf("can_id = %x \n", frame.can_id);
|
|
|
-
|
|
|
- frame.can_id = frame.can_id & CAN_EFF_MASK;
|
|
|
- intCmd = frame.can_id & 0x00FF0000;
|
|
|
- intCmd |= INFYPWR_GROUP_SHIFT | intCmd;
|
|
|
-
|
|
|
- switch (intCmd)
|
|
|
- {
|
|
|
- case WALK_IN_MODE:
|
|
|
- case INFYPWR_GROUP_SHIFT | WALK_IN_MODE:
|
|
|
- {
|
|
|
- //address = frame.can_id & 0x000000FF;
|
|
|
-// printf("walk in response address = %d, [0] = %d, [1] = %d, [2] = %d, [3] = %d, [4] = %d, [5] = %d, [6] = %d, [7] = %d \n"
|
|
|
-// , address,
|
|
|
-// frame.data[0], frame.data[1],
|
|
|
-// frame.data[2], frame.data[3],
|
|
|
-// frame.data[4], frame.data[5],
|
|
|
-// frame.data[6], frame.data[7]);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | STATUS:
|
|
|
- {
|
|
|
- group = frame.data[2];
|
|
|
- byte SN = frame.can_id & 0x000000FF;
|
|
|
- bool isfind = false;
|
|
|
-
|
|
|
- if (group < 2 && !colFinished)
|
|
|
- {
|
|
|
- for(byte _index = 0; _index < infy_pow_info[group].psuCount; _index++)
|
|
|
- {
|
|
|
- if (infy_pow_info[group].serialNumber[_index] == SN)
|
|
|
- {
|
|
|
- isfind = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!isfind)
|
|
|
- {
|
|
|
- infy_pow_info[group].serialNumber[infy_pow_info[group].psuCount] = SN;
|
|
|
- infy_pow_info[group].targetNumber[infy_pow_info[group].psuCount] = infy_pow_info[group].psuCount;
|
|
|
- infy_pow_info[group].psuCount++;
|
|
|
- }
|
|
|
-
|
|
|
- byte subPcount = 0;
|
|
|
- for (byte i = 0; i < 2; i++)
|
|
|
- {
|
|
|
- subPcount += infy_pow_info[i].psuCount;
|
|
|
- }
|
|
|
-
|
|
|
- if (subPcount > 0 && subPcount == _totalModuleCount)
|
|
|
- colFinished = true;
|
|
|
- }
|
|
|
-
|
|
|
- short temp = frame.data[4];
|
|
|
- int status = (frame.data[5] << 16) + (frame.data[6] << 8) + frame.data[7];
|
|
|
-
|
|
|
- return_status(group, SN, temp, status);
|
|
|
- //PRINTF_LIB_FUNC("group = %d, address = %d, temp = %d \n", group, address, temp);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_COUNT:
|
|
|
- {
|
|
|
- // 回傳模組數量
|
|
|
- group = frame.can_id & 0x000000FF;
|
|
|
-
|
|
|
- byte count = frame.data[2];
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- {
|
|
|
- _totalModuleCount = count;
|
|
|
- }
|
|
|
-
|
|
|
- return_module_count(group, count);
|
|
|
- //PRINTF_LIB_FUNC("group = %d, count = %d \n", group, count);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case MODULE_CAP:
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_CAP:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- // 回傳輸出能力 : 最大電壓、最小電壓、最大電流、額定功率
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- short maxVol = ((frame.data[0] << 8) + frame.data[1]) * 10;
|
|
|
- short minVol = ((frame.data[2] << 8) + frame.data[3]) * 10;
|
|
|
- short maxCur = (frame.data[4] << 8) + frame.data[5];
|
|
|
- short totalPow = ((frame.data[6] << 8) + frame.data[7]) / 10;
|
|
|
-
|
|
|
- return_available_cap(address, maxVol, minVol, maxCur, totalPow);
|
|
|
-// PRINTF_LIB_FUNC("address = %d, maxVol = %d, minVol = %d, maxCur = %d, totalPow = %d \n",
|
|
|
-// address, maxVol, minVol, maxCur, totalPow);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_OUTPUT_VOL_CUR:
|
|
|
- {
|
|
|
- // 回傳當前輸出電壓電流
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
-
|
|
|
- int outputVol = ((frame.data[0] << 24) + (frame.data[1] << 16) + (frame.data[2] << 8) + frame.data[3]) / 100;
|
|
|
- int outputCur = ((frame.data[4] << 24) + (frame.data[5] << 16) + (frame.data[6] << 8) + frame.data[7]) / 100;
|
|
|
-
|
|
|
- return_get_output(address, outputVol, outputCur);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, outputVol = %d, outputCur = %d \n", address, outputVol, outputCur);
|
|
|
- }
|
|
|
- break;
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_OUTPUT_VOL_CUR_FLOAT:
|
|
|
- {
|
|
|
- group = frame.can_id & 0x000000FF;
|
|
|
-
|
|
|
- byte vol[4], cur[4];
|
|
|
- memcpy(vol, frame.data, 4);
|
|
|
- memcpy(cur, frame.data + 4, 4);
|
|
|
-
|
|
|
- float _Vol = IEEE_754_to_float(vol);
|
|
|
- float _Cur = IEEE_754_to_float(cur);
|
|
|
-
|
|
|
- return_get_output_float(group, _Vol, _Cur);
|
|
|
- }
|
|
|
- break;
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_IAVAILABLE:
|
|
|
- case MODULE_IAVAILABLE:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- // 回傳降載後的電流
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- unsigned short vextVol = ((frame.data[0] << 8) + frame.data[1]);
|
|
|
- unsigned short iAvailCur = ((frame.data[2] << 8) + frame.data[3]);
|
|
|
-
|
|
|
- return_iavail_info(address, iAvailCur, vextVol);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, iAvailCur = %d \n", address, iAvailCur);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_MIS_INFO:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- float ReturnValue;
|
|
|
- byte value[4];
|
|
|
- byte type;
|
|
|
-
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- memcpy(value, frame.data + 4, sizeof(value));
|
|
|
- ReturnValue = IEEE_754_to_float(value);
|
|
|
- if (frame.data[0] == ((FAN_SPEED_CMD >> 8) & 0xFF) && frame.data[1] == (FAN_SPEED_CMD & 0xFF))
|
|
|
- {
|
|
|
- type = 1;
|
|
|
- return_mis_info(address, ReturnValue, type);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
- }
|
|
|
- else if (frame.data[0] == ((TEMP_DC_CMD >> 8) & 0xFF) && frame.data[1] == (TEMP_DC_CMD & 0xFF))
|
|
|
- {
|
|
|
- type = 2;
|
|
|
- return_mis_info(address, ReturnValue, type);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
- }
|
|
|
- else if (frame.data[0] == ((TEMP_DC_CMD >> 8) & 0xFF) && frame.data[1] == (TEMP_DC_CMD & 0xFF))
|
|
|
- {
|
|
|
- type = 3;
|
|
|
- return_mis_info(address, ReturnValue, type);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_VER:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- // 回傳版號 : 無系統回覆功能
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- short dcSwVer = ((frame.data[0] << 8) + frame.data[1]);
|
|
|
- short pfcSwVer = ((frame.data[2] << 8) + frame.data[3]);
|
|
|
- short hwVer = ((frame.data[4] << 8) + frame.data[5]);
|
|
|
-
|
|
|
- return_fw_version(address, dcSwVer, pfcSwVer, hwVer);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, DC %d, PFC %d, HW %d \n", address, dcSwVer, pfcSwVer, hwVer);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_BARCODE:
|
|
|
- {
|
|
|
- // 回傳BarCode
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GROUP_SHIFT | MODULE_INPUT:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- // 回傳三向輸入電壓
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- short abVol = ((frame.data[0] << 8) + frame.data[1]) / 10;
|
|
|
- short bcVol = ((frame.data[2] << 8) + frame.data[3]) / 10;
|
|
|
- short caVol = ((frame.data[4] << 8) + frame.data[5]) / 10;
|
|
|
-
|
|
|
- return_input_vol(address, abVol, bcVol, caVol);
|
|
|
- //PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
|
|
|
- }
|
|
|
- break;
|
|
|
- case INFYPWR_GROUP_SHIFT | AUTO_OUTPUT_TEMP:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- /*Test mode used*/
|
|
|
- // 回傳輸出值與入風口溫度
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- 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:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- /*Test mode used*/
|
|
|
- // 回傳輸出值與入風口溫度
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- 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:
|
|
|
- {
|
|
|
- if (!colFinished)
|
|
|
- break;
|
|
|
-
|
|
|
- /*Test mode used*/
|
|
|
- // 回傳輸出值與入風口溫度
|
|
|
- address = frame.can_id & 0x000000FF;
|
|
|
- if(!GetRealIndexByGroup(&address))
|
|
|
- break;
|
|
|
-
|
|
|
- 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;
|
|
|
- }
|
|
|
+ PwrFrameMsg = (PwrFrame *)&frame.can_id;
|
|
|
+ address = PwrFrameMsg->InfyBits.SourceAddress;
|
|
|
+
|
|
|
+ if(PwrFrameMsg->InfyBits.DestinationAddress != NEXTON_ADD)
|
|
|
+ {
|
|
|
+ if(PwrFrameMsg->InfyBits.DestinationAddress != INFY_ADD_CSU || PwrFrameMsg->InfyBits.Error != Infy_MsgErr_Normal)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (PwrFrameMsg->InfyBits.CmdValue)
|
|
|
+ {
|
|
|
+ case PSU_WCmd_ModuleWalkIn:
|
|
|
+ {
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ // printf("walk in response address = %d, [0] = %d, [1] = %d, [2] = %d, [3] = %d, [4] = %d, [5] = %d, [6] = %d, [7] = %d \n"
|
|
|
+ // , address,
|
|
|
+ // frame.data[0], frame.data[1],
|
|
|
+ // frame.data[2], frame.data[3],
|
|
|
+ // frame.data[4], frame.data[5],
|
|
|
+ // frame.data[6], frame.data[7]);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_ModuleStatus:
|
|
|
+ {
|
|
|
+ group = frame.data[2];
|
|
|
+ byte SN = address;
|
|
|
+ bool isfind = false;
|
|
|
+
|
|
|
+ if (group < 2 && !colFinished)
|
|
|
+ {
|
|
|
+ for(byte _index = 0; _index < infy_pow_info[group].psuCount; _index++)
|
|
|
+ {
|
|
|
+ if (infy_pow_info[group].serialNumber[_index] == SN)
|
|
|
+ {
|
|
|
+ isfind = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!isfind)
|
|
|
+ {
|
|
|
+ infy_pow_info[group].serialNumber[infy_pow_info[group].psuCount] = SN;
|
|
|
+ infy_pow_info[group].targetNumber[infy_pow_info[group].psuCount] = infy_pow_info[group].psuCount;
|
|
|
+ infy_pow_info[group].psuCount++;
|
|
|
+ }
|
|
|
+
|
|
|
+ byte subPcount = 0;
|
|
|
+ for (byte i = 0; i < 2; i++)
|
|
|
+ {
|
|
|
+ subPcount += infy_pow_info[i].psuCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (subPcount > 0 && subPcount == _totalModuleCount)
|
|
|
+ colFinished = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ short temp = frame.data[4];
|
|
|
+ int status = (frame.data[5] << 16) + (frame.data[6] << 8) + frame.data[7];
|
|
|
+
|
|
|
+ return_status(group, SN, temp, status);
|
|
|
+ //PRINTF_LIB_FUNC("group = %d, address = %d, temp = %d \n", group, address, temp);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_SysModuleCount:
|
|
|
+ {
|
|
|
+ // 回傳模組數量
|
|
|
+ group = address;
|
|
|
+
|
|
|
+ byte count = frame.data[2];
|
|
|
+ if (group == SYSTEM_CMD)
|
|
|
+ {
|
|
|
+ _totalModuleCount = count;
|
|
|
+ }
|
|
|
+
|
|
|
+ return_module_count(group, count);
|
|
|
+ //PRINTF_LIB_FUNC("group = %d, count = %d \n", group, count);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_ModuleCapability:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ // 回傳輸出能力 : 最大電壓、最小電壓、最大電流、額定功率
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ short maxVol = ((frame.data[0] << 8) + frame.data[1]) * 10;
|
|
|
+ short minVol = ((frame.data[2] << 8) + frame.data[3]) * 10;
|
|
|
+ short maxCur = (frame.data[4] << 8) + frame.data[5];
|
|
|
+ short totalPow = ((frame.data[6] << 8) + frame.data[7]) / 10;
|
|
|
+
|
|
|
+ return_available_cap(address, maxVol, minVol, maxCur, totalPow);
|
|
|
+ // PRINTF_LIB_FUNC("address = %d, maxVol = %d, minVol = %d, maxCur = %d, totalPow = %d \n",
|
|
|
+ // address, maxVol, minVol, maxCur, totalPow);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_SysOutputVolCur:
|
|
|
+ {
|
|
|
+ // 回傳當前輸出電壓電流
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ int outputVol = ((frame.data[0] << 24) + (frame.data[1] << 16) + (frame.data[2] << 8) + frame.data[3]) / 100;
|
|
|
+ int outputCur = ((frame.data[4] << 24) + (frame.data[5] << 16) + (frame.data[6] << 8) + frame.data[7]) / 100;
|
|
|
+
|
|
|
+ return_get_output(address, outputVol, outputCur);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, outputVol = %d, outputCur = %d \n", address, outputVol, outputCur);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case PSU_RCmd_SysOutputVolCur_F:
|
|
|
+ {
|
|
|
+ group = address;
|
|
|
+
|
|
|
+ byte vol[4], cur[4];
|
|
|
+ memcpy(vol, frame.data, 4);
|
|
|
+ memcpy(cur, frame.data + 4, 4);
|
|
|
+
|
|
|
+ float _Vol = IEEE_754_to_float(vol);
|
|
|
+ float _Cur = IEEE_754_to_float(cur);
|
|
|
+
|
|
|
+ return_get_output_float(group, _Vol, _Cur);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case PSU_RCmd_ModuleIAvailable:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ // 回傳降載後的電流
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ unsigned short vextVol = ((frame.data[0] << 8) + frame.data[1]);
|
|
|
+ unsigned short iAvailCur = ((frame.data[2] << 8) + frame.data[3]);
|
|
|
+
|
|
|
+ return_iavail_info(address, iAvailCur, vextVol);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, iAvailCur = %d \n", address, iAvailCur);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_ModuleMiscInfo:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ float ReturnValue;
|
|
|
+ byte value[4];
|
|
|
+ byte type;
|
|
|
+
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ memcpy(value, frame.data + 4, sizeof(value));
|
|
|
+ ReturnValue = IEEE_754_to_float(value);
|
|
|
+ if (frame.data[0] == ((FAN_SPEED_CMD >> 8) & 0xFF) && frame.data[1] == (FAN_SPEED_CMD & 0xFF))
|
|
|
+ {
|
|
|
+ type = 1;
|
|
|
+ return_mis_info(address, ReturnValue, type);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
+ }
|
|
|
+ else if (frame.data[0] == ((TEMP_DC_CMD >> 8) & 0xFF) && frame.data[1] == (TEMP_DC_CMD & 0xFF))
|
|
|
+ {
|
|
|
+ type = 2;
|
|
|
+ return_mis_info(address, ReturnValue, type);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
+ }
|
|
|
+ else if (frame.data[0] == ((TEMP_DC_CMD >> 8) & 0xFF) && frame.data[1] == (TEMP_DC_CMD & 0xFF))
|
|
|
+ {
|
|
|
+ type = 3;
|
|
|
+ return_mis_info(address, ReturnValue, type);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_ModuleVersion:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ // 回傳版號 : 無系統回覆功能
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ short dcSwVer = ((frame.data[0] << 8) + frame.data[1]);
|
|
|
+ short pfcSwVer = ((frame.data[2] << 8) + frame.data[3]);
|
|
|
+ short hwVer = ((frame.data[4] << 8) + frame.data[5]);
|
|
|
+
|
|
|
+ return_fw_version(address, dcSwVer, pfcSwVer, hwVer);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, DC %d, PFC %d, HW %d \n", address, dcSwVer, pfcSwVer, hwVer);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_ModuleBarcode:
|
|
|
+ {
|
|
|
+ // 回傳BarCode
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case PSU_RCmd_ModuleInputVoltage:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ // 回傳三向輸入電壓
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ short abVol = ((frame.data[0] << 8) + frame.data[1]) / 10;
|
|
|
+ short bcVol = ((frame.data[2] << 8) + frame.data[3]) / 10;
|
|
|
+ short caVol = ((frame.data[4] << 8) + frame.data[5]) / 10;
|
|
|
+
|
|
|
+ return_input_vol(address, abVol, bcVol, caVol);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, abVol = %d, bcVol = %d, caVol = %d \n", address, abVol, bcVol, caVol);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ switch(PwrFrameMsg->NextonBits.CmdValue)
|
|
|
+ {
|
|
|
+ case Nexton_PSU_DcOutputValue:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*Test mode used*/
|
|
|
+ // 回傳輸出值與入風口溫度
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ 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 Nexton_PSU_StatusEvent:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*Test mode used*/
|
|
|
+ // 回傳輸出值與入風口溫度
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ 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 Nexton_PSU_AcInputValue:
|
|
|
+ {
|
|
|
+ if (!colFinished)
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*Test mode used*/
|
|
|
+ // 回傳輸出值與入風口溫度
|
|
|
+ //address = frame.can_id & 0x000000FF;
|
|
|
+ if(!GetRealIndexByGroup(&address))
|
|
|
+ break;
|
|
|
+
|
|
|
+ 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;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
usleep(10000);
|
|
@@ -579,18 +576,19 @@ void ReceiveDataFromCanBus()
|
|
|
//================================================
|
|
|
void SendCmdToPsu(int cmd, byte *data, byte dataLen)
|
|
|
{
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
struct can_frame frame;
|
|
|
|
|
|
//設定 CANBSU 2.0B 長封包
|
|
|
- cmd = cmd | 0x80000000;
|
|
|
+ PwrFrameMsg.PwrMessage = cmd | 0x80000000;
|
|
|
|
|
|
- frame.can_id = cmd;
|
|
|
+ frame.can_id = PwrFrameMsg.PwrMessage;
|
|
|
frame.can_dlc = dataLen;
|
|
|
memcpy(frame.data, data, dataLen);
|
|
|
|
|
|
write(CanFd, &frame, sizeof(struct can_frame));
|
|
|
// 群命令才 delay
|
|
|
- if ((cmd & 0x0000FF00) == INFYPWR_BROADCAST)
|
|
|
+ if (PwrFrameMsg.InfyBits.DestinationAddress == INFY_ADD_BROADCAST)
|
|
|
usleep(CMD_DELAY_TIME);
|
|
|
}
|
|
|
|
|
@@ -619,58 +617,88 @@ bool InitialCommunication()
|
|
|
void SwitchPower(byte group, byte value)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | SWITCH_POWER;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModulePowerOnOff;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
// 1 : 關機
|
|
|
// 0 : 開機
|
|
|
data[0] = value;
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void SleepMode(byte group, byte value)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | SLEEP_MODE;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModuleSleepMode;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
// 1 : 休眠
|
|
|
// 0 : 起床
|
|
|
data[0] = value;
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void FlashLed(byte group, byte value)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | FLASH_LED;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModuleFlashLed;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
// 1 : 閃爍
|
|
|
// 0 : 正常
|
|
|
data[0] = value;
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void PresentOutputVol(byte group, int voltage, int current)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | PRESENT_OUT_VOL;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_SetOutput;
|
|
|
+
|
|
|
int Vol = voltage * 100;
|
|
|
int Cur = current * 100;
|
|
|
|
|
@@ -687,41 +715,58 @@ void PresentOutputVol(byte group, int voltage, int current)
|
|
|
data[6] = (Cur >> 8) & 0xFF;
|
|
|
data[7] = Cur & 0xFF;
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void FanNoiseInfo(byte group, byte value)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MIS_INFO;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModuleSetMiscInfo;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
// 風扇低噪音
|
|
|
- data[0] = 0x11;
|
|
|
- data[1] = 0x13;
|
|
|
+ data[0] = ((SetMiscInfo_FanMode >> 8) & 0xFF);
|
|
|
+ data[1] = (SetMiscInfo_FanMode & 0xFF);
|
|
|
|
|
|
// 0xA0 power poriority mode
|
|
|
// 0xA1 denoise mode
|
|
|
// 0xA2 quiet mode
|
|
|
data[7] = value;
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
-}
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
+}
|
|
|
|
|
|
void SetWalkInConfig(byte group, byte enable, byte sec)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | WALK_IN_MODE;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_ModuleWalkIn;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
unsigned short _Sec = sec * 100;
|
|
@@ -732,13 +777,19 @@ void SetWalkInConfig(byte group, byte enable, byte sec)
|
|
|
data[6] = (_Sec >> 8) & 0xFF;
|
|
|
data[7] = _Sec & 0xFF;
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= (group << 8) | INFYPWR_DEFAULT;
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
|
|
|
//printf("walk in cmd = %x \n", cmd);
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void SetDirModulePresentOutput(byte group, int voltage, int current, byte _switch, byte _interRelay)
|
|
@@ -769,13 +820,18 @@ void SetDirModulePresentOutput(byte group, int voltage, int current, byte _switc
|
|
|
void SetDipSwitchMode()
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | DIP_SWITCH_MODE;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_WCmd_DipSwitchMode;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
data[0] = 0x01;
|
|
|
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = INFY_ADD_BROADCAST;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
/**********************************************************************************/
|
|
|
/*** ***/
|
|
@@ -785,174 +841,289 @@ void SetDipSwitchMode()
|
|
|
void GetStatus(byte group)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | STATUS;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleStatus;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetFanSpeed(byte group)
|
|
|
{
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_CMD | MODULE_MIS_INFO;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleMiscInfo;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
data[0] = (FAN_SPEED_CMD >> 8) & 0xFF;
|
|
|
data[1] = FAN_SPEED_CMD & 0xFF;
|
|
|
|
|
|
- if (group == (INFYPWR_BROADCAST >> 8))
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetDcTemperature(byte group)
|
|
|
{
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_CMD | MODULE_MIS_INFO;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleMiscInfo;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
data[0] = (TEMP_DC_CMD >> 8) & 0xFF;
|
|
|
data[1] = TEMP_DC_CMD & 0xFF;
|
|
|
|
|
|
- if (group == (INFYPWR_BROADCAST >> 8))
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetPfcTemperature(byte group)
|
|
|
{
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_CMD | MODULE_MIS_INFO;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleMiscInfo;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
data[0] = (TEMP_PFC_CMD >> 8) & 0xFF;
|
|
|
data[1] = TEMP_PFC_CMD & 0xFF;
|
|
|
|
|
|
- if (group == (INFYPWR_BROADCAST >> 8))
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleCount(byte group)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_COUNT;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_SysModuleCount;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleVer(byte group)
|
|
|
{
|
|
|
// 無系統廣播功能
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_VER;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleVersion;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
//PRINTF_LIB_FUNC("GetModuleVer cmd = %x\n", cmd);
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleCap(byte group)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_CAP;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleCapability;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
//PRINTF_LIB_FUNC("GetModuleCap cmd = %x\n", cmd);
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleBarCode(byte group)
|
|
|
{
|
|
|
// 無系統廣播功能
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_BARCODE;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleBarcode;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleInput(byte group)
|
|
|
{
|
|
|
// 無系統廣播功能
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_INPUT;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleInputVoltage;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleIavailable(byte group)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_IAVAILABLE;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_ModuleIAvailable;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleOutput(byte group)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_OUTPUT_VOL_CUR;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_SysOutputVolCur;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
void GetModuleOutputF(byte group)
|
|
|
{
|
|
|
byte data[8];
|
|
|
- uint cmd = INFYPWR_CMD | MODULE_OUTPUT_VOL_CUR_FLOAT;
|
|
|
+ PwrFrame PwrFrameMsg;
|
|
|
+ PwrFrameMsg.PwrMessage = 0;
|
|
|
+ PwrFrameMsg.InfyBits.CmdValue = PSU_RCmd_SysOutputVolCur_F;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- if (group == SYSTEM_CMD)
|
|
|
- cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
- else
|
|
|
- cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
+ if (group == INFY_ADD_BROADCAST)
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_SINGLE_MODULE;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PwrFrameMsg.InfyBits.DeviceValue = DEVICE_NO_GROUP_MODULE;
|
|
|
+ }
|
|
|
+ PwrFrameMsg.InfyBits.DestinationAddress = group;
|
|
|
+ PwrFrameMsg.InfyBits.SourceAddress = INFY_ADD_CSU;
|
|
|
+
|
|
|
+ SendCmdToPsu(PwrFrameMsg.PwrMessage, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
/**********************************************************************************/
|