Update script API

This commit is contained in:
Martin Lund 2024-04-28 14:46:41 +02:00
parent 9bc93991e7
commit 33eae0c30d
3 changed files with 59 additions and 46 deletions

View file

@ -371,63 +371,71 @@ Tio suppots Lua scripting to easily automate interaction with the tty device.
In addition to the Lua API tio makes the following functions available: In addition to the Lua API tio makes the following functions available:
``` ```
expect(string, timeout) expect(string, timeout)
Expect string - waits for string to match or timeout before continueing. Expect string - waits for string to match or timeout before continueing.
Supports regular expressions. Special characters must be escaped with '\\'.
Timeout is in milliseconds, defaults to 0 meaning it will wait forever.
Supports regular expressions. Special characters must be escaped with '\\'. Returns 1 on successful match, 0 on timeout, or -1 on error.
Timeout is in milliseconds, defaults to 0 meaning it will wait forever. On successful match it also returns the match string as second return value.
send(string) send(string)
Send string. Send string.
modem_send(file, protocol) Returns number of bytes written on success or -1 on error.
Send file using x/y-modem protocol.
Protocol can be any of XMODEM_1K, XMODEM_CRC, YMODEM. modem_send(file, protocol)
Send file using x/y-modem protocol.
tty_search() Protocol can be any of XMODEM_1K, XMODEM_CRC, YMODEM.
Search for serial devices.
Returns a table of number indexed tables, one for each serial device tty_search()
found. Each of these tables contains the serial device information accessible Search for serial devices.
via the following string indexed elements "path", "tid", "uptime", "driver",
"description".
Returns nil if no serial devices are found. Returns a table of number indexed tables, one for each serial device
found. Each of these tables contains the serial device information accessible
via the following string indexed elements "path", "tid", "uptime", "driver",
"description".
exit(code) Returns nil if no serial devices are found.
Exit with code.
high(line) read(size, timeout)
Set tty line high. Read from serial device. If timeout is 0 or not provided it will wait
forever until data is ready to read.
low(line) Returns number of bytes read on success, 0 on timeout, or -1 on error.
Set tty line low.
toggle(line) exit(code)
Toggle the tty line. Exit with exit code.
sleep(seconds) high(line)
Sleep for seconds. Set tty line high.
msleep(ms) low(line)
Sleep for milliseconds. Set tty line low.
config_high(line) toggle(line)
Set tty line state configuration to high. Toggle the tty line.
config_low(line) sleep(seconds)
Set tty line state configuration to low. Sleep for seconds.
apply_config() msleep(ms)
Apply tty line state configuration. Sleep for miliseconds.
Using the line state configuration API instead of high()/low() will config_high(line)
help to make the lines physically switch as simultaneously as possible. Set tty line state configuration to high.
This may solve timing issues on some platforms.
Note: Line can be any of DTR, RTS, CTS, DSR, CD, RI config_low(line)
Set tty line state configuration to low.
apply_config()
Apply tty line state configuration. Using the line state configuration
API instead of high()/low() will help to make the lines physically switch as
simultaneously as possible. This may solve timing issues on some platforms.
Note: Line can be any of DTR, RTS, CTS, DSR, CD, RI
``` ```
### 3.4 Configuration file ### 3.4 Configuration file

View file

@ -427,12 +427,15 @@ Expect string - waits for string to match or timeout before continueing.
Supports regular expressions. Special characters must be escaped with '\\\\'. Supports regular expressions. Special characters must be escaped with '\\\\'.
Timeout is in milliseconds, defaults to 0 meaning it will wait forever. Timeout is in milliseconds, defaults to 0 meaning it will wait forever.
Returns 1 on successful match, 0 on timeout, or -1 on invalid regular expression. Returns 1 on successful match, 0 on timeout, or -1 on error.
On successful match it also returns the match string as second return value. On successful match it also returns the match string as second return value.
.IP "\fBsend(string)" .IP "\fBsend(string)"
Send string. Send string.
Returns number of bytes written on success or -1 on error.
.IP "\fBmodem_send(file, protocol)" .IP "\fBmodem_send(file, protocol)"
Send file using x/y-modem protocol. Send file using x/y-modem protocol.
@ -448,6 +451,12 @@ following string indexed elements "path", "tid", "uptime", "driver",
Returns nil if no serial devices are found. Returns nil if no serial devices are found.
.IP "\fBread(size, timeout)"
Read from serial device. If timeout is 0 or not provided it will wait forever
until data is ready to read.
Returns number of bytes read on success, 0 on timeout, or -1 on error.
.IP "\fBexit(code)" .IP "\fBexit(code)"
Exit with exit code. Exit with exit code.
.IP "\fBhigh(line)" .IP "\fBhigh(line)"

View file

@ -211,10 +211,6 @@ static int send(lua_State *L)
} }
ret = write(device_fd, string, strlen(string)); ret = write(device_fd, string, strlen(string));
if (ret < 0)
{
tio_error_print("%s\n", strerror(errno));
}
lua_pushnumber(L, ret); lua_pushnumber(L, ret);
@ -281,7 +277,7 @@ static int read_string(lua_State *L)
char *buffer = malloc(size); char *buffer = malloc(size);
if (buffer == NULL) if (buffer == NULL)
{ {
ret = -3; // Read buffer allocation failed ret = -1; // Error
goto error; goto error;
} }
@ -293,12 +289,12 @@ static int read_string(lua_State *L)
ssize_t bytes_read = read_poll(device_fd, buffer, size, timeout); ssize_t bytes_read = read_poll(device_fd, buffer, size, timeout);
if (bytes_read < 0) if (bytes_read < 0)
{ {
ret = -1; // Read error ret = -1; // Error
goto error; goto error;
} }
else if (bytes_read == 0) else if (bytes_read == 0)
{ {
ret = -2; // Timeout ret = 0; // Timeout
goto error; goto error;
} }