LibItsDenm_Templates.ttcn 8.79 KB
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 LibItsDenm_Functions all;
    import from LibIts_Interface all;
    import from LibItsDenm_TypesAndValues all;

    group primitives_Templates {
tepelmann's avatar
tepelmann committed
        template DenmReq m_denmReq(
            template (omit) DecentralizedEnvironmentalNotificationMessage p_denMsg
            ) := {
            msgOut := p_denMsg
        }
        
        template DenmInd mw_denmInd(
            template (present) DecentralizedEnvironmentalNotificationMessage p_denMsg
            ) := {
            msgIn := p_denMsg
        }
        
    } // end primitives
    
    group DecentralizedEnvironmentalNotificationMessage_Templates {
        
        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
            ) := {
            management := m_denmMgmtCon(p_dataVersion), 
            situation := m_denmSitCon(p_sit, informative),
            location := m_denmSitLoc(
                            f_getCurrentPosition(),
                            m_locationRef
                        )
        }
        template DecentralizedEnvironmentalNotificationMessage m_denmWithCauseIsNeg(
            template (value) DataVersion p_dataVersion,
            template (value) Situation p_sit,
            template (value) DecentralizedSituationManagement.isNegation p_isNeg
        ) modifies m_denmWithCause := {
            management := m_denmMgmtCon_IsNeg(p_dataVersion, p_isNeg)
        }
    
    } // end group DecentralizedEnvironmentalNotificationMessage_Templates
    
    group DecentralizedSituationManagement_Templates {
        
        template DecentralizedSituationManagement m_denmMgmtCon(
            template (value) DataVersion p_dataVersion
            ) := {
            protocolVersion := c_protocolVersion_DENM,
            messageID := c_messageId,
            generationtime := 0, //TODO document: 0 indicates that the lower layer should add the time while sending
            actionID := {
                stationID := f_getStationId(), 
                sequenceNo := 0
            },
            dataVersion := p_dataVersion,
            expiryTime := omit,
            frequency := omit,
            reliability := 0,
            isNegation := false
        }
        
        template DecentralizedSituationManagement mw_denmMgmtCon (
            template (present) DataVersion p_dataVersion
            ):= {
            protocolVersion := c_protocolVersion_DENM,
            messageID := c_messageId,
            generationtime := ?,
            actionID := {
                stationID := ?, 
                sequenceNo := ?
            },
            dataVersion := p_dataVersion,
            expiryTime := *,
            frequency := *,
            reliability := ?,
            isNegation := ?
        }
        
        template DecentralizedSituationManagement m_denmMgmtCon_IsNeg(
            template (value) DataVersion p_dataVersion,
            template (value) DecentralizedSituationManagement.isNegation p_isNeg
            ) modifies m_denmMgmtCon := {
            isNegation := p_isNeg
        }
        
        template DecentralizedSituationManagement mw_denmMgmtCon_IsNeg(
            template (present) DataVersion p_dataVersion,
            template (present) DecentralizedSituationManagement.isNegation p_isNeg
            ) modifies mw_denmMgmtCon := {
            isNegation := p_isNeg
        }
        
    } // end group DecentralizedSituationManagement_Templates
    
    group DecentralizedSituation_Templates {
        
        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 Situation_Templates {
            
            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 Situation_Templates
        
        group EventCharact_Templates {
            
            //TODO check if depending on kind of ITS station
            template DecentralizedSituation.eventCharact m_eventCharact := {
                eventmobility := true,
                causeType := geographicalRegion,
                relevant := difficultDrivingConditions,
                timeCritacality := false
            }
            
        }
        
    } // end group DecentralizedSituation_Templates
    
    group DecentralizedSituationLocation_Templates {
        
        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 locationRef_Templates {
            
            template DecentralizedSituationLocation.locationRef m_locationRef := {
                trace := {
                    traceID := 0,
                    waypoints := {}
                }
            }
            
        } // end group locationRef_Templates
        
    } // end group DecentralizedSituationLocation
} // end LibItsDenm_Templates