1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #include <AP_HAL/AP_HAL.h>
- #if CONFIG_HAL_BOARD == HAL_BOARD_SITL
- #include "RCInput.h"
- #include <SITL/SITL.h>
- #include <AP_RCProtocol/AP_RCProtocol.h>
- using namespace HALSITL;
- extern const AP_HAL::HAL& hal;
- void RCInput::init()
- {
- AP::RC().init();
- }
- bool RCInput::new_input()
- {
- if (!using_rc_protocol) {
- if (AP::RC().new_input()) {
- using_rc_protocol = true;
- }
- }
- if (using_rc_protocol) {
- return AP::RC().new_input();
- }
- if (_sitlState->new_rc_input) {
- _sitlState->new_rc_input = false;
- return true;
- }
- return false;
- }
- uint16_t RCInput::read(uint8_t ch)
- {
- if (using_rc_protocol) {
- return AP::RC().read(ch);
- }
- if (ch >= num_channels()) {
- return 0;
- }
- return _sitlState->pwm_input[ch];
- }
- uint8_t RCInput::read(uint16_t* periods, uint8_t len)
- {
- if (len > num_channels()) {
- len = num_channels();
- }
- for (uint8_t i=0; i < len; i++) {
- periods[i] = read(i);
- }
- return len;
- }
- uint8_t RCInput::num_channels()
- {
- if (using_rc_protocol) {
- return AP::RC().num_channels();
- }
- SITL::SITL *_sitl = AP::sitl();
- if (_sitl) {
- return MIN(_sitl->rc_chancount.get(), SITL_RC_INPUT_CHANNELS);
- }
- return SITL_RC_INPUT_CHANNELS;
- }
- #endif
|