|
@@ -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);
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
void PRINTF_LIB_FUNC(char *string, ...)
|
|
|
{
|
|
|
if (DEBUG_LIB)
|
|
@@ -58,32 +30,72 @@ void PRINTF_LIB_FUNC(char *string, ...)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-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)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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_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;
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
|
@@ -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(target == 0xF0)
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- switch (intCmd)
|
|
|
- {
|
|
|
- case INFYPWR_GET_TOTAL_MOULE_MSG:
|
|
|
- {
|
|
|
- byte Quantity;
|
|
|
- char sn[7];
|
|
|
-
|
|
|
- Quantity = frame.data[2];
|
|
|
-
|
|
|
-
|
|
|
- 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:
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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:
|
|
|
- {
|
|
|
-
|
|
|
- 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]);
|
|
|
- }
|
|
|
-
|
|
|
- break;
|
|
|
-
|
|
|
- case INFYPWR_GET_MISC_INFO_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);
|
|
|
- }
|
|
|
-
|
|
|
- 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:
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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:
|
|
|
- {
|
|
|
-
|
|
|
- if(group == 0x0B)
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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);
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case INFYPWR_GROUP_SHIFT | MODULE_COUNT:
|
|
|
+ {
|
|
|
+
|
|
|
+ group = frame.can_id & 0x000000FF;
|
|
|
+
|
|
|
+ byte count = frame.data[2];
|
|
|
+
|
|
|
+ return_module_count(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);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case INFYPWR_GROUP_SHIFT | MODULE_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);
|
|
|
+
|
|
|
+ }
|
|
|
+ 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);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
bool InitialCommunication()
|
|
|
{
|
|
|
CanFd = InitCanBus();
|
|
@@ -367,434 +352,233 @@ bool InitialCommunication()
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-void RequestModuleTotalMumbert(void)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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));
|
|
|
+
|
|
|
+
|
|
|
+ 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, 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)
|
|
|
{
|
|
|
-
|
|
|
-
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_STATUS_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ uint cmd = INFYPWR_CMD | SLEEP_MODE;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
+
|
|
|
+
|
|
|
+ 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)
|
|
|
{
|
|
|
-
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
-
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_BARCODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
-
|
|
|
- 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));
|
|
|
+
|
|
|
+
|
|
|
+ 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)
|
|
|
{
|
|
|
-
|
|
|
- uint cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
-
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_VEXT_IAVAIL_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
- }
|
|
|
-
|
|
|
- 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)
|
|
|
{
|
|
|
-
|
|
|
- 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;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ 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;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ 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)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+void GetStatus(byte group)
|
|
|
{
|
|
|
- int cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
-
|
|
|
+ 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;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_MISC_INFO_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|
|
|
-void GetPresentInputVol(byte group, byte address)
|
|
|
+void GetFanSpeed(byte 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;
|
|
|
- }
|
|
|
-
|
|
|
- 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)
|
|
|
-{
|
|
|
-
|
|
|
- uint cmd;
|
|
|
- byte data[8];
|
|
|
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_AVAILABLE_CAP_MSG | (group << 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)
|
|
|
{
|
|
|
-
|
|
|
- int cmd;
|
|
|
byte data[8];
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_GET_PRESENT_OUTPUT_MSG | (group << 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];
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- uint vol2 = vol * 100;
|
|
|
- uint cur2 = cur * 100;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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){
|
|
|
-
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
-
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_GREEN_KED_FLASH_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
+
|
|
|
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){
|
|
|
-
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
-
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_WALKIN_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_WALKIN_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
- }
|
|
|
+ memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
+
|
|
|
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){
|
|
|
-
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
-
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if(group == SET_GROUP_CMD)
|
|
|
- {
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_SLEEP_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- else
|
|
|
- {
|
|
|
- cmd = INFYPWR_MODULE_CMD | INFYPWR_SET_SLEEP_MODE_MSG | (address << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
- }
|
|
|
+ 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];
|
|
|
-
|
|
|
-
|
|
|
+ uint cmd = INFYPWR_CMD | MODULE_OUTPUT_VOL_CUR;
|
|
|
|
|
|
memset(data, 0x00, ARRAY_SIZE(data));
|
|
|
|
|
|
- if(value == 0){
|
|
|
-
|
|
|
- data[0] = 0x01;
|
|
|
- }else{
|
|
|
-
|
|
|
- data[0] = 0x00;
|
|
|
- }
|
|
|
-
|
|
|
- cmd = INFYPWR_GROUP_CMD | INFYPWR_SET_POWER_SWITCH_MSG | (group << 8) | INFYPWR_MASTER_TXID;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ if (group == SYSTEM_CMD)
|
|
|
+ cmd |= INFYPWR_BROADCAST | INFYPWR_DEFAULT;
|
|
|
+ else
|
|
|
+ cmd |= INFYPWR_GROUP_SHIFT | (group << 8) | INFYPWR_DEFAULT;
|
|
|
SendCmdToPsu(cmd, data, sizeof(data));
|
|
|
}
|
|
|
|