examples/buttons: fix strange code in buttons_main
Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com>
This commit is contained in:
parent
020503576c
commit
9a85c405f5
@ -143,7 +143,7 @@ static bool g_button_daemon_started;
|
|||||||
static int button_daemon(int argc, char *argv[])
|
static int button_daemon(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_EXAMPLES_BUTTONS_POLL
|
#ifdef CONFIG_EXAMPLES_BUTTONS_POLL
|
||||||
struct pollfd fds[CONFIG_INPUT_BUTTONS_NPOLLWAITERS];
|
struct pollfd fds[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_EXAMPLES_BUTTONS_SIGNAL
|
#ifdef CONFIG_EXAMPLES_BUTTONS_SIGNAL
|
||||||
@ -232,7 +232,6 @@ static int button_daemon(int argc, char *argv[])
|
|||||||
|
|
||||||
#ifdef CONFIG_EXAMPLES_BUTTONS_POLL
|
#ifdef CONFIG_EXAMPLES_BUTTONS_POLL
|
||||||
bool timeout;
|
bool timeout;
|
||||||
bool pollin;
|
|
||||||
int nbytes;
|
int nbytes;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -256,17 +255,14 @@ static int button_daemon(int argc, char *argv[])
|
|||||||
#ifdef CONFIG_EXAMPLES_BUTTONS_POLL
|
#ifdef CONFIG_EXAMPLES_BUTTONS_POLL
|
||||||
/* Prepare the File Descriptor for poll */
|
/* Prepare the File Descriptor for poll */
|
||||||
|
|
||||||
memset(fds, 0,
|
memset(fds, 0, sizeof(fds));
|
||||||
sizeof(struct pollfd)*CONFIG_INPUT_BUTTONS_NPOLLWAITERS);
|
|
||||||
|
|
||||||
fds[0].fd = fd;
|
fds[0].fd = fd;
|
||||||
fds[0].events = POLLIN;
|
fds[0].events = POLLIN;
|
||||||
|
|
||||||
timeout = false;
|
timeout = false;
|
||||||
pollin = false;
|
|
||||||
|
|
||||||
ret = poll(fds, CONFIG_INPUT_BUTTONS_NPOLLWAITERS,
|
ret = poll(fds, 1, CONFIG_INPUT_BUTTONS_POLL_DELAY);
|
||||||
CONFIG_INPUT_BUTTONS_POLL_DELAY);
|
|
||||||
|
|
||||||
printf("\nbutton_daemon: poll returned: %d\n", ret);
|
printf("\nbutton_daemon: poll returned: %d\n", ret);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -283,57 +279,47 @@ static int button_daemon(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
printf("button_daemon: ERROR poll reported: %d\n", errno);
|
printf("button_daemon: ERROR poll reported: %d\n", errno);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
pollin = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In any event, read until the pipe is empty */
|
/* In any event, read until the pipe is empty */
|
||||||
|
|
||||||
for (i = 0; i < CONFIG_INPUT_BUTTONS_NPOLLWAITERS; i++)
|
do
|
||||||
{
|
{
|
||||||
do
|
nbytes = read(fds[0].fd, (void *)&sample, sizeof(btn_buttonset_t));
|
||||||
|
|
||||||
|
if (nbytes <= 0)
|
||||||
{
|
{
|
||||||
nbytes = read(fds[i].fd, (void *)&sample,
|
if (nbytes == 0 || errno == EAGAIN)
|
||||||
sizeof(btn_buttonset_t));
|
|
||||||
|
|
||||||
if (nbytes <= 0)
|
|
||||||
{
|
{
|
||||||
if (nbytes == 0 || errno == EAGAIN)
|
if ((fds[0].revents & POLLIN) != 0)
|
||||||
{
|
{
|
||||||
if ((fds[i].revents & POLLIN) != 0)
|
printf("button_daemon: ERROR no read data\n");
|
||||||
{
|
|
||||||
printf("button_daemon: ERROR no read data[%d]\n",
|
|
||||||
i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (errno != EINTR)
|
|
||||||
{
|
|
||||||
printf("button_daemon: read[%d] failed: %d\n", i,
|
|
||||||
errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
nbytes = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (timeout)
|
|
||||||
{
|
|
||||||
printf("button_daemon: ERROR? Poll timeout, "
|
|
||||||
"but data read[%d]\n", i);
|
|
||||||
printf(" (might just be a race "
|
|
||||||
"condition)\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (errno != EINTR)
|
||||||
|
{
|
||||||
|
printf("button_daemon: read failed: %d\n", errno);
|
||||||
|
}
|
||||||
|
|
||||||
/* Suppress error report if no read data on the next time
|
nbytes = 0;
|
||||||
* through
|
|
||||||
*/
|
|
||||||
|
|
||||||
fds[i].revents = 0;
|
|
||||||
}
|
}
|
||||||
while (nbytes > 0);
|
else
|
||||||
|
{
|
||||||
|
if (timeout)
|
||||||
|
{
|
||||||
|
printf("button_daemon: ERROR? Poll timeout, "
|
||||||
|
"but data read\n");
|
||||||
|
printf(" (might just be a race "
|
||||||
|
"condition)\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Suppress error report if no read data on the next time
|
||||||
|
* through
|
||||||
|
*/
|
||||||
|
|
||||||
|
fds[0].revents = 0;
|
||||||
}
|
}
|
||||||
|
while (nbytes > 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_EXAMPLES_BUTTONS_NAMES
|
#ifdef CONFIG_EXAMPLES_BUTTONS_NAMES
|
||||||
|
Loading…
Reference in New Issue
Block a user