Commit 531d82fe authored by petersenj's avatar petersenj
Browse files

Aligned tau and ttcn express

Made new testcase 0824_03
parent a0ecf281
Loading
Loading
Loading
Loading
+37 −94
Original line number Diff line number Diff line
@@ -99,25 +99,6 @@

	group configFunctions {

//		/**
//		 * @desc 	The ISF MSUT is configured to use PXT_APPLICABLE_COMMON_ID.
//		 *			An CSF MSUT does not need to be configured. It will receive
//		 *			in the Header frame the CalledId and OwnId.
//		 * @param	p_cc is the CoulourCode used
//		 * @param	p_politeLvl is the Polite level used
//		 * @param	p_callType is the CallType used
//		*/
//		function f_msConfigureTx(ColourCode p_cc, PoliteLvl p_politeLvl, CallType p_callType)
//		runs on Mse
//		return FncRetCode {
//			var FncRetCode v_ret := e_success;
//			if (PIC_ISF_OR_CSF == e_isf) { 
//				v_ret := f_handshake_Ut(m_msCfgParamsIsfPoliteTx(f_getChannelNrFromColourCode(p_cc), p_politeLvl, p_callType, int2bit(PXT_APPLICABLE_COMMON_ID,8))); }
//			else { 
//				v_ret := f_handshake_Ut(m_msCfgParamsCsfPoliteTx(f_getChannelNrFromColourCode(p_cc), p_politeLvl, p_callType, fx_calcDialString(PXT_CSF_ADDRESS_TESTER)));
//			}
//			return v_ret;
//		}//end f_msConfigureTx

		/**
		 * @desc 	Configure Upper Tester
@@ -165,83 +146,45 @@
		return ChannelNumber {
			var IsfChannelNr ret_isfChannelNr;
			var CsfChannelNr ret_csfChannelNr;
			var IsfColourCode v_isf_cc; 
			var CsfColourCode v_csf_cc; 
			if (PIC_ISF_OR_CSF == e_isf) {
				select (p_cc) {
					case (c_grpAcf1)
						{ ret_isfChannelNr := e_isfChannelNr_1; }
					case (c_grpAcf2)
						{ ret_isfChannelNr := e_isfChannelNr_2; }
					case (c_grpAcf3)
						{ ret_isfChannelNr := e_isfChannelNr_3; }
					case (c_grpAcf4)
						{ ret_isfChannelNr := e_isfChannelNr_4; }
					case (c_grpAcf5)
						{ ret_isfChannelNr := e_isfChannelNr_5; }
					case (c_grpAcf6)
						{ ret_isfChannelNr := e_isfChannelNr_6; }
					case (c_grpAcf7)
						{ ret_isfChannelNr := e_isfChannelNr_7; }
					case (c_grpAcf8)
						{ ret_isfChannelNr := e_isfChannelNr_8; }
					case (c_grpAcf9)
						{ ret_isfChannelNr := e_isfChannelNr_9; }
					case (c_grpAcf10)
						{ ret_isfChannelNr := e_isfChannelNr_10; }
					case (c_grpAcf11)
						{ ret_isfChannelNr := e_isfChannelNr_11; }
					case (c_grpAcf12)
						{ ret_isfChannelNr := e_isfChannelNr_12; }
					case (c_grpAcf13)
						{ ret_isfChannelNr := e_isfChannelNr_13; }
					case (c_grpAcf14)
						{ ret_isfChannelNr := e_isfChannelNr_14; }
					case (c_grpAcf15)
						{ ret_isfChannelNr := e_isfChannelNr_15; }
					case (c_grpAcf16)
						{ ret_isfChannelNr := e_isfChannelNr_16; }
					case else {
						// TODO fix it! if we come here then we are in error
					}
				}
				v_isf_cc :=  p_cc.isfColourCode;
				if (c_grpAcf1 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_1}
				if (c_grpAcf2 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_2}
				if (c_grpAcf3 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_3}
				if (c_grpAcf4 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_4}
				if (c_grpAcf5 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_5}
				if (c_grpAcf6 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_6}
				if (c_grpAcf7 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_7}
				if (c_grpAcf8 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_8}
				if (c_grpAcf9 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_9}
				if (c_grpAcf10 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_10}
				if (c_grpAcf11 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_11}
				if (c_grpAcf12 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_12}
				if (c_grpAcf13 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_13}
				if (c_grpAcf14 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_14}
				if (c_grpAcf15 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_15}
				if (c_grpAcf16 == v_isf_cc)  {ret_isfChannelNr := e_isfChannelNr_16}
				return { isfChannelNr := ret_isfChannelNr };
			} else { // its e_csf
				select (p_cc) {
					case (c_grpBcf1)
						{ ret_csfChannelNr := e_csfChannelNr_1; }
					case (c_grpBcf2)
						{ ret_csfChannelNr := e_csfChannelNr_2; }
					case (c_grpBcf3)
						{ ret_csfChannelNr := e_csfChannelNr_3; }
					case (c_grpBcf4)
						{ ret_csfChannelNr := e_csfChannelNr_4; }
					case (c_grpBcf5)
						{ ret_csfChannelNr := e_csfChannelNr_5; }
					case (c_grpBcf6)
						{ ret_csfChannelNr := e_csfChannelNr_6; }
					case (c_grpBcf7)
						{ ret_csfChannelNr := e_csfChannelNr_7; }
					case (c_grpBcf8)
						{ ret_csfChannelNr := e_csfChannelNr_8; }
					case (c_grpBcf9)
						{ ret_csfChannelNr := e_csfChannelNr_9; }
					case (c_grpBcf10)
						{ ret_csfChannelNr := e_csfChannelNr_10; }
					case (c_grpBcf11)
						{ ret_csfChannelNr := e_csfChannelNr_11; }
					case (c_grpBcf12)
						{ ret_csfChannelNr := e_csfChannelNr_12; }
					case (c_grpBcf13)
						{ ret_csfChannelNr := e_csfChannelNr_13; }
					case (c_grpBcf14)
						{ ret_csfChannelNr := e_csfChannelNr_14; }
					case (c_grpBcf15)
						{ ret_csfChannelNr := e_csfChannelNr_15; }
					case (c_grpBcf16)
						{ ret_csfChannelNr := e_csfChannelNr_16; }
					case else {
						// TODO fix it! if we come here then we are in error
					}
				}
				v_csf_cc :=  p_cc.isfColourCode;
				if (c_grpBcf1 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_1}
				if (c_grpBcf2 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_2}
				if (c_grpBcf3 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_3}
				if (c_grpBcf4 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_4}
				if (c_grpBcf5 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_5}
				if (c_grpBcf6 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_6}
				if (c_grpBcf7 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_7}
				if (c_grpBcf8 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_8}
				if (c_grpBcf9 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_9}
				if (c_grpBcf10 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_10}
				if (c_grpBcf11 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_11}
				if (c_grpBcf12 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_12}
				if (c_grpBcf13 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_13}
				if (c_grpBcf14 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_14}
				if (c_grpBcf15 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_15}
				if (c_grpBcf16 == v_csf_cc)  {ret_csfChannelNr := e_csfChannelNr_16}
				return { csfChannelNr := ret_csfChannelNr };
			}
		}
+46 −63
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@ module dPMR_Pixits {
	import from dPMR_Types all;
	import from dPMR_Values all;


	group ChannelUsedInTests {
		/**
		* @desc  	ISF Channel Number to be used in ISF test cases.
		* @remark 	see clause 6.1.5
@@ -26,8 +28,10 @@ module dPMR_Pixits {
		*/ 
		modulepar {CsfChannelNr PXT_CSF_CHANNEL_NR := e_csfChannelNr_1 }

	////TODO JP add clauses + make groups
	} // end ChannelUsedInTests
	

	group InputData {
		/**
		* @desc Voice Test Tone for frame 1, 2, 3 and 4, must be chosen 
		* 		They consist each of 4x72 bits of data, =288 bits
@@ -38,12 +42,9 @@ module dPMR_Pixits {
		modulepar {Payload PXT_VOICE_TEST_TONE_F3}
		modulepar {Payload PXT_VOICE_TEST_TONE_F4}
		
//  TODO This to be removed, shall not be fixed
//	/**
//	* @desc 	Type of call 
//	*/
//	modulepar { CallType PXT_CALL_TYPE := e_voiceGrp }
	} // end InputData

	group AddressesAndIdsUsed {
		/**
		* @desc 	Applicable Common Id used for ISF only 
		* @remark 	see clause 8.1.1.1
@@ -61,25 +62,7 @@ module dPMR_Pixits {
		* @remark 	see clause 8.2.2 and A.2
		*/
		modulepar {CSFAddress PXT_CSF_ADDRESS_IUT := '111111110000000000000001'B }

//  TODO This to be removed, shall not be fixed
//	/**
//	* @desc 	The politeness level to be used by the IUT attempts to transmit 
//	*/
//	modulepar {PoliteLvl PXT_POLITE_LVL := e_impolite}

	/** TODO JP might be remove (moved to default values)
	* @desc 	The ISF common ID used by IUT 
	*/

//	TODO JP remove? this is not used
//  modulepar {Common_ID PXT_ISF_COM_ID := '00000001'B}

	/** TODO JP might be remove (moved to default values)
	* @desc 	The Dialstring of the CSF address to be dialled by the IUT 
	*/
//	TODO JP remove? this is not used
//	modulepar { DialString PXT_CSF_DIALSTRING := "1234567" }
	} // end AddressesAndIdsUsed

	group dPMR_Timers {

+48 −52
Original line number Diff line number Diff line
@@ -238,6 +238,7 @@
		} // end m_headerInformation


		
	 	template HeaderInformation  mw_headerInformationVoiceTx ( MsAddress p_calledId , 
													      		  MsAddress    p_ownId, 
													      		  CommunicationsMode p_commMode,
@@ -264,7 +265,6 @@




		template MsAddress m_msAddressFromIsfAddr( ISFAddress p_iadr ) := {
			isfAddress := p_iadr 
		} // end m_msAddressFromIsfAddr
@@ -276,17 +276,15 @@

	} //end group InformationElementTemplates 


	template ISFAddress m_isfAddrFromCommonId( Common_ID p_cid ) := {
		common_ID := p_cid,
		fixedPart := c_fixedPartAddr
	} // end m_msAddressFromCommonId



	group ConfigurationTemplates {

		//TODO JP use xxx_utRequest  / xxx_utConfirm
		// rename all templates
		template UtRequest m_testToneDetected_utRequest(	ChannelNumber p_channelNumber, 
															Common_ID p_commonId, 
															UtActParams p_utActParameter ) := {
@@ -298,6 +296,17 @@
			utActParams := p_utActParameter
		}

		template UtRequest m_testToneNotDetected_utRequest(	ChannelNumber p_channelNumber, 
															UtActParams p_utActParameter ) := {
	  		channelNr :=  p_channelNumber,
			politeLvl  := omit ,
			callType   := omit ,
			dialString := omit ,
			isfCidAddr := omit,
			utActParams := p_utActParameter
		}


		template UtRequest m_msToStandBy_utRequest(	ChannelNumber p_channelNumber, 
													in template DialString p_dialString,
													in template Common_ID p_commonId ) := {
@@ -309,13 +318,16 @@
			utActParams := omit
		}

template UtRequest m_msPressPttThenDekeyPtt_utRequest( ChannelNumber p_channelNumber, DialString p_dialstr ) := {
		template UtRequest m_msPressPttThenDekeyPtt_utRequest( ChannelNumber p_channelNumber, 
		                                                       in template DialString p_dialstr ,
		                                                       in template Common_ID p_commonId, 
		                                                       UtActParams p_utActParameter) := {
			  		channelNr := p_channelNumber,
					politeLvl  := omit ,
					callType   := omit ,
					dialString := p_dialstr,
					isfCidAddr := omit ,
			utActParams := omit
					utActParams := p_utActParameter
				}
		
		template UtRequest m_msCfgParamsCsfPoliteRx( ChannelNumber p_channelNumber, DialString p_dialstr ) := {
@@ -328,24 +340,6 @@ template UtRequest m_msCfgParamsCsfPoliteRx( ChannelNumber p_channelNumber, Dial
				}


	 	template UtRequest m_msCfgParamsIsfPoliteTx( ChannelNumber p_channelNumber, PoliteLvl p_pl, CallType p_ct, Common_ID p_cid ) := {
	  		channelNr := p_channelNumber,
	   		politeLvl  := p_pl,  
			callType   := p_ct,   
			dialString := omit,
			isfCidAddr := p_cid,
			utActParams := omit
		}


		template UtRequest m_msCfgParamsCsfPoliteTx( ChannelNumber p_channelNumber, PoliteLvl p_pl, CallType p_ct, DialString p_dialStr) := {
	  		channelNr := p_channelNumber,
	   		politeLvl  := p_pl,  
			callType   := p_ct,   
			dialString := p_dialStr,
			isfCidAddr := omit,
			utActParams := omit
		}

		//TODO JP
		template UtRequest m_msAct_utReq( ChannelNumber p_channelNumber) := {
@@ -359,10 +353,12 @@ template UtRequest m_msCfgParamsCsfPoliteRx( ChannelNumber p_channelNumber, Dial

	} // end group ConfigurationTemplates


// TODO check these complements if they are correct....
	group FncRetCodeTmplts {
	
		template FncRetCode m_success := e_success;
		template FncRetCode m_noSuccess := complement(e_success);
		template FncRetCode m_noSuccess := complement(m_success);

	}//end FncRetCodeTmplts
	
@@ -372,7 +368,7 @@ template UtRequest m_msCfgParamsCsfPoliteRx( ChannelNumber p_channelNumber, Dial
	}

 	template UtConfirm  mw_utConfirm_noSuccess := {
		success := complement(e_ut_success),
		success := e_ut_noSuccess,
		observation := *
	}

+142 −12
Original line number Diff line number Diff line
@@ -57,6 +57,32 @@ module dPMR_TestCases {

			} // end TC_PMR_0824_01

			/**
			* @param p_cc The colour code (channel) used
			*/
			testcase TC_PMR_0824_03(ColourCode p_cc)
			runs on ServerSyncComp
			system TestAdapter {

				//Variables
				var Mse v_mse;
				var Ut v_ut;

				//Configuration Up
				f_cfMseUp(v_mse, v_ut);

				//Test body
				v_mse.start(f_TC_testToneTransmissionCommon_ID_set_to_default_MS01(p_cc));
				v_ut.start(f_TC_msWaitVoiceReceived_UT(p_cc));

				// synchronize both PTCs
				f_serverSync2ClientsAndStop({c_prDone,c_tbDone});

				// Configuration Down
				f_cfMseDown(v_mse, v_ut);

			} // end TC_PMR_0824_01

		} // end group AllCall

		group Framing {
@@ -106,7 +132,7 @@ module dPMR_TestCases {

						//Test body
						v_mse.start(f_TC_voiceTx_MS01(p_cc));
//						v_ut.start(f_TC_msPressPttThenDekeyPtt_UT(p_cc, PXT_CALL_TYPE));
						v_ut.start(f_TC_msPressPttThenDekeyPtt_UT(p_cc));
		
						// synchronize both PTCs
						f_serverSync2ClientsAndStop({c_prDone, c_tbDone});
@@ -173,6 +199,52 @@ module dPMR_TestCases {

		} // end f_TC_voiceTransmissionCommon_ID_set_to_255_MS01

		/**
		 * @desc 	this function will send a voice (test Tone) transmission with Common id set to default
		 * @param 	p_cc Colour Code
		 */
		function f_TC_testToneTransmissionCommon_ID_set_to_default_MS01(ColourCode p_cc)
		runs on Mse{
			// Variables
			var default v_dftMse;
			var FncRetCode v_ret := e_success;
	
			//Test System Parameters
			f_initMse_isfAllCall(c_iutAllCall, c_testerNoAllCall);

			//Default
			v_dftMse := activate(a_dftMse());
		
			//Preamble
			f_clientSyncAndVerdict(c_prDone, v_ret); 
	
			//Test Body
			dp1Port.send(	m_payloadTransmission(
								m_headerFrame(									
									m_headerInformation(e_commStartHeader,
														vc_mse.iutId, 
														vc_mse.testerId, 
														e_voice, 
														e_p2p),
									p_cc),
								m_superFrameListWith4SuperFrames(
									m_superFrame(
										m_frame1AudibleTestTone(vc_mse.iutIdUP, PXT_VOICE_TEST_TONE_F1),
										m_frame2AudibleTestTone(vc_mse.iutIdLP, PXT_VOICE_TEST_TONE_F2, p_cc),
										m_frame3AudibleTestTone(vc_mse.testerIdUP, PXT_VOICE_TEST_TONE_F3),
										m_frame4AudibleTestTone(vc_mse.testerIdLP, PXT_VOICE_TEST_TONE_F4, p_cc)
									)
								),
								m_endFrameConnectReq)
						);
			f_clientSyncAndVerdict(c_tbDone, v_ret); 
		
			//no Postamble
		
			deactivate;

		} // end f_TC_testToneTransmissionCommon_ID_set_to_default_MS01

		/**
		* @desc Checks that the MS responds with an ACK when receiving an Connect Request message.
		* @param 	p_cc Colour Code
@@ -181,12 +253,13 @@ module dPMR_TestCases {
		runs on Mse{
			// Variables
			var FncRetCode v_ret := e_success;
			var default defvar;

			//Test System Parameters
			f_initMse();
		
			//Default
			activate(a_dftMse());
			defvar := activate(a_dftMse());

			//Preamble
			f_clientSyncAndVerdict(c_prDone, v_ret); 
@@ -231,12 +304,14 @@ module dPMR_TestCases {
			var FncRetCode v_ret := e_success;
			var UInt16 v_sfCount := 0;
			var boolean v_headerReceived := false;
			var default defvar;


			//Test System Parameters
			f_initMse();
	
			//Default
			activate(a_dftMse());
			defvar := activate(a_dftMse());

			//Preamble
			f_clientSyncAndVerdict(c_prDone, v_ret);
@@ -300,7 +375,7 @@ module dPMR_TestCases {
	}//end commonTCFunctions


	group utTCFunctions {
	group ut_TC_Functions {
	
			/**
			* @desc This function waits for the indication from the UT that IUT has output the 'audible test tone'.
@@ -344,6 +419,48 @@ module dPMR_TestCases {

			} // end function f_TC_msWaitVoiceReceived_UT
		
			/**
			* @desc This function waits for the indication from the UT that IUT has not output the 'audible test tone'.
			*		
			* @param 	p_cc Colour Code
			*/
			function f_TC_msWaitVoiceNotReceived_UT( ColourCode p_cc)
			runs on Ut{
				//Variables
				var default v_dftUt;
				var FncRetCode v_ret := e_success;

				//Test System Parameters
				f_initUt();
			
				//Default
				v_dftUt := activate(a_dftUt());
			
				//Preamble
				v_ret := f_handshake_Ut(m_testToneNotDetected_utRequest(f_getChannelNrFromColourCode(p_cc), e_testToneNotReceived));
				f_clientSyncAndVerdict(c_prDone, v_ret);

				//Test body
				tc_maxCaseExecPeriod.start;
				alt {
					[]utPort.receive(mw_utConfirm_success){
						tc_maxCaseExecPeriod.stop;
						setverdict(pass);
					}
					[]tc_maxCaseExecPeriod.timeout{
						log("**** f_TC_msWaitVoiceReceived_UT: Timeout: Expected message not received. ****");
						setverdict(fail);
					}
				}//end alt

				f_clientSyncAndVerdict(c_tbDone, v_ret); 
			
				//no Postamble

				deactivate;

			} // end function f_TC_msWaitVoiceNotReceived_UT
		
			/**
			 * @desc	This function will put the MS in an idle mode listening to a 
			 *			certain channel using the Pixit id or address
@@ -353,12 +470,13 @@ module dPMR_TestCases {
			runs on Ut {
				//Variables
				var FncRetCode v_ret := e_success;
				var default defvar;

				//Test System Parameters
				f_initUt();
			
				//Default
				activate(a_dftUt());
				defvar := activate(a_dftUt());
			
				//Preamble
				if (PIC_ISF_OR_CSF == e_isf) {
@@ -386,24 +504,36 @@ module dPMR_TestCases {
			* @param 	p_politeLvl Polite Level
			* @param 	p_callType Call Type
			*/
			function f_TC_msPressPttThenDekeyPtt_UT(ColourCode p_cc, PoliteLvl p_politeLvl, CallType p_callType)
			function f_TC_msPressPttThenDekeyPtt_UT(ColourCode p_cc)
			runs on Ut{
				//Variables
				var FncRetCode v_ret := e_success;
				var default defvar;
				
				//Test System Parameters
				f_initUt();

				//Default
				activate(a_dftUt());
				defvar := activate(a_dftUt());

				//Preamble
				// TODO JP SM FK  Why should this have a polite level, 
// TODO JP fix!				v_ret := f_handshake_Ut(m_msPressPttThenDekeyPtt_utRequest(p_cc,));
//	TODO JP REMOVE			v_ret := f_msConfigureTx(p_cc, p_politeLvl, p_callType);
				f_TC_msToStandby_UT(p_cc);					

				f_clientSyncAndVerdict(c_prDone, v_ret); 
			
				//Test body//TODO JP make it an f_handshake_Ut(m_testToneDetected_utReq)
				if (PIC_ISF_OR_CSF == e_isf) {
					v_ret := f_handshake_Ut(m_msPressPttThenDekeyPtt_utRequest(	f_getChannelNrFromColourCode(p_cc), 
																				omit , 
																				f_getCommonId(vc_ut.iutId),
																				e_pressPtt));
				} else {
					v_ret := f_handshake_Ut(m_msPressPttThenDekeyPtt_utRequest(	f_getChannelNrFromColourCode(p_cc), 
																				c_defaultCallGroup, 
																				omit , 
																				e_pressPtt));
				}
				//v_ret := f_handshake_Ut(m_msAct_utReq);
				//if (v_ret != e_success) {f_clientSyncAndVerdict(c_tbDone, v_ret);}

@@ -413,6 +543,6 @@ module dPMR_TestCases {
			}//end f_TC_msPressPttThenDekeyPtt_UT

	
	}//end utTCFunctions
	}//end ut_TC_Functions

} // end module dPMR_TestCases
+2 −1
Original line number Diff line number Diff line
@@ -518,7 +518,8 @@ module dPMR_Types {
			e_pressPtt (0), 				//Please press PTT and speak and release PTT
			//e_dekeyPtt (1),
			e_statusMessageReceived (1), 	//Have you received a status message?
		   	e_testToneReceived (2) 			//Have you heard a test tone?
		   	e_testToneReceived (2),			//Have you heard a test tone?
		   	e_testToneNotReceived (3) 		//Have you NOT heard a test tone?
		}

		// ------------ MS configuration parameters ---------------
Loading