I'm looking for a function in CAPL that provides the same functionality as the above-mentioned function.
This function is used to wait for confirmation about whether a Diagnostic request was successfully sent or not. The parameters passed in are the DiagRequest object and a specific wait-period. If no confirmation is received at the end of this period, then it returns an error code corresponding to timeout. Another error code refers to other reasons for failure as well, like, a protocol error or such.
My main issue with this established "TestWaitForDiagRequestSent" function, is that it can be used only within a Test Case structure, either implemented through a CAPL, XML or .NET test module in the Simulation Setup in CANoe. I need to implement the same functionality, without having to use Test Modules.
Could anyone suggest another CAPL function that does the same job minus the Test Modules, or suggest a practical means of achieving this?
Testmodules are allowed to "wait" during the simulation.
All other nodes or functionality is not allowed to wait because that would block the simulation. Basically the simulation calls a CAPL-function and waits until the functions returns. No events on the bus are handled until the function returns.
There is an event handler which is called when a diagnostic request has been sent successfully. So you would have to break up your code into sending of the request by using
diagSendRequest(req)
and reacting on a successful sent by using
on diagRequestSent <service>
{
...
}
For reacting on a request not den successfully, you could use a timer and set a global variable accordingly, or maybe a system variable.
Something similar to the following should do.
variables
{
timer requestTimer;
int sentSuccessfully;
}
void sendRequest()
{
....
sentSuccessfully = 0;
diagSendRequest(req);
setTimer(requestTimer, <timeout>);
}
on diagRequestSent ....
{
sentSuccessfully = 1;
cancelTimer(requestTimer);
}
on requestTimer
{
sentSuccessfully = -1;
}