This is an automated email from the ASF dual-hosted git repository. jerpelea pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit c612c068e1f70797ea515f351fcbe3da2fdaec36 Author: Xiang Xiao <[email protected]> AuthorDate: Sun Dec 27 23:02:13 2020 +0800 bt_uart_shim: Setup pollfd with file* correctly Signed-off-by: Xiang Xiao <[email protected]> --- drivers/wireless/bluetooth/bt_uart_shim.c | 37 ++++++++----------------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/drivers/wireless/bluetooth/bt_uart_shim.c b/drivers/wireless/bluetooth/bt_uart_shim.c index 24c5797..8f1cb15 100644 --- a/drivers/wireless/bluetooth/bt_uart_shim.c +++ b/drivers/wireless/bluetooth/bt_uart_shim.c @@ -74,14 +74,10 @@ struct hciuart_state_s btuart_rxcallback_t callback; /* Rx callback function */ FAR void *arg; /* Rx callback argument */ - int h; /* File handle to serial device */ - struct file f; /* File structure, detached */ - - sem_t dready; /* Semaphore used by the poll operation */ + struct file f; /* File structure */ bool enabled; /* Flag indicating that reception is enabled */ int serialmontask; /* The receive serial octets task handle */ - volatile struct pollfd p; /* Polling structure for serial monitor task */ }; struct hciuart_config_s @@ -326,40 +322,35 @@ static int hcicollecttask(int argc, FAR char **argv) { FAR struct hciuart_config_s *n; FAR struct hciuart_state_s *s; + struct pollfd p; n = (FAR struct hciuart_config_s *) ((uintptr_t)strtoul(argv[1], NULL, 0)); s = &n->state; - file_poll(&s->f, (struct pollfd *)&s->p, true); + /* Put materials into poll structure */ + + p.ptr = &s->f; + p.events = POLLIN | POLLFILE; for (; ; ) { /* Wait for data to arrive */ - int ret = nxsem_wait(s->p.sem); + int ret = nx_poll(&p, 1, -1); if (ret < 0) { wlwarn("Poll interrupted %d\n", ret); continue; } - /* These flags can change dynamically as new events occur, so - * snapshot. - */ - - irqstate_t flags = enter_critical_section(); - uint32_t tevents = s->p.revents; - s->p.revents = 0; - leave_critical_section(flags); - - wlinfo("Poll completed %d\n", tevents); + wlinfo("Poll completed %d\n", p.revents); /* Given the nature of file_poll, there are multiple reasons why * we might be here, so make sure we only consider the read. */ - if (tevents & POLLIN) + if (p.revents & POLLIN) { if (!s->enabled) { @@ -442,16 +433,6 @@ FAR struct btuart_lowerhalf_s *bt_uart_shim_getdevice(FAR const char *path) n->lower.write = hciuart_write; n->lower.rxdrain = hciuart_rxdrain; - /* Put materials into poll structure */ - - nxsem_set_protocol(&s->dready, SEM_PRIO_NONE); - - s->p.fd = s->h; - s->p.events = POLLIN; - s->p.sem = &s->dready; - - s->enabled = true; - /* Create the monitor thread */ snprintf(arg1, 16, "%p", n);
