|
@@ -33,8 +33,9 @@ static int UnknownKeynum = 0;
|
|
|
//===============================
|
|
|
// Gun Total Numbers
|
|
|
//===============================
|
|
|
-static int gunTotalNumber = 0;
|
|
|
-static uint8_t gunType[4] = {0};
|
|
|
+static ParsingRatedCur modelnameInfo = {0};
|
|
|
+static int gunTotalNumber = 0;
|
|
|
+static uint8_t gunType[4] = {0};
|
|
|
|
|
|
//===============================
|
|
|
// Local List Version
|
|
@@ -3556,7 +3557,6 @@ int InitShareMemory()
|
|
|
int ProcessShareMemory()
|
|
|
{
|
|
|
int result = PASS;
|
|
|
- ParsingRatedCur modelnameInfo={0};
|
|
|
|
|
|
if(InitShareMemory() == FAIL)
|
|
|
{
|
|
@@ -3573,6 +3573,7 @@ int ProcessShareMemory()
|
|
|
// Model name parsing
|
|
|
if(RatedCurrentParsing((char*)ShmSysConfigAndInfo->SysConfig.ModelName, &modelnameInfo) != -1)
|
|
|
{
|
|
|
+ DEBUG_INFO("Model name rated power: %d\n", modelnameInfo.ratedPower);
|
|
|
if((ShmSysConfigAndInfo->SysConfig.ModelName[0]=='D') &&
|
|
|
((ShmSysConfigAndInfo->SysConfig.ModelName[1]=='B') ||
|
|
|
(ShmSysConfigAndInfo->SysConfig.ModelName[1]=='K') ||
|
|
@@ -7604,7 +7605,7 @@ int sendMeterValuesRequest(int gun_index, ReadingContext dataType)
|
|
|
|
|
|
if((dataType != ReadingContext_Trigger) &&
|
|
|
(dataType != ReadingContext_Sample_Clock) &&
|
|
|
- ((ShmOCPP16DataPH->MeterValues[gun_index].TransactionId != -1) || (strstr((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[QueueOffLineMeterValues].ItemData, "TRUE"))))
|
|
|
+ ((ShmOCPP16DataPH->MeterValues[gun_index].TransactionId > 0) || (strstr((char *)ShmOCPP16DataPH->ConfigurationTable.CoreProfile[QueueOffLineMeterValues].ItemData, "TRUE"))))
|
|
|
queue_operation(QUEUE_OPERATION_ADD, guid, queuedata );
|
|
|
else
|
|
|
{
|
|
@@ -12858,6 +12859,43 @@ int handleSetChargingProfileRequest(char *uuid, char *payload)
|
|
|
goto end;
|
|
|
}
|
|
|
|
|
|
+ // Check invalid limit
|
|
|
+ if(ShmSysConfigAndInfo->SysConfig.ModelName[0] == 'A')
|
|
|
+ {
|
|
|
+ for(uint8_t idxPeriod=0;idxPeriod<chargingSchedulePeriodCount;idxPeriod++)
|
|
|
+ {
|
|
|
+
|
|
|
+ if(((0 < SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].Limit) && (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].Limit < (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingRateUnit[0]=='A'?6:6*220*(SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].NumberPhases==0?3:SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].NumberPhases)))) ||
|
|
|
+ (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].Limit > (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingRateUnit[0]=='W'?modelnameInfo.ratedPower:ShmSysConfigAndInfo->SysConfig.RatingCurrent)))
|
|
|
+ {
|
|
|
+ sprintf(comfirmstr, "%s", ChargingProfileStatusStr[ChargingProfileStatus_Rejected] );
|
|
|
+ DEBUG_WARN("Profile period-%02d is invalid limit: %.2f %s with phase %d.\n", idxPeriod,
|
|
|
+ SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].Limit,
|
|
|
+ SetProfileReq.ChargingProfile.ChargingSchedule.ChargingRateUnit,
|
|
|
+ (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].NumberPhases==0?3:SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].NumberPhases));
|
|
|
+
|
|
|
+ goto end;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ for(uint8_t idxPeriod=0;idxPeriod<chargingSchedulePeriodCount;idxPeriod++)
|
|
|
+ {
|
|
|
+
|
|
|
+ if((SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].Limit > (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingRateUnit[0]=='W'?modelnameInfo.ratedPower:modelnameInfo.ParsingInfo[0].Current)))
|
|
|
+ {
|
|
|
+ sprintf(comfirmstr, "%s", ChargingProfileStatusStr[ChargingProfileStatus_Rejected] );
|
|
|
+ DEBUG_WARN("Profile period-%02d is invalid limit: %.2f %s with phase %d.\n", idxPeriod,
|
|
|
+ SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].Limit,
|
|
|
+ SetProfileReq.ChargingProfile.ChargingSchedule.ChargingRateUnit,
|
|
|
+ (SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].NumberPhases==0?3:SetProfileReq.ChargingProfile.ChargingSchedule.ChargingSchedulePeriod[idxPeriod].NumberPhases));
|
|
|
+
|
|
|
+ goto end;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Profile purpose info check
|
|
|
if(strcmp((char*)SetProfileReq.ChargingProfile.ChargingProfilePurpose, ChargingProfilePurposeTypeStr[ChargePointMaxProfile]) == 0)
|
|
|
{
|