Browse Source

PWM out sim: Fix corner cases in startup and timeout handling

sbg
Lorenz Meier 9 years ago
parent
commit
4b319d2fc6
  1. 13
      src/drivers/pwm_out_sim/pwm_out_sim.cpp

13
src/drivers/pwm_out_sim/pwm_out_sim.cpp

@ -187,6 +187,7 @@ PWMSim::PWMSim() : @@ -187,6 +187,7 @@ PWMSim::PWMSim() :
_update_rate(50),
_current_update_rate(0),
_control_subs { -1},
_poll_fds{},
_poll_fds_num(0),
_armed_sub(-1),
_outputs_pub(0),
@ -366,7 +367,6 @@ PWMSim::subscribe() @@ -366,7 +367,6 @@ PWMSim::subscribe()
}
if (_control_subs[i] > 0) {
printf("valid\n");
_poll_fds[_poll_fds_num].fd = _control_subs[i];
_poll_fds[_poll_fds_num].events = POLLIN;
_poll_fds_num++;
@ -417,7 +417,16 @@ PWMSim::task_main() @@ -417,7 +417,16 @@ PWMSim::task_main()
}
/* sleep waiting for data, but no more than a second */
int ret = px4_poll(&_poll_fds[0], _poll_fds_num, 1000);
int ret = 0;
if (_poll_fds_num == 0) {
usleep(1000 * 1000);
/* this can happen during boot, but after the sleep its likely resolved */
if (_poll_fds_num == 0) {
PX4_WARN("pwm_out_sim: No valid fds");
}
} else {
ret = px4_poll(&_poll_fds[0], _poll_fds_num, 1000);
}
/* this would be bad... */
if (ret < 0) {

Loading…
Cancel
Save