mirror of https://github.com/ArduPilot/ardupilot
57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "AP_HAL_Namespace.h"
|
|
|
|
#define RC_INPUT_MIN_PULSEWIDTH 900
|
|
#define RC_INPUT_MAX_PULSEWIDTH 2100
|
|
|
|
class AP_HAL::RCInput {
|
|
public:
|
|
/**
|
|
* Call init from the platform hal instance init, so that both the type of
|
|
* the RCInput implementation and init argument (e.g. ISRRegistry) are
|
|
* known to the programmer. (Its too difficult to describe this dependency
|
|
* in the C++ type system.)
|
|
*/
|
|
virtual void init() = 0;
|
|
virtual void deinit() {};
|
|
|
|
/**
|
|
* Return true if there has been new input since the last read()
|
|
* call. This call also clears the new_input flag, so once it
|
|
* returns true it won't return true again until another frame is
|
|
* received.
|
|
*/
|
|
virtual bool new_input() = 0;
|
|
|
|
/**
|
|
* Return the number of valid channels in the last read
|
|
*/
|
|
virtual uint8_t num_channels() = 0;
|
|
|
|
/* Read a single channel at a time */
|
|
virtual uint16_t read(uint8_t ch) = 0;
|
|
|
|
/* Read an array of channels, return the valid count */
|
|
virtual uint8_t read(uint16_t* periods, uint8_t len) = 0;
|
|
|
|
/**
|
|
* Overrides: these are really grody and don't belong here but we need
|
|
* them at the moment to make the port work.
|
|
* case v of:
|
|
* v == -1 -> no change to this channel
|
|
* v == 0 -> do not override this channel
|
|
* v > 0 -> set v as override.
|
|
*/
|
|
|
|
/* set_overrides: array starts at ch 0, for len channels */
|
|
virtual bool set_overrides(int16_t *overrides, uint8_t len) = 0;
|
|
/* set_override: set just a specific channel */
|
|
virtual bool set_override(uint8_t channel, int16_t override) = 0;
|
|
/* clear_overrides: equivalent to setting all overrides to 0 */
|
|
virtual void clear_overrides() = 0;
|
|
|
|
/* execute receiver bind */
|
|
virtual bool rc_bind(int dsmMode) { return false; }
|
|
};
|