ItsCam_TpFunctions.ttcn 146 KB
Newer Older
/**
 *    @author   ETSI STF484
 *    @version  $URL$
 *              $Id$
 *    @desc     CAM TP functions
 *
 */

module ItsCam_TpFunctions {
    
garciay's avatar
garciay committed
    import from LibItsCommon_Pixits all;

    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    import from LibCommon_Time all;
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_DataStrings all;
    
    // LibItsCommon
    import from LibItsCommon_TypesAndValues all;
    import from LibItsCommon_Templates all;
    import from LibItsCommon_Functions all;
    import from LibItsCommon_Pixits all;
    
garciay's avatar
garciay committed
    // LibItsCAM
    import from LibItsCam_TestSystem all;
    import from LibItsCam_Functions all;
    import from LibItsCam_Templates all;
    import from LibItsCam_TypesAndValues all;
    import from LibItsCam_Pics {modulepar all;}
    import from LibItsCam_Pixits {modulepar all;}
garciay's avatar
garciay committed
    // ASN.1
    import from ITS_Container language "ASN.1:1997" all;
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;

    // 5.2.1
    group camMessageDissemination { 
        
        group camMessageFormat {
            
            /**
             * @desc    TP Function for TC_CAM_MSD_FMT_BV_01
             */
            function f_CAM_MSD_FMT_BV_01() runs on ItsCam {
                
                // Local variables
                
                // Test control
                if (not PICS_CAM_GENERATION) {
                    log("*** " & testcasename() & ": PICS_CAM_GENERATION required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }              
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                tc_ac.start;
                alt {
                    [] camPort.receive(mw_camInd ( mw_camMsg_any )){ 
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Expected CAM message received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poDefault();
                f_cfDown();
                
            } // end f_CAM_MSD_FMT_BV_01
            
            /**
             * @desc    TP Function for TC_CAM_MSD_FMT_BV_02
             */
            function f_CAM_MSD_FMT_BV_02() runs on ItsCam {
                
                // Local variables
                
                // Test control
                if (not PICS_CAM_GENERATION or PICS_RSU) {
                    log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }              
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Test Body
                tc_ac.start;
                alt {
                    [] camPort.receive(mw_camInd ( mw_camMsg_LF_any )){ 
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Expected CAM message received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                    }
                    [] camPort.receive(mw_camInd ( mw_camMsg_any )){ 
                        tc_ac.stop;
                        log("*** " & testcasename() & ": FAIL: Expected CAM message not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error);  
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poDefault();
                f_cfDown();
                
            } // end f_CAM_MSD_FMT_BV_02
            
            /**
             * @desc    TP Function for TC_CAM_MSD_FMT_BV_03
             */
            function f_CAM_MSD_FMT_BV_03() runs on ItsCam {
                
                // Local variables
                timer t_minTransInterval := c_lowFrequencyGenerationTime * 1.10;
                var SpeedValue v_speedValues[5] := { 1000, 2000, 3000, 4000, 5000 } //cm/s
                var integer v_cntSpeed, v_cntTime;
                var CamInd v_camInd;
                var boolean v_nextCamWithLF := false;
                const integer c_cntTimeLimit := 10;
                
                // Test control
                if (not PICS_CAM_GENERATION or PICS_RSU) {
                    log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }              
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
garciay's avatar
garciay committed
                f_prInitialState(e_dynamicPosition1500m);
                camPort.clear;
                tc_ac.start;
                alt {
                     [] camPort.receive(mw_camInd ( mw_camMsg_LF_any )){ 
                        tc_ac.stop;
                        t_minTransInterval.start;
                        log("*** " & testcasename() & ": INFO: Initial conditions: First CAM message received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Initial conditions: CAM message not received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout);
                    }
                }
                
                // Test Body
                for (v_cntSpeed:=0; v_cntSpeed<lengthof(v_speedValues); v_cntSpeed:=v_cntSpeed + 1) {
                    f_changeSpeed(v_speedValues[v_cntSpeed]);
                    v_cntTime := 0;
                    tc_ac.start;
                    alt {
                        [] camPort.receive(mw_camInd ( mw_camMsg_LF_any )) {
                            tc_ac.stop; 
                            v_cntTime := v_cntTime + 1;
                            if (v_cntTime == c_cntTimeLimit) { // Exit message loop
                                log("*** " & testcasename() & ": INFO: The subset of CAM messages including lowFrequencyContainer was received ***");
                                t_minTransInterval.start;
                                v_nextCamWithLF := false;                                
                            }
                            else {
                                log("*** " & testcasename() & ": INFO: CAM retransmission with LowFrequency container ***"); 
                                tc_ac.start;
                                t_minTransInterval.start;
                                v_nextCamWithLF := false;
                                repeat;
                            }
                        [] camPort.receive(mw_camInd ( mw_camMsg_any )) -> value v_camInd {
                            tc_ac.stop;
                            if(v_nextCamWithLF == true) {
                                log("*** " & testcasename() & ": FAIL: No LowFrequency container in received CAM ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                                log("*** " & testcasename() & ": INFO: CAM retransmission w/o LowFrequency container ***"); 
                                tc_ac.start;
                                repeat;
                        }
                        [] t_minTransInterval.timeout {
                            v_nextCamWithLF := true;
                            log("*** " & testcasename() & ": INFO: Next CAM shall contain LowFrequency container ***");
                            repeat;  
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                        }
                    } 
                } 
                log("*** " & testcasename() & ": PASS: Generation of CAM messages including lowFrequencyContainer was successful ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                
                // Postamble
                f_poDefault();
                f_cfDown();
                
            } // end f_CAM_MSD_FMT_BV_03
            
            /**
             * @desc    TP Function for TC_CAM_MSD_FMT_BV_04
             */
            function f_CAM_MSD_FMT_BV_04() runs on ItsCam {
                
                // Local variables
                var VehicleRole v_vehicleRole := c_vehicleRole_roadWork;
                
                // Test control
                if (not PICS_CAM_GENERATION or PICS_RSU) {
                    log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }              
                if (not PICS_SPECIALVEHICLECONTAINER) {
                    testcase.stop(testcasename() & ": PICS_SPECIALVEHICLECONTAINER needs to be set to true");
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
                f_prInitialState();
                f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                
                // Set vehicle role
                f_utTriggerEvent(m_setVehicleRole(v_vehicleRole));
                
                // Test Body
                tc_ac.start;
                alt {
                    [] camPort.receive(mw_camInd ( mw_camMsg_SVC_any )){ 
                        tc_ac.stop;
                        log("*** " & testcasename() & ": PASS: Expected CAM message received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                }
                
                // Postamble
                f_poDefault();
                f_cfDown();
                
            } // end f_CAM_MSD_FMT_BV_04
            
            /**
             * @desc    TP Function for TC_CAM_MSD_FMT_BV_05
             */
            function f_CAM_MSD_FMT_BV_05() runs on ItsCam {
                
                // Local variables
                timer t_minTransInterval := c_specialVehicleGenerationTime * 1.10;
                var VehicleRole v_vehicleRole := roadWork;
                var SpeedValue v_speedValues[5] := { 1000, 2000, 3000, 4000, 5000 } //cm/s
                var integer v_cntSpeed, v_cntTime;
                var CamInd v_camInd;
                var boolean v_nextCamWithSVC := false;
                const integer c_cntTimeLimit := 10;
                
                // Test control
                if (not PICS_CAM_GENERATION or PICS_RSU) {
                    log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                    setverdict(inconc);
                    stop;
                }              
                if (not PICS_SPECIALVEHICLECONTAINER) {
                    testcase.stop(testcasename() & ": PICS_SPECIALVEHICLECONTAINER needs to be set to true");
                }
                
                // Test component configuration
                f_cfUp();
                
                // Test adapter configuration
                
                // Preamble
garciay's avatar
garciay committed
                f_prInitialState(e_dynamicPosition1500m);
                // Set vehicle role
                f_utTriggerEvent(m_setVehicleRole(v_vehicleRole));
                camPort.clear;
                tc_ac.start;
                alt {
                     [] camPort.receive(mw_camInd ( mw_camMsg_SVC_any )){ 
                        tc_ac.stop;
                        t_minTransInterval.start;
                        log("*** " & testcasename() & ": INFO: Initial conditions: First CAM message received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    }
                    [] tc_ac.timeout {
                        log("*** " & testcasename() & ": INCONC: Initial conditions: CAM message not received ***");
                        f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout);
                    }
                }
                
                // Test Body
                for (v_cntSpeed:=0; v_cntSpeed<lengthof(v_speedValues); v_cntSpeed:=v_cntSpeed + 1) {
                    f_changeSpeed(v_speedValues[v_cntSpeed]);
                    v_cntTime := 0;
                    tc_ac.start;
                    alt {
                        [] camPort.receive(mw_camInd ( mw_camMsg_SVC_any )) {
                            tc_ac.stop; 
                            v_cntTime := v_cntTime + 1;
                            if (v_cntTime == c_cntTimeLimit) { // Exit message loop
                                log("*** " & testcasename() & ": INFO: The subset of CAM messages including specialVehicleContainer was received ***");
                                t_minTransInterval.start;
                                v_nextCamWithSVC := false;                                
                            }
                            else {
                                log("*** " & testcasename() & ": INFO: CAM retransmission with SpecialVehicle container ***"); 
                                tc_ac.start;
                                t_minTransInterval.start;
                                v_nextCamWithSVC := false;
                                repeat;
                            }
                        }
                        [] camPort.receive(mw_camInd ( mw_camMsg_any )) -> value v_camInd {
                            tc_ac.stop;
                            if(v_nextCamWithSVC == true) {
                                log("*** " & testcasename() & ": FAIL: No SpecialVehicle container in received CAM ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                            }
                            else {
                                log("*** " & testcasename() & ": INFO: CAM retransmission w/o SpecialVehicle container ***"); 
                                tc_ac.start;
                                repeat;
                            }
                        }
                        [] t_minTransInterval.timeout {
                            v_nextCamWithSVC := true;
                            log("*** " & testcasename() & ": INFO: Next CAM shall contain SpecialVehicle container ***");
                            repeat;  
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                        }
                    } 
                } 
                log("*** " & testcasename() & ": PASS: Generation of CAM messages including SpecialVehicleContainer was successful ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                
                // Postamble
                f_poDefault();
                f_cfDown();
                
            } // end f_CAM_MSD_FMT_BV_05
            
        } // end group camMessageFormat
        
        group camInformationAdaptation {
            
            group camInVehicleData {
                
                type record of UtCamTrigger UtCamTriggers;
                type record of CAM CamPdus;
                
                function f_CAM_MSD_INA_BV_01(in charstring p_INFO, in template (value) UtCamTriggers p_utTriggers, in template (present) CamPdus p_camPdus) runs on ItsCam {
                    
                    // Local variables
                    var integer v_cnt;
                    
                    log("*** " & testcasename() & ": Checking INFO==" & p_INFO & " ***");
                    
                    if (lengthof(p_utTriggers) != lengthof(p_camPdus)) {
                        log("*** " & testcasename() & ": INCONC: Invalid testcase configuration: Number of event triggers and expected CAM messages differs ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                    }
                    
                    for (v_cnt:=0; v_cnt<lengthof(p_utTriggers); v_cnt:=v_cnt+1) {
                        f_utTriggerEvent(p_utTriggers[v_cnt]);
                        
                        tc_ac.start;
                        alt {
                            [] camPort.receive( mw_camInd ( p_camPdus[v_cnt] )){ 
                                tc_ac.stop;
                                if (v_cnt==lengthof(p_utTriggers)-1) {
                                    log("*** " & testcasename() & ": PASS: Expected CAM message received ***");
                                    f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                                }
                                else {
                                    log("*** " & testcasename() & ": PRECONDITION: Expected CAM message received ***");
                                }
                            }
                            [] tc_ac.timeout {
                                log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                            }
                        }
                    }
                }
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_01
                 */
                 // TODO yann/ifsttar: why 3601? 0 and 3600 indicates the north!!!!
                function f_CAM_MSD_INA_BV_01_01() runs on ItsCam {
                    
                    // Local variables
                    var CamInd v_camInd;
                    var template (present) CurvatureValue v_curVal := ?;
                    var boolean v_initialReceived := false;
                    const CurvatureValue c_curValOffset := 1;
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & "c required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    log("*** " & testcasename() & ": Checking INFO==Curvature value ***");
                    
                    // change the curvature value to retrieve the current value
                    f_utTriggerEvent(m_changeCurvature(c_curValOffset));
                    
                    tc_ac.start;
                    alt {
                        [] camPort.receive( mw_camInd ( mw_camMsg_HF_BV(mw_HF_BV_curvature(v_curVal)) )) -> value v_camInd {
                            tc_ac.stop;
                            if (v_initialReceived) {
                                log("*** " & testcasename() & ": PASS: Expected CAM message received ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);  
                            }
                            else {
                                log("*** " & testcasename() & ": PRECONDITION: Expected CAM message received ***");
                                v_initialReceived := true;
                                //change again the curvature value and set the expectation to the measured value
                                if (v_camInd.msgIn.cam.camParameters.highFrequencyContainer.basicVehicleContainerHighFrequency.curvature.curvatureValue >= 0) {
                                    v_curVal := (v_camInd.msgIn.cam.camParameters.highFrequencyContainer.basicVehicleContainerHighFrequency.curvature.curvatureValue + c_curValOffset) mod 30001;
                                } else { // TODO Add negative value case
                                    v_curVal := v_camInd.msgIn.cam.camParameters.highFrequencyContainer.basicVehicleContainerHighFrequency.curvature.curvatureValue - c_curValOffset;
                                    if (valueof(v_curVal) < -30000) {
                                        v_curVal := 0; // yann/ifsttar TODO It's not a true negative modulus operation
                                f_utTriggerEvent(m_changeCurvature(c_curValOffset));
                                tc_ac.start;
                                repeat;
                            }
                        }
                        [] tc_ac.timeout {
                            log("*** " & testcasename() & ": INCONC: CAM message not received ***");
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                        }
                    }
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_01
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_02
                 */
                function f_CAM_MSD_INA_BV_01_02() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Brake pedal being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_brakePedalEngaged_) }, 
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_brakePedalActive_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_02
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_03
                 */
                function f_CAM_MSD_INA_BV_01_03() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Brake pedal being deactivated", 
                        { m_setAccelerationControlStatus(AccelerationControl_brakePedalEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_brakePedalActive_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_brakePedalActive_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_03
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_04
                 */
                function f_CAM_MSD_INA_BV_01_04() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Gas pedal being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_gasPedalEngaged_) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_gasPedalActive_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_04
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_05
                 */
                function f_CAM_MSD_INA_BV_01_05() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Gas pedal being deactivated", 
                        { m_setAccelerationControlStatus(AccelerationControl_gasPedalEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_gasPedalActive_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_gasPedalActive_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_05
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_06
                 */
                function f_CAM_MSD_INA_BV_01_06() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01( 
                        "Emergency brake being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_emergencyBrakeEngaged_) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_emergencyBrakeActive_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_06
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_07
                 */
                function f_CAM_MSD_INA_BV_01_07() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Emergency brake being deactivated", 
                        { m_setAccelerationControlStatus(AccelerationControl_emergencyBrakeEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_emergencyBrakeActive_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_emergencyBrakeActive_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_07
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_08
                 */
                function f_CAM_MSD_INA_BV_01_08() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Collision warning being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_collisionWarningEngaged_) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_collisionWarningActive_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_08
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_09
                 */
                function f_CAM_MSD_INA_BV_01_09() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Collision warning being deactivated",
                        { m_setAccelerationControlStatus(AccelerationControl_collisionWarningEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_collisionWarningActive_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_collisionWarningActive_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_09
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_10
                 */
                function f_CAM_MSD_INA_BV_01_10() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "ACC being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_accEngaged_) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_accActive_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_10
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_11
                 */
                function f_CAM_MSD_INA_BV_01_11() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "ACC being deactivated",
                        { m_setAccelerationControlStatus(AccelerationControl_accEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_accActive_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_accActive_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_11
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_12
                 */
                function f_CAM_MSD_INA_BV_01_12() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Cruise control being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_cruiseControlEngaged_) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_cruiseControl_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_12
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_13
                 */
                function f_CAM_MSD_INA_BV_01_13() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01(
                        "Cruise control being deactivated",
                        { m_setAccelerationControlStatus(AccelerationControl_cruiseControlEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_cruiseControl_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_cruiseControl_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_13
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_14
                 */
                function f_CAM_MSD_INA_BV_01_14() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01( 
                        "Speed limiter being activated", 
                        { m_setAccelerationControlStatus(AccelerationControl_speedLimiterEngaged_) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_speedLimiterActive_On)) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_14
                
                /**
                 * @desc    TP Function for TC_CAM_MSD_INA_BV_01_15
                 */
                function f_CAM_MSD_INA_BV_01_15() runs on ItsCam {
                    
                    // Local variables
                    
                    // Test control
                    if (not PICS_CAM_GENERATION or PICS_RSU) {
                        log("*** " & testcasename() & ": PICS_CAM_GENERATION and not PICS_RSU required for executing the TC ***");
                        setverdict(inconc);
                        stop;
                    }              
                    
                    // Test component configuration
                    f_cfUp();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    f_prInitialState();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    
                    // Test Body
                    f_CAM_MSD_INA_BV_01( 
                        "Speed limiter control being deactivated", 
                        { m_setAccelerationControlStatus(AccelerationControl_speedLimiterEngaged_), m_setAccelerationControlStatus(c_accCtrlIdle) },
                        { mw_camMsg_HF_BV(mw_HF_BV_accCtrl(mw_speedLimiterActive_On)), mw_camMsg_HF_BV(mw_HF_BV_accCtrl((omit, mw_speedLimiterActive_Off))) }
                    );
                    
                    // Postamble
                    f_poDefault();
                    f_cfDown();
                    
                } // end f_CAM_MSD_INA_BV_01_15
                
                /**