Skip to content

Commit 4d99c69

Browse files
bjarki-andreasenfabiobaltieri
authored andcommitted
modem: backend: tty: Implement transmit idle event
Implement transmit idle notification for TTY backend. Since TTY has an "infinite" transmit buffer, we invoke transmit idle immediately after writing the data to the TTY file. The test suite for the TTY backend has been updated to match the new behavior. Signed-off-by: Bjarki Arge Andreasen <[email protected]>
1 parent 8c6a9ee commit 4d99c69

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

subsys/modem/backends/modem_backend_tty.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,11 @@ static int modem_backend_tty_open(void *data)
7373
static int modem_backend_tty_transmit(void *data, const uint8_t *buf, size_t size)
7474
{
7575
struct modem_backend_tty *backend = (struct modem_backend_tty *)data;
76+
int ret;
7677

77-
return write(backend->tty_fd, buf, size);
78+
ret = write(backend->tty_fd, buf, size);
79+
modem_pipe_notify_transmit_idle(&backend->pipe);
80+
return ret;
7881
}
7982

8083
static int modem_backend_tty_receive(void *data, uint8_t *buf, size_t size)

tests/subsys/modem/backends/tty/src/main.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
#define TEST_MODEM_BACKEND_TTY_PIPE_EVENT_OPENED_BIT (0)
2424
#define TEST_MODEM_BACKEND_TTY_PIPE_EVENT_RRDY_BIT (1)
25-
#define TEST_MODEM_BACKEND_TTY_PIPE_EVENT_CLOSED_BIT (2)
25+
#define TEST_MODEM_BACKEND_TTY_PIPE_EVENT_TIDLE_BIT (2)
26+
#define TEST_MODEM_BACKEND_TTY_PIPE_EVENT_CLOSED_BIT (3)
2627

2728
#define TEST_MODEM_BACKEND_TTY_OP_DELAY (K_MSEC(1000))
2829

@@ -72,6 +73,10 @@ static void modem_pipe_callback_handler(struct modem_pipe *pipe, enum modem_pipe
7273
atomic_set_bit(&tty_pipe_events, TEST_MODEM_BACKEND_TTY_PIPE_EVENT_RRDY_BIT);
7374
break;
7475

76+
case MODEM_PIPE_EVENT_TRANSMIT_IDLE:
77+
atomic_set_bit(&tty_pipe_events, TEST_MODEM_BACKEND_TTY_PIPE_EVENT_TIDLE_BIT);
78+
break;
79+
7580
case MODEM_PIPE_EVENT_CLOSED:
7681
atomic_set_bit(&tty_pipe_events, TEST_MODEM_BACKEND_TTY_PIPE_EVENT_CLOSED_BIT);
7782
break;
@@ -122,9 +127,13 @@ static void test_modem_backend_tty_teardown(void *f)
122127
/*************************************************************************************************/
123128
ZTEST(modem_backend_tty_suite, test_close_open)
124129
{
130+
bool result;
131+
125132
zassert_ok(modem_pipe_close(tty_pipe), "Failed to close pipe");
126133
zassert_ok(modem_pipe_close(tty_pipe), "Pipe should already be closed");
127134
zassert_ok(modem_pipe_open(tty_pipe), "Failed to open pipe");
135+
result = atomic_test_bit(&tty_pipe_events, TEST_MODEM_BACKEND_TTY_PIPE_EVENT_TIDLE_BIT);
136+
zassert_true(result, "Transmit idle event should be set");
128137
zassert_ok(modem_pipe_open(tty_pipe), "Pipe should already be open");
129138
}
130139

@@ -172,12 +181,19 @@ ZTEST(modem_backend_tty_suite, test_transmit)
172181
{
173182
int ret;
174183
char msg[] = "Test me buddy 2";
184+
bool result;
185+
186+
result = atomic_test_bit(&tty_pipe_events, TEST_MODEM_BACKEND_TTY_PIPE_EVENT_TIDLE_BIT);
187+
zassert_false(result, "Transmit idle event should not be set");
175188

176189
ret = modem_pipe_transmit(tty_pipe, msg, sizeof(msg));
177190
zassert_true(ret == sizeof(msg), "Failed to transmit using pipe");
178191

179192
k_sleep(TEST_MODEM_BACKEND_TTY_OP_DELAY);
180193

194+
result = atomic_test_bit(&tty_pipe_events, TEST_MODEM_BACKEND_TTY_PIPE_EVENT_TIDLE_BIT);
195+
zassert_true(result, "Transmit idle event should be set");
196+
181197
ret = read(primary_fd, buffer1, sizeof(buffer1));
182198
zassert_true(ret == sizeof(msg), "Read incorrect number of bytes");
183199
ret = memcmp(msg, buffer1, sizeof(msg));

0 commit comments

Comments
 (0)