Skip to content
LibItsDenm_Templates.ttcn 9.86 KiB
Newer Older
/**
 *	@author 	ETSI / STF405
berge's avatar
berge committed
 *  @version 	$URL$
 *				$Id$
 *	@desc		Module containing base template definitions for DENM
 *
 */
module LibItsDenm_Templates {
tepelmann's avatar
tepelmann committed
    //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 {
tepelmann's avatar
tepelmann committed
        template DenmReq m_denmReq(
            template (value) DecentralizedEnvironmentalNotificationMessage p_denMsg
tepelmann's avatar
tepelmann committed
            ) := {
            msgOut := p_denMsg
        }
        
        template DenmInd mw_denmInd(
            template (present) DecentralizedEnvironmentalNotificationMessage p_denMsg
            ) := {
            msgIn := p_denMsg
        }
        
    } // end primitives
    
    group DecentralizedEnvironmentalNotificationMessageTemplates {
tepelmann's avatar
tepelmann committed
        
        template DecentralizedEnvironmentalNotificationMessage m_denm(
            template (value) DecentralizedSituationManagement p_mgmt,
            template (value) DecentralizedSituation p_sit,
            template (value) DecentralizedSituationLocation p_loc
            ) := {
            protocolVersion := c_protocolVersion_DENM,
			messageID := c_messageId,
            generationTime := 0, //TODO document: 0 indicates that the lower layer should add the time while sending
tepelmann's avatar
tepelmann committed
            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
            ) := {
            protocolVersion := c_protocolVersion_DENM,   
            messageID := c_messageId,
            generationTime := ?,
tepelmann's avatar
tepelmann committed
            management := p_mgmt, 
            situation := p_sit, 
            location := p_loc
        }
    
        template DecentralizedEnvironmentalNotificationMessage m_denmWithCause(
            template (value) DataVersion p_dataVersion,
berge's avatar
berge committed
            template (value) Situation p_sit,
            template (value) DecentralizedSituationLocation.eventPosition p_eventPosition,            
            template (value) StationID p_stationId
tepelmann's avatar
tepelmann committed
            ) := {
            protocolVersion := c_protocolVersion_DENM, 
            messageID := c_messageId,               
            generationTime := 0, //TODO document: 0 indicates that the lower layer should add the time while sending
berge's avatar
berge committed
            management := m_denmMgmtCon(p_dataVersion, p_stationId), 
tepelmann's avatar
tepelmann committed
            situation := m_denmSitCon(p_sit, informative),
            location := m_denmSitLoc(
berge's avatar
berge committed
                            p_eventPosition,
tepelmann's avatar
tepelmann committed
                            m_locationRef
                        )
        }
        template DecentralizedEnvironmentalNotificationMessage m_denmWithCauseIsNeg(
            template (value) DataVersion p_dataVersion,
            template (value) Situation p_sit,
berge's avatar
berge committed
            template (value) DecentralizedSituationLocation.eventPosition p_eventPosition,            
            template (value) StationID p_stationId,
tepelmann's avatar
tepelmann committed
            template (value) DecentralizedSituationManagement.isNegation p_isNeg
        ) modifies m_denmWithCause := {
berge's avatar
berge committed
            management := m_denmMgmtCon_IsNeg(p_dataVersion, p_stationId, p_isNeg)
tepelmann's avatar
tepelmann committed
        }
    
    } // end group DecentralizedEnvironmentalNotificationMessageTemplates
tepelmann's avatar
tepelmann committed
    
    group DecentralizedSituationManagementTemplates {
tepelmann's avatar
tepelmann committed
        
        template DecentralizedSituationManagement m_denmMgmtCon(
berge's avatar
berge committed
            template (value) DataVersion p_dataVersion,
            template (value) StationID p_stationId
tepelmann's avatar
tepelmann committed
            ) := {
            actionID := {
berge's avatar
berge committed
                stationID := p_stationId, 
tepelmann's avatar
tepelmann committed
                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(
berge's avatar
berge committed
            template (value) DataVersion p_dataVersion,            
            template (value) StationID p_stationId,
tepelmann's avatar
tepelmann committed
            template (value) DecentralizedSituationManagement.isNegation p_isNeg
            ) modifies m_denmMgmtCon := {
            isNegation := p_isNeg
        }
        
        template DecentralizedSituationManagement mw_denmMgmtCon_IsNeg(
berge's avatar
berge committed
            template (present) DataVersion p_dataVersion,            
            template (value) StationID p_stationId,
tepelmann's avatar
tepelmann committed
            template (present) DecentralizedSituationManagement.isNegation p_isNeg
            ) modifies mw_denmMgmtCon := {
            isNegation := p_isNeg
        }
        
berge's avatar
berge committed
        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
tepelmann's avatar
tepelmann committed
    
    group DecentralizedSituationTemplates {
tepelmann's avatar
tepelmann committed
        
        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,
            profile := omit
        }
        
        template DecentralizedSituation mw_denmSitCon := {
            trafficFlowEffect := *,
            situation := ?,
            linkedCause := *,
            severity := ?,
            eventCharact := *,
            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 {
tepelmann's avatar
tepelmann committed
            
            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
tepelmann's avatar
tepelmann committed
        
        group EventCharactTemplates {
tepelmann's avatar
tepelmann committed
            
            //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
tepelmann's avatar
tepelmann committed
    
    group DecentralizedSituationLocationTemplates {
tepelmann's avatar
tepelmann committed
        
        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 {
tepelmann's avatar
tepelmann committed
            
            template DecentralizedSituationLocation.locationRef m_locationRef := {
                trace := {
                    traceID := 0,
                    waypoints := {}
                }
            }
            
        } // end group locationRefTemplates
tepelmann's avatar
tepelmann committed
        
    } // end group DecentralizedSituationLocationTemplates
} // end LibItsDenmTemplates