diff options
Diffstat (limited to 'src/generic.c')
-rw-r--r-- | src/generic.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/generic.c b/src/generic.c new file mode 100644 index 0000000..bf01e79 --- /dev/null +++ b/src/generic.c @@ -0,0 +1,52 @@ +#include "controller.h" +#include <stdio.h> + +#define CHANNEL_THROTTLE 0 + +#define THROTTLE_MIN 1000 +#define THROTTLE_MAX 2000 + +//convert the value from an axis to an appropriate ppm value +//between 1000 and 2000 +inline channel_t axis_to_channel(int value) { + long centered = (long) value - AXIS_MIN; + long proportional = centered * 1000 / (AXIS_MAX - AXIS_MIN); + return (channel_t) 1000 + proportional; +} + +void channel_reset(channel_t* channels) { + for (size_t i = 0; i < CHANNELS; ++i) { + channels[i] = CHANNEL_UNUSED; + } + channels[0] = THROTTLE_MIN; + channels[1] = 1500; + channels[2] = 1500; + channels[3] = 1500; + channels[4] = 1500; +} +void event_axis(channel_t* channels, int axis, int value) { + channels[axis+1] = axis_to_channel(value); +} +void event_button(channel_t* channels, int button, bool value) { + if (value) { + switch(button) { + case 0: + channel_reset(channels); + break; + case 4: + channel_step(channels, CHANNEL_THROTTLE, -10, THROTTLE_MIN, THROTTLE_MAX); + break; + case 5: + channel_step(channels, CHANNEL_THROTTLE, 10, THROTTLE_MIN, THROTTLE_MAX); + break; + case 6: + channel_step(channels, CHANNEL_THROTTLE, -100, THROTTLE_MIN, THROTTLE_MAX); + break; + case 7: + channel_step(channels, CHANNEL_THROTTLE, 100, THROTTLE_MIN, THROTTLE_MAX); + break; + default: + break; + } + } +}
\ No newline at end of file |