LibItsDcc_Functions.ttcn3 6.04 KB
Newer Older
schmitting's avatar
schmitting committed
module LibItsDcc_Functions {
schmitting's avatar
schmitting committed
    
    // Libcommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    
    // LibIts
    import from LibItsDcc_Templates all;
    import from LibItsDcc_Pixits all;
    import from LibItsDcc_Pics all;
    import from LibItsDcc_TestSystem all; 

    group dccConfigurationFunctions {
        
        /**
         * @desc    Setups default configuration   
         */
schmitting's avatar
schmitting committed
        function f_cfUp(out UtComp p_utComp,
                        out ItsDcc p_itsDcc) runs on ServerSyncComp {
schmitting's avatar
schmitting committed
            
schmitting's avatar
schmitting committed
            // Create
            p_utComp := UtComp.create;
            p_itsDcc := ItsDcc.create;
            
            // Connect
            connect(p_utComp:syncPort, self:syncPort);
            connect(p_itsDcc:syncPort, self:syncPort);
            
            //Map
            map(p_utComp:utPort, system:utPort);
            map(p_itsDcc:inPort, system:inPort);
schmitting's avatar
schmitting committed
            
        } // end f_cfUp
        
        /**
         * @desc    Deletes default configuration 
         */
schmitting's avatar
schmitting committed
        function f_cfDown(in UtComp p_utComp,
                          in ItsDcc p_itsDcc) runs on ServerSyncComp {
            
            f_serverWaitForAllClientsToStop();
            // Disconnect
            disconnect(p_utComp:syncPort, self:syncPort);
            disconnect(p_itsDcc:syncPort, self:syncPort);
            
            // Unmap
            unmap(p_utComp:utPort, system:utPort);
            unmap(p_itsDcc:inPort, system:inPort);
schmitting's avatar
schmitting committed
            
            
        } // end f_cfDown
        
    } // end of dccConfigurationFunctions
    
schmitting's avatar
schmitting committed
      /* @desc    Implements synchronization of 2 clients from server side
      *           on one or more synchronization points.
      *           If problem occurs, then server sends STOP to all clients.
      *           Waits for PX_TSYNC_TIME_LIMIT to let clients
      *           finish executing their behavior until this
      *           synchronization point.
      * @remark  The use of this function requires prior connection of
      *          the server sync ports!
      * @param   p_syncPointIds list of synchronization point name/ids
      * @return  execution status
      */
      function f_serverSync2Clients( in SyncPointList p_syncPointIds )
      runs on ServerSyncComp {
            var integer i, v_noOfSyncIds := sizeof(p_syncPointIds);
            for ( i := 0; i < v_noOfSyncIds; i := i+1 ) {
                  f_serverSyncClientsTimed(2,p_syncPointIds[i], PX_TSYNC_TIME_LIMIT);
            }
      }

schmitting's avatar
schmitting committed
    /**
     * @desc Upper tester functions
     */
    group utFuntions { 
        
        /**
         * @desc    Requests to bring the IUT in an initial state
         * @param   p_init The initialisation to trigger.
         */
schmitting's avatar
schmitting committed
        function f_utInitializeIut(template (value) UtInitialize p_init) runs on UtComp {
schmitting's avatar
schmitting committed
        
            utPort.send(p_init);
            tc_wait.start;
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                    log("*** f_utInitializeIut: INFO: IUT initialized ***");
                }
                [] utPort.receive {
                    tc_wait.stop;
                    log("*** f_utInitializeIut: INFO: IUT could not be initialized ***");
                    f_selfOrClientSyncAndVerdict("error", e_error);
                }
                [] tc_wait.timeout {
                    log("*** f_utInitializeIut: INFO: IUT could not be initialized in time ***");
                    f_selfOrClientSyncAndVerdict("error", e_timeout);
                }
                [else] { // Shortcut defaults
                    repeat; 
                }
            }
        
        }
        
        /**
         * @desc    Triggers event on the radio interface
         * @param   p_trigger The event to trigger.
         */
schmitting's avatar
schmitting committed
        function f_utTriggerEvent(template (value) UtTrigger p_trigger) runs on UtComp {
schmitting's avatar
schmitting committed
            
            utPort.send(p_trigger);
            alt {
                [] utPort.receive(UtResult:true) {
                    tc_wait.stop;
                    log("*** f_utTriggerEvent: INFO: Event sccessfully triggered ***");
                }
                [] utPort.receive {
                    tc_wait.stop;
                    log("*** f_utTriggerEvent: INFO: Event could not be triggered ***");
                    f_selfOrClientSyncAndVerdict("error", e_error);
                }
                [] tc_wait.timeout {
                    log("*** f_utTriggerEvent: INFO: Event could not be triggered in time ***");
                    f_selfOrClientSyncAndVerdict("error", e_timeout);
                }
                [else] { // Shortcut defaults
                    repeat; 
                }
            }
        
        }
        
        /**
         * @desc Capture the next event sent to the Upper Tester
         * @param   p_event     Receive template of the expected event
         * @param   p_result    Return the value of the received event if template matchs
         */
        function f_utCommandIndication( 
            in template UtCommandIndication p_event,
            out UtCommandIndication p_result
schmitting's avatar
schmitting committed
        ) runs on UtComp {
schmitting's avatar
schmitting committed
            
            tc_wait.start;
            alt {
//                        [] utPort.receive(p_event) -> value p_result {
//                            tc_wait.stop;
//                        }
                [] utPort.receive {
                    tc_wait.stop;
                    log("*** f_utCommandIndication: INFO: Another event indicated at application layer, repeating check ***");
                }
                [] tc_wait.timeout {
                    log("*** f_utCommandIndication: ERROR: Timeout while waiting for event check result ***");
                }
            } // end of 'alt' statement
        
        } // End of function f_utCommandIndication
    
    } // End of group utFunctions




    
} // End of module LibItsDcc_Functions