Fork to see if I can get working

Dependencies:   BufferedSerial OneWire WinbondSPIFlash libxDot-dev-mbed5-deprecated

Fork of xDotBridge_update_test20180823 by Matt Briggs

Revision:
40:2ec4be320961
Child:
44:ece6330e9b57
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xDotBridge/inc/BaseboardIO.h	Thu Jan 26 17:36:59 2017 -0700
@@ -0,0 +1,352 @@
+/*
+ * baseboardIO.h
+ *
+ *  Created on: Jan 25, 2017
+ *      Author: mbriggs
+ */
+#include "DS2408.h"
+
+#ifndef BASEBOARDIO_H_
+#define BASEBOARDIO_H_
+
+/**
+ *  @class BaseboardIO
+ *  @brief This class abstracts utilizing the IO mostly found on the baseboard
+ *  this includes IO which is implemented via portExpanders.  This API currently
+ *  does not implement interfaces for communications like UART or for memory like
+ *  flash devices.
+ */
+class BaseboardIO
+{
+public:
+    /**
+    * @brief BaseboardIO constructor
+    *
+    * @details Just initialized internal variables does not configure devices.
+    * Should call init before other functions are called.
+    *
+    * On Entry:
+    *
+    * On Exit:
+    * Internal variables are set to a known state but futher initialziation is required
+    *
+    * @return
+    */
+    BaseboardIO();
+
+    /**
+    * @brief Initialize IO to current values
+    *
+    * @details Initialize IO to current state and ensure that class variables
+    * are updated to latest values.  The following are initialized.
+    * 1.  PortExpanders are setup are read
+    * 2.  Relay is forced to known state
+    * 3.  Interrupts are setup
+    *
+    * On Entry:
+    *
+    * On Exit:
+    * Either IO is configured or an error is returned
+    *
+    * @return CmdResult
+    */
+    CmdResult init();
+
+    ////////////////////////////////
+    // Registering for interrupts //
+    ////////////////////////////////
+    /**
+    * @brief Register for contact closure interrupt
+    *
+    * @details Pass function pointer which will be called when interrupt occurs.
+    *
+    * On Entry:
+    *
+    * On Exit:
+    * Callback registered
+    *
+    * @return
+    */
+    void regCCInInt(void (*callback) (void));
+
+    /**
+    * @brief Register for tamper interrupt
+    *
+    * @details Pass function pointer which will be called when interrupt occurs.
+    *
+    * On Entry:
+    *
+    * On Exit:
+    * Callback registered
+    *
+    * @return
+    */
+    void regTamperInt(void (*callback) (void));
+
+    /**
+    * @brief Register for pair button interrupt
+    *
+    * @details Pass function pointer which will be called when interrupt occurs.  Note
+    * there is a hardware switch which can prevent the tamper sensor from pulling the line
+    * down.  If this switch deasserted there is no way in software to reconfigure this.
+    *
+    * On Entry:
+    *
+    * On Exit:
+    * Callback registered
+    *
+    * @return
+    */
+    void regPairBtnInt(void (*callback) (void));
+
+    ///////////
+    // Input //
+    ///////////
+    /**
+    * @brief samples current IO including port expanders
+    *
+    * @details Samples values and stores them so that IO accessors can execute quicker.
+    *
+    * Future:
+    * Add some detail about how robust the values displayed here are.
+    * It might be a good idea to add a timestamp for this IO
+    *
+    * On Entry:
+    *
+    * On Exit:
+    * Internal class variables are updated or error is returned.
+    *
+    * @return CmdResult
+    */
+    CmdResult sampleUserSwitches();
+
+    /**
+    * @brief Returns the current state of the pair button
+    *
+    * @details This just simply uses the last sample of the IO to return a bool.
+    * If the button is depressed than true is returned other wise false
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return bool
+    */
+    bool isPairBtn();
+
+    /**
+    * @brief Returns the current state of the NO/NC switch
+    *
+    * @details This just simply uses the last sample of the IO to return a bool.
+    * If the switch is in asserted position that the devices is normally closed (NC)
+    *  therefore false is returned.  Otherwise device is normally open (NO) and therefore
+    *  returns true.
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return bool
+    */
+    bool isCCOutNO();
+
+    /**
+    * @brief Returns the current state of the NO/NC switch
+    *
+    * @details This just simply uses the last sample of the IO to return a bool.
+    * If the switch is in asserted position that the devices is normally closed (NC)
+    *  therefore true is returned.  Otherwise device is normally open (NO) and therefore
+    *  returns false.
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return bool
+    */
+    bool isCCOutNC() {return isCCOutNO();}
+
+    /**
+    * @brief Returns the current state of the Rx/Tx switch
+    *
+    * @details This just simply uses the last sample of the IO to return a bool.
+    * If the switch is in asserted position that the devices is transmitter (Tx)
+    *  therefore false is returned.  Otherwise device is a receiver(Rx) and therefore
+    *  returns true.
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return bool
+    */
+    bool isRx();
+
+    /**
+    * @brief Returns the current state of the Rx/Tx switch
+    *
+    * @details This just simply uses the last sample of the IO to return a bool.
+    * If the switch is in asserted position that the devices is transmitter (Tx)
+    *  therefore true is returned.  Otherwise device is a receiver(Rx) and therefore
+    *  returns false.
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return bool
+    */
+    bool isTx() {return !isRx();}
+
+    /**
+    * @brief Returns the current state of the LoRaWAN switch
+    *
+    * @details This just simply uses the last sample of the IO to return a bool.
+    * If the switch is in asserted position that the device is will report via LoRaWAN
+    * otherwise the device will use peer-to-peer mode.
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return bool
+    */
+    bool isLoRaWANMode();
+
+    /**
+    * @brief Returns value of a rotary switch (TODO give board location)
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return uint8_t
+    */
+    uint8_t rotarySwitch1();
+
+    /**
+    * @brief Returns value of a rotary switch (TODO give board location)
+    *
+    * On Entry:
+    * IO should be sampled recently
+    *
+    * On Exit:
+    *
+    * @return uint8_t
+    */
+    uint8_t rotarySwitch2();
+
+    ////////////
+    // Output //
+    ////////////
+    /**
+    * @brief Turns LED on
+    *
+    * @return CmdResult
+    */
+    CmdResult ledOn();
+
+    /**
+    * @brief Turns LED off
+    *
+    * @return CmdResult
+    */
+    CmdResult ledOff();
+
+    /**
+    * @brief Changes state of relay to alert
+    *
+    * @details If the configured as normally open then the relay closes and
+    * vice versa for normally closed.
+    *
+    * @return CmdResult
+    */
+    CmdResult relayAlert();
+
+    /**
+    * @brief Changes state of relay to normal
+    *
+    * @details If the configured as normally open then the relay opens and
+    * vice versa for normally closed.
+    *
+    * @return CmdResult
+    */
+    CmdResult relayNormal();
+
+    /**
+    * @brief Enables/disables serial chip
+    *
+    * @details This controls IO to ON/~OFF pin of RS232 chip.  If transmitting
+    * ensure serialTx is called as well.
+    *
+    * @return CmdResult
+    */
+    CmdResult serialRx(bool enable);
+
+    /**
+    * @brief Controls serial chip transmission
+    *
+    * @details This controls IO to Tx_DIS pin of RS232 chip.  Note calling this function will
+    * also enable serialRx.
+    *
+    * @return CmdResult
+    */
+    CmdResult serialTx(bool enable);
+
+private:
+    void (*mCCInIntCallback) (void);
+    void (*mTamperIntCallback) (void);
+    void (*mPairBtnIntCallback) (void);
+
+    uint8_t portExpanderROM0[8];
+    uint8_t portExpanderVal0;
+    uint8_t portExpanderROM1[8];
+    uint8_t portExpanderVal1;
+
+    /**
+    * @brief Reads baseboard information from non-volatile memory (NVM)
+    *
+    * @details This data is read from the xDot's internal EEPROM.  This
+    * method is called from init().  The following
+    * is stored:
+    * 1.  Storage code word
+    * 2.  8-bit Baseboard configuration data
+    * 3.  8-bit Baseboard revision data
+    * 4.  16-bit Baseboard serial number
+    * 5.  2 x 64-bit OneWire ROM port expander addresses
+    *
+    * TODO add memory map information
+    *
+    * @return CmdResult
+    */
+    CmdResult readInfoFromNVM();
+
+    /**
+    * @brief Stores baseboard information to non-volatile memory (NVM)
+    *
+    * @details This method is called during special configuration events like first time boot or factory reset.
+    *
+    * TODO add memory map information
+    *
+    * @return CmdResult
+    */
+    CmdResult writeInfoToNVM();
+
+    /**
+    * @brief Scans OneWire bus for port expanders and attempts to identify each.
+    *
+    * @details For this method to succeed switches must be in factory reset positions.
+    *
+    * @return CmdResult
+    */
+    CmdResult identifyPortExpanders();
+};
+
+#endif /* BASEBOARDIO_BASEBOARDIO_H_ */