/** * @author ETSI / STF405 * @version $URL$ * $Id$ * @desc Module containing base template definitions for DENM * */ module LibItsDenm_Templates { //LibIts import from DENM_PDU_Descriptions language "ASN.1:1997" all; import from CAM_PDU_Descriptions language "ASN.1:1997" all; import from LibIts_Interface all; import from LibItsDenm_TypesAndValues all; group primitivesTemplates { template DenmReq m_denmReq( template (value) DenmPdu p_denMsg ) := { msgOut := p_denMsg } template DenmInd mw_denmInd( template (present) DenmPdu p_denMsg ) := { msgIn := p_denMsg, receptionTime := ? } } // end primitives group denmPduTemplates { template ItsPduHeader m_itsPduHeader := { protocolVersion := c_protocolVersion_DENM, messageID := c_messageId, generationTime := 0 //TODO document: 0 indicates that the lower layer should add the time while sending } template ItsPduHeader mw_itsPduHeader modifies m_itsPduHeader := { generationTime := ? } template DenmPdu m_denmPdu(in template (value) DecentralizedEnvironmentalNotificationMessage p_denm) := { header := m_itsPduHeader, denm := p_denm } template DenmPdu mw_denmPdu(in template (present) DecentralizedEnvironmentalNotificationMessage p_denm) := { header := mw_itsPduHeader, denm := p_denm } } // end denmPduTemplates group DecentralizedEnvironmentalNotificationMessageTemplates { template DecentralizedEnvironmentalNotificationMessage m_denm( template (value) DecentralizedSituationManagement p_mgmt, template (value) DecentralizedSituation p_sit, template (value) DecentralizedSituationLocation p_loc ) := { management := p_mgmt, situation := p_sit, location := p_loc } template DecentralizedEnvironmentalNotificationMessage mw_denm( template (present) DecentralizedSituationManagement p_mgmt, template (present) DecentralizedSituation p_sit, template (present) DecentralizedSituationLocation p_loc ) := { management := p_mgmt, situation := p_sit, location := p_loc } template DecentralizedEnvironmentalNotificationMessage m_denmWithCause( template (value) DataVersion p_dataVersion, template (value) Situation p_sit, template (value) DecentralizedSituationLocation.eventPosition p_eventPosition, template (value) StationID p_stationId ) := { management := m_denmMgmtCon(p_dataVersion, p_stationId), situation := m_denmSitCon(p_sit, informative), location := m_denmSitLoc( p_eventPosition, m_locationRef ) } template DecentralizedEnvironmentalNotificationMessage m_denmWithCauseIsNeg( template (value) DataVersion p_dataVersion, template (value) Situation p_sit, template (value) DecentralizedSituationLocation.eventPosition p_eventPosition, template (value) StationID p_stationId, template (value) DecentralizedSituationManagement.isNegation p_isNeg ) modifies m_denmWithCause := { management := m_denmMgmtCon_IsNeg(p_dataVersion, p_stationId, p_isNeg) } } // end group DecentralizedEnvironmentalNotificationMessageTemplates group DecentralizedSituationManagementTemplates { template DecentralizedSituationManagement m_denmMgmtCon( template (value) DataVersion p_dataVersion, template (value) StationID p_stationId ) := { actionID := { stationID := p_stationId, sequenceNo := 0 }, dataVersion := p_dataVersion, expiryTime := omit, frequency := omit, reliability := 0, isNegation := false } template DecentralizedSituationManagement mw_denmMgmtCon ( template (present) DataVersion p_dataVersion ):= { actionID := { stationID := ?, sequenceNo := ? }, dataVersion := p_dataVersion, expiryTime := *, frequency := *, reliability := ?, isNegation := ? } template DecentralizedSituationManagement m_denmMgmtCon_IsNeg( template (value) DataVersion p_dataVersion, template (value) StationID p_stationId, template (value) DecentralizedSituationManagement.isNegation p_isNeg ) modifies m_denmMgmtCon := { isNegation := p_isNeg } template DecentralizedSituationManagement mw_denmMgmtCon_IsNeg( template (present) DataVersion p_dataVersion, template (value) StationID p_stationId, template (present) DecentralizedSituationManagement.isNegation p_isNeg ) modifies mw_denmMgmtCon := { isNegation := p_isNeg } template DecentralizedSituationManagement mw_denmMgmtConWithExpiryTime( template (present) DataVersion p_dataVersion, template (value) StationID p_stationId, template (present) DecentralizedSituationManagement.expiryTime p_expiryTime ) modifies mw_denmMgmtCon := { expiryTime := p_expiryTime } } // end group DecentralizedSituationManagementTemplates group DecentralizedSituationTemplates { template DecentralizedSituation m_denmSitCon( template (value) Situation p_sit, template (value) Severity p_sev ) := { trafficFlowEffect := omit, situation := p_sit, linkedCause := omit, severity := p_sev, eventCharact := omit, commonParameters := omit, profile := omit } template DecentralizedSituation mw_denmSitCon := { trafficFlowEffect := *, situation := ?, linkedCause := *, severity := ?, eventCharact := *, commonParameters := *, profile := * } template DecentralizedSituation mw_denmSitCon_Sit( template (present) Situation p_sit ) modifies mw_denmSitCon := { situation := p_sit } template DecentralizedSituation mw_denmSitCon_SitTfe( template (present) Situation p_sit, template (present) TrafficFlowEffect p_tfe ) modifies mw_denmSitCon_Sit := { trafficFlowEffect := p_tfe } template DecentralizedSituation mw_denmSitCon_SitLc( template (present) Situation p_sit, template (present) Situation p_lc ) modifies mw_denmSitCon_Sit := { linkedCause := p_lc } template DecentralizedSituation mw_denmSitCon_SitEc( template (present) Situation p_sit, template (present) DecentralizedSituation.eventCharact p_ec ) modifies mw_denmSitCon_Sit := { eventCharact := p_ec } group SituationTemplates { template Situation m_situation( template (value) DENM_PDU_Descriptions.CauseCode p_cause, template (value) SubCauseCode p_subCause ) := { cause := p_cause, subCause := p_subCause } template Situation mw_situation( template (present) DENM_PDU_Descriptions.CauseCode p_cause, template (present) SubCauseCode p_subCause ) := { cause := p_cause, subCause := p_subCause } } // end group SituationTemplates group EventCharactTemplates { //TODO check if depending on kind of ITS station template DecentralizedSituation.eventCharact m_eventCharact := { eventmobility := true, causeType := geographicalRegion, relevant := difficultDrivingConditions, timeCritacality := false } } } // end group DecentralizedSituationTemplates group DecentralizedSituationLocationTemplates { template DecentralizedSituationLocation m_denmSitLoc( template (value) DecentralizedSituationLocation.eventPosition p_eventPosition, template (value) DecentralizedSituationLocation.locationRef p_locationRef ) := { eventPosition := p_eventPosition, locationRef := p_locationRef } template DecentralizedSituationLocation mw_denmSitLoc ( template (present) DecentralizedSituationLocation.eventPosition p_eventPosition, template (present) DecentralizedSituationLocation.locationRef p_locationRef ) := { eventPosition := p_eventPosition, locationRef := p_locationRef } group locationRefTemplates { template DecentralizedSituationLocation.locationRef m_locationRef := { trace := { traceID := 0, waypoints := {} } } } // end group locationRefTemplates } // end group DecentralizedSituationLocationTemplates } // end LibItsDenmTemplates