diff options
author | px4dev <px4@purgatory.org> | 2013-01-06 00:32:04 -0800 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-01-06 00:32:04 -0800 |
commit | b3e16b48617ada1b72ba07fab2f9b3ef48cd5058 (patch) | |
tree | 373ad673a6adab696dfef4d1a5c09eaa6f52dc59 /apps/px4io/comms.c | |
parent | 76277ec622742388aade35ef9d439d42ea6caad7 (diff) | |
parent | 5b92c517779500d79e6e5f5cff48336550ce5edb (diff) | |
download | px4-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.c | 25 |
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); } |