lib/CTRL: Improve and add more helper templates and functions

Change-Id: Icc6ac860ebd6a719f9e0cb5c5345fb4d39a864ce
This commit is contained in:
Pau Espin 2019-06-10 21:01:30 +02:00 committed by laforge
parent 5a2d743e5d
commit 579cd7a406
2 changed files with 75 additions and 2 deletions

View File

@ -71,10 +71,16 @@ module Osmocom_CTRL_Functions {
}
}
/* send a TRAP */
function f_ctrl_trap(IPA_CTRL_PT pt, CtrlVariable variable, CtrlValue val) {
pt.send(ts_CtrlMsgTrap(variable, val));
}
/* Expect a matching TRAP */
function f_ctrl_exp_trap(IPA_CTRL_PT pt, template CtrlVariable variable,
template CtrlValue val := ?) return CtrlValue {
timer T := 2.0;
template CtrlValue val := ?, float timeout_val := 2.0)
return CtrlValue {
timer T := timeout_val;
var CtrlMessage rx;
T.start;
alt {
@ -88,6 +94,29 @@ module Osmocom_CTRL_Functions {
return rx.trap.val;
}
/* Expect a matching SET, optionally answer */
function f_ctrl_exp_set(IPA_CTRL_PT pt, template CtrlVariable variable,
template CtrlValue val := ?,
template (omit) CtrlValue rsp := omit,
float timeout_val := 2.0)
return CtrlValue {
timer T := timeout_val;
var CtrlMessage rx;
T.start;
alt {
[] pt.receive(tr_CtrlMsgSet(?, variable, val)) -> value rx {
if (ispresent(rsp)) {
pt.send(ts_CtrlMsgSetRepl(rx.cmd.id, valueof(variable), valueof(rsp)));
}
}
[] T.timeout {
setverdict(fail, "Timeout waiting for SET ", variable);
mtc.stop;
}
}
return rx.cmd.val;
}
/* Expect a matching GET result */
function f_ctrl_get_exp(IPA_CTRL_PT pt, CtrlVariable variable, template CtrlValue exp) {
var charstring ctrl_resp;

View File

@ -94,6 +94,50 @@ template CtrlMessage ts_CtrlMsgSet(CtrlId id, CtrlVariable variable, CtrlValue v
}
}
template CtrlMessage ts_CtrlMsgTrap(CtrlVariable variable, template (omit) CtrlValue val := omit) := {
trap := {
variable := variable,
val := val
}
}
template CtrlMessage ts_CtrlMsgGetRepl(CtrlId id, CtrlVariable variable, CtrlValue val) := {
resp := {
verb := "GET_REPLY",
id := id,
variable := variable,
val := val
}
};
template CtrlMessage ts_CtrlMsgSetRepl(CtrlId id, CtrlVariable variable, CtrlValue val) := {
resp := {
verb := "SET_REPLY",
id := id,
variable := variable,
val := val
}
}
template CtrlMessage tr_CtrlMsgGet(template CtrlId id, template CtrlVariable variable := ?) := {
cmd := {
verb := "GET",
id := id,
variable := variable,
val := ?
}
}
template CtrlMessage tr_CtrlMsgSet(template CtrlId id, template CtrlVariable variable := ?,
template CtrlValue val := ?) := {
cmd := {
verb := "SET",
id := id,
variable := variable,
val := val
}
}
template CtrlMessage tr_CtrlMsgGetRepl(template CtrlId id, template CtrlVariable variable := ?) := {
resp := {
verb := "GET_REPLY",