Newer
Older
module LibItsDcc_Functions {
// Libcommon
import from LibCommon_Sync all;
import from LibCommon_VerdictControl all;
// LibIts
import from LibItsDcc_TypesAndValues all;
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
*/
function f_cfUp(out UtComp p_utComp,
out ItsInDcc p_itsInDcc,
out ItsRrxDcc p_itsRrxDcc,
in template (value) UtTrigger p_trigger) runs on ServerSyncComp {
// Create
p_utComp := UtComp.create("Upper Tester") alive;
p_itsInDcc := ItsInDcc.create("IN_SAP");
p_itsRrxDcc := ItsRrxDcc.create("RRX");
// Connect
connect(p_utComp:syncPort, self:syncPort);
connect(p_itsInDcc:syncPort, self:syncPort);
connect(p_itsRrxDcc:syncPort, self:syncPort);
connect(p_itsInDcc:checkPort, mtc:checkPort);
connect(p_itsRrxDcc:checkPort, mtc:checkPort);
//Map
map(p_utComp:utPort, system:utPort);
map(p_itsInDcc:inPort, system:inPort);
map(p_itsRrxDcc:rrxPort, system:rrxPort);
// Initialize radio equipment
p_utComp.start(f_utInitializeIut(m_utInitialize(m_utRadioInitialize)));
p_utComp.done;
// Put channel(s) into defined state
p_utComp.start(f_utTriggerEvent(p_trigger));
p_utComp.done;
} // end f_cfUp
/**
* @desc Deletes default configuration
*/
function f_cfDown(in UtComp p_utComp,
in ItsInDcc p_itsInDcc,
in ItsRrxDcc p_itsRrxDcc) runs on ServerSyncComp {
f_serverWaitForAllClientsToStop();
// Disconnect
disconnect(p_utComp:syncPort, self:syncPort);
disconnect(p_itsInDcc:syncPort, self:syncPort);
disconnect(p_itsRrxDcc:syncPort, self:syncPort);
disconnect(p_itsInDcc:checkPort, mtc:checkPort);
disconnect(p_itsRrxDcc:checkPort, mtc:checkPort);
// Unmap
unmap(p_utComp:utPort, system:utPort);
unmap(p_itsInDcc:inPort, system:inPort);
unmap(p_itsRrxDcc:rrxPort, system:rrxPort);
} // end f_cfDown
} // end of dccConfigurationFunctions
/**
* @desc Upper tester functions
*/
group utFuntions {
/**
* @desc Requests to bring the IUT in an initial state
* @param p_init The initialisation to trigger.
*/
function f_utInitializeIut(template (value) UtInitialize p_init) runs on UtComp {
utPort.send(p_init);
tc_wait.start;
alt {
[] utPort.receive(UtResult:true) {
tc_wait.stop;
log("*** " & __SCOPE__ & ": INFO: IUT initialized ***");
log("*** " & __SCOPE__ & ": INFO: IUT could not be initialized ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
[] tc_wait.timeout {
log("*** " & __SCOPE__ & ": 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.
*/
function f_utTriggerEvent(template (value) UtTrigger p_trigger) runs on UtComp {
utPort.send(p_trigger);
alt {
[] utPort.receive(UtResult:true) {
tc_wait.stop;
log("*** " & __SCOPE__ & ": INFO: Event sccessfully triggered ***");
log("*** " & __SCOPE__ & ": INFO: Event could not be triggered ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
[] tc_wait.timeout {
log("*** " & __SCOPE__ & ": INFO: Event could not be triggered in time ***");
f_selfOrClientSyncAndVerdict("error", e_timeout);
}
[else] { // Shortcut defaults
repeat;
}
}
}
} // End of group utFunctions
group rrxFunctions {
* @desc Receive frames via the radio link and check that all expected frames are sent with
* the requested Tx power and inter-packet spacing on the chosen channel
* @param p_tOff Requested Toff value
* @param p_expectedTxPower Expected Tx send power value
* @param p_checkPower If true, the power of the received signal will be checked
function f_rRX_ExpectedFramesSent(float p_tOff,
integer p_expectedTxPower,
Channel p_channel,
boolean p_checkPower := true) runs on ItsRrxDcc {
template integer m_expectedPowerWithDelta := ((p_expectedTxPower - PIXIT_POWER_DELTA) .. (p_expectedTxPower + PIXIT_POWER_DELTA));
timer tc_testDuration := f_getTestDuration(p_tOff) + p_tOff;
timer tc_tOffCheck := 2.0 * p_tOff;
tc_testDuration.start;
alt {
[] rrxPort.receive(m_rrxInd(p_channel, ?)) -> value v_rrxInd {
v_frameReceivedCount := v_frameReceivedCount + 1;
tepelmann
committed
if(p_checkPower and match(v_rrxInd.measuredPower, m_expectedPowerWithDelta))
{ log("*** function " & __SCOPE__ & ": FAIL: The measured Tx power is different to the requested Tx power. ***");
setverdict(fail)}
tc_tOffCheck.start;
alt {
[] rrxPort.receive(m_rrxInd(p_channel, ?)) -> value v_rrxInd {
v_frameReceivedCount := v_frameReceivedCount + 1;
tepelmann
committed
if(p_checkPower and match(v_rrxInd.measuredPower, m_expectedPowerWithDelta))
{ log("*** function " & __SCOPE__ & ": FAIL: The measured Tx power is different to the requested Tx power. ***");
{ log("*** function " & __SCOPE__ & ": FAIL: The inter-packet spacing time interval is smaller than the minimum allowed. ***");
setverdict(fail)}
tc_tOffCheck.start;
repeat;
}
[] tc_tOffCheck.timeout {
tc_tOffCheck.start;
repeat;
}
[] tc_testDuration.timeout
{setverdict(pass)}
}
}
[] tc_testDuration.timeout {
log("*** function " & __SCOPE__ & ": FAIL: No packet received on the radio interface. ***");
setverdict(fail)
}
}
checkPort.send(v_frameReceivedCount);
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_rRX_ExpectedFramesSent
/**
* @desc Receive frames via the radio link and check that all expected frames are sent with
* the requested Tx power and inter-packet spacing on the chosen channels
* @param p_tOff Requested Toff value
* @param p_expectedTxPower Expected Tx send power value
* @param p_channel_1 Channel on which the frame has been sent
* @param p_channel_2 Channel on which the frame has been sent
* @param p_checkPower If true, the power of the received signal will be checked
*/
function f_rRX_ExpectedFramesSentOn2Channels(float p_tOff,
tepelmann
committed
integer p_expectedTxPower,
Channel p_channel_1,
Channel p_channel_2,
boolean p_checkPower := true) runs on ItsRrxDcc {
var RrxInd v_rrxInd;
var integer v_frameReceivedCount := 0;
var boolean v_channel_1, v_channel_2 := false;
template integer m_expectedPowerWithDelta := ((p_expectedTxPower - PIXIT_POWER_DELTA) .. (p_expectedTxPower + PIXIT_POWER_DELTA));
timer tc_testDuration := f_getTestDuration(p_tOff) + p_tOff;
timer tc_tOffCheck := 2.0 * p_tOff;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
tc_testDuration.start;
alt {
[] rrxPort.receive(m_rrxInd((p_channel_1, p_channel_2), ?)) -> value v_rrxInd {
v_frameReceivedCount := v_frameReceivedCount + 1;
select (v_rrxInd.channel) {
case (p_channel_1) {
v_channel_1 := true;
}
case (p_channel_2) {
v_channel_2 := true;
}
}
tepelmann
committed
if(p_checkPower and match(v_rrxInd.measuredPower, m_expectedPowerWithDelta))
{ log("*** function " & __SCOPE__ & ": FAIL: The measured Tx power is different to the requested Tx power. ***");
setverdict(fail)}
tc_tOffCheck.start;
alt {
[] rrxPort.receive(m_rrxInd((p_channel_1, p_channel_2), ?)) -> value v_rrxInd {
v_frameReceivedCount := v_frameReceivedCount + 1;
select (v_rrxInd.channel) {
case (p_channel_1) {
v_channel_1 := true;
}
case (p_channel_2) {
v_channel_2 := true;
}
}
tepelmann
committed
if(p_checkPower and match(v_rrxInd.measuredPower, m_expectedPowerWithDelta))
{ log("*** function " & __SCOPE__ & ": FAIL: The measured Tx power is different to the requested Tx power. ***");
setverdict(fail)}
if(tc_tOffCheck.read < p_tOff)
{ log("*** function " & __SCOPE__ & ": FAIL: The inter-packet spacing time interval is smaller than the minimum allowed. ***");
setverdict(fail)}
tc_tOffCheck.start;
repeat;
}
[] tc_tOffCheck.timeout {
tc_tOffCheck.start;
repeat;
}
[] tc_testDuration.timeout {
if(not v_channel_1 and not v_channel_2) {
log("*** function " & __SCOPE__ & ": FAIL: All frames have been sent via the two channel. ***");
setverdict(fail);
}
else {
setverdict(pass);
}
}
}
}
[] tc_testDuration.timeout {
log("*** function " & __SCOPE__ & ": FAIL: No packet received on the radio interface. ***");
setverdict(fail)
}
}
checkPort.send(v_frameReceivedCount);
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_rRX_ExpectedFramesSent
/**
* @desc Check that no frames are received via the radio link
* @param p_tOff Requested Toff value
*/
function f_rRX_NoFramesSent(float p_tOff) runs on ItsRrxDcc {
timer tc_testDuration := f_getTestDuration(p_tOff);
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
tc_testDuration.start;
alt {
[] rrxPort.receive(m_rrxInd(?, ?)) {
log("*** function " & __SCOPE__ & ": FAIL: A radio frame was received when none was expected. ***");
setverdict(fail)
}
[] tc_testDuration.timeout {
setverdict(pass)
}
}
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_rRX_NoFramesSent
} // End of group rrxFunctions
/**
* @desc IN SAP functions
*/
group inFuntions {
/**
* @desc Request sending of frames via the IN_SAP and check that all frames are
* reported as sent with the requested Tx power
* @param p_tOff Requested Toff value
* @param p_requestedTxPower Requested Tx send power value
* @param p_dCCProfileIdentifier Requested DCC profile
* @param p_channel Channel on which the frame has been sent
*/
integer p_requestedTxPower,
integer p_dCCProfileIdentifier,
Channel p_channel) runs on ItsInDcc {
var integer v_commandReference := float2int(int2float(c_maxCommandReference)*rnd());
var InSta v_inSta;
var integer v_frameRequestedCount := 1;
var integer v_frameAcknowledgedCount := 0;
timer tc_tOff := p_tOff;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
tc_testDuration.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
true)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
if(v_inSta.achievedSendPower != p_requestedTxPower)
{ log("*** function " & __SCOPE__ & ": FAIL: The achieved Tx power is different to the requested Tx power. ***");
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
setverdict(fail)}
tc_tOff.start;
repeat;
}
[] tc_tOff.timeout {
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
v_frameRequestedCount := v_frameRequestedCount + 1;
repeat;
}
[] tc_testDuration.timeout {
if(v_frameAcknowledgedCount == v_frameRequestedCount)
{setverdict(pass)}
else
{tc_tOff.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
true)) -> value v_inSta {
tc_tOff.stop;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
if(v_inSta.achievedSendPower != p_requestedTxPower)
{ log("*** function " & __SCOPE__ & ": FAIL: The achieved Tx power is different to the requested Tx power. ***");
setverdict(fail)}
else if(v_frameAcknowledgedCount != v_frameRequestedCount)
{ log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
setverdict(fail)}
else
{setverdict(pass)}
}
[] tc_tOff.timeout {
log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_iN_AllRequestedFramesSent
/**
* @desc Request sending of frames via the IN_SAP and check that all frames are
* reported as sent with reduced Tx power being lower than the maximum allowed Tx power
* @param p_tOff Requested Toff value
* @param p_requestedTxPower Requested Tx send power value
* @param p_dCCProfileIdentifier Requested DCC profile
* @param p_channel Channel on which the frame has been sent
* @param p_maxTxPower Maximum allowed Tx power value
*/
integer p_requestedTxPower,
integer p_dCCProfileIdentifier,
Channel p_channel,
integer p_maxTxPower) runs on ItsInDcc {
var integer v_commandReference := float2int(int2float(c_maxCommandReference)*rnd());
var InSta v_inSta;
var integer v_frameRequestedCount := 1;
var integer v_frameAcknowledgedCount := 0;
timer tc_tOff := p_tOff;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
tc_testDuration.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
true)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
if(v_inSta.achievedSendPower >= p_maxTxPower)
{ log("*** function " & __SCOPE__ & ": FAIL: The achieved Tx power is higher than the maximum allowed Tx power. ***");
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
setverdict(fail)}
tc_tOff.start;
repeat;
}
[] tc_tOff.timeout {
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
v_frameRequestedCount := v_frameRequestedCount + 1;
repeat;
}
[] tc_testDuration.timeout {
if(v_frameAcknowledgedCount == v_frameRequestedCount)
{setverdict(pass)}
else
{tc_tOff.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
true)) -> value v_inSta {
tc_tOff.stop;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
if(v_inSta.achievedSendPower >= p_maxTxPower)
{ log("*** function " & __SCOPE__ & ": FAIL: The achieved Tx power is higher than the maximum allowed Tx power. ***");
setverdict(fail)}
else if(v_frameAcknowledgedCount != v_frameRequestedCount)
{ log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
setverdict(fail)}
else
{setverdict(pass)}
}
[] tc_tOff.timeout {
log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_iN_FramesSentTxPowerReduction
/**
* @desc Request sending of frames via the IN_SAP and check that all frames are dropped
* @param p_tOff Requested Toff value
* @param p_requestedTxPower Requested Tx send power value
* @param p_dCCProfileIdentifier Requested DCC profile
*/
integer p_requestedTxPower,
integer p_dCCProfileIdentifier) runs on ItsInDcc {
var integer v_commandReference := float2int(int2float(c_maxCommandReference)*rnd());
var InSta v_inSta;
timer tc_tOff := p_tOff;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
tc_testDuration.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
?,
?)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
if(v_inSta.transmissionSuccessStatus)
{ log("*** function " & __SCOPE__ & ": FAIL: A frame that should have been dropped is achnowledged as successfully sent. ***");
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
setverdict(fail)}
tc_tOff.start;
repeat;
}
[] tc_tOff.timeout {
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
repeat;
}
[] tc_testDuration.timeout {
setverdict(pass)
}
}
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
} // End of function f_iN_AllRequestedFramesDropped
/**
* @desc Request sending of frames via the IN_SAP and check that some frames are
* reported as sent and some reported as dropped
* @param p_tOff Requested Toff value
* @param p_requestedTxPower Requested Tx send power value
* @param p_dCCProfileIdentifier Requested DCC profile
* @param p_channel Channel on which the frame has been sent
*/
integer p_requestedTxPower,
integer p_dCCProfileIdentifier,
Channel p_channel) runs on ItsInDcc {
var integer v_commandReference := float2int(int2float(c_maxCommandReference)*rnd());
var InSta v_inSta;
var integer v_frameRequestedCount := 1;
var integer v_frameAcknowledgedCount := 0;
var integer v_frameSentCount := 0;
var boolean v_frameSent, v_frameDropped := false;
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
timer tc_tOff := p_tOff;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
tc_testDuration.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
true)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
v_frameSentCount := v_frameSentCount + 1;
v_frameSent := true;
tc_tOff.start;
repeat;
}
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
false)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
v_frameDropped := true;
tc_tOff.start;
repeat;
}
[] tc_tOff.timeout {
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
v_frameRequestedCount := v_frameRequestedCount + 1;
repeat;
}
[] tc_testDuration.timeout {
if(not v_frameSent and v_frameDropped)
{ log("*** function " & __SCOPE__ & ": FAIL: There are either no sent frames or no dropped frames acknowledged. ***");
setverdict(fail)}
if(v_frameAcknowledgedCount == v_frameRequestedCount)
{setverdict(pass)}
else
{tc_tOff.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel,
?)) -> value v_inSta {
tc_tOff.stop;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
if(v_inSta.transmissionSuccessStatus)
{ v_frameSentCount := v_frameSentCount + 1;}
if(v_frameAcknowledgedCount != v_frameRequestedCount)
{ log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
setverdict(fail)}
else
{setverdict(pass)}
}
[] tc_tOff.timeout {
log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_iN_SomeRequestedFramesSent
/**
* @desc Request sending of frames via the IN_SAP and check that all frames are
* reported as sent via two different channels
* @param p_tOff Requested Toff value
* @param p_requestedTxPower Requested Tx send power value
* @param p_dCCProfileIdentifier Requested DCC profile
* @param p_channel_1 First channel on which the frame has been sent
* @param p_channel_2 Second channel on which the frame has been sent
*/
function f_iN_AllRequestedFramesSentOn2Channels(float p_tOff,
integer p_requestedTxPower,
integer p_dCCProfileIdentifier,
Channel p_channel_1,
Channel p_channel_2) runs on ItsInDcc {
var integer v_commandReference := float2int(int2float(c_maxCommandReference)*rnd());
var InSta v_inSta;
var integer v_frameRequestedCount := 1;
var integer v_frameAcknowledgedCount := 0;
var boolean v_channel_1, v_channel_2 := false;
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
timer tc_tOff := p_tOff;
f_selfOrClientSyncAndVerdict(c_prDone, e_success);
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
tc_testDuration.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel_1,
true)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
v_channel_1 := true;
tc_tOff.start;
repeat;
}
[] inPort.receive(mw_In_Status(v_commandReference,
p_channel_2,
true)) -> value v_inSta {
v_commandReference := (v_commandReference + 1) mod c_maxCommandReference;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
v_channel_2 := true;
tc_tOff.start;
repeat;
}
[] tc_tOff.timeout {
inPort.send(m_In_Request(v_commandReference,
PIXIT_REFERENCE_BURST,
p_requestedTxPower,
p_dCCProfileIdentifier));
v_frameRequestedCount := v_frameRequestedCount + 1;
repeat;
}
[] tc_testDuration.timeout {
if(not v_channel_1 and not v_channel_2)
{ log("*** function " & __SCOPE__ & ": FAIL: All frames have been sent via the two channel. ***");
setverdict(fail)}
if(v_frameAcknowledgedCount == v_frameRequestedCount)
{setverdict(pass)}
else
{tc_tOff.start;
alt {
[] inPort.receive(mw_In_Status(v_commandReference,
?,
true)) -> value v_inSta {
tc_tOff.stop;
v_frameAcknowledgedCount := v_frameAcknowledgedCount + 1;
if(v_frameAcknowledgedCount != v_frameRequestedCount)
{ log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
setverdict(fail)}
else
{setverdict(pass)}
}
[] tc_tOff.timeout {
log("*** function " & __SCOPE__ & ": FAIL: Not all requested frames have been acknowledged. ***");
f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
} // End of function f_iN_AllRequestedFramesSentOn2Channels
} // End of group inFunctions
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
group checkFunctions {
function f_checkExpectedFrames() runs on ItsDccMts return FncRetCode {
var FncRetCode v_ret := e_success;
var integer v_framesIn := -1;
var integer v_framesRxx := -1;
timer t_check := PX_TSYNC_TIME_LIMIT;
t_check.start;
alt {
[v_framesIn==-1] checkPort.receive(integer:?) from vc_itsInDcc -> value v_framesIn {
t_check.stop;
if (v_framesRxx != -1) {
t_check.start;
repeat;
}
}
[v_framesRxx==-1] checkPort.receive(integer:?) from vc_itsRrxDcc -> value v_framesRxx {
t_check.stop;
if (v_framesIn != -1) {
t_check.start;
repeat;
}
}
[] t_check.timeout {
log("**** " & __SCOPE__ & ": Timeout while waiting for number of frames indication ****") ;
return e_error;
}
}
if (v_framesIn != v_framesRxx) {
v_ret := e_error;
}
return v_ret;
} // End of function f_checkExpectedFrames
} // End of group checkFunctions
group auxiliaryFunction {
/**
* @desc Returns the test duration based on the number of requested frames
* @param p_tOff Requested Toff value
* @return Test duration
*/
function f_getTestDuration(float p_tOff) return float {
return p_tOff * int2float(PIXIT_NUMBER_OF_FRAMES + 1);
}
/**
* @desc Retrieves the string representation of a ChannelState.
* @param The channel state enumerated.
* @return The string representation.
*/
function f_enum2str(ChannelState p_state) return charstring {
select(p_state) {
case (relaxed) {
return "relaxed";
}
case (active) {
return "active";
}
case (restrictive) {
return "restrictive";
}
case else {
return "unknown channel state";
}
}
}
group externalFunction {
/**
* @desc Returns the string representation of the float value
* @param p_float The float value
* @return The string representation of the float value
*/
external function fx_float2str(float p_float) return charstring;
}