112 lines
3.1 KiB
Plaintext
112 lines
3.1 KiB
Plaintext
[[scripting]]
|
|
== Scripting using Lua
|
|
|
|
The mobile application can be extended using the
|
|
https://www.lua.org/manual/5.3/[lua5.3 language].
|
|
To use the scripting facility a script needs to be
|
|
configured through the VTY interface and will be
|
|
associated to a Mobile Station (MS). The script will
|
|
then be able to interact with the specific MS.
|
|
|
|
An event based programming model is to be used. This
|
|
means that once the script has been loaded it should
|
|
register to the wanted events, configure timers and
|
|
return. When an event occurs the registered event
|
|
handler will be executed.
|
|
|
|
The following describes the exported runtime services
|
|
to be used in the script.
|
|
|
|
=== Logging
|
|
|
|
The logging functions allow to generate log messages
|
|
for different levels. The log implementatiom is using
|
|
the standard Osmocom logging framework which allows to
|
|
have multiple log targets, e.g. syslog, file or through
|
|
the VTY.
|
|
|
|
|========
|
|
|Code |Return | Explanation
|
|
|print(...) |void | Print a message with log level 'debug'
|
|
|log_debug(...) |void | Print a message with log level 'debug'
|
|
|log_notice(...) |void | Print a message with log level 'notice'
|
|
|log_error(...) |void | Print a message with log level 'error'
|
|
|log_fatal(...) |void | Print a message with log level 'fatal'
|
|
|========
|
|
|
|
==== Examples
|
|
|
|
----
|
|
Code:
|
|
print("Log level 'debug'")
|
|
log_debug("Log level 'debug'")
|
|
log_notice("Log level 'notice'")
|
|
log_error("Log level 'error'")
|
|
log_fatal("Log level 'fatal'")
|
|
|
|
Output:
|
|
\<0011> @script.lua:1 Log level 'debug'
|
|
\<0011> @script.lua:2 Log level 'debug'
|
|
\<0011> @script.lua:3 Log level 'notice'
|
|
\<0011> @script.lua:4 Log level 'error'
|
|
\<0011> @script.lua:5 Log level 'fatal'
|
|
|
|
----
|
|
|
|
=== Timer class
|
|
|
|
The timer allows to invoke a function once after the requested
|
|
timeout. The timer creation function will return immediately and
|
|
the callback will be called after the timeout and when no other
|
|
lua code is executing. The _osmo.timeout_ function should be used
|
|
to create a new time, a running timer can be canneled using the _cancel_
|
|
method.
|
|
|
|
|========
|
|
|Code |Return |Explanation
|
|
|osmo.timeout(timeout, cb)|A new timer|Create a new non-recurring timer. Timeout should be in rounded seconds and cb should be a function.
|
|
|timer.cancel() |Void |Cancel the timer, the callback will not be called.
|
|
|========
|
|
|
|
==== Examples
|
|
|
|
----
|
|
Code:
|
|
local timer = osmo.timeout(timeout_in_seconds, call_back)
|
|
timer:cancel()
|
|
----
|
|
|
|
----
|
|
Code:
|
|
local timer = osmo.timeout(3, function()
|
|
print("Timeout passed")
|
|
end)
|
|
print("Configured")
|
|
|
|
Output:
|
|
\<0011> @script.lua:4 Configured
|
|
\<0011> @script.lua:2 Timeout passed
|
|
----
|
|
|
|
=== MS class
|
|
|
|
The MS singletong provides access to the Mobile Station configuration
|
|
the script is associated with. This includes runtime information like
|
|
the IMSI, IMEI or functions like start/stop.
|
|
|
|
|========
|
|
|Code |Return |Explanation
|
|
|osmo.ms().imsi() |string |The IMSI. It might be invalid in case it has not been read from SIM card yet
|
|
|osmo.ms().imei() |string |The configured IMEI
|
|
|========
|
|
==== Examples
|
|
|
|
-----
|
|
Code:
|
|
local ms = osmo.ms()
|
|
print(ms.imei(), ms.imsi())
|
|
|
|
Output:
|
|
\<0011> @script.lua:2 126000000000000
|
|
-----
|