<p>Mission name; value: three characters matching the following regular expression [S][1-3][A-B]</p>
ACTIVE
IDLE
ACTIVE
IDLE
UNDEFINED
S1_SAR
S1_GPSR
S2_MSI
S2_GPSR
S2_STR
S2_CSW
S3_OLCI
S3_SLSTR
S3_DORIS
S3_NAVATT
S3_MWR
S3_SRAL
S3_GPSR
TEST
OPER
IDLE_TM_PACKET
HOUSEKEEPING
NON-REAL_TIME_HKTM
Transfer Frame Primary Header / Virtual Channel Data Unit Header
OCL
self.mcidTfVersionNumber.intValue = 1
OCL
self.mcidSpacecraftId.intValue = self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.spacecraftId
OCL
let rtStpsConfig : XsveRtStps = self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps in
rtStpsConfig.vcdusConfig.vcduConfig.vcid->exists(x | x = self.virtualChannelId)
or
self.virtualChannelId = rtStpsConfig.idleVcid
OCL
self.signFieldReplayFlag.intValue = 0
OCL
self.signFieldRsvdSpare.intValue = 0
OCL
self.virtualChannelId.value.intValue >= 0 and self.virtualChannelId.value.intValue <= 63
OCL
self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.rsCorrectHeader
implies
self.rsCrcHasErrors = false
OCL
self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.rsCorrectHeader
and
self.rsCrcHasErrors = true
implies
self.rsCrcErrorsCorrectable = true
OCL
self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.vcdusConfig.vcduConfig.vcid->exists(x | x = self.virtualChannelId)
or
self.virtualChannelId = self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleVcid
<p>Master Channel ID - Transfer Frame Version Number</p><p>2 bits</p>
<p>Master Channel ID - Spacecraft ID</p><p>8 bits</p>
<p>6 bits</p>
<p>3 bytes</p>
<p>Signaling Field - Replay Flag</p><p>1 bit</p>
<p>Signaling Field - Rsvd Fd</p><p>7 bits</p>
<p>2 bytes</p>
<p>return 2 byte array</p>
OCL
self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.rsCorrectHeader
OCL
self.virtualChannelId.value.intValue
Frame / Virtual Channel Data Unit
OCL
self.vcduHeader.virtualChannelId = self.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleVcid
implies
self.mpduHeader.oclIsTypeOf(MpduIdleHeader)
and
self.mpduHeader.oclAsType(MpduIdleHeader).value.byte->at(1).intValue = 7
and
self.mpduHeader.oclAsType(MpduIdleHeader).value.byte->at(2).intValue = -2
and
self.mpduPacketZone.oclIsTypeOf(MpduIdlePacketZone)
and
self.mpduPacketZone.oclAsType(MpduIdlePacketZone).value.byte->at(1).intValue = -1
and
self.mpduPacketZone.oclAsType(MpduIdlePacketZone).value.byte->at(2).intValue = -3
and
self.mpduPacketZone.oclAsType(MpduIdlePacketZone).value.byte->at(3).intValue = 89
and
self.mpduPacketZone.oclAsType(MpduIdlePacketZone).value.byte->at(4).intValue = 123
OCL
(self.vcduHeader.virtualChannelId = self.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleVcid and self.mpduHeader.oclIsTypeOf(MpduIdleHeader) and self.mpduPacketZone.oclIsTypeOf(MpduIdlePacketZone))
or
(self.vcduHeader.virtualChannelId <> self.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleVcid and self.mpduHeader.oclIsTypeOf(MpduActiveHeader) and self.mpduPacketZone.oclIsTypeOf(MpduActivePacketZone))
OCL
if self.vcduHeader.virtualChannelId = self.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleVcid
then VirtualChannelType::IDLE
else VirtualChannelType::ACTIVE
endif
OCL
if self.cadu.channelData.caduHeaderIncludesMpdu then
if self.getVirtualChannelType() = VirtualChannelType::IDLE then
self.vcduHeader.vcduHeaderAsString.concat(self.mpduHeader.oclAsType(MpduIdleHeader).mpduIdleHeaderAsString)
else
self.vcduHeader.vcduHeaderAsString.concat(self.mpduHeader.oclAsType(MpduActiveHeader).mpduActiveHeaderAsString)
endif
else
self.vcduHeader.vcduHeaderAsString
endif
TM GPSR Data Field Header
<p>1 bit</p>
<p>3 bits</p>
<p>4 bits</p>
<p>8 bits</p>
<p>8 bits</p>
<p>Destination ID</p><p>8 bits</p>
<p>8 bits</p>
<p>4 bytes</p>
<p>8 bits</p>
<p>2 bytes</p>
Sync Marker
<p>We expect that the 4 byte Sync field should be equal to 0x1ACFFC1D</p><p>0x1A = 26 </p><p>0xCF = 207</p><p>0xFC = 252</p><p>0x1D = 29</p>
OCL
self.value.byte->at(1).intValue = 26 and
self.value.byte->at(2).intValue = -49 and
self.value.byte->at(3).intValue = -4 and
self.value.byte->at(4).intValue = 29
<p>4 bytes</p>
SAR Data Field Header
<p>32 bits</p>
<p>16 bits</p>
<p>56 bytes</p>
Reed Solomon check symbols
OCL
self.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.rsCorrectFrame = true
implies
self.rsActualCheckSymbols.byte = self.rsCalculatedCheckSymbols.byte
128 bytes
return a byte array of 128 bytes
Packet Secondary Header / Data Field Header
OCL
self.activePacketDataField.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.validApidsConfig.ispInfo->exists(x : IspInfo |
self.activePacketDataField.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.missionName->exists(y: MissionName |
y = x.missionName
)
)
OCL
self.activePacketDataField.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.validApidsConfig.ispInfo->exists(x : IspInfo |
(
self.activePacketDataField.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.missionName->exists(y: MissionName |
y = x.missionName)
)
and
(
(
(x.missionName = MissionName::Sentinel1 or x.missionName = MissionName::Sentinel2)
and
x.apidValue->exists(y : Apid |
y.apidPid = self.activePacketDataField.isp.packetPrimaryHeader.apidPid
and
y.apidPcat = self.activePacketDataField.isp.packetPrimaryHeader.apidPcat
)
)
or
(
x.missionName = MissionName::Sentinel3
and
x.pidValue->exists(pid : ApidPid | pid = self.activePacketDataField.isp.packetPrimaryHeader.apidPid)
and
x.pcatValue->exists(pcat : ApidPcat | pcat = self.activePacketDataField.isp.packetPrimaryHeader.apidPcat)
)
)
and
(
( (x.packetType = IspPacketTypes::S1_SAR) and self.oclIsTypeOf(SarS1DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S1_GPSR) and self.oclIsTypeOf(TmGpsrS1DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S2_CSW) and self.oclIsTypeOf(TmCswS2DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S2_GPSR) and self.oclIsTypeOf(TmGpsrS2DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S2_MSI) and self.oclIsTypeOf(MsiS2DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S2_STR) and self.oclIsTypeOf(TmStrS2DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_OLCI) and self.oclIsTypeOf(OlciS3DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_DORIS) and self.oclIsTypeOf(DorisS3DateFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_MWR) and self.oclIsTypeOf(MwrS3DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_GPSR) and self.oclIsTypeOf(TmGpsrS3DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_SLSTR) and self.oclIsTypeOf(SlstrS3DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_NAVATT) and self.oclIsTypeOf(TmNavattS3DataFieldHeader) ) or
( (x.packetType = IspPacketTypes::S3_SRAL) and self.oclIsTypeOf(SralS3DataFieldHeader) )
)
)
OCL
self.activePacketDataField.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.validApidsConfig.ispInfo->exists(x : IspInfo |
((x.packetType = IspPacketTypes::S1_SAR) and self.oclIsTypeOf(SarS1DataFieldHeader)) or
((x.packetType = IspPacketTypes::S1_GPSR) and self.oclIsTypeOf(TmGpsrS1DataFieldHeader)) or
((x.packetType = IspPacketTypes::S2_CSW) and self.oclIsTypeOf(TmCswS2DataFieldHeader)) or
((x.packetType = IspPacketTypes::S2_GPSR) and self.oclIsTypeOf(TmGpsrS2DataFieldHeader)) or
((x.packetType = IspPacketTypes::S2_MSI) and self.oclIsTypeOf(MsiS2DataFieldHeader)) or
((x.packetType = IspPacketTypes::S2_STR) and self.oclIsTypeOf(TmStrS2DataFieldHeader)) or
((x.packetType = IspPacketTypes::S3_OLCI) and self.oclIsTypeOf(OlciS3DataFieldHeader)) or
((x.packetType = IspPacketTypes::S3_DORIS) and self.oclIsTypeOf(DorisS3DateFieldHeader)) or
((x.packetType = IspPacketTypes::S3_MWR) and self.oclIsTypeOf(MwrS3DataFieldHeader)) or
((x.packetType = IspPacketTypes::S3_GPSR) and self.oclIsTypeOf(TmGpsrS3DataFieldHeader)) or
((x.packetType = IspPacketTypes::S3_SLSTR) and self.oclIsTypeOf(SlstrS3DataFieldHeader)) or
((x.packetType = IspPacketTypes::S3_NAVATT) and self.oclIsTypeOf(TmNavattS3DataFieldHeader)) or
((x.packetType = IspPacketTypes::S3_SRAL) and self.oclIsTypeOf(SralS3DataFieldHeader))
)
Packet Primary Header
OCL
let rtstpsConfig : XsveRtStps = self.isp.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps in
rtstpsConfig.vcdusConfig.vcduConfig->select(y | y.vcid = self.isp.mpduActivePacketZone->first().vcdu.vcduHeader.virtualChannelId).ispsConfig.ispConfig.apid->exists(x |
x.apidPid = self.apidPid and x.apidPcat = self.apidPcat)
or
self.apidPid = rtstpsConfig.idleApid.apidPid and self.apidPcat = rtstpsConfig.idleApid.apidPcat
OCL
self.versionNumber.intValue = 0
OCL
self.type.intValue = 0
OCL
let transmissionData : TransmissionData = self.isp.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData in
self.apidPid <> transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPid
or
self.apidPcat <> transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPcat
implies
self.shf.intValue = 1
OCL
self.sequenceFlags.intValue = 3
OCL
self.isp.isTypeOfPacket(IspPacketTypes::S1_SAR)
implies
(self.dataLength.intValue + 6 +1).mod(4) = 0
OCL
let transmissionData : TransmissionData = self.isp.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData in
self.apidPid = transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPid
and
self.apidPcat = transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPcat
implies
self.shf.intValue = 0
OCL
let transmissionData : TransmissionData = self.isp.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData,
ispInfoSet : Set(IspInfo) = transmissionData.configuration.validApidsConfig.ispInfo
in
self.apidPid = transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPid
and
self.apidPcat = transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPcat
or
if transmissionData.configuration.rtStpsConfig.xsveRtStps.missionName = 'S3A' then
(ispInfoSet.apidValue.apidPid->exists(x : ApidPid | x = self.apidPid) and
ispInfoSet.apidValue.apidPcat->exists(x : ApidPcat | x = self.apidPcat))
else
ispInfoSet.apidValue->exists(x : Apid | x.apidPid = self.apidPid and x.apidPcat = self.apidPcat)
endif
<p>3 bits</p>
<p>1 bit</p>
<p>Secondary Header Flag</p><p>1 bit</p>
<p>7 bits</p>
<p>2 bits</p>
<p>14 bits</p>
<p>2 bytes</p>
Packet Error Control (CRC)
OCL
let rtstpsConfig : XsveRtStps = self.activePacketDataField.isp.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps in
rtstpsConfig.checkCrc
and (rtstpsConfig.missionName <> 'S1A'
or (self.activePacketDataField.isp.packetPrimaryHeader.apidPid.value.intValue*16
+ self.activePacketDataField.isp.packetPrimaryHeader.apidPcat.value.intValue) <> 1052)
implies
self.actualValue.byte = self.calculatedValue.byte
<p>2 bytes</p>
Packet Data Field
Multiplexing Protocol Data Unit (M_PDU) Packet Zone
MPDU Idle Header
<p>2 bytes</p>
Multiplexing Protocol Data Unit (M_PDU) Header
OCL
self.rsvdSpare.intValue = 0
OCL
self.firstHeaderPointer.intValue = 2047
or
self.firstHeaderPointer.intValue < 1902
<p>5 bits</p>
<p>11 bits</p>
Instrument Source Packet
OCL
let
config : Configuration = self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration,
counterWrapValue : Set(ApidSuffixAndMaxCounter) = config.maxCounterPerApidSuffixConfig.apidSuffixAndMaxCounter->select(x : ApidSuffixAndMaxCounter | x.apidSuffix = self.packetPrimaryHeader.apidPcat)
in
config.rtStpsConfig.xsveRtStps.missionName = 'S2A'
and
self.packetDataField.oclIsTypeOf(IdlePacketDataField) = false
implies
counterWrapValue->size() = 1
and
self.packetPrimaryHeader.sequenceCount.intValue <= counterWrapValue->asOrderedSet()->first().maxSscCounterValue
OCL
let transmissionData : TransmissionData = self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData,
rtStpsConfig : XsveRtStps = transmissionData.configuration.rtStpsConfig.xsveRtStps
in
self.packetPrimaryHeader->notEmpty()
and
self.packetPrimaryHeader.apidPid = rtStpsConfig.idleApid.apidPid and self.packetPrimaryHeader.apidPcat = rtStpsConfig.idleApid.apidPcat
and
self.packetDataField.oclIsTypeOf(IdlePacketDataField)
and
self.packetPrimaryHeader.versionNumber.intValue = 0
and self.packetPrimaryHeader.type.intValue = 0
and self.packetPrimaryHeader.shf.intValue = 0
and self.packetPrimaryHeader.sequenceFlags.intValue = 3
and self.packetPrimaryHeader.sequenceCount.intValue = 0
and self.packetDataField.oclAsType(IdlePacketDataField).idleDataArray.byte->at(1).intValue = 85
and self.packetDataField.oclAsType(IdlePacketDataField).idleDataArray.byte->at(2).intValue = 85
and self.packetDataField.oclAsType(IdlePacketDataField).idleDataArray.byte->at(3).intValue = 85
and self.packetDataField.oclAsType(IdlePacketDataField).idleDataArray.byte->at(4).intValue = 85
OCL
let
ispSequenceCount : Integer = self.packetPrimaryHeader.sequenceCount.intValue,
prevIsp : Isp = self.prevOnChannelOfSameApid,
prevSequenceCount : Integer = prevIsp.packetPrimaryHeader.sequenceCount.intValue,
config : Configuration = self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration,
apidCountWrapList : Set(ApidSuffixAndMaxCounter) = config.maxCounterPerApidSuffixConfig.apidSuffixAndMaxCounter,
maxSscCounterValue : Integer = apidCountWrapList->select(i : ApidSuffixAndMaxCounter | i.apidSuffix = prevIsp.packetPrimaryHeader.apidPcat)->asOrderedSet()->first().maxSscCounterValue
in
not self.prevOnChannelOfSameApid->isEmpty()
and
(self.packetPrimaryHeader.apidPid <> config.rtStpsConfig.xsveRtStps.idleApid.apidPid or self.packetPrimaryHeader.apidPcat <>config.rtStpsConfig.xsveRtStps.idleApid.apidPcat)
implies
if config.rtStpsConfig.xsveRtStps.missionName = 'S2A'
then
if prevSequenceCount < maxSscCounterValue
then ispSequenceCount = prevSequenceCount + 1
else prevSequenceCount = maxSscCounterValue and ispSequenceCount = 0
endif
else
if prevSequenceCount < 16383
then ispSequenceCount = prevSequenceCount + 1
else prevSequenceCount = 16383 and ispSequenceCount = 0
endif
endif
OCL
let
prevIsp : Isp = self.prevOnChannelOfSameApid
in
prevIsp.packetDataField.oclIsTypeOf(ActivePacketDataField) = true and
self.packetDataField.oclIsTypeOf(ActivePacketDataField) = true and
prevIsp.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclIsTypeOf(SarS1DataFieldHeader) = true and
self.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclIsTypeOf(SarS1DataFieldHeader) = true
implies
prevIsp.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclAsType(SarS1DataFieldHeader).tcCoarseTime.intValue <
self.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclAsType(SarS1DataFieldHeader).tcCoarseTime.intValue
or
(
prevIsp.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclAsType(SarS1DataFieldHeader).tcCoarseTime.intValue =
self.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclAsType(SarS1DataFieldHeader).tcCoarseTime.intValue
and
prevIsp.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclAsType(SarS1DataFieldHeader).tcFineTime.intValue <=
self.packetDataField.oclAsType(ActivePacketDataField).packetSecondaryHeader.oclAsType(SarS1DataFieldHeader).tcFineTime.intValue
)
OCL
if self.lastPacket = false then
self.isPacketComplete() = true
else
true
endif
OCL
(self.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid->exists(x : Apid | x.apidPid = self.packetPrimaryHeader.apidPid and x.apidPcat = self.packetPrimaryHeader.apidPcat) and self.packetDataField.oclIsTypeOf(IdlePacketDataField))
or
(self.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid->exists(x : Apid | x.apidPid <> self.packetPrimaryHeader.apidPid or x.apidPcat <> self.packetPrimaryHeader.apidPcat) and self.packetDataField.oclIsTypeOf(ActivePacketDataField))
OCL
let transmissionData : TransmissionData = self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData,
rtStpsConfig : XsveRtStps = transmissionData.configuration.rtStpsConfig.xsveRtStps
in
if self.packetPrimaryHeader->notEmpty() and (self.completedLoading = true)
then
if (self.packetPrimaryHeader.apidPid = rtStpsConfig.idleApid.apidPid) and (self.packetPrimaryHeader.apidPcat = rtStpsConfig.idleApid.apidPcat)
then PacketType::IDLE
else PacketType::ACTIVE
endif
else PacketType::UNDEFINED
endif
OCL
self.mpduActivePacketZone->indexOf(packetZone)
OCL
self.loadedFromStart and ((self.firstSpanLength >= 6) or self.completedLoading)
OCL
self.packetPrimaryHeader->size() > 0 and (self.packetDataField.oclIsTypeOf(IdlePacketDataField) or self.packetDataField.oclIsTypeOf(ActivePacketDataField))
OCL
self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.validApidsConfig.ispInfo->exists(x : IspInfo |
x.packetType = packetType and
x.missionName = self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.missionName and
x.apidValue->exists(y : Apid | y.apidPid = self.packetPrimaryHeader.apidPid and y.apidPcat = self.packetPrimaryHeader.apidPcat)
)
OCL
self.firstSpanStartIndex
OCL
if self.packetPrimaryHeader->size() > 0 then
self.packetPrimaryHeader.dataLength.intValue
else -1
endif
OCL
if self.packetPrimaryHeader->size() >0 then
self.packetPrimaryHeader.apidPid.value.intValue * 16 + self.packetPrimaryHeader.apidPcat.value.intValue
else
-1
endif
OCL
self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPid.value.intValue*16
+ self.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPcat.value.intValue
OCL
self.mpduActivePacketZone->first().vcdu.cadu.index
X-Band System Validation Equipment (XSVE) System Input File
OCL
self.channelData->size() > 0
<p>1902 bytes</p>
<p>variable length byte array</p>
<p>Channel Access Data Unit</p><p>2044 bytes</p>
OCL
let
caduFrameCount : Integer = self.vcdu.vcduHeader.virtualChannelFrameCount.intValue,
prevCaduFrameCount : Integer = self.prevOnChannel.vcdu.vcduHeader.virtualChannelFrameCount.intValue
in
not self.prevOnChannel->isEmpty()
implies
if prevCaduFrameCount < 16777215
then caduFrameCount = prevCaduFrameCount + 1
else prevCaduFrameCount = 16777215 and caduFrameCount = 0
endif
OCL
self.channelData.hasExtendedCadu
OCL
self.index
OCL
self.isp->forAll(x : Isp |
self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.vcdusConfig.vcduConfig->select(y |
y.vcid = self.vcdu.vcduHeader.virtualChannelId).ispsConfig.ispConfig.apid->exists(z |
z.apidPid = x.packetPrimaryHeader.apidPid and z.apidPcat = x.packetPrimaryHeader.apidPcat)
or
(x.packetPrimaryHeader.apidPid = self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPid and
x.packetPrimaryHeader.apidPcat = self.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.idleApid.apidPcat)
)
OCL
self.isp->select(i : Isp | i.mpduActivePacketZone->at(1) = self)
OCL
self.isp
OCL
self.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps->exists(x: XsveRtStps | x.missionName = MissionName::Sentinel1)
and (self.packetSecondaryHeader.oclIsTypeOf(SarS1DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(TmGpsrS1DataFieldHeader))
or
self.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps->exists(x: XsveRtStps | x.missionName = MissionName::Sentinel2)
and (self.packetSecondaryHeader.oclIsTypeOf(MsiS2DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(TmGpsrS2DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(TmStrS2DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(TmCswS2DataFieldHeader))
or
self.isp.mpduActivePacketZone.vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps->exists(x: XsveRtStps | x.missionName = MissionName::Sentinel3)
and (self.packetSecondaryHeader.oclIsTypeOf(OlciS3DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(DorisS3DateFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(MwrS3DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(TmGpsrS3DataFieldHeader) or
self.packetSecondaryHeader.oclIsTypeOf(SlstrS3DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(TmNavattS3DataFieldHeader) or self.packetSecondaryHeader.oclIsTypeOf(SralS3DataFieldHeader) )
OCL
if self.isp.mpduActivePacketZone->first().vcdu.cadu.channelData.transmissionData.configuration.rtStpsConfig.xsveRtStps.extendedCadu
then true
else false
endif
--SarS1DataFieldHeader
--TmGpsrS1DataFieldHeader
-- MsiS2DataFieldHeader
--TmGpsrS2DataFiefldHeader
--TmStrS2DataFieldHeader
--TmCswS2DataFieldHeader
OCL
let
setOfEnums : Set(IspPacketTypes) = IspPacketTypes.allInstances()
in
if self.isp.packetPrimaryHeader->notEmpty() then
if setOfEnums->select(i : IspPacketTypes | self.isp.isTypeOfPacket(i))->asOrderedSet()->notEmpty() then
setOfEnums->select(i : IspPacketTypes | self.isp.isTypeOfPacket(i))->asOrderedSet()->first()
else IspPacketTypes::UNDEFINED
endif
else IspPacketTypes::UNDEFINED
endif
<p>For each physical channel of the satellite.</p>
OCL
self.cadu->size() > 0
S1
S2
S3
<p>Last 4 bits of apid.</p>
<p>First 7 bits of apid.</p>
OCL
self.value.intValue.div(16)
OCL
self.value.intValue.mod(16)
OCL
7
OCL
4