aboutsummaryrefslogtreecommitdiff
path: root/apps/px4io/comms.c
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-01-06 00:32:04 -0800
committerpx4dev <px4@purgatory.org>2013-01-06 00:32:04 -0800
commitb3e16b48617ada1b72ba07fab2f9b3ef48cd5058 (patch)
tree373ad673a6adab696dfef4d1a5c09eaa6f52dc59 /apps/px4io/comms.c
parent76277ec622742388aade35ef9d439d42ea6caad7 (diff)
parent5b92c517779500d79e6e5f5cff48336550ce5edb (diff)
downloadpx4-firmware-b3e16b48617ada1b72ba07fab2f9b3ef48cd5058.tar.gz
px4-firmware-b3e16b48617ada1b72ba07fab2f9b3ef48cd5058.tar.bz2
px4-firmware-b3e16b48617ada1b72ba07fab2f9b3ef48cd5058.zip
Merge pull request #123 from PX4/#106-px4io-relays
Initial implementation of application access to the PX4IO relays.
Diffstat (limited to 'apps/px4io/comms.c')
-rw-r--r--apps/px4io/comms.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/apps/px4io/comms.c b/apps/px4io/comms.c
index 83a006d43..d7a03b007 100644
--- a/apps/px4io/comms.c
+++ b/apps/px4io/comms.c
@@ -172,7 +172,7 @@ comms_handle_command(const void *buffer, size_t length)
system_state.fmu_channel_data[i] = cmd->servo_command[i];
/* if the IO is armed and the FMU gets disarmed, the IO must also disarm */
- if(system_state.arm_ok && !cmd->arm_ok) {
+ if (system_state.arm_ok && !cmd->arm_ok) {
system_state.armed = false;
}
@@ -185,9 +185,26 @@ comms_handle_command(const void *buffer, size_t length)
// if (!system_state.arm_ok && system_state.armed)
// system_state.armed = false;
- /* XXX do relay changes here */
- for (unsigned i = 0; i < PX4IO_RELAY_CHANNELS; i++)
- system_state.relays[i] = cmd->relay_state[i];
+ /* handle relay state changes here */
+ for (unsigned i = 0; i < PX4IO_RELAY_CHANNELS; i++) {
+ if (system_state.relays[i] != cmd->relay_state[i]) {
+ switch (i) {
+ case 0:
+ POWER_ACC1(cmd->relay_state[i]);
+ break;
+ case 1:
+ POWER_ACC2(cmd->relay_state[i]);
+ break;
+ case 2:
+ POWER_RELAY1(cmd->relay_state[i]);
+ break;
+ case 3:
+ POWER_RELAY2(cmd->relay_state[i]);
+ break;
+ }
+ }
+ system_state.relays[i] != cmd->relay_state[i]
+ }
irqrestore(flags);
}