Skip to content
LibItsGeoNetworking_Functions.ttcn 115 KiB
Newer Older
berge's avatar
berge committed
/**
filatov's avatar
filatov committed
 *  @author     ETSI / STF405 / STF449 / STF484 / STF517 / STF525
berge's avatar
berge committed
 *  @version    $URL$
*              $Id$
berge's avatar
berge committed
 *  @desc       Module containing functions for GeoNetworking
garciay's avatar
garciay committed
 *  @copyright   ETSI Copyright Notification
 *               No part may be reproduced except as authorized by written permission.
 *               The copyright and the foregoing restriction extend to reproduction in all media.
 *               All rights reserved.
berge's avatar
berge committed
 *
 */
module LibItsGeoNetworking_Functions {
    
garciay's avatar
garciay committed
  // Libcommon
  import from LibCommon_BasicTypesAndValues all;
  import from LibCommon_DataStrings all;
  import from LibCommon_VerdictControl {type FncRetCode;}
  import from LibCommon_Sync all;
  import from LibCommon_Time all;
garciay's avatar
garciay committed
  // LibItsCommon
  import from LibItsCommon_TypesAndValues all;
  import from LibItsExternal_TypesAndValues all;
  import from LibItsCommon_Templates all;
  import from LibItsCommon_Functions all;
  import from LibItsCommon_Pixits all;
  //    import from LibItsCommon_TestSystem all;
garciay's avatar
garciay committed
    
garciay's avatar
garciay committed
  // LibItsSecurity
  import from LibItsSecurity_TypesAndValues all;
  import from LibItsSecurity_Templates all;
  import from LibItsSecurity_Functions all;
  import from LibItsSecurity_Pixits all;
garciay's avatar
garciay committed
    
garciay's avatar
garciay committed
  // LibItsGeoNetworking
  import from LibItsGeoNetworking_TestSystem all;
  import from LibItsGeoNetworking_TypesAndValues all;
  import from LibItsGeoNetworking_Templates all;
  import from LibItsGeoNetworking_Pixits all;
  import from LibItsGeoNetworking_Pics all;
  //    import from LibItsGeoNetworking_EncdecDeclarations all;
tepelmann's avatar
tepelmann committed
    
garciay's avatar
garciay committed
  group utFuntions {
tepelmann's avatar
tepelmann committed
        
garciay's avatar
garciay committed
    /**
     * @desc    Requests to bring the IUT in an initial state
     * @param   p_init The initialisation to trigger.
     */
    function f_utInitializeIut(template (value) UtGnInitialize p_init) runs on ItsBaseGeoNetworking {
tepelmann's avatar
tepelmann committed
            
garciay's avatar
garciay committed
      //deactivate gnPort default alts
    vc_gnDefaultActive := false;
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
      utPort.send(p_init);
      tc_wait.start;
      alt {
garciay's avatar
garciay committed
	      [] utPort.receive(UtGnResults: { utGnInitializeResult := true }) {
garciay's avatar
garciay committed
          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);
        }
      }
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
      //activate gnPort default alts
    vc_gnDefaultActive := true;
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
    }
tepelmann's avatar
tepelmann committed
        
garciay's avatar
garciay committed
    /**
     * @desc    Requests to change the position of the IUT
     */
    function f_utChangePosition() runs on ItsBaseGeoNetworking {
garciay's avatar
garciay committed
      //deactivate gnPort default alts
    vc_gnDefaultActive := false;
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
      utPort.send(m_changePosition);
      tc_wait.start;
      alt {
	      [] utPort.receive(UtGnResults: { utGnChangePositionResult := true} ) {
          tc_wait.stop;
          log("*** f_utChangePosition: INFO: IUT position changed ***");
        }
        [] utPort.receive(UtGnResults: { utGnChangePositionResult := false }) {
          tc_wait.stop;
          log("*** f_utChangePosition: INFO: IUT position change was not successful ***");
          f_selfOrClientSyncAndVerdict("error", e_error);
        }
        [] a_utDefault() {
        }
        [] tc_wait.timeout {
          log("*** f_utChangePosition: INFO: IUT position not changed in time ***");
          f_selfOrClientSyncAndVerdict("error", e_timeout);
        }
      }
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
      //activate gnPort default alts
    vc_gnDefaultActive := true;
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
    }
reinaortega's avatar
reinaortega committed
        
garciay's avatar
garciay committed
    /**
     * @desc    Triggers event from the application layer
     * @param   p_event The event to trigger.
     */
    function f_utTriggerEvent(template (value) UtGnTrigger p_event) runs on ItsBaseGeoNetworking return boolean {
reinaortega's avatar
reinaortega committed
            
garciay's avatar
garciay committed
      // Variables
      var boolean v_return := true;
garciay's avatar
garciay committed
      //deactivate gnPort default alts
    vc_gnDefaultActive := false;
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
      utPort.send(p_event);
      tc_wait.start;
      alt {
	      [] utPort.receive(UtGnResults: { utGnTriggerResult := true }) {
          tc_wait.stop;
	      }
	      [] utPort.receive(UtGnResults: { utGnTriggerResult := false }) {
          tc_wait.stop;
          log("*** UtGnTriggerResult: INFO: UT trigger was not successful ***");
          f_selfOrClientSyncAndVerdict("error", e_error);
        }
        [] a_utDefault() {
        }
        [] tc_wait.timeout {
        v_return := false;
reinaortega's avatar
reinaortega committed
        }
garciay's avatar
garciay committed
      }
            
      //activate gnPort default alts
    vc_gnDefaultActive := true;
            
      return v_return;
    }
reinaortega's avatar
reinaortega committed
        
garciay's avatar
garciay committed
  } // End of group utFunctions
garciay's avatar
garciay committed
  group geoConfigurationFunctions {
        
    /**
     * @desc This configuration features:
     *       - one ITS node (IUT)
     *       - two ITS nodes (nodeA, nodeB)
     *       - Area1 which only includes NodeB and IUT
     *       - Area2 which only includes NodeB
     *         NodeB being close to the area center
     */
    //FIXME RGY Titan doesn't support mtc and system clauses yet
    function f_cf01Up(Scenario p_scenario := e_staticPosition) runs on ItsGeoNetworking /* TITAN TODO: system ItsGeoNetworkingSystem */ {
            
      // Variables
      var PositionTable v_positionTable := {};
      var GeoAreaTable v_areaTable := {};
            
      // Map
      map(self:acPort, system:acPort);
      map(self:utPort, system:utPort);
      map(self:geoNetworkingPort, system:geoNetworkingPort);
            
      // Connect
      f_connect4SelfOrClientSync();
      activate(a_cf01Down());
            
      // Initialise secured mode
      f_initialiseSecuredMode();
            
      //Initialze the IUT
      f_initialState(p_scenario);
            
      // Positions & Areas
      f_preparePositionsAndAreas(v_positionTable, v_areaTable);
            
      f_initialiseComponent(v_positionTable, v_areaTable, c_compNodeB);
            
    } // end f_cf01Up
        
    //FIXME RGY Titan doesn't support mtc and system clauses yet
    function f_cf01Down() runs on ItsGeoNetworking /* TITAN TODO: system ItsGeoNetworkingSystem */ {
            
      f_uninitialiseSecuredMode();
            
      // Unmap
      unmap(self:acPort, system:acPort);
      unmap(self:utPort, system:utPort);
      unmap(self:geoNetworkingPort, system:geoNetworkingPort);
            
      // Disconnect
      f_disconnect4SelfOrClientSync();
            
    } // end f_cf01Down
Loading full blame...