123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- #pragma once
- #include "AP_HAL_Namespace.h"
- #include <stdint.h>
- #define RC_OUTPUT_MIN_PULSEWIDTH 400
- #define RC_OUTPUT_MAX_PULSEWIDTH 2100
- #ifndef CH_1
- #define CH_1 0
- #define CH_2 1
- #define CH_3 2
- #define CH_4 3
- #define CH_5 4
- #define CH_6 5
- #define CH_7 6
- #define CH_8 7
- #define CH_9 8
- #define CH_10 9
- #define CH_11 10
- #define CH_12 11
- #define CH_13 12
- #define CH_14 13
- #define CH_15 14
- #define CH_16 15
- #define CH_17 16
- #define CH_18 17
- #define CH_NONE 255
- #endif
- class ByteBuffer;
- class AP_HAL::RCOutput {
- public:
- virtual void init() = 0;
-
- virtual void set_freq(uint32_t chmask, uint16_t freq_hz) = 0;
- virtual uint16_t get_freq(uint8_t chan) = 0;
-
- virtual void enable_ch(uint8_t chan) = 0;
- virtual void disable_ch(uint8_t chan) = 0;
-
- virtual void write(uint8_t chan, uint16_t period_us) = 0;
-
- virtual void set_reversible_mask(uint16_t chanmask) {}
-
-
- virtual void cork() = 0;
-
- virtual void push() = 0;
-
- virtual uint16_t read(uint8_t chan) = 0;
- virtual void read(uint16_t* period_us, uint8_t len) = 0;
-
- virtual uint16_t read_last_sent(uint8_t chan) { return read(chan); }
- virtual void read_last_sent(uint16_t* period_us, uint8_t len) { read(period_us, len); };
-
- virtual void set_safety_pwm(uint32_t chmask, uint16_t period_us) {}
-
- virtual void set_failsafe_pwm(uint32_t chmask, uint16_t period_us) {}
-
- virtual bool force_safety_on(void) { return false; }
-
- virtual void force_safety_off(void) {}
-
- virtual void set_esc_scaling(uint16_t min_pwm, uint16_t max_pwm) {}
-
- virtual bool get_esc_scaling(uint16_t &min_pwm, uint16_t &max_pwm) { return false; }
-
-
- virtual float scale_esc_to_unity(uint16_t pwm) { return 0; }
-
- virtual bool enable_px4io_sbus_out(uint16_t rate_hz) { return false; }
-
- virtual void timer_tick(void) { }
-
- virtual bool serial_setup_output(uint8_t chan, uint32_t baudrate, uint16_t chanmask) { return false; }
-
- virtual bool serial_write_bytes(const uint8_t *bytes, uint16_t len) { return false; }
-
- virtual uint16_t serial_read_bytes(uint8_t *buf, uint16_t len) { return 0; }
-
-
- virtual void serial_end(void) {}
-
-
- enum output_mode {
- MODE_PWM_NONE,
- MODE_PWM_NORMAL,
- MODE_PWM_ONESHOT,
- MODE_PWM_ONESHOT125,
- MODE_PWM_BRUSHED,
- MODE_PWM_DSHOT150,
- MODE_PWM_DSHOT300,
- MODE_PWM_DSHOT600,
- MODE_PWM_DSHOT1200,
- MODE_NEOPIXEL,
- };
- virtual void set_output_mode(uint16_t mask, enum output_mode mode) {}
-
- virtual void set_default_rate(uint16_t rate_hz) {}
-
- virtual void set_telem_request_mask(uint16_t mask) {}
-
- virtual bool set_neopixel_num_LEDs(const uint16_t chan, uint8_t num_leds) { return false; }
-
- virtual void set_neopixel_rgb_data(const uint16_t chan, uint32_t ledmask, uint8_t red, uint8_t green, uint8_t blue) {}
-
- virtual void neopixel_send(void) {}
- };
|