|
@@ -44,17 +44,19 @@
|
|
|
typedef unsigned char byte;
|
|
|
#define NO_DEFINE 255
|
|
|
|
|
|
-#define OPTION_CNT 3
|
|
|
+#define OPTION_CNT 4
|
|
|
#define STR_OPTION '-'
|
|
|
#define OPTION_REFLASH 0x00000001
|
|
|
#define OPTION_LOOP 0x00000002
|
|
|
-#define OPTION_TIME 0x00000004
|
|
|
+#define OPTION_OUTPUT_FILE 0x00000004
|
|
|
+#define OPTION_TIME 0x00000008
|
|
|
|
|
|
#define MAX_SUB_CMD_QUANTITY 16
|
|
|
#define MAX_SUB_CMD_LENGTH 128
|
|
|
|
|
|
#define STR_OPT_REFLASH 'f'
|
|
|
#define STR_OPT_LOOP 'l'
|
|
|
+#define STR_OPT_OUTPUT_FILE 'o'
|
|
|
#define STR_OPT_TIME 't'
|
|
|
|
|
|
#define TTY_PATH "/dev/tty"
|
|
@@ -356,8 +358,8 @@ int ParsingCmd(char *inputString, char *outputString)
|
|
|
bool IsOption(char *strCmd, unsigned int *opt)
|
|
|
{
|
|
|
int len = 0;
|
|
|
- char str_opt[OPTION_CNT] = {STR_OPT_REFLASH, STR_OPT_LOOP, STR_OPT_TIME};
|
|
|
- unsigned int opt_value[OPTION_CNT] = {OPTION_REFLASH, OPTION_LOOP, OPTION_TIME};
|
|
|
+ char str_opt[OPTION_CNT] = {STR_OPT_REFLASH, STR_OPT_LOOP, STR_OPT_OUTPUT_FILE, STR_OPT_TIME};
|
|
|
+ unsigned int opt_value[OPTION_CNT] = {OPTION_REFLASH, OPTION_LOOP, OPTION_OUTPUT_FILE, OPTION_TIME};
|
|
|
|
|
|
len = strlen(strCmd);
|
|
|
|
|
@@ -1947,47 +1949,181 @@ void SetTestControl(char *v1, char *v2)
|
|
|
printf("\r\n");
|
|
|
}
|
|
|
|
|
|
-// Gun Role Master K1K2 GTVoltage GTCurrent StableCurrent OutputLoading GunLoading DiffP_Ava DiffP_Cap DiffP_Lim
|
|
|
-// 1 00 00 0 0000 V 000.0 A 0000 A XXX.XX XXX.XX XXX kw XXX kW XXX kW
|
|
|
-void ShowGroupingDemand(void)
|
|
|
+// Group Gun Available Psu Group Control
|
|
|
+// Gun Role Master K1K2 GTVol GTCur StableCur Loading Loading DiffP_Ava DiffP_Cap DiffP_Lim Partner IdleCtrl Master Stop Derating Extend Slave
|
|
|
+// 1 00 00 0 0000 V 000.0 A 0000 A XXX.XX XXX.XX XXX kw XXX kW XXX kW XX 0xXXXX 0xXXXX 0xXXXX 0xXXXX 0xXXXX 0xXXXX
|
|
|
+
|
|
|
+// Group Gun DiffP Available Psu Group Control
|
|
|
+// Gun Role Master K1K2 GTVol GTCur StableCur Loading Loading DiffP_Ava DiffP_Cap DiffP_Lim ConfigLim Partner IdleCtrl Master Stop Derating Extend Slave
|
|
|
+// 1 00 00 0 0000 V 000.0 A 0000 A XXX.XX XXX.XX XXX kw XXX kW XXX kW XXX kW XX 0xXXXX 0xXXXX 0xXXXX 0xXXXX 0xXXXX 0xXXXX
|
|
|
+void ShowGroupingDemand(char *inputCmd, unsigned int opt)
|
|
|
{
|
|
|
- byte target = 0;
|
|
|
- unsigned char k1k2 = 0;
|
|
|
+ bool keepRun = false;
|
|
|
+ bool reflash = false;
|
|
|
+ bool outputFile = false;
|
|
|
+ bool allRoleIdle = false;
|
|
|
+ bool fullInfo = false;
|
|
|
+ int totalCnt = 0;
|
|
|
|
|
|
- printf("\r\n Gun Role Master K1K2 GTVoltage GTCurrent StableCurrent OutputLoading GunLoading DiffP_Ava DiffP_Cap DiffP_Lim");
|
|
|
+ totalCnt = GetSubCommand(inputCmd);
|
|
|
|
|
|
- for(int i = 0; i < 4; i++)
|
|
|
+ if(totalCnt == 1)
|
|
|
{
|
|
|
- target = ShmPsuGrouping->Layout[i];
|
|
|
- if(ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup != 0)
|
|
|
+ if(strcmp(&MultiSubCmd[0][0], "full") == 0)
|
|
|
{
|
|
|
- k1k2 = _chargingData[ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup - 1]->RelayK1K2Status;
|
|
|
+ fullInfo = true;
|
|
|
}
|
|
|
- else
|
|
|
+ }
|
|
|
+
|
|
|
+ int time = 0;
|
|
|
+ struct timespec _Loop_time;
|
|
|
+ char lineString[512];
|
|
|
+ char tempString[128];
|
|
|
+
|
|
|
+ if((opt & OPTION_REFLASH) || (opt & OPTION_LOOP) > 0)
|
|
|
+ {
|
|
|
+ keepRun = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if((opt & OPTION_OUTPUT_FILE) > 0)
|
|
|
+ {
|
|
|
+ outputFile = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ byte target = 0;
|
|
|
+ unsigned char k1k2 = 0;
|
|
|
+
|
|
|
+ //printf(" Group Gun Available Psu Group Control\r\n");
|
|
|
+ //printf(" Gun Role Master K1K2 GTVol GTCur StableCur Loading Loading DiffP_Ava DiffP_Cap DiffP_Lim Partner IdleCtrl Master Stop Derating Extend Slave\r\n");
|
|
|
+ memset(lineString, 0x00, sizeof(lineString));
|
|
|
+ sprintf(lineString, " Group Gun DiffP");
|
|
|
+ if(fullInfo)
|
|
|
+ {
|
|
|
+ sprintf(tempString, " Available Psu Group Control");
|
|
|
+ strcat(lineString, tempString);
|
|
|
+ }
|
|
|
+ if(!outputFile)
|
|
|
+ {
|
|
|
+ printf("%s\r\n", lineString);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ReadCmd_INFO("%s", lineString);
|
|
|
+ }
|
|
|
+
|
|
|
+ sprintf(lineString, " Gun Role Master K1K2 GTVol GTCur StableCur Loading Loading DiffP_Ava DiffP_Cap DiffP_Lim ConfigLim");
|
|
|
+ if(fullInfo)
|
|
|
+ {
|
|
|
+ sprintf(tempString, " Partner IdleCtrl Master Stop Derating Extend Slave");
|
|
|
+ strcat(lineString, tempString);
|
|
|
+ }
|
|
|
+ if(!outputFile)
|
|
|
+ {
|
|
|
+ printf("%s\r\n", lineString);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ReadCmd_INFO("%s", lineString);
|
|
|
+ }
|
|
|
+
|
|
|
+ do
|
|
|
+ {
|
|
|
+ time = GetTimeoutValue(_Loop_time) / mSEC_VAL;
|
|
|
+ if(time >= 1000)
|
|
|
{
|
|
|
- k1k2 = _chargingData[target]->RelayK1K2Status;
|
|
|
+ if(reflash)
|
|
|
+ {
|
|
|
+ ConsoleReflash(MAX_GROUP_QUANTITY, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ for(int i = 0; i < MAX_GROUP_QUANTITY; i++)
|
|
|
+ {
|
|
|
+ target = ShmPsuGrouping->Layout[i];
|
|
|
+ if(ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup != 0)
|
|
|
+ {
|
|
|
+ k1k2 = _chargingData[ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup - 1]->RelayK1K2Status;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ k1k2 = _chargingData[target]->RelayK1K2Status;
|
|
|
+ }
|
|
|
+
|
|
|
+ memset(lineString, 0x00, sizeof(lineString));
|
|
|
+ sprintf(tempString, " %d %2d %02X %d %4d V %3d.%d A %4d A %3d.%02d",
|
|
|
+ target + 1, ShmChargerInfo->PsuGrouping.GroupCollection[target].Role, ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup, k1k2,
|
|
|
+ (ShmPsuGrouping->GroupOutput[target].GTargetVoltage / 10),
|
|
|
+ (ShmPsuGrouping->GroupOutput[target].GTargetCurrent / 10),
|
|
|
+ (ShmPsuGrouping->GroupOutput[target].GTargetCurrent % 10),
|
|
|
+ (int)(_chargingData[target]->AvailableChargingCurrent / 10),
|
|
|
+ (ShmPsuGrouping->GroupOutput[target].OutputLoading / 100),
|
|
|
+ (ShmPsuGrouping->GroupOutput[target].OutputLoading % 100));
|
|
|
+ strcat(lineString, tempString);
|
|
|
+
|
|
|
+ //if(ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup == target + 1)
|
|
|
+ //{
|
|
|
+ sprintf(tempString, " %3d.%02d", (ShmChargerInfo->PsuGrouping.GroupCollection[target].GunLoading / 100), (ShmChargerInfo->PsuGrouping.GroupCollection[target].GunLoading % 100));
|
|
|
+ strcat(lineString, tempString);
|
|
|
+
|
|
|
+
|
|
|
+ sprintf(tempString, " %3d kW %3d kW %3d kW %3d kW",
|
|
|
+ (int)ShmPsuGrouping->GroupCollection[target].DiffPower_Available,
|
|
|
+ (int)ShmPsuGrouping->GroupCollection[target].DiffPower_Capability,
|
|
|
+ (int)ShmPsuGrouping->GroupCollection[target].DiffPower_PhysicalLimit,
|
|
|
+ (int)ShmPsuGrouping->GroupCollection[target].DiffPower_ConfigLimit);
|
|
|
+ strcat(lineString, tempString);
|
|
|
+
|
|
|
+ if(fullInfo)
|
|
|
+ {
|
|
|
+ int partner_quantity = GetPsuGroupAvailable(target);
|
|
|
+ sprintf(tempString, " %2d 0x%04X 0x%04X 0x%04X 0x%04X 0x%04X 0x%04X",
|
|
|
+ partner_quantity,
|
|
|
+ ShmPsuGrouping->GroupCollection[target].GroupCtrl.RoleCtrl.IdleCtrlValue,
|
|
|
+ ShmPsuGrouping->GroupCollection[target].GroupCtrl.RoleCtrl.MasterCtrlValue,
|
|
|
+ ShmPsuGrouping->GroupCollection[target].GroupCtrl.RoleCtrl.StopChargingCtrlValue,
|
|
|
+ ShmPsuGrouping->GroupCollection[target].GroupCtrl.RoleCtrl.DeratingCtrlValue,
|
|
|
+ ShmPsuGrouping->GroupCollection[target].GroupCtrl.RoleCtrl.ExtendCapabilityCtrlValue,
|
|
|
+ ShmPsuGrouping->GroupCollection[target].GroupCtrl.RoleCtrl.SlaveCtrlValue);
|
|
|
+ strcat(lineString, tempString);
|
|
|
+ }
|
|
|
+ //}
|
|
|
+
|
|
|
+ if(!outputFile)
|
|
|
+ {
|
|
|
+ printf("%s\r\n", lineString);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!allRoleIdle)
|
|
|
+ {
|
|
|
+ ReadCmd_INFO("%s", lineString);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ allRoleIdle = true;
|
|
|
+ for(int i = 0; i < MAX_GROUP_QUANTITY; i++)
|
|
|
+ {
|
|
|
+ if(ShmChargerInfo->PsuGrouping.GroupCollection[i].Role != _GROLE_IDLE)
|
|
|
+ {
|
|
|
+ allRoleIdle = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ GetClockTime(&_Loop_time);
|
|
|
+ if((opt & OPTION_REFLASH) > 0 && !outputFile)
|
|
|
+ {
|
|
|
+ reflash = true;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- printf("\r\n %d %2d %02X %d %4d V %3d.%d A %4d A %3d.%02d",
|
|
|
- target + 1, ShmChargerInfo->PsuGrouping.GroupCollection[target].Role, ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup, k1k2,
|
|
|
- (ShmPsuGrouping->GroupOutput[target].GTargetVoltage / 10),
|
|
|
- (ShmPsuGrouping->GroupOutput[target].GTargetCurrent / 10),
|
|
|
- (ShmPsuGrouping->GroupOutput[target].GTargetCurrent % 10),
|
|
|
- (int)(_chargingData[target]->AvailableChargingCurrent / 10),
|
|
|
- (ShmPsuGrouping->GroupOutput[target].OutputLoading / 100),
|
|
|
- (ShmPsuGrouping->GroupOutput[target].OutputLoading % 100));
|
|
|
- if(ShmChargerInfo->PsuGrouping.GroupCollection[target].TargetGroup == target + 1)
|
|
|
+ if(keepRun)
|
|
|
{
|
|
|
- printf(" %3d.%02d", (ShmChargerInfo->PsuGrouping.GroupCollection[target].GunLoading / 100), (ShmChargerInfo->PsuGrouping.GroupCollection[target].GunLoading % 100));
|
|
|
-
|
|
|
- printf(" %3d kW %3d kW %3d kW",
|
|
|
- (int)ShmPsuGrouping->GroupCollection[target].DiffPower_Available,
|
|
|
- (int)ShmPsuGrouping->GroupCollection[target].DiffPower_Capability,
|
|
|
- (int)ShmPsuGrouping->GroupCollection[target].DiffPower_PhysicalLimit);
|
|
|
+ keepRun = IsLoopStopCmd() ? false : true;
|
|
|
+ usleep(10000);
|
|
|
}
|
|
|
- }
|
|
|
+ }while(keepRun);
|
|
|
|
|
|
- printf("\r\n\r\n");
|
|
|
+ printf("\r\n");
|
|
|
}
|
|
|
|
|
|
// v1: gun
|
|
@@ -3673,7 +3809,15 @@ void EvCommMsgDebug(char *inputCmd, unsigned int opt)
|
|
|
|
|
|
bool find = false;
|
|
|
int reg = 0, enable = 0;
|
|
|
- reg = atoi(&MultiSubCmd[0][0]);
|
|
|
+
|
|
|
+ if(strcmp(&MultiSubCmd[0][0], "0x") == EQUAL && strlen(&MultiSubCmd[0][0]) > 2)
|
|
|
+ {
|
|
|
+ reg = (int)strtol(&MultiSubCmd[0][0], NULL, 16);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ reg = atoi(&MultiSubCmd[0][0]);
|
|
|
+ }
|
|
|
enable = atoi(&MultiSubCmd[1][0]);
|
|
|
|
|
|
if(enable > 1 || enable < 0)
|
|
@@ -4785,7 +4929,7 @@ void RelayCmd(char *inputCmd, unsigned int opt)
|
|
|
memset(subMain, 0x00, sizeof(subMain));
|
|
|
memset(subSub, 0x00, sizeof(subSub));
|
|
|
|
|
|
- if(MainAndSubCommandParsing(inputCmd, subMain, subSub) >= 2)
|
|
|
+ if(MainAndSubCommandParsing(inputCmd, subMain, subSub) == 2)
|
|
|
{
|
|
|
if(strcmp(subMain, "abnormal") == EQUAL)
|
|
|
{
|
|
@@ -5236,6 +5380,194 @@ void ShowOccupancy(char *inputCmd, unsigned int opt)
|
|
|
printf("\r\n");
|
|
|
}
|
|
|
|
|
|
+void SetCustomizedFlag(int shift, bool enable)
|
|
|
+{
|
|
|
+ if(enable)
|
|
|
+ {
|
|
|
+ ShmChargerInfo->Control.CustomizedInfo.Flag.CtrlValue |= (1 << shift);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ShmChargerInfo->Control.CustomizedInfo.Flag.CtrlValue &= ~(1 << shift);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// super customized standby [enable/disable]
|
|
|
+// super customized tccstandby [enable/disable]
|
|
|
+// super customized standbyfast [enable/disable]
|
|
|
+// super customized freestandby [enable/disable]
|
|
|
+// super customized tilt [enable/disable]
|
|
|
+void SetCustomizedCmd(char *inputCmd)
|
|
|
+{
|
|
|
+ int totalCnt = 0, maxPara = 0;
|
|
|
+
|
|
|
+ maxPara = 2;
|
|
|
+ totalCnt = GetSubCommand(inputCmd);
|
|
|
+
|
|
|
+ if(totalCnt != maxPara)
|
|
|
+ {
|
|
|
+ printf("Input cmd fail ------ super [customized] [disstandby | tccstandby | standbyfast | cstandby | tilt] [enable | disable]\r\n\r\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ int maxCustomized = 5;
|
|
|
+ int shift = 0;
|
|
|
+ bool enable = false, find = false;;
|
|
|
+
|
|
|
+ enable = strcmp(&MultiSubCmd[1][0], "enable") == EQUAL ? true : false;
|
|
|
+
|
|
|
+
|
|
|
+ char *str_customized[] = {"disstandby", "tccstandby", "standbyfast", "freestandby", "tilt"};
|
|
|
+
|
|
|
+ for(int i = 0; i < maxCustomized; i++)
|
|
|
+ {
|
|
|
+ if(strcmp(&MultiSubCmd[0][0], str_customized[i]) == EQUAL)
|
|
|
+ {
|
|
|
+ shift = i;
|
|
|
+ find = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(find)
|
|
|
+ {
|
|
|
+ SetCustomizedFlag(shift, enable);
|
|
|
+ printf("\r\n");
|
|
|
+ printf("%s %s customized flag\r\n\r\n", enable ? "Enable" : "Disable", str_customized[shift]);
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Input cmd fail ------ super [customized] [disstandby | tccstandby | standbyfast | cstandby | tilt] [enable | disable]\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
+void TiltSensorTrigger(void)
|
|
|
+{
|
|
|
+ ShmChargerInfo->Control.CustomizedInfo.TiltSensorStep = _TILT_SENSOR_NONE;
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Reset tilt sensor step\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
+void TiltSensorCmd(char *inputCmd)
|
|
|
+{
|
|
|
+ char subMain[MAX_SUB_CMD_LENGTH];
|
|
|
+ char subSub[MAX_SUB_CMD_LENGTH];
|
|
|
+
|
|
|
+ memset(subMain, 0x00, sizeof(subMain));
|
|
|
+ memset(subSub, 0x00, sizeof(subSub));
|
|
|
+
|
|
|
+ if(MainAndSubCommandParsing(inputCmd, subMain, subSub) == 1)
|
|
|
+ {
|
|
|
+ if(strcmp(subMain, "test") == 0)
|
|
|
+ {
|
|
|
+ TiltSensorTrigger();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Input cmd fail ------ super [tilt] [test]\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
+void SetStandbyTime(int time)
|
|
|
+{
|
|
|
+ if(time != 0)
|
|
|
+ {
|
|
|
+ ShmChargerInfo->Control.CustomizedInfo.StandbyTime = time;
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Set standby time [%d] (s)\r\n\r\n", ShmChargerInfo->Control.CustomizedInfo.StandbyTime);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Unavailable value, standby time [%d] (s)\r\n\r\n", ShmChargerInfo->Control.CustomizedInfo.StandbyTime);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void StandbyTimeCmd(char *inputCmd)
|
|
|
+{
|
|
|
+ char subMain[MAX_SUB_CMD_LENGTH];
|
|
|
+ char subSub[MAX_SUB_CMD_LENGTH];
|
|
|
+
|
|
|
+ memset(subMain, 0x00, sizeof(subMain));
|
|
|
+ memset(subSub, 0x00, sizeof(subSub));
|
|
|
+
|
|
|
+ if(MainAndSubCommandParsing(inputCmd, subMain, subSub) == 1)
|
|
|
+ {
|
|
|
+ int _time = atoi(subMain);
|
|
|
+
|
|
|
+ SetStandbyTime(_time);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Input cmd fail ------ super [standby] [value(seconds)]\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
+void DiagnosticsEnable(void)
|
|
|
+{
|
|
|
+ ShmChargerInfo->Control.Diagnostics.DiagnosticsType = DIAGNOSTICS_TYPE_ALL;
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Dispenser Diagnostics Enable\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
+void DiagnosticsCmd(char *inputCmd)
|
|
|
+{
|
|
|
+ char subMain[MAX_SUB_CMD_LENGTH];
|
|
|
+ char subSub[MAX_SUB_CMD_LENGTH];
|
|
|
+
|
|
|
+ memset(subMain, 0x00, sizeof(subMain));
|
|
|
+ memset(subSub, 0x00, sizeof(subSub));
|
|
|
+
|
|
|
+ if(MainAndSubCommandParsing(inputCmd, subMain, subSub) == 1)
|
|
|
+ {
|
|
|
+ if(strcmp(subMain, "enable") == 0)
|
|
|
+ {
|
|
|
+ DiagnosticsEnable();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Input cmd fail ------ super [diagnostics] [enable]\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
+void SuperMode(char *inputCmd, unsigned int opt)
|
|
|
+{
|
|
|
+ char subMain[MAX_SUB_CMD_LENGTH];
|
|
|
+ char subSub[MAX_SUB_CMD_LENGTH];
|
|
|
+
|
|
|
+ memset(subMain, 0x00, sizeof(subMain));
|
|
|
+ memset(subSub, 0x00, sizeof(subSub));
|
|
|
+
|
|
|
+ if(MainAndSubCommandParsing(inputCmd, subMain, subSub) >= 1)
|
|
|
+ {
|
|
|
+ if(strcmp(subMain, "customized") == 0)
|
|
|
+ {
|
|
|
+ SetCustomizedCmd(subSub);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(strcmp(subMain, "tilt") == 0)
|
|
|
+ {
|
|
|
+ TiltSensorCmd(subSub);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(strcmp(subMain, "standby") == 0)
|
|
|
+ {
|
|
|
+ StandbyTimeCmd(subSub);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(strcmp(subMain, "diagnostics") == 0)
|
|
|
+ {
|
|
|
+ DiagnosticsCmd(subSub);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ printf("\r\n");
|
|
|
+ printf("Input cmd fail ------ super [customized | tilt | standby | diagnostics] [...]\r\n\r\n");
|
|
|
+}
|
|
|
+
|
|
|
int ShowPsuCount(void)
|
|
|
{
|
|
|
int line = 0;
|
|
@@ -5322,18 +5654,22 @@ int ShowPsuGroupInfo(int group)
|
|
|
{
|
|
|
if(ShmPsuData->PsuGroup[group].GroupPresentPsuQuantity > 0)
|
|
|
{
|
|
|
- printf(" G-%d %2d %4d.%d V %4d.%d A %4d kW %4d A %4d kW",
|
|
|
+ printf(" G-%d %2d %4d.%d V %4d.%d A %4d kW",
|
|
|
group + 1,
|
|
|
ShmPsuPosition->GroupLocationInfo[group].GroupPsuQuantity,
|
|
|
(ShmPsuData->PsuGroup[group].GroupPresentOutputVoltage / 10),
|
|
|
(ShmPsuData->PsuGroup[group].GroupPresentOutputVoltage % 10),
|
|
|
(ShmPsuData->PsuGroup[group].GroupPresentOutputCurrent / 10),
|
|
|
(ShmPsuData->PsuGroup[group].GroupPresentOutputCurrent % 10),
|
|
|
- (ShmPsuData->PsuGroup[group].GroupPresentOutputPower / 10),
|
|
|
+ (ShmPsuData->PsuGroup[group].GroupPresentOutputPower / 10));
|
|
|
+
|
|
|
+ printf(" %4d V %4d A %4d A %4d kW",
|
|
|
+ (ShmPsuGrouping->GroupOutput[group].GTargetVoltage / 10),
|
|
|
+ (ShmPsuGrouping->GroupOutput[group].GTargetCurrent / 10),
|
|
|
(ShmPsuData->PsuGroup[group].GroupAvailableCurrent / 10),
|
|
|
(ShmPsuData->PsuGroup[group].GroupAvailablePower / 10));
|
|
|
|
|
|
- printf(" | %d%d%d%d | %d%d%d%d\r\n",
|
|
|
+ printf(" | %d%d%d%d | %d%d%d%d\r\n",
|
|
|
ShmChargerInfo->PsuGrouping.GroupPsuStatus_OR[group].bits.Lock,
|
|
|
ShmChargerInfo->PsuGrouping.GroupPsuStatus_OR[group].bits.Alarm,
|
|
|
ShmChargerInfo->PsuGrouping.GroupPsuStatus_OR[group].bits.Fault,
|
|
@@ -5358,7 +5694,7 @@ int ShowSinglePsuInfo(int psu_index)
|
|
|
group = ShmPsuPosition->PsuAddressInfo[psu_index].GroupNo;
|
|
|
gIndex = ShmPsuPosition->PsuAddressInfo[psu_index].GIndex;
|
|
|
|
|
|
- printf(" %2d %2d %4d.%d V %4d.%d A %4d kW %4d A %4d kW",
|
|
|
+ printf(" %2d %2d %4d.%d V %4d.%d A %4d kW %4d A %4d kW",
|
|
|
gIndex + 1,
|
|
|
psu_index,
|
|
|
(ShmPsuData->PsuGroup[group].PsuModule[gIndex].PresentOutputVoltage / 10),
|
|
@@ -5369,42 +5705,40 @@ int ShowSinglePsuInfo(int psu_index)
|
|
|
(ShmPsuData->PsuGroup[group].PsuModule[gIndex].IAvailableCurrent / 10),
|
|
|
(ShmPsuData->PsuGroup[group].PsuModule[gIndex].AvailablePower / 10));
|
|
|
|
|
|
- int CriticalTemp1 = 0, CriticalTemp2 = 0, CriticalTemp3 = 0, InletTemp = 0, OutletTemp = 0, InletTemp_1 = 0, InletTemp_2 = 0;
|
|
|
- CriticalTemp1 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].CriticalTemp1 - 60;
|
|
|
- CriticalTemp2 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].CriticalTemp2 - 60;
|
|
|
- CriticalTemp3 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].CriticalTemp3 - 60;
|
|
|
- InletTemp = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].InletTemp - 60;
|
|
|
- OutletTemp = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].OutletTemp - 60;
|
|
|
- InletTemp_1 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].InletTemp_1 - 60;
|
|
|
- InletTemp_2 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].InletTemp_2 - 60;
|
|
|
-
|
|
|
- printf(" %4d %4d / %4d %4d / %4d %4d / %4d",
|
|
|
- CriticalTemp1, InletTemp, OutletTemp, InletTemp_1, InletTemp_2, CriticalTemp2, CriticalTemp3);
|
|
|
+ printf(" %3d.%d V %3d.%d V %3d.%d V",
|
|
|
+ (ShmPsuData->PsuGroup[group].PsuModule[gIndex].InputVoltageL1 / 10),
|
|
|
+ (ShmPsuData->PsuGroup[group].PsuModule[gIndex].InputVoltageL1 % 10),
|
|
|
+ (ShmPsuData->PsuGroup[group].PsuModule[gIndex].InputVoltageL2 / 10),
|
|
|
+ (ShmPsuData->PsuGroup[group].PsuModule[gIndex].InputVoltageL2 % 10),
|
|
|
+ (ShmPsuData->PsuGroup[group].PsuModule[gIndex].InputVoltageL3 / 10),
|
|
|
+ (ShmPsuData->PsuGroup[group].PsuModule[gIndex].InputVoltageL3 % 10));
|
|
|
|
|
|
- printf(" | %d%d%d%d\r\n",
|
|
|
+ printf(" | %d%d%d%d",
|
|
|
ShmPsuPosition->SinglePsuStatus[psu_index].bits.Lock,
|
|
|
ShmPsuPosition->SinglePsuStatus[psu_index].bits.Alarm,
|
|
|
ShmPsuPosition->SinglePsuStatus[psu_index].bits.Fault,
|
|
|
ShmPsuPosition->SinglePsuStatus[psu_index].bits.Output);
|
|
|
|
|
|
+ printf("\r\n");
|
|
|
+
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
-// Group Psu Out_Vol Out_Cur Out_Pow Ava_Cur Ava_Pow Ambient Liq_In_Out DD_In 1 & 2 DD_Out 1 & 2 OR_LAFO AND_LAFO
|
|
|
-// G-X 4 XXXX.X V XXXX.X A XXXX kW XXXX A XXXX kW | XXXX | XXXX
|
|
|
+// Group Psu Out_Vol Out_Cur Out_Pow TargetV TargetC Ava_Cur Ava_Pow Ambient Liq_In_Out DD_In 1 & 2 DD_Out 1 & 2 OR_LAFO AND_LAFO InVol L1 InVol L2 InVol L3
|
|
|
+// G-X 4 XXXX.X V XXXX.X A XXXX kW XXXX V XXXX A XXXX A XXXX kW | XXXX | XXXX
|
|
|
// G-X 0 N/A N/A N/A N/A N/A
|
|
|
-// X 0 XXXX.X V XXXX.X A XXXX kW XXXX A XXXX kW XXXX XXXX / XXXX XXXX / XXXX XXXX / XXXX | XXXX | XXXX
|
|
|
+// X 0 XXXX.X V XXXX.X A XXXX kW XXXX A XXXX kW XXXX XXXX / XXXX XXXX / XXXX XXXX / XXXX | XXXX | XXXX XXX.X V XXX.X V XXX.X V
|
|
|
|
|
|
-// Group Out_Vol Out_Cur Out_Pow Ava_Cur Ava_Pow Version Ambient Liq_In_Out DD_In 1 & 2 DD_Out 1 & 2 OR_LAFO AND_LAFO
|
|
|
-// G-X XXXX.X V XXXX.X A XXXX kW XXXX A XXXX kW, Total: XX | XXXX | XXXX
|
|
|
-// G-X N/A N/A N/A N/A N/A
|
|
|
-// X XXXX.X V XXXX.X A XXXX kW XXXX A XXXX kW XXXXXXXXXX XXXX XXXX / XXXX XXXX / XXXX XXXX / XXXX | XXXX | XXXX
|
|
|
+// Group Psu Out_Vol Out_Cur Out_Pow TargetV TargetC Ava_Cur Ava_Pow InVol L1 InVol L2 InVol L3 OR_LAFO AND_LAFO
|
|
|
+// G-X 4 XXXX.X V XXXX.X A XXXX kW XXXX V XXXX A XXXX A XXXX kW | XXXX | XXXX
|
|
|
+// G-X 0 N/A N/A N/A N/A N/A N/A N/A
|
|
|
+// X 0 XXXX.X V XXXX.X A XXXX kW XXXX A XXXX kW XXX.X V XXX.X V XXX.X V | XXXX | XXXX
|
|
|
int ShowPsuInfo(void)
|
|
|
{
|
|
|
- int line = 2;
|
|
|
- printf(" PFC & DD\r\n");
|
|
|
- printf(" Group Psu Out_Vol Out_Cur Out_Pow Ava_Cur Ava_Pow Ambient Liq_In_Out DD_In 1 & 2 DD_Out 1 & 2 OR_LAFO AND_LAFO\r\n");
|
|
|
+ int line = 1;
|
|
|
|
|
|
+ //printf(" Group Psu Out_Vol Out_Cur Out_Pow Ava_Cur Ava_Pow InVol L1 InVol L2 InVol L3 OR_LAFO AND_LAFO\r\n");
|
|
|
+ printf(" Group Psu Out_Vol Out_Cur Out_Pow TargetV TargetC Ava_Cur Ava_Pow InVol L1 InVol L2 InVol L3 OR_LAFO AND_LAFO\r\n");
|
|
|
for(int i = 0; i < CONNECTOR_QUANTITY; i++)
|
|
|
{
|
|
|
line += ShowPsuGroupInfo(i);
|
|
@@ -5420,6 +5754,70 @@ int ShowPsuInfo(void)
|
|
|
return line;
|
|
|
}
|
|
|
|
|
|
+int ShowSinglePsuTemperature(int psu_index)
|
|
|
+{
|
|
|
+ int group = 0, gIndex = 0;
|
|
|
+
|
|
|
+ group = ShmPsuPosition->PsuAddressInfo[psu_index].GroupNo;
|
|
|
+ gIndex = ShmPsuPosition->PsuAddressInfo[psu_index].GIndex;
|
|
|
+
|
|
|
+ int CriticalTemp1 = 0, CriticalTemp2 = 0, CriticalTemp3 = 0, InletTemp = 0, OutletTemp = 0, InletTemp_1 = 0, InletTemp_2 = 0;
|
|
|
+ CriticalTemp1 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].CriticalTemp1 - 60;
|
|
|
+ CriticalTemp2 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].CriticalTemp2 - 60;
|
|
|
+ CriticalTemp3 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].CriticalTemp3 - 60;
|
|
|
+ InletTemp = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].InletTemp - 60;
|
|
|
+ OutletTemp = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].OutletTemp - 60;
|
|
|
+ InletTemp_1 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].InletTemp_1 - 60;
|
|
|
+ InletTemp_2 = (int)ShmPsuData->PsuGroup[group].PsuModule[gIndex].InletTemp_2 - 60;
|
|
|
+
|
|
|
+ printf(" %d %2d %4d %4d / %4d %4d / %4d %4d / %4d\r\n",
|
|
|
+ group, psu_index, CriticalTemp1, InletTemp, OutletTemp, InletTemp_1, InletTemp_2, CriticalTemp2, CriticalTemp3);
|
|
|
+
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+// PFC & DD
|
|
|
+// Group Psu Ambi Liq_In_Out DD_In 1 & 2 DD_Out 1 & 2
|
|
|
+// X XX XXXX XXXX / XXXX XXXX / XXXX XXXX / XXXX
|
|
|
+int ShowPsuTemperature(void)
|
|
|
+{
|
|
|
+ int line = 2;
|
|
|
+ printf(" PFC & DD\r\n");
|
|
|
+ printf(" Group Psu Ambi Liq_In_Out DD_In 1 & 2 DD_Out 1 & 2\r\n");
|
|
|
+ for(int i = 0; i < MAX_GROUP_QUANTITY; i++)
|
|
|
+ {
|
|
|
+ if(ShmPsuData->PsuGroup[i].GroupPresentPsuQuantity > 0)
|
|
|
+ {
|
|
|
+ for(int j = 0; j < ShmPsuData->PsuGroup[i].GroupPresentPsuQuantity; j++)
|
|
|
+ {
|
|
|
+ int psu_index = ShmPsuPosition->GroupLocationInfo[i].PsuIndex[j];
|
|
|
+ line += ShowSinglePsuTemperature(psu_index);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return line;
|
|
|
+}
|
|
|
+
|
|
|
+void SetPsuIndication(int psuIndex)
|
|
|
+{
|
|
|
+ if(psuIndex >= MAX_PSU_MODULE_QUANTITY)
|
|
|
+ {
|
|
|
+ printf("psu index(%d) over range(%d)\r\n", psuIndex, MAX_PSU_MODULE_QUANTITY);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ShmChargerInfo->Control.LibCtrl.bits.InfyPwrLib)
|
|
|
+ {
|
|
|
+ ShmPsuPosition->SingleInfyPwrState[psuIndex].InfyPwrStateFlag.bits.Indicated = true;
|
|
|
+ printf("Set Psu[%2d] Led Blinking\r\n", psuIndex);
|
|
|
+ }
|
|
|
+ if(ShmChargerInfo->Control.LibCtrl.bits.PhPwrLib)
|
|
|
+ {
|
|
|
+ printf("PhPwer not support this function\r\n");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void PsuCmd(char *inputCmd, unsigned int opt)
|
|
|
{
|
|
|
bool keepRun = false;
|
|
@@ -5438,9 +5836,9 @@ void PsuCmd(char *inputCmd, unsigned int opt)
|
|
|
maxPara = 1;
|
|
|
totalCnt = GetSubCommand(inputCmd);
|
|
|
|
|
|
- if(totalCnt != maxPara)
|
|
|
+ if(totalCnt < maxPara)
|
|
|
{
|
|
|
- printf("Input cmd fail ------ psu [count | ver | cap | input | output | info]\r\n\r\n");
|
|
|
+ printf("Input cmd fail ------ psu [count | ver | cap | input | output | info | temp | indi]\r\n\r\n");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -5459,6 +5857,10 @@ void PsuCmd(char *inputCmd, unsigned int opt)
|
|
|
{
|
|
|
reflashLine = ShowPsuInfo();
|
|
|
}
|
|
|
+ else if(strcmp(&MultiSubCmd[0][0], "temp") == EQUAL)
|
|
|
+ {
|
|
|
+ reflashLine = ShowPsuTemperature();
|
|
|
+ }
|
|
|
else if(strcmp(&MultiSubCmd[0][0], "count") == EQUAL)
|
|
|
{
|
|
|
reflashLine = ShowPsuCount();
|
|
@@ -5479,9 +5881,24 @@ void PsuCmd(char *inputCmd, unsigned int opt)
|
|
|
{
|
|
|
reflashLine = ShowPsuOutput();
|
|
|
}
|
|
|
+ else if(strcmp(&MultiSubCmd[0][0], "indi") == EQUAL)
|
|
|
+ {
|
|
|
+ int psuIndex = 0;
|
|
|
+
|
|
|
+ if(totalCnt == 2)
|
|
|
+ {
|
|
|
+ psuIndex = atoi(&MultiSubCmd[1][0]);
|
|
|
+ SetPsuIndication(psuIndex);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("Input cmd parsing fail ------ psu [indi] [index]\r\n");
|
|
|
+ }
|
|
|
+ keepRun = false;
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
- printf("Input cmd parsing fail ------ psu [count | ver | cap | input | output | info]\r\n");
|
|
|
+ printf("Input cmd parsing fail ------ psu [count | ver | cap | input | output | info | temp | indi]\r\n");
|
|
|
keepRun = false;
|
|
|
}
|
|
|
|
|
@@ -5502,7 +5919,7 @@ void PsuCmd(char *inputCmd, unsigned int opt)
|
|
|
printf("\r\n");
|
|
|
}
|
|
|
|
|
|
-int main(void)
|
|
|
+int main(int argc, char *argv[])
|
|
|
{
|
|
|
char newString[32][MAX_SUB_CMD_LENGTH];
|
|
|
char inputString[MAX_SUB_CMD_LENGTH], normalCmd[MAX_SUB_CMD_LENGTH];
|
|
@@ -5537,12 +5954,30 @@ int main(void)
|
|
|
memset(&newString[i], 0x00, 32);
|
|
|
}
|
|
|
|
|
|
+ memset(inputString, 0x00, sizeof(inputString));
|
|
|
+ memset(normalCmd, 0x00, sizeof(normalCmd));
|
|
|
+
|
|
|
+ if(argc > 1)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < argc - 1; i++)
|
|
|
+ {
|
|
|
+ strcat(inputString, argv[i + 1]);
|
|
|
+ if(i + 1 < argc - 1)
|
|
|
+ {
|
|
|
+ strcat(inputString, " ");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
for(;;)
|
|
|
{
|
|
|
- memset(inputString, 0x00, sizeof(inputString));
|
|
|
- memset(normalCmd, 0x00, sizeof(normalCmd));
|
|
|
+ if(argc == 1)
|
|
|
+ {
|
|
|
+ memset(inputString, 0x00, sizeof(inputString));
|
|
|
+ memset(normalCmd, 0x00, sizeof(normalCmd));
|
|
|
+ get_char(inputString);
|
|
|
+ }
|
|
|
|
|
|
- get_char(inputString);
|
|
|
cmdCnt = InputStringNormalize(inputString, normalCmd, &option);
|
|
|
if(cmdCnt > 0)
|
|
|
{
|
|
@@ -5772,9 +6207,9 @@ int main(void)
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
- else if(strcmp(newString[0], "gdmd") == 0)
|
|
|
+ else if(strcmp(mainCmd, "gdmd") == 0)
|
|
|
{
|
|
|
- ShowGroupingDemand();
|
|
|
+ ShowGroupingDemand(subCmd, option);
|
|
|
}
|
|
|
else if(strcmp(mainCmd, "gunchg") == 0)
|
|
|
{
|
|
@@ -5905,12 +6340,21 @@ int main(void)
|
|
|
else if(strcmp(mainCmd, "occupancy") == 0)
|
|
|
{
|
|
|
ShowOccupancy(subCmd, option);
|
|
|
+ }
|
|
|
+ else if(strcmp(mainCmd, "super") == 0)
|
|
|
+ {
|
|
|
+ SuperMode(subCmd, option);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
printf ("%s\n", msg);
|
|
|
}
|
|
|
usleep(100000);
|
|
|
+
|
|
|
+ if(argc > 1)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return 0;
|