|
@@ -4813,8 +4813,19 @@ void checkCompositeSchedule(uint8_t connectorId, uint32_t durationReq, struct Ch
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- break;
|
|
|
+ // Delete duplicate period
|
|
|
+ if(compositePeriodIdx > 1)
|
|
|
+ {
|
|
|
+ if(compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].limit == compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-2].limit)
|
|
|
+ {
|
|
|
+ compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].startPeriod = -1;
|
|
|
+ compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].limit = -1;
|
|
|
+ compositePeriodIdx -= 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ else
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -4876,8 +4887,19 @@ void checkCompositeSchedule(uint8_t connectorId, uint32_t durationReq, struct Ch
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- break;
|
|
|
+ // Delete duplicate period
|
|
|
+ if(compositePeriodIdx > 1)
|
|
|
+ {
|
|
|
+ if(compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].limit == compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-2].limit)
|
|
|
+ {
|
|
|
+ compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].startPeriod = -1;
|
|
|
+ compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].limit = -1;
|
|
|
+ compositePeriodIdx -= 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ else
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -4908,14 +4930,14 @@ void checkCompositeSchedule(uint8_t connectorId, uint32_t durationReq, struct Ch
|
|
|
if((maxProfile.chargingSchedule[idxSchedule].chargingSchedulePeriod[idxMaxPeriod].startPeriod >= compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx==0?0:compositePeriodIdx-1].startPeriod) &&
|
|
|
(maxProfile.chargingSchedule[idxSchedule].duration > compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx==0?0:compositePeriodIdx-1].startPeriod))
|
|
|
{
|
|
|
- tmpPeriod.startPeriod = compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx==0?0:compositePeriodIdx-1].startPeriod;
|
|
|
+ tmpPeriod.startPeriod = (compositePeriodIdx==0)?0:compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx==0?0:compositePeriodIdx-1].startPeriod;
|
|
|
tmpPeriod.numberPhases = compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx==0?0:compositePeriodIdx-1].numberPhases;
|
|
|
tmpPeriod.limit = maxProfile.chargingSchedule[idxSchedule].chargingSchedulePeriod[idxMaxPeriod].limit;
|
|
|
}
|
|
|
|
|
|
if((compositePeriodIdx > 0) && (maxProfile.chargingSchedule[idxSchedule].duration > compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx==0?0:compositePeriodIdx-1].startPeriod))
|
|
|
{
|
|
|
- tmpPeriod.startPeriod = compositeProfile->chargingSchedule[idxSchedule].duration;
|
|
|
+ tmpPeriod.startPeriod = (maxProfile.chargingSchedule[idxSchedule].chargingSchedulePeriod[idxMaxPeriod].startPeriod>compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].startPeriod)?maxProfile.chargingSchedule[idxSchedule].chargingSchedulePeriod[idxMaxPeriod].startPeriod:compositeProfile->chargingSchedule[idxSchedule].duration;
|
|
|
tmpPeriod.numberPhases = maxProfile.chargingSchedule[idxSchedule].chargingSchedulePeriod[idxMaxPeriod].numberPhases;
|
|
|
tmpPeriod.limit = maxProfile.chargingSchedule[idxSchedule].chargingSchedulePeriod[idxMaxPeriod].limit;
|
|
|
}
|
|
@@ -4934,6 +4956,17 @@ void checkCompositeSchedule(uint8_t connectorId, uint32_t durationReq, struct Ch
|
|
|
memcpy(&compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[(compositePeriodIdx==0?compositePeriodIdx:compositePeriodIdx-1)], &tmpPeriod , sizeof(struct ChargingSchedulePeriodType));
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // Delete duplicate period
|
|
|
+ if(compositePeriodIdx > 1)
|
|
|
+ {
|
|
|
+ if(compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].limit == compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-2].limit)
|
|
|
+ {
|
|
|
+ compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].startPeriod = -1;
|
|
|
+ compositeProfile->chargingSchedule[idxSchedule].chargingSchedulePeriod[compositePeriodIdx-1].limit = -1;
|
|
|
+ compositePeriodIdx -= 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -12164,12 +12197,19 @@ int handleGetCompositeScheduleRequest(char *uuid, char *payload)
|
|
|
DEBUG_INFO("Composite Period-%02d limit: %f\n", idx, ShmOCPP20Data->GetCompositeSchedule[gun_index].Response_schedule.chargingSchedule.chargingSchedulePeriod[idx].limit);
|
|
|
|
|
|
if((ShmOCPP20Data->GetCompositeSchedule[gun_index].Response_schedule.chargingSchedule.chargingSchedulePeriod[idx].startPeriod==0) &&
|
|
|
- (ShmOCPP20Data->GetCompositeSchedule[gun_index].Response_schedule.chargingSchedule.chargingSchedulePeriod[idx].limit==0))
|
|
|
+ (ShmOCPP20Data->GetCompositeSchedule[gun_index].Response_schedule.chargingSchedule.chargingSchedulePeriod[idx].limit==0) &&
|
|
|
+ (idx<(ARRAY_SIZE(ShmOCPP20Data->GetCompositeSchedule[gun_index].Response_schedule.chargingSchedule.chargingSchedulePeriod)-1)?(ShmOCPP20Data->GetCompositeSchedule[gun_index].Response_schedule.chargingSchedule.chargingSchedulePeriod[idx+1].startPeriod==0):TRUE))
|
|
|
{
|
|
|
confirmPeriods = idx;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if((confirmPeriods == 0) && (tmpProfile[0].id > 0))
|
|
|
+ {
|
|
|
+ confirmPeriods += 1;
|
|
|
+ }
|
|
|
+
|
|
|
sprintf(comfirmstr, "%s", GetCompositeScheduleStatusEnumTypeStr[GenericStatusEnumType_Accepted]);
|
|
|
}
|
|
|
else
|