]> git.tdb.fi Git - model-railway-devices.git/commitdiff
Add a function and command to find out if power is applied to the output
authorMikko Rasa <tdb@tdb.fi>
Sat, 2 Nov 2013 11:38:48 +0000 (13:38 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sat, 2 Nov 2013 11:38:48 +0000 (13:38 +0200)
arducontrol/commands.h
arducontrol/output.c
arducontrol/output.h

index eae919cee32b0a9778bc4663542248e01ecbd205..7e2370a2d8d94abb818803f4d8d000a299221b02 100644 (file)
@@ -5,6 +5,7 @@ enum Command
 {
        POWER_ON = 0x01,
        POWER_OFF = 0x02,
+       READ_POWER_STATE = 0x03,
        READ_TRACK_CURRENT = 0x08,
        SET_OVERCURRENT_LIMIT = 0x09,
        READ_INPUT_VOLTAGE = 0x0A,
@@ -23,6 +24,7 @@ enum Command
        OVERCURRENT = 0xA0,
        TRACK_CURRENT = 0xC0,
        INPUT_VOLTAGE = 0xC1,
+       POWER_STATE = 0xC2,
        S88_DATA = 0xD0
 };
 
index 3c94f7091c39072939829e45adff5ff1cde6d5ad..38d1045476438cea33da205d0ecebf67ef9d8957 100644 (file)
@@ -1,5 +1,5 @@
 #include <avr/io.h>
-#include "commands.h"
+#include "interface.h"
 #include "output.h"
 #include "timer.h"
 
@@ -36,6 +36,11 @@ void output_set_power(uint8_t p)
                PORTD &= ~BIT(ENABLE);
 }
 
+uint8_t output_is_power_on()
+{
+       return (PORTD&BIT(ENABLE))!=0;
+}
+
 uint8_t output_command(const uint8_t *cmd_buf, uint8_t cmd_length)
 {
        if(cmd_buf[0]==POWER_ON || cmd_buf[0]==POWER_OFF)
@@ -45,6 +50,16 @@ uint8_t output_command(const uint8_t *cmd_buf, uint8_t cmd_length)
 
                output_set_power(cmd_buf[0]==POWER_ON);
        }
+       else if(cmd_buf[0]==READ_POWER_STATE)
+       {
+               if(cmd_length!=1)
+                       return LENGTH_ERROR;
+
+               uint8_t reply[2];
+               reply[0] = POWER_STATE;
+               reply[1] = output_is_power_on();
+               interface_send(reply, 2);
+       }
        else
                return INVALID_COMMAND;
 
index c94c665bad6d9c322be59636b6b720b5103fe374..988c16ed2e5e717cdc4dd67760756d1206b67d72 100644 (file)
@@ -21,6 +21,7 @@ extern OutputPacket packet;
 void output_init(void);
 void clear_packet(void);
 void output_set_power(uint8_t);
+uint8_t output_is_power_on();
 uint8_t output_command(const uint8_t *, uint8_t);
 
 #endif