mirror of https://gerrit.osmocom.org/libosmocore
soft_uart: demonstrate a problem with osmo_soft_uart_tx_ubits()
As can be seen, pulling a small number of bits at a time (smaller than a single UART frame would fit into) results in calling the .tx_cb() with a msgb having no room at all, and thus pulling the stop bits instead of the actual data. Change-Id: Icfee378f0fdc5e32fe9ce0afab5f75bc278653a9 Related: OS#4396
This commit is contained in:
parent
0d78a00b9f
commit
dab6629f1c
|
@ -305,10 +305,46 @@ static void test_tx_rx(void)
|
|||
osmo_soft_uart_free(suart);
|
||||
}
|
||||
|
||||
static void test_tx_rx_pull_n(unsigned int n)
|
||||
{
|
||||
struct osmo_soft_uart *suart;
|
||||
ubit_t tx_buf[32];
|
||||
int rc;
|
||||
|
||||
suart = osmo_soft_uart_alloc(NULL, __func__, &suart_test_default_cfg);
|
||||
OSMO_ASSERT(suart != NULL);
|
||||
|
||||
osmo_soft_uart_set_tx(suart, true);
|
||||
osmo_soft_uart_set_rx(suart, true);
|
||||
|
||||
g_tx_cb_cfg.data = (void *)"\x55";
|
||||
g_tx_cb_cfg.data_len = 1;
|
||||
|
||||
printf("======== %s(): pulling %lu bits (%u at a time)\n", __func__, sizeof(tx_buf), n);
|
||||
for (unsigned int i = 0; i < sizeof(tx_buf); i += n) {
|
||||
rc = osmo_soft_uart_tx_ubits(suart, &tx_buf[i], n);
|
||||
OSMO_ASSERT(rc == 0);
|
||||
}
|
||||
printf("%s\n", osmo_ubit_dump(&tx_buf[0], sizeof(tx_buf)));
|
||||
|
||||
printf("======== %s(): feeding %lu bits into the receiver\n", __func__, sizeof(tx_buf));
|
||||
rc = osmo_soft_uart_rx_ubits(suart, &tx_buf[0], sizeof(tx_buf));
|
||||
OSMO_ASSERT(rc == 0);
|
||||
osmo_soft_uart_flush_rx(suart);
|
||||
|
||||
osmo_soft_uart_free(suart);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
test_rx();
|
||||
test_tx_rx();
|
||||
|
||||
/* test pulling small number of bits at a time */
|
||||
test_tx_rx_pull_n(1);
|
||||
test_tx_rx_pull_n(2);
|
||||
test_tx_rx_pull_n(4);
|
||||
test_tx_rx_pull_n(8);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -171,3 +171,75 @@ suart_rx_cb(flags=00): 10 20 00 00
|
|||
test_tx_rx_exec_one(n_bits_total=32): 00000101 00000011 00000001 00000001
|
||||
suart_tx_cb(len=0/4):
|
||||
test_tx_rx_exec_one(n_bits_total=32): 11111111 11111111 11111111 11111111
|
||||
======== test_tx_rx_pull_n(): pulling 32 bits (1 at a time)
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
11111111111111111111111111111111
|
||||
======== test_tx_rx_pull_n(): feeding 32 bits into the receiver
|
||||
======== test_tx_rx_pull_n(): pulling 32 bits (2 at a time)
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
11111111111111111111111111111111
|
||||
======== test_tx_rx_pull_n(): feeding 32 bits into the receiver
|
||||
======== test_tx_rx_pull_n(): pulling 32 bits (4 at a time)
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
11111111111111111111111111111111
|
||||
======== test_tx_rx_pull_n(): feeding 32 bits into the receiver
|
||||
======== test_tx_rx_pull_n(): pulling 32 bits (8 at a time)
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
suart_tx_cb(len=0/0):
|
||||
11111111111111111111111111111111
|
||||
======== test_tx_rx_pull_n(): feeding 32 bits into the receiver
|
||||
|
|
Loading…
Reference in New Issue