2011-11-16 21:49:56 -04:00
|
|
|
/*
|
|
|
|
RC input emulation
|
|
|
|
Code by Andrew Tridgell November 2011
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _SITL_RC_H
|
|
|
|
#define _SITL_RC_H
|
|
|
|
|
|
|
|
struct RC_ICR4 {
|
|
|
|
uint16_t channels[9]; // 9th channel is sync
|
|
|
|
uint32_t value;
|
|
|
|
uint8_t idx;
|
|
|
|
|
|
|
|
RC_ICR4() {
|
|
|
|
// constructor
|
|
|
|
channels[0] = channels[1] = channels[3] = 1500;
|
|
|
|
channels[4] = channels[7] = 1800;
|
|
|
|
channels[2] = channels[5] = channels[6] = 1000;
|
|
|
|
channels[8] = 4500; // sync
|
|
|
|
idx = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
read from ICR4 fetches next channel
|
|
|
|
*/
|
|
|
|
operator int() {
|
|
|
|
value += channels[idx++]*2;
|
|
|
|
if (idx == 9) {
|
|
|
|
idx = 0;
|
|
|
|
}
|
|
|
|
value = value % 40000;
|
|
|
|
return (uint16_t)value;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2011-11-25 19:11:14 -04:00
|
|
|
ignore rate assignment for now (needed for apm2
|
2011-11-16 21:49:56 -04:00
|
|
|
emulation)
|
|
|
|
*/
|
|
|
|
RC_ICR4& operator=(uint16_t rate) {
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
interface to set a channel value from SITL
|
|
|
|
*/
|
|
|
|
void set(uint8_t i, uint16_t v) {
|
|
|
|
channels[i] = v;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|