/**
* @author ETSI / STF405
* @version $URL$
* $Id$
* @desc Module containing common functions for ITS
*
*/
module LibItsCam_Functions {
// LibIts
import from LibIts_TestSystem all;
import from LibIts_Interface all;
import from LibItsCam_Templates all;
import from LibItsCam_Pixits all;
import from LibItsCam_TypesAndValues all;
import from CAM_PDU_Descriptions language "ASN.1:1997" all;
import from DENM_PDU_Descriptions language "ASN.1:1997" all;
// LibCommon
import from LibCommon_VerdictControl all;
group defaults {
/**
* @desc basic default behaviour handling
* @remark none
* @param none
*/
altstep a_basicDefault() runs on ItsFa {
[] camPort.receive(mw_camInd ( mw_camMsg_any )){
setverdict(fail, "*** a_basicDefault: FAIL: CAM message received in default ***");
stop;
}
[] camPort.receive {
setverdict(fail, "*** a_basicDefault: FAIL: event received on CAM port in default ***");
stop;
}
[] any timer.timeout {
setverdict(fail, "*** a_basicDefault: FAIL: a timer expired in default ***");
stop;
}
}//end altstep a_basicDefault
} // end of defaults
group preambles {
/**
* @desc Initialize the IUT
* @remark No specific actions specified in the base standard
* @param none
*/
function f_initialState() runs on ItsFa {
// basic default altstep
activate(a_basicDefault());
} // end f_initialState
} // end of preambles
group postambles {
/**
* @desc Global postamble - stops the MTC
* @remark No specific actions required so far
* @param none
*/
function f_postamble() runs on ItsFa {
log("*** f_postamble: INFO: postamble ***");
} // end function f_postamble
} // end group postambles
group otherFunctions {
/** @desc function to generate integer random values
*
* @see ttcn-3 - rnd()
* @param p_lowerbound lowest number in range
* @param p_upperbound highest number in range
* @return integer
*
*/
function f_random( in integer p_lowerbound,
in integer p_upperbound )
return integer {
//Variables
var integer v_random := 0;
v_random := float2int(int2float(p_upperbound - p_lowerbound +1)*rnd()) + p_lowerbound;
// Here, upperbound and lowerbound denote highest and lowest number in range.
log("*** f_random: INFO: OK - random value = " & int2str(v_random) & " ***");
return v_random;
} // end function f_random
/** @desc function to generate a random bitstring value
* corrzesponding to 1 bit position set to 1 (eg '00010000', '01000000', ...)
*
* @see f_random
* @param p_length bitstring length - max 15
* @return bitstring
*
*/
function f_bitPositionRandom( in integer p_length )
return bitstring {
//Variables
var bitstring v_random := '00000000'B;
v_random := '000000000000001'B << f_random (0, p_length);
log("*** f_random: INFO: OK - random value = " & bit2str(v_random) & " ***");
return v_random;
} // end function f_random
} // end group otherFunctions
group upperTester {
/** @desc upper tester function to change current heading (absolute)
*
* @param p_heading
* @return FncRetCode
*/
function f_changeHeading( Direction p_heading ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_changeHeading: INFO: OK ***");
return v_ret;
} // end function f_changeHeading
/** @desc upper tester function to change current position (meter)
*
* @param p_position
* @return FncRetCode
*/
function f_changePosition( integer p_position ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_changePosition: INFO: OK ***");
return v_ret;
} // end function f_changePosition
/** @desc upper tester function to change speed (m/S)
*
* @param p_speed
* @return FncRetCode
*/
function f_changeSpeed( Speed p_speed ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_changeSpeed: INFO: OK ***");
return v_ret;
} // end function f_changeSpeed
/** @desc upper tester function to set the crash signal (activated/deactivated)
*
* @param p_crashStatus
* @return FncRetCode
*/
function f_setCrashSignal( CrashStatus p_crashStatus ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setCrashSignal: INFO: OK ***");
return v_ret;
} // end function f_setCrashSignal
/** @desc upper tester function to set the dangerous goods status (Good type)
* p_goodType = 0 if no dangerous goods are transported
* @param p_goodType
* @return FncRetCode
*/
function f_setDangerousGoodsStatus( DangerousGoods p_goodType ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setDangerousGoodsStatus: INFO: OK ***");
return v_ret;
} // end function f_setDangerousGoodsStatus
/**
* @desc upper tester function to set if the Length/Width is precisely determined
* p_precision = true if the Length/Width is precisely determined
* @param p_precision
* @return FncRetCode
*/
function f_setLengthWidthPrecision( boolean p_precision ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setLengthWidthPrecision: INFO: OK ***");
return v_ret;
} // end function f_setLengthWidthPrecision
/**
* @desc upper tester function to set the doors status
* @param p_doorStatus
* @return FncRetCode
*/
function f_setDoorStatus( DoorOpen p_doorStatus ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setDoorStatus: INFO: OK ***");
return v_ret;
} // end function f_setDoorStatus
/** @desc upper tester function to set the distance to stop line
*
* @param p_distance
* @return FncRetCode
*/
function f_setDistanceToStopLine( Distance p_distance ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setDistanceToStopLine: INFO: OK ***");
return v_ret;
} // end function f_setDistanceToStopLine
/** @desc upper tester function to set the turn advice
*
* @param p_turnAdvice
* @return FncRetCode
*/
function f_setTurnAdvice( TurnAdvice p_turnAdvice ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setTurnAdvice: INFO: OK ***");
return v_ret;
} // end function f_setTurnAdvice
/** @desc upper tester function to set the curvature change
*
* @param p_curvature
* @return FncRetCode
*/
function f_setCurvatureChange( Curvature p_curvature ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setCurvatureChange: INFO: OK ***");
return v_ret;
} // end function f_setCurvatureChange
/** @desc upper tester function to set the Occupancy
*
* @param p_occupancy
* @return FncRetCode
*/
function f_setOccupancy( Occupancy p_occupancy ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setOccupancy: INFO: OK ***");
return v_ret;
} // end function f_setOccupancy
/** @desc upper tester function to set the light bar status
*
* @param p_status
* @return FncRetCode
*/
function f_setLightBarStatus( SimpleSystemState p_status ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setLightBarStatus: INFO: OK ***");
return v_ret;
} // end function f_setLightBarStatus
/** @desc upper tester function to set the sirene status
*
* @param p_status
* @return FncRetCode
*/
function f_setSireneStatus( SimpleSystemState p_status ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setSireneStatus: INFO: OK ***");
return v_ret;
} // end function f_setSireneStatus
/** @desc upper tester function to set the traffic light priority
*
* @param p_priority
* @return FncRetCode
*/
function f_setTrafficLightPriority( Priority p_priority ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setTrafficLightPriority: INFO: OK ***");
return v_ret;
} // end function f_setTrafficLightPriority
/**
* @desc upper tester function to set the Schedule Deviation
* @param p_scheduleDeviation
* @return FncRetCode
*/
function f_setScheduleDeviation( ScheduleDeviation p_scheduleDeviation ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setScheduleDeviation: INFO: OK ***");
return v_ret;
} // end function f_setScheduleDeviation
/**
* @desc upper tester function to set the PT Line Description
* @param p_ptLineDescription
* @return FncRetCode
*/
function f_setPtLineDescription( PTLineDescription p_ptLineDescription ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setPtLineDescription: INFO: OK ***");
return v_ret;
} // end function f_setPtLineDescription
/**
* @desc upper tester function to set the exterior lights status
* @param p_exteriorLightsStatus
* @return FncRetCode
*/
function f_setExteriorLightsStatus( ExteriorLights p_exteriorLightsStatus ) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_setExteriorLightsStatus: INFO: OK ***");
return v_ret;
} // end function f_setExteriorLightsStatus
/**
* @desc upper tester function to change the reference position (moving)
* @param none
* @return FncRetCode
*/
function f_changeReferencePosition() runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_changeReferencePosition: INFO: OK ***");
return v_ret;
} // end function f_changeReferencePosition
/**
* @desc upper tester function to check that the CAM was received on LDM
* @param p_camMsg
* p_received
* @return FncRetCode
*/
function f_checkLdmReceipt( in CamReq p_camMsg, out boolean p_received) runs on ItsFa return FncRetCode {
//Variables
var FncRetCode v_ret := e_success;
//TODO define external function
log("*** f_checkLdmReceipt: INFO: OK ***");
return v_ret;
} // end function f_checkLdmReceipt
} // end group upperTester
group externalFunctions {
/**
* @desc Generate a timestamp of the cureent time to be used in a generationTime field
* @return TimeStamp
*/
external function fx_generateTime()
return TimeStamp;
/** @desc Wrapper function for fx_generateTime
*
* @see xf_generateTime
*
*/
function f_generateTime()
return TimeStamp {
//Variables
var TimeStamp v_generationTime:=0;
v_generationTime := fx_generateTime();
if (v_generationTime!=0)
{
log("*** f_generateTime: INFO: OK - generationTime = " & int2str(v_generationTime) & " ***");
return v_generationTime ;
}
else {
log("*** f_generateTime: ERROR: timestamp could not be generated ***");
setverdict( inconc ) ;
return v_generationTime ;
}
} // end function f_generateTime
/** @desc function to get the PT Line Description
* currently return the PIXIT value
* @see PX_PTLINE_COURSE, PX_PTLINE_REF, PX_PTLINE_ROUTE
*
*/
function f_getPtLineDescription()
return PTLineDescription {
//Variables
var PTLineDescription v_ptLineDescription := { "a", "b", "c" };
v_ptLineDescription := { PX_PTLINE_COURSE, PX_PTLINE_REF, PX_PTLINE_ROUTE }; // PIXIT used!
log("*** f_getPtLineDescription: INFO: OK ***");
return v_ptLineDescription ;
} // end function f_getPtLineDescription
/** @desc function to get the stationID
* currently return the PIXIT value
* @see PX_TESTER_STATION_ID
*
*/
function f_getStationId()
return StationID {
//Variables
var StationID v_stationId := 0;
v_stationId := PX_TESTER_STATION_ID; // PIXIT used!
log("*** f_getStationId: INFO: OK - stationId = " & int2str(v_stationId) & " ***");
return v_stationId ;
} // end function fx_getStationId
/**
* @desc get the stationCharacteristics of the tester
* @return CoopAwareness.stationCharacteristics
*/
external function fx_getStationCharacteristics()
return CoopAwareness.stationCharacteristics;
/** @desc Wrapper function for fx_getStationCharacteristics
*
* @see fx_getStationCharacteristics
*
*/
function f_getStationCharacteristics()
return CoopAwareness.stationCharacteristics {
//Variables
var CoopAwareness.stationCharacteristics v_stationCharacteristics := { true, true, true };
v_stationCharacteristics := fx_getStationCharacteristics();
log("*** f_getStationCharacteristics: INFO: OK - stationCharacteristics received ***");
return v_stationCharacteristics ;
} // end function f_getStationCharacteristics
/**
* @desc get the ReferencePosition of the tester
* @return ReferencePosition
*/
external function fx_getReferencePosition()
return ReferencePosition;
/** @desc Wrapper function for fx_getReferencePosition
*
* @see fx_getReferencePosition
*
*/
function f_getReferencePosition()
return ReferencePosition {
//Variables
var ReferencePosition v_referencePosition;
v_referencePosition := fx_getReferencePosition();
log("*** f_getReferencePosition: INFO: OK - referencePosition received ***");
return v_referencePosition ;
} // end function f_getReferencePosition
} // end group externalFunctions
} // end LibItsCam_Functions