|
@@ -7,43 +7,15 @@
|
|
|
|
|
|
#include "Infypwr_PsuCommObj.h"
|
|
|
|
|
|
-struct Current_cmd_Proc Psu_cmd={
|
|
|
- 0,
|
|
|
- 0x02000200,
|
|
|
- 0x01000300,
|
|
|
- 0x01000400,
|
|
|
- 0x01000500,
|
|
|
- 0x01000600,
|
|
|
- 0x01000700,
|
|
|
- 0x01000800,
|
|
|
- 0x01000900,
|
|
|
- 0x02000A00,
|
|
|
-
|
|
|
- 0x02000B00,
|
|
|
- 0x01000C00,
|
|
|
- 0x02000F00,
|
|
|
- 0x02001000,
|
|
|
- 0x02001100,
|
|
|
- 0x02001200,
|
|
|
-
|
|
|
- 0x01001300,
|
|
|
- 0x02001400,
|
|
|
- 0x01001500,
|
|
|
- 0x01001600,
|
|
|
- 0x02001700,
|
|
|
-
|
|
|
- 0x01001800,
|
|
|
- 0x01001900,
|
|
|
- 0x01001A00,
|
|
|
-
|
|
|
- 0x02001B00,
|
|
|
- 0x0E001C00,
|
|
|
-};
|
|
|
-
|
|
|
-#define DEBUG_LIB 0
|
|
|
+#define DEBUG_LIB 1
|
|
|
|
|
|
void PRINTF_LIB_FUNC(char *string, ...);
|
|
|
+float IEEE_754_to_float(const byte raw[4]);
|
|
|
+void IEEE_754_to_bytes(float target, byte *bytes2);
|
|
|
|
|
|
+//================================================
|
|
|
+// Private function
|
|
|
+//================================================
|
|
|
void PRINTF_LIB_FUNC(char *string, ...)
|
|
|
{
|
|
|
if (DEBUG_LIB)
|
|
@@ -58,32 +30,72 @@ void PRINTF_LIB_FUNC(char *string, ...)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//================================================
|
|
|
-// Callback function
|
|
|
-//================================================
|
|
|
-void GetPsuAddressReq(void *func)
|
|
|
+float IEEE_754_to_float(const byte raw[4])
|
|
|
+{
|
|
|
+ int sign = (raw[0] >> 7) ? -1 : 1;
|
|
|
+
|
|
|
+ byte exponent = (raw[0] << 1) + (raw[1] >> 7) - 126;
|
|
|
+
|
|
|
+ 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);
|
|
|
+}
|
|
|
+
|
|
|
+void IEEE_754_to_bytes(float target, byte *bytes2)
|
|
|
{
|
|
|
- get_psu_addr_req = func;
|
|
|
+ int value2 = 0;
|
|
|
+ number.f = target;
|
|
|
+ int index = 31;
|
|
|
+
|
|
|
+ value2 |= number.raw.sign << index;
|
|
|
+ int k;
|
|
|
+ for (k = 8 - 1; k >= 0; k--)
|
|
|
+ {
|
|
|
+ index--;
|
|
|
+ if ((number.raw.exponent >> k) & 1)
|
|
|
+ value2 |= 1 << index;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (k = 23 - 1; k >= 0; k--)
|
|
|
+ {
|
|
|
+ index--;
|
|
|
+ if ((number.raw.mantissa >> k) & 1)
|
|
|
+ value2 |= 1 << index;
|
|
|
+ }
|
|
|
+
|
|
|
+ *(bytes2) = (value2 >> 24) & 0xFF;
|
|
|
+ *(bytes2 + 1) = (value2 >> 16) & 0xFF;
|
|
|
+ *(bytes2 + 2) = (value2 >> 8) & 0xFF;
|
|
|
+ *(bytes2 + 3) = value2 & 0xFF;
|
|
|
}
|
|
|
|
|
|
-void RefreshSerialNumber(void *func)
|
|
|
+//================================================
|
|
|
+// Callback function
|
|
|
+//================================================
|
|
|
+void RefreshStatus(void *func)
|
|
|
{
|
|
|
- return_serial_number = func;
|
|
|
+ return_status = func;
|
|
|
}
|
|
|
|
|
|
-void RefreshVextAndIavail(void *func)
|
|
|
+void RefreshModuleCount(void *func)
|
|
|
{
|
|
|
- return_vext_and_iavail = func;
|
|
|
+ return_module_count = func;
|
|
|
}
|
|
|
|
|
|
-void RefreshMiscInfo(void *func)
|
|
|
+void RefreshAvailableCap(void *func)
|
|
|
{
|
|
|
- return_misc_info = func;
|
|
|
+ return_available_cap = func;
|
|
|
}
|
|
|
|
|
|
-void RefreshStatus(void *func)
|
|
|
+void RefreshFwVersion(void *func)
|
|
|
{
|
|
|
- return_status = func;
|
|
|
+ return_fw_version = func;
|
|
|
}
|
|
|
|
|
|
void RefreshInputVol(void *func)
|
|
@@ -96,20 +108,16 @@ void RefreshGetOutput(void *func)
|
|
|
return_get_output = func;
|
|
|
}
|
|
|
|
|
|
-void RefreshHWVersion(void *func)
|
|
|
+void RefreshFanInfo(void *func)
|
|
|
{
|
|
|
- //return_hw_version = func;
|
|
|
+ return_fanspeed_info = func;
|
|
|
}
|
|
|
|
|
|
-void RefreshAvailableCap(void *func)
|
|
|
+void RefreshIavailable(void *func)
|
|
|
{
|
|
|
- return_available_cap = func;
|
|
|
+ return_iavail_info = func;
|
|
|
}
|
|
|
|
|
|
-void RefreshOutputPowerSwitch(void *func)
|
|
|
-{
|
|
|
- return_output_pow_switch = func;
|
|
|
-}
|
|
|
//================================================
|
|
|
// CANBUS initialization
|
|
|
//================================================
|
|
@@ -164,160 +172,139 @@ void ReceiveDataFromCanBus()
|
|
|
{
|
|
|
int nbytes;
|
|
|
struct can_frame frame;
|
|
|
- int intCmd;
|
|
|
- byte target, group, address;
|
|
|
+ int intCmd = 0;
|
|
|
+ byte group, address;
|
|
|
+
|
|
|
while(1)
|
|
|
{
|
|
|
memset(&frame, 0, sizeof(struct can_frame));
|
|
|
nbytes = read(CanFd, &frame, sizeof(struct can_frame));
|
|
|
|
|
|
-
|
|
|
if (nbytes > 0)
|
|
|
{
|
|
|
frame.can_id = frame.can_id & CAN_EFF_MASK;
|
|
|
-
|
|
|
- intCmd = (uint) (frame.can_id & 0x003F0000);
|
|
|
- target = (byte) ((frame.can_id & 0x0000FF00)>>8);
|
|
|
- group = (word) ((frame.can_id & 0x03C00000)>>22);
|
|
|
- address = (byte) (frame.can_id & 0xFF);
|
|
|
-
|
|
|
- //if master id
|
|
|
- if(target == 0xF0)
|
|
|
- {
|
|
|
- //PRINTF_LIB_FUNC("Get-INFYPWR-Msg : %08x - %02x%02x%02x%02x%02x%02x%02x%02x\n", frame.can_id,frame.data[0], frame.data[1], frame.data[2], frame.data[3],frame.data[4], frame.data[5], frame.data[6], frame.data[7]);
|
|
|
- //PRINTF_LIB_FUNC("Get-INFYPWR-Msg : %08x cmd:%08x target:%02x group:%02x address:%02x\n", frame.can_id, intCmd, target, group, address);
|
|
|
-
|
|
|
- switch (intCmd)
|
|
|
- {
|
|
|
- case INFYPWR_GET_TOTAL_MOULE_MSG:
|
|
|
- {
|
|
|
- byte Quantity;
|
|
|
- char sn[7];
|
|
|
-
|
|
|
- Quantity = frame.data[2];
|
|
|
- //get_psu_count_first(Quantity);
|
|
|
-//
|
|
|
- for (byte index = 0; index < Quantity; index++)
|
|
|
- {
|
|
|
- sn[0] = sn[1] = sn[2] = sn[3] = sn[4] = sn[5] = sn[6] = index;
|
|
|
- get_psu_addr_req(index, sn);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- case ACK_ADDRESS_ASSINGMENT:
|
|
|
- { }
|
|
|
- break;
|
|
|
- case INFYPWR_GET_STATUS_MSG:
|
|
|
- {
|
|
|
- //英飛源狀態 (如果是使用 Group 命令發問模組會使用 Group 命令回覆)
|
|
|
- //data[2] = group
|
|
|
- //data[4] = temp
|
|
|
- //data[5,6,7] = alarm
|
|
|
- //if (statusPassID == FEEDBACK_ID)
|
|
|
- return_status(frame.data[2], address, frame.data[4],
|
|
|
- (((int) frame.data[5] << 16) + ((int) frame.data[6] << 8) + (int) frame.data[7]) & 0x00ffffff);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GET_BARCODE_MSG:
|
|
|
- {
|
|
|
- //英飛源狀態 (如果是使用 Group 命令發問模組會使用 Group 命令回覆)
|
|
|
- if(group == 0x0B)
|
|
|
- {
|
|
|
- char sn[6];
|
|
|
-
|
|
|
- memcpy(sn, &frame.data[0], 6);
|
|
|
- return_serial_number(address, sn , ((word) frame.data[6] * 256 ) + (word) frame.data[7]);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
-
|
|
|
- case INFYPWR_GET_VEXT_IAVAIL_MSG:
|
|
|
- {
|
|
|
- return_vext_and_iavail(address,
|
|
|
- ((word) frame.data[0] * 256 ) + (word) frame.data[1],
|
|
|
- ((word) frame.data[2] * 256 ) + (word) frame.data[3]);
|
|
|
- }
|
|
|
- //PRINTF_LIB_FUNC("INFYPWR_GET_VEXT_IAVAIL_MSG \n");
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GET_MISC_INFO_MSG:
|
|
|
- {
|
|
|
- //0,1 = type
|
|
|
- //5,6,7,8 = msg
|
|
|
- return_misc_info(address,
|
|
|
- ((word) frame.data[0] * 256 ) + (word) frame.data[1],
|
|
|
- (((int) frame.data[4] << 24) + ((int) frame.data[5] << 16) + ((int) frame.data[6] << 8) + (int) frame.data[7]) & 0x00ffffff);
|
|
|
- }
|
|
|
- //PRINTF_LIB_FUNC("INFYPWR_GET_MISC_INFO_MSG \n");
|
|
|
- break;
|
|
|
-
|
|
|
-
|
|
|
- case INFYPWR_GET_PRESENT_INPUT_VOLTAGE_MSG:
|
|
|
- {
|
|
|
- return_input_vol(address,
|
|
|
- ((word) frame.data[0] * 256 ) + (word) frame.data[1],
|
|
|
- ((word) frame.data[2] * 256 ) + (word) frame.data[3],
|
|
|
- ((word) frame.data[4] * 256 ) + (word) frame.data[5]);
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GET_PRESENT_OUTPUT_MSG:
|
|
|
- {
|
|
|
- //英飛源狀態 (如果是使用 Group 命令發問模組會使用 Group 命令回覆)
|
|
|
- //電壓值及電流值 = 4byte 精度 0.001位(高位在byte0)(轉為CSU使用 0.1位)
|
|
|
- //if(group == 0x0B)
|
|
|
- //{
|
|
|
- //uint vol = (((unit) frame.data[0] << 24) + ((unit) frame.data[1] << 16) + ((unit) frame.data[2] << 8) + (unit) frame.data[3])/100);
|
|
|
-
|
|
|
- //uint cur = (((unit) frame.data[4] << 24) + ((unit) frame.data[5] << 16) + ((unit) frame.data[6] << 8) + (unit) frame.data[7])/100);
|
|
|
-
|
|
|
- //vol = vol / 100;
|
|
|
- //cur = cur / 100;
|
|
|
-
|
|
|
- return_get_output(address,
|
|
|
- (word)((((unit) frame.data[0] << 24) + ((unit) frame.data[1] << 16) + ((unit) frame.data[2] << 8) + (unit) frame.data[3])/100),
|
|
|
- (word)((((unit) frame.data[4] << 24) + ((unit) frame.data[5] << 16) + ((unit) frame.data[6] << 8) + (unit) frame.data[7])/100));
|
|
|
- //}
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GET_AVAILABLE_CAP_MSG:
|
|
|
- {
|
|
|
- //英飛源狀態 (如果是使用 Group 命令發問模組會使用 Group 命令回覆)
|
|
|
- if(group == 0x0B)
|
|
|
- {
|
|
|
- //英飛源單位
|
|
|
- //最大電壓 1:1 (CSU使用是0.1位所以 X 10)
|
|
|
- //最小電壓 1:1 (CSU使用是0.1位所以 X 10)
|
|
|
- //電流 0.1位 (CSU使用是0.1位單位一樣)
|
|
|
- //功率 0.01位 (CSU使用是0.1位所以再除 10)
|
|
|
- return_available_cap(address,
|
|
|
- ((((word) frame.data[0] * 256) + (word) frame.data[1]) * 10),
|
|
|
- ((((word) frame.data[2] * 256) + (word) frame.data[3]) * 10),
|
|
|
- (((word) frame.data[4] * 256) + (word) frame.data[5]),
|
|
|
- ((((word) frame.data[6] * 256) + (word) frame.data[7]))/10);
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_SET_POWER_SWITCH_MSG:
|
|
|
- {
|
|
|
- return_output_pow_switch(address, frame.data[0]);
|
|
|
- }
|
|
|
- break;
|
|
|
- case ACK_SET_PRESENT_OUTPUT:
|
|
|
- {
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
-
|
|
|
+ intCmd = frame.can_id & 0x00FF0000;
|
|
|
+ intCmd |= INFYPWR_GROUP_SHIFT | intCmd;
|
|
|
+
|
|
|
+ switch (intCmd)
|
|
|
+ {
|
|
|
+ case INFYPWR_GROUP_SHIFT | STATUS:
|
|
|
+ {
|
|
|
+ group = frame.data[2];
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ short temp = frame.data[4];
|
|
|
+ int status = (frame.data[5] << 16) + (frame.data[6] << 8) + frame.data[7];
|
|
|
+
|
|
|
+ return_status(group, address, 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];
|
|
|
+
|
|
|
+ return_module_count(group, count);
|
|
|
+ //PRINTF_LIB_FUNC("group = %d, count = %d \n", group, count);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case INFYPWR_GROUP_SHIFT | MODULE_CAP:
|
|
|
+ {
|
|
|
+ // 回傳輸出能力 : 最大電壓、最小電壓、最大電流、額定功率
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ 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_IAVAILABLE:
|
|
|
+ {
|
|
|
+ // 回傳降載後的電流
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ 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:
|
|
|
+ {
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+ float FanSpeed;
|
|
|
+ byte value[4];
|
|
|
+
|
|
|
+ memcpy(value, frame.data + 4, sizeof(value));
|
|
|
+ if (frame.data[0] == ((FAN_SPEED_CMD >> 8) & 0xFF) && frame.data[1] == (FAN_SPEED_CMD & 0xFF))
|
|
|
+ {
|
|
|
+ FanSpeed = IEEE_754_to_float(value);
|
|
|
+ return_fanspeed_info(address, FanSpeed);
|
|
|
+ //PRINTF_LIB_FUNC("address = %d, FanSpeed = %f \n", address, FanSpeed);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case INFYPWR_GROUP_SHIFT | MODULE_VER:
|
|
|
+ {
|
|
|
+ // 回傳版號 : 無系統回覆功能
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ 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:
|
|
|
+ {
|
|
|
+ // 回傳三向輸入電壓
|
|
|
+ address = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
usleep(10000);
|
|
@@ -339,11 +326,9 @@ void SendCmdToPsu(int cmd, byte *data, byte dataLen)
|
|
|
memcpy(frame.data, data, dataLen);
|
|
|
|
|
|
write(CanFd, &frame, sizeof(struct can_frame));
|
|
|
+ usleep(CMD_DELAY_TIME);
|
|
|
}
|
|
|
|
|
|
-//================================================
|
|
|
-// API Function
|
|
|
-//================================================
|
|
|
bool InitialCommunication()
|
|
|
{
|
|
|
CanFd = InitCanBus();
|
|
@@ -367,434 +352,233 @@ bool InitialCommunication()
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-void RequestModuleTotalMumbert(void)
|
|
|
+//================================================
|
|
|
+// API Function
|
|
|
+//================================================
|
|
|
+void SwitchPower(byte group, byte value)
|
|
|
{
|
|
|
- uint cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_TOTAL_MOULE_MSG | (INFYPWR_BROADCAST_ID << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | SWITCH_POWER;
|
|
|
|
|
|
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));
|
|
|
}
|
|
|
|
|
|
-//void PsuAddressAssignment(byte phy_addr, char *serial_number, byte real_addr, byte group)
|
|
|
-void PsuAddressAssignment(byte phy_addr, byte group)
|
|
|
-{
|
|
|
- PRINTF_LIB_FUNC("phy_addr = %d, group = %d \n", phy_addr, group);
|
|
|
- uint cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_GROUP_ASSINGMENT_MSG | (phy_addr << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
- byte data[8];
|
|
|
-
|
|
|
- memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
- data[0] = group;
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
-}
|
|
|
-
|
|
|
-void GetStatus(byte group, byte address)
|
|
|
+void SleepMode(byte group, byte value)
|
|
|
{
|
|
|
- //如果用 group 發送 (該 group 內的模組會自動依序回應)
|
|
|
- //PRINTF_LIB_FUNC("PSU_C_DLL : GetStatus. group = %x, address = %x \n", group, address);
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_STATUS_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_STATUS_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_STATUS_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
+ uint cmd = INFYPWR_CMD | SLEEP_MODE;
|
|
|
|
|
|
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));
|
|
|
}
|
|
|
|
|
|
-void GetFwVersion(byte group, byte address, byte type)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-void GetSerialNumber(byte group, byte address)
|
|
|
+void FlashLed(byte group, byte value)
|
|
|
{
|
|
|
- //如果用 group 發送 (該 group 內的模組會自動依序回應)
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- //如果是群組命令
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_BARCODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
- //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_BARCODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
+ uint cmd = INFYPWR_CMD | FLASH_LED;
|
|
|
|
|
|
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));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-void GetVextAndIavail(byte group, byte address)
|
|
|
+void PresentOutputVol(byte group, int voltage, int current)
|
|
|
{
|
|
|
- //如果用 group 發送 (該 group 內的模組會自動依序回應)
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- //如果是群組命令
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_VEXT_IAVAIL_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
- //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_VEXT_IAVAIL_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
+ uint cmd = INFYPWR_CMD | PRESENT_OUT_VOL;
|
|
|
+ int Vol = (voltage / 10) * 1000;
|
|
|
+ int Cur = (current / 10) * 1000;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
+
|
|
|
+ // 輸出電壓
|
|
|
+ data[0] = (Vol >> 24) & 0xFF;
|
|
|
+ data[1] = (Vol >> 16) & 0xFF;
|
|
|
+ data[2] = (Vol >> 8) & 0xFF;
|
|
|
+ data[3] = Vol & 0xFF;
|
|
|
+ // 輸出電流
|
|
|
+ data[4] = (Cur >> 24) & 0xFF;
|
|
|
+ data[5] = (Cur >> 16) & 0xFF;
|
|
|
+ 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));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-void GetMiscInfo(byte group, byte address, unsigned short CmdType)
|
|
|
+void FanNoiseInfo(byte group, byte value)
|
|
|
{
|
|
|
- //如果用 group 發送 (該 group 內的模組會自動依序回應)
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | MIS_INFO;
|
|
|
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_MISC_INFO_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
- //如果是群組命令
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_MISC_INFO_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_MISC_INFO_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
+ memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
+ // 風扇低噪音
|
|
|
+ data[0] = 0x11;
|
|
|
+ data[1] = 0x13;
|
|
|
|
|
|
- memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
- data[0] = (CmdType >> 8) & 0xFF;
|
|
|
- data[1] = (CmdType) & 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));
|
|
|
}
|
|
|
|
|
|
-void SetMiscInfo(byte group, byte address, unsigned short CmdType, unsigned int value)
|
|
|
+/**********************************************************************************/
|
|
|
+/*** ***/
|
|
|
+/*** Get ***/
|
|
|
+/*** ***/
|
|
|
+/**********************************************************************************/
|
|
|
+void GetStatus(byte group)
|
|
|
{
|
|
|
- int cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- //PRINTF_LIB_FUNC("cmd = %x \n", cmd);
|
|
|
+ uint cmd = INFYPWR_CMD | STATUS;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
-
|
|
|
- data[0] = (CmdType >> 8) & 0xFF;
|
|
|
- data[1] = (CmdType) & 0xFF;
|
|
|
-
|
|
|
- if(CmdType == MISC_SETCMD_FAN_DENOISE_MODE){
|
|
|
-
|
|
|
- data[7] = (byte)value;
|
|
|
- }else{
|
|
|
- data[4] = (value >> 24) & 0xff;
|
|
|
- data[5] = (value >> 16) & 0xff;
|
|
|
- data[6] = (value >> 8) & 0xff;
|
|
|
- data[7] = value & 0xff;
|
|
|
- }
|
|
|
-
|
|
|
- //如果是群組命令
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_MISC_INFO_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- //PRINTF_LIB_FUNC("Module-onoff(g) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
- }
|
|
|
- //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_MISC_INFO_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- // PRINTF_LIB_FUNC("Modele-onoff(M) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
- }
|
|
|
-
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void GetPresentInputVol(byte group, byte address)
|
|
|
+void GetFanSpeed(byte group)
|
|
|
{
|
|
|
- //PRINTF_LIB_FUNC("PSU_C_DLL : GetPresentInputVol. group = %x, address = %x \n", group, address);
|
|
|
- //如果用 group 發送 (該 group 內的模組會自動依序回應)
|
|
|
uint cmd;
|
|
|
byte data[8];
|
|
|
|
|
|
- //如果是群組命令
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_PRESENT_INPUT_VOLTAGE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
- //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_PRESENT_INPUT_VOLTAGE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- };
|
|
|
+ cmd = INFYPWR_CMD | MODULE_MIS_INFO;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
-}
|
|
|
-
|
|
|
-void GetAvailableCap(byte group, byte address, short _outputVol)
|
|
|
-{
|
|
|
- //如果用 group 發送 (該 group 內的模組會自動依序回應)
|
|
|
- uint cmd;
|
|
|
- byte data[8];
|
|
|
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_AVAILABLE_CAP_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_AVAILABLE_CAP_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_AVAILABLE_CAP_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
+ data[0] = (FAN_SPEED_CMD >> 8) & 0xFF;
|
|
|
+ data[1] = FAN_SPEED_CMD & 0xFF;
|
|
|
|
|
|
- memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
+ if (group == (INFYPWR_BROADCAST >> 8))
|
|
|
+ cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
+ else
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void GetPresentOutput(byte group, byte address)
|
|
|
+void GetModuleCount(byte group)
|
|
|
{
|
|
|
- //PRINTF_LIB_FUNC("PSU_C_DLL : GetPresentOutput. group = %x, address = %x \n", group, address);
|
|
|
- int cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_PRESENT_OUTPUT_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_PRESENT_OUTPUT_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_GET_PRESENT_OUTPUT_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// }
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_COUNT;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
- SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
-}
|
|
|
|
|
|
-void SetPresentOutput(byte group, byte address, float vol, float cur, float AvailableCur)
|
|
|
-{
|
|
|
- uint cmd;
|
|
|
- byte data[8];
|
|
|
- //bool isSearch = false;
|
|
|
- //if (cur >= AvailableCur)
|
|
|
- //cur = AvailableCur;
|
|
|
-
|
|
|
- //if(vol == 0 && cur == 0)PRINTF_LIB_FUNC("output v=0 a =0 \n");
|
|
|
- //PRINTF_LIB_FUNC("group = %d, address = %d, vol = %f, cur = %f \n", group, address, vol, cur);
|
|
|
- //英飛源使用 0.001 精度
|
|
|
- uint vol2 = vol * 100;
|
|
|
- uint cur2 = cur * 100;
|
|
|
-
|
|
|
- //PRINTF_LIB_FUNC("vol = %f, cur = %f, vol2 = %d, cur2 = %d \n", vol, cur, vol2, cur2);
|
|
|
-
|
|
|
- // 電壓
|
|
|
- data[0] = (vol2 >> 24) & 0xff;
|
|
|
- data[1] = (vol2 >> 16) & 0xff;
|
|
|
- data[2] = (vol2 >> 8) & 0xff;
|
|
|
- data[3] = vol2 & 0xff;
|
|
|
-
|
|
|
- // 電壓
|
|
|
- data[4] = (cur2 >> 24) & 0xff;
|
|
|
- data[5] = (cur2 >> 16) & 0xff;
|
|
|
- data[6] = (cur2 >> 8) & 0xff;
|
|
|
- data[7] = cur2 & 0xff;
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_GROUP_PERSENT_OUTPUT_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_GROUP_PERSENT_OUTPUT_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// //PRINTF_LIB_FUNC("setout(G) :%08x /n",cmd);
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-//
|
|
|
-// //search group
|
|
|
-// /*
|
|
|
-// for (byte groupIndex = 0; groupIndex < ShmPsuData->GroupCount; groupIndex++)
|
|
|
-// {
|
|
|
-// for (byte index = 0; index < ShmPsuData->PsuGroup[groupIndex].GroupPresentPsuQuantity; index++)
|
|
|
-// {
|
|
|
-// //search id
|
|
|
-// if (ShmPsuData->PsuGroup[groupIndex].PsuModule[index].Address == address)
|
|
|
-// {
|
|
|
-// //修改英飛為 id
|
|
|
-// address = ShmPsuData->PsuGroup[groupIndex].PsuModule[index].PhysicalID;
|
|
|
-// isSearch = true;
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// if(isSearch) break;
|
|
|
-// }
|
|
|
-// */
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_MODULE_PERSENT_OUTPUT_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// //PRINTF_LIB_FUNC("setout(M) :%08x /n",cmd);
|
|
|
-// }
|
|
|
-
|
|
|
- PRINTF_LIB_FUNC("typecmd = %02x, addr = %02x ,vol = %d, tot_Amp = %f, need_cur = %d, \n",
|
|
|
- group, address, vol2, AvailableCur, cur2);
|
|
|
+ if (group == SYSTEM_CMD)
|
|
|
+ cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
+ else
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void EnableGreenLedFlash(byte group, byte address, byte value)
|
|
|
+void GetModuleVer(byte group)
|
|
|
{
|
|
|
- int cmd;
|
|
|
+ // 無系統廣播功能
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_VER;
|
|
|
|
|
|
- if(value){
|
|
|
- //pwr off
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
- //pwr on
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_GREEN_KED_FLASH_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_GREEN_KED_FLASH_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// //PRINTF_LIB_FUNC("Green Led Flash(g) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_GREEN_KED_FLASH_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// //PRINTF_LIB_FUNC("Green Led Flash(M) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
-// }
|
|
|
+ memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
+ //PRINTF_LIB_FUNC("GetModuleVer cmd = %x\n", cmd);
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void EnableWalkInMode(byte group, byte address, byte value)
|
|
|
+void GetModuleCap(byte group)
|
|
|
{
|
|
|
- int cmd;
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_CAP;
|
|
|
|
|
|
- if(value){
|
|
|
- //pwr off
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
- //pwr on
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
- //如果是群組命令
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_WALKIN_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- //PRINTF_LIB_FUNC("WalkIn(g) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
- }
|
|
|
- //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_WALKIN_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- // PRINTF_LIB_FUNC("WalkIn(M) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
- }
|
|
|
+ memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
+ //PRINTF_LIB_FUNC("GetModuleCap cmd = %x\n", cmd);
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void EnableSleepMode(byte group, byte address, byte value)
|
|
|
+void GetModuleBarCode(byte group)
|
|
|
{
|
|
|
- int cmd;
|
|
|
+ // 無系統廣播功能
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_BARCODE;
|
|
|
|
|
|
- if(value){
|
|
|
- //pwr off
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
- //pwr on
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
- //如果是群組命令
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_SLEEP_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- //PRINTF_LIB_FUNC("SleepMode(g) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
- }
|
|
|
- //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_SLEEP_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- //PRINTF_LIB_FUNC("SleepMode(M) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
- }
|
|
|
+ memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void EnableDipAddrMode(void)
|
|
|
+void GetModuleInput(byte group)
|
|
|
{
|
|
|
- uint cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_ADDRESS_MODE_MSG | (INFYPWR_BROADCAST_ID << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
+ // 無系統廣播功能
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_INPUT;
|
|
|
+
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- data[0] = 0x01;
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-void DisableDipAddrMode(void)
|
|
|
+void GetModuleIavailable(byte group)
|
|
|
{
|
|
|
- uint cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_ADDRESS_MODE_MSG | (INFYPWR_BROADCAST_ID << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
byte data[8];
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_IAVAILABLE;
|
|
|
+
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- data[0] = 0x00;
|
|
|
+ if (group == SYSTEM_CMD)
|
|
|
+ cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
+ else
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
-
|
|
|
}
|
|
|
|
|
|
-void EnableOutputPower(byte group, byte address, byte value)
|
|
|
+void GetModuleOutput(byte group)
|
|
|
{
|
|
|
- int cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- //PRINTF_LIB_FUNC("cmd = %x \n", cmd);
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_OUTPUT_VOL_CUR;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- if(value == 0){
|
|
|
- //pwr off
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
- //pwr on
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_POWER_SWITCH_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// if(group == SET_GROUP_CMD)
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_POWER_SWITCH_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// //PRINTF_LIB_FUNC("Module-onoff(g) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
-// }
|
|
|
-// //如果是模組命令則找出模組對應到 (英飛源的ID)
|
|
|
-// else
|
|
|
-// {
|
|
|
-// cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_POWER_SWITCH_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-// // PRINTF_LIB_FUNC("Modele-onoff(M) :%08x - %d - %d \n",cmd, data[0],address);
|
|
|
-// }
|
|
|
-
|
|
|
+ if (group == SYSTEM_CMD)
|
|
|
+ cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
+ else
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|