Fork to see if I can get working

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

Fork of xDotBridge_update_test20180823 by Matt Briggs

Committer:
Matt Briggs
Date:
Fri Feb 17 08:06:37 2017 -0700
Revision:
49:18f1354f9e51
Parent:
48:bab9f747d9ed
Child:
50:e89647e77fd5
Debugged both test and bbio lib.  Most IO working at this point.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Matt Briggs 40:2ec4be320961 1 /*
Matt Briggs 40:2ec4be320961 2 * baseboardIO.h
Matt Briggs 40:2ec4be320961 3 *
Matt Briggs 40:2ec4be320961 4 * Created on: Jan 25, 2017
Matt Briggs 40:2ec4be320961 5 * Author: mbriggs
Matt Briggs 40:2ec4be320961 6 */
Matt Briggs 40:2ec4be320961 7 #include "DS2408.h"
Matt Briggs 40:2ec4be320961 8
Matt Briggs 40:2ec4be320961 9 #ifndef BASEBOARDIO_H_
Matt Briggs 40:2ec4be320961 10 #define BASEBOARDIO_H_
Matt Briggs 40:2ec4be320961 11
Matt Briggs 40:2ec4be320961 12 /**
Matt Briggs 40:2ec4be320961 13 * @class BaseboardIO
Matt Briggs 40:2ec4be320961 14 * @brief This class abstracts utilizing the IO mostly found on the baseboard
Matt Briggs 40:2ec4be320961 15 * this includes IO which is implemented via portExpanders. This API currently
Matt Briggs 40:2ec4be320961 16 * does not implement interfaces for communications like UART or for memory like
Matt Briggs 40:2ec4be320961 17 * flash devices.
Matt Briggs 40:2ec4be320961 18 */
Matt Briggs 40:2ec4be320961 19 class BaseboardIO
Matt Briggs 40:2ec4be320961 20 {
Matt Briggs 40:2ec4be320961 21 public:
Matt Briggs 40:2ec4be320961 22 /**
Matt Briggs 40:2ec4be320961 23 * @brief BaseboardIO constructor
Matt Briggs 40:2ec4be320961 24 *
Matt Briggs 40:2ec4be320961 25 * @details Just initialized internal variables does not configure devices.
Matt Briggs 40:2ec4be320961 26 * Should call init before other functions are called.
Matt Briggs 40:2ec4be320961 27 *
Matt Briggs 40:2ec4be320961 28 * On Entry:
Matt Briggs 40:2ec4be320961 29 *
Matt Briggs 40:2ec4be320961 30 * On Exit:
Matt Briggs 40:2ec4be320961 31 * Internal variables are set to a known state but futher initialziation is required
Matt Briggs 40:2ec4be320961 32 *
Matt Briggs 40:2ec4be320961 33 * @return
Matt Briggs 40:2ec4be320961 34 */
Matt Briggs 40:2ec4be320961 35 BaseboardIO();
Matt Briggs 40:2ec4be320961 36
Matt Briggs 40:2ec4be320961 37 /**
Matt Briggs 40:2ec4be320961 38 * @brief Initialize IO to current values
Matt Briggs 40:2ec4be320961 39 *
Matt Briggs 40:2ec4be320961 40 * @details Initialize IO to current state and ensure that class variables
Matt Briggs 40:2ec4be320961 41 * are updated to latest values. The following are initialized.
Matt Briggs 40:2ec4be320961 42 * 1. PortExpanders are setup are read
Matt Briggs 40:2ec4be320961 43 * 2. Relay is forced to known state
Matt Briggs 40:2ec4be320961 44 * 3. Interrupts are setup
Matt Briggs 40:2ec4be320961 45 *
Matt Briggs 40:2ec4be320961 46 * On Entry:
Matt Briggs 40:2ec4be320961 47 *
Matt Briggs 40:2ec4be320961 48 * On Exit:
Matt Briggs 40:2ec4be320961 49 * Either IO is configured or an error is returned
Matt Briggs 40:2ec4be320961 50 *
Matt Briggs 40:2ec4be320961 51 * @return CmdResult
Matt Briggs 40:2ec4be320961 52 */
Matt Briggs 40:2ec4be320961 53 CmdResult init();
Matt Briggs 40:2ec4be320961 54
Matt Briggs 40:2ec4be320961 55 ////////////////////////////////
Matt Briggs 40:2ec4be320961 56 // Registering for interrupts //
Matt Briggs 40:2ec4be320961 57 ////////////////////////////////
Matt Briggs 40:2ec4be320961 58 /**
Matt Briggs 40:2ec4be320961 59 * @brief Register for contact closure interrupt
Matt Briggs 40:2ec4be320961 60 *
Matt Briggs 40:2ec4be320961 61 * @details Pass function pointer which will be called when interrupt occurs.
Matt Briggs 40:2ec4be320961 62 *
Matt Briggs 40:2ec4be320961 63 * On Entry:
Matt Briggs 40:2ec4be320961 64 *
Matt Briggs 40:2ec4be320961 65 * On Exit:
Matt Briggs 40:2ec4be320961 66 * Callback registered
Matt Briggs 40:2ec4be320961 67 *
Matt Briggs 40:2ec4be320961 68 * @return
Matt Briggs 40:2ec4be320961 69 */
Matt Briggs 44:ece6330e9b57 70 void regCCInInt(Callback<void()> func);
Matt Briggs 40:2ec4be320961 71
Matt Briggs 40:2ec4be320961 72 /**
Matt Briggs 40:2ec4be320961 73 * @brief Register for tamper interrupt
Matt Briggs 40:2ec4be320961 74 *
Matt Briggs 40:2ec4be320961 75 * @details Pass function pointer which will be called when interrupt occurs.
Matt Briggs 40:2ec4be320961 76 *
Matt Briggs 40:2ec4be320961 77 * On Entry:
Matt Briggs 40:2ec4be320961 78 *
Matt Briggs 40:2ec4be320961 79 * On Exit:
Matt Briggs 40:2ec4be320961 80 * Callback registered
Matt Briggs 40:2ec4be320961 81 *
Matt Briggs 40:2ec4be320961 82 * @return
Matt Briggs 40:2ec4be320961 83 */
Matt Briggs 44:ece6330e9b57 84 void regTamperInt(Callback<void()> func);
Matt Briggs 40:2ec4be320961 85
Matt Briggs 40:2ec4be320961 86 /**
Matt Briggs 40:2ec4be320961 87 * @brief Register for pair button interrupt
Matt Briggs 40:2ec4be320961 88 *
Matt Briggs 40:2ec4be320961 89 * @details Pass function pointer which will be called when interrupt occurs. Note
Matt Briggs 40:2ec4be320961 90 * there is a hardware switch which can prevent the tamper sensor from pulling the line
Matt Briggs 40:2ec4be320961 91 * down. If this switch deasserted there is no way in software to reconfigure this.
Matt Briggs 40:2ec4be320961 92 *
Matt Briggs 40:2ec4be320961 93 * On Entry:
Matt Briggs 40:2ec4be320961 94 *
Matt Briggs 40:2ec4be320961 95 * On Exit:
Matt Briggs 40:2ec4be320961 96 * Callback registered
Matt Briggs 40:2ec4be320961 97 *
Matt Briggs 40:2ec4be320961 98 * @return
Matt Briggs 40:2ec4be320961 99 */
Matt Briggs 44:ece6330e9b57 100 void regPairBtnInt(Callback<void()> func);
Matt Briggs 40:2ec4be320961 101
Matt Briggs 40:2ec4be320961 102 ///////////
Matt Briggs 40:2ec4be320961 103 // Input //
Matt Briggs 40:2ec4be320961 104 ///////////
Matt Briggs 40:2ec4be320961 105 /**
Matt Briggs 40:2ec4be320961 106 * @brief samples current IO including port expanders
Matt Briggs 40:2ec4be320961 107 *
Matt Briggs 40:2ec4be320961 108 * @details Samples values and stores them so that IO accessors can execute quicker.
Matt Briggs 40:2ec4be320961 109 *
Matt Briggs 40:2ec4be320961 110 * Future:
Matt Briggs 40:2ec4be320961 111 * Add some detail about how robust the values displayed here are.
Matt Briggs 40:2ec4be320961 112 * It might be a good idea to add a timestamp for this IO
Matt Briggs 40:2ec4be320961 113 *
Matt Briggs 40:2ec4be320961 114 * On Entry:
Matt Briggs 40:2ec4be320961 115 *
Matt Briggs 40:2ec4be320961 116 * On Exit:
Matt Briggs 40:2ec4be320961 117 * Internal class variables are updated or error is returned.
Matt Briggs 40:2ec4be320961 118 *
Matt Briggs 40:2ec4be320961 119 * @return CmdResult
Matt Briggs 40:2ec4be320961 120 */
Matt Briggs 40:2ec4be320961 121 CmdResult sampleUserSwitches();
Matt Briggs 40:2ec4be320961 122
Matt Briggs 40:2ec4be320961 123 /**
Matt Briggs 40:2ec4be320961 124 * @brief Returns the current state of the pair button
Matt Briggs 40:2ec4be320961 125 *
Matt Briggs 40:2ec4be320961 126 * @details This just simply uses the last sample of the IO to return a bool.
Matt Briggs 40:2ec4be320961 127 * If the button is depressed than true is returned other wise false
Matt Briggs 40:2ec4be320961 128 *
Matt Briggs 40:2ec4be320961 129 * On Entry:
Matt Briggs 40:2ec4be320961 130 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 131 *
Matt Briggs 40:2ec4be320961 132 * On Exit:
Matt Briggs 40:2ec4be320961 133 *
Matt Briggs 40:2ec4be320961 134 * @return bool
Matt Briggs 40:2ec4be320961 135 */
Matt Briggs 40:2ec4be320961 136 bool isPairBtn();
Matt Briggs 40:2ec4be320961 137
Matt Briggs 40:2ec4be320961 138 /**
Matt Briggs 40:2ec4be320961 139 * @brief Returns the current state of the NO/NC switch
Matt Briggs 40:2ec4be320961 140 *
Matt Briggs 40:2ec4be320961 141 * @details This just simply uses the last sample of the IO to return a bool.
Matt Briggs 40:2ec4be320961 142 * If the switch is in asserted position that the devices is normally closed (NC)
Matt Briggs 40:2ec4be320961 143 * therefore false is returned. Otherwise device is normally open (NO) and therefore
Matt Briggs 40:2ec4be320961 144 * returns true.
Matt Briggs 40:2ec4be320961 145 *
Matt Briggs 40:2ec4be320961 146 * On Entry:
Matt Briggs 40:2ec4be320961 147 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 148 *
Matt Briggs 40:2ec4be320961 149 * On Exit:
Matt Briggs 40:2ec4be320961 150 *
Matt Briggs 40:2ec4be320961 151 * @return bool
Matt Briggs 40:2ec4be320961 152 */
Matt Briggs 48:bab9f747d9ed 153 bool isCCNO();
Matt Briggs 40:2ec4be320961 154
Matt Briggs 40:2ec4be320961 155 /**
Matt Briggs 40:2ec4be320961 156 * @brief Returns the current state of the NO/NC switch
Matt Briggs 40:2ec4be320961 157 *
Matt Briggs 40:2ec4be320961 158 * @details This just simply uses the last sample of the IO to return a bool.
Matt Briggs 40:2ec4be320961 159 * If the switch is in asserted position that the devices is normally closed (NC)
Matt Briggs 40:2ec4be320961 160 * therefore true is returned. Otherwise device is normally open (NO) and therefore
Matt Briggs 40:2ec4be320961 161 * returns false.
Matt Briggs 40:2ec4be320961 162 *
Matt Briggs 40:2ec4be320961 163 * On Entry:
Matt Briggs 40:2ec4be320961 164 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 165 *
Matt Briggs 40:2ec4be320961 166 * On Exit:
Matt Briggs 40:2ec4be320961 167 *
Matt Briggs 40:2ec4be320961 168 * @return bool
Matt Briggs 40:2ec4be320961 169 */
Matt Briggs 49:18f1354f9e51 170 bool isCCNC() {return !isCCNO();}
Matt Briggs 40:2ec4be320961 171
Matt Briggs 40:2ec4be320961 172 /**
Matt Briggs 40:2ec4be320961 173 * @brief Returns the current state of the Rx/Tx switch
Matt Briggs 40:2ec4be320961 174 *
Matt Briggs 40:2ec4be320961 175 * @details This just simply uses the last sample of the IO to return a bool.
Matt Briggs 40:2ec4be320961 176 * If the switch is in asserted position that the devices is transmitter (Tx)
Matt Briggs 40:2ec4be320961 177 * therefore false is returned. Otherwise device is a receiver(Rx) and therefore
Matt Briggs 40:2ec4be320961 178 * returns true.
Matt Briggs 40:2ec4be320961 179 *
Matt Briggs 40:2ec4be320961 180 * On Entry:
Matt Briggs 40:2ec4be320961 181 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 182 *
Matt Briggs 40:2ec4be320961 183 * On Exit:
Matt Briggs 40:2ec4be320961 184 *
Matt Briggs 40:2ec4be320961 185 * @return bool
Matt Briggs 40:2ec4be320961 186 */
Matt Briggs 40:2ec4be320961 187 bool isRx();
Matt Briggs 40:2ec4be320961 188
Matt Briggs 40:2ec4be320961 189 /**
Matt Briggs 40:2ec4be320961 190 * @brief Returns the current state of the Rx/Tx switch
Matt Briggs 40:2ec4be320961 191 *
Matt Briggs 40:2ec4be320961 192 * @details This just simply uses the last sample of the IO to return a bool.
Matt Briggs 40:2ec4be320961 193 * If the switch is in asserted position that the devices is transmitter (Tx)
Matt Briggs 40:2ec4be320961 194 * therefore true is returned. Otherwise device is a receiver(Rx) and therefore
Matt Briggs 40:2ec4be320961 195 * returns false.
Matt Briggs 40:2ec4be320961 196 *
Matt Briggs 40:2ec4be320961 197 * On Entry:
Matt Briggs 40:2ec4be320961 198 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 199 *
Matt Briggs 40:2ec4be320961 200 * On Exit:
Matt Briggs 40:2ec4be320961 201 *
Matt Briggs 40:2ec4be320961 202 * @return bool
Matt Briggs 40:2ec4be320961 203 */
Matt Briggs 40:2ec4be320961 204 bool isTx() {return !isRx();}
Matt Briggs 40:2ec4be320961 205
Matt Briggs 40:2ec4be320961 206 /**
Matt Briggs 40:2ec4be320961 207 * @brief Returns the current state of the LoRaWAN switch
Matt Briggs 40:2ec4be320961 208 *
Matt Briggs 40:2ec4be320961 209 * @details This just simply uses the last sample of the IO to return a bool.
Matt Briggs 40:2ec4be320961 210 * If the switch is in asserted position that the device is will report via LoRaWAN
Matt Briggs 40:2ec4be320961 211 * otherwise the device will use peer-to-peer mode.
Matt Briggs 40:2ec4be320961 212 *
Matt Briggs 40:2ec4be320961 213 * On Entry:
Matt Briggs 40:2ec4be320961 214 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 215 *
Matt Briggs 40:2ec4be320961 216 * On Exit:
Matt Briggs 40:2ec4be320961 217 *
Matt Briggs 40:2ec4be320961 218 * @return bool
Matt Briggs 40:2ec4be320961 219 */
Matt Briggs 40:2ec4be320961 220 bool isLoRaWANMode();
Matt Briggs 40:2ec4be320961 221
Matt Briggs 40:2ec4be320961 222 /**
Matt Briggs 40:2ec4be320961 223 * @brief Returns value of a rotary switch (TODO give board location)
Matt Briggs 40:2ec4be320961 224 *
Matt Briggs 40:2ec4be320961 225 * On Entry:
Matt Briggs 40:2ec4be320961 226 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 227 *
Matt Briggs 40:2ec4be320961 228 * On Exit:
Matt Briggs 40:2ec4be320961 229 *
Matt Briggs 40:2ec4be320961 230 * @return uint8_t
Matt Briggs 40:2ec4be320961 231 */
Matt Briggs 40:2ec4be320961 232 uint8_t rotarySwitch1();
Matt Briggs 40:2ec4be320961 233
Matt Briggs 40:2ec4be320961 234 /**
Matt Briggs 40:2ec4be320961 235 * @brief Returns value of a rotary switch (TODO give board location)
Matt Briggs 40:2ec4be320961 236 *
Matt Briggs 40:2ec4be320961 237 * On Entry:
Matt Briggs 40:2ec4be320961 238 * IO should be sampled recently
Matt Briggs 40:2ec4be320961 239 *
Matt Briggs 40:2ec4be320961 240 * On Exit:
Matt Briggs 40:2ec4be320961 241 *
Matt Briggs 40:2ec4be320961 242 * @return uint8_t
Matt Briggs 40:2ec4be320961 243 */
Matt Briggs 40:2ec4be320961 244 uint8_t rotarySwitch2();
Matt Briggs 40:2ec4be320961 245
Matt Briggs 40:2ec4be320961 246 ////////////
Matt Briggs 40:2ec4be320961 247 // Output //
Matt Briggs 40:2ec4be320961 248 ////////////
Matt Briggs 40:2ec4be320961 249 /**
Matt Briggs 40:2ec4be320961 250 * @brief Turns LED on
Matt Briggs 40:2ec4be320961 251 *
Matt Briggs 40:2ec4be320961 252 * @return CmdResult
Matt Briggs 40:2ec4be320961 253 */
Matt Briggs 40:2ec4be320961 254 CmdResult ledOn();
Matt Briggs 40:2ec4be320961 255
Matt Briggs 40:2ec4be320961 256 /**
Matt Briggs 40:2ec4be320961 257 * @brief Turns LED off
Matt Briggs 40:2ec4be320961 258 *
Matt Briggs 40:2ec4be320961 259 * @return CmdResult
Matt Briggs 40:2ec4be320961 260 */
Matt Briggs 40:2ec4be320961 261 CmdResult ledOff();
Matt Briggs 40:2ec4be320961 262
Matt Briggs 40:2ec4be320961 263 /**
Matt Briggs 40:2ec4be320961 264 * @brief Changes state of relay to alert
Matt Briggs 40:2ec4be320961 265 *
Matt Briggs 40:2ec4be320961 266 * @details If the configured as normally open then the relay closes and
Matt Briggs 40:2ec4be320961 267 * vice versa for normally closed.
Matt Briggs 40:2ec4be320961 268 *
Matt Briggs 40:2ec4be320961 269 * @return CmdResult
Matt Briggs 40:2ec4be320961 270 */
Matt Briggs 40:2ec4be320961 271 CmdResult relayAlert();
Matt Briggs 40:2ec4be320961 272
Matt Briggs 40:2ec4be320961 273 /**
Matt Briggs 40:2ec4be320961 274 * @brief Changes state of relay to normal
Matt Briggs 40:2ec4be320961 275 *
Matt Briggs 40:2ec4be320961 276 * @details If the configured as normally open then the relay opens and
Matt Briggs 40:2ec4be320961 277 * vice versa for normally closed.
Matt Briggs 40:2ec4be320961 278 *
Matt Briggs 40:2ec4be320961 279 * @return CmdResult
Matt Briggs 40:2ec4be320961 280 */
Matt Briggs 40:2ec4be320961 281 CmdResult relayNormal();
Matt Briggs 40:2ec4be320961 282
Matt Briggs 40:2ec4be320961 283 /**
Matt Briggs 40:2ec4be320961 284 * @brief Enables/disables serial chip
Matt Briggs 40:2ec4be320961 285 *
Matt Briggs 40:2ec4be320961 286 * @details This controls IO to ON/~OFF pin of RS232 chip. If transmitting
Matt Briggs 40:2ec4be320961 287 * ensure serialTx is called as well.
Matt Briggs 40:2ec4be320961 288 *
Matt Briggs 40:2ec4be320961 289 * @return CmdResult
Matt Briggs 40:2ec4be320961 290 */
Matt Briggs 40:2ec4be320961 291 CmdResult serialRx(bool enable);
Matt Briggs 40:2ec4be320961 292
Matt Briggs 40:2ec4be320961 293 /**
Matt Briggs 40:2ec4be320961 294 * @brief Controls serial chip transmission
Matt Briggs 40:2ec4be320961 295 *
Matt Briggs 40:2ec4be320961 296 * @details This controls IO to Tx_DIS pin of RS232 chip. Note calling this function will
Matt Briggs 40:2ec4be320961 297 * also enable serialRx.
Matt Briggs 40:2ec4be320961 298 *
Matt Briggs 40:2ec4be320961 299 * @return CmdResult
Matt Briggs 40:2ec4be320961 300 */
Matt Briggs 40:2ec4be320961 301 CmdResult serialTx(bool enable);
Matt Briggs 40:2ec4be320961 302
Matt Briggs 40:2ec4be320961 303 private:
Matt Briggs 44:ece6330e9b57 304 // Initialized during constructor
Matt Briggs 44:ece6330e9b57 305 OneWire mOWMaster;
Matt Briggs 44:ece6330e9b57 306 InterruptIn mCCIn;
Matt Briggs 44:ece6330e9b57 307 InterruptIn mTamper;
Matt Briggs 44:ece6330e9b57 308 InterruptIn mPairBtn;
Matt Briggs 44:ece6330e9b57 309 DigitalOut mLed;
Matt Briggs 44:ece6330e9b57 310 DigitalOut mSwitchedIOCtrl;
Matt Briggs 40:2ec4be320961 311
Matt Briggs 44:ece6330e9b57 312 // Initialized during init()
Matt Briggs 44:ece6330e9b57 313 // void (*mCCInIntCallback) (void);
Matt Briggs 44:ece6330e9b57 314 // void (*mTamperIntCallback) (void);
Matt Briggs 44:ece6330e9b57 315 // void (*mPairBtnIntCallback) (void);
Matt Briggs 44:ece6330e9b57 316
Matt Briggs 44:ece6330e9b57 317 uint8_t mPortExpanderROM0[8];
Matt Briggs 44:ece6330e9b57 318 uint8_t mPortExpanderVal0;
Matt Briggs 44:ece6330e9b57 319 uint8_t mPortExpanderROM1[8];
Matt Briggs 44:ece6330e9b57 320 uint8_t mPortExpanderVal1;
Matt Briggs 44:ece6330e9b57 321
Matt Briggs 44:ece6330e9b57 322 DS2408 *mPortEx0;
Matt Briggs 44:ece6330e9b57 323 DS2408 *mPortEx1;
Matt Briggs 40:2ec4be320961 324
Matt Briggs 49:18f1354f9e51 325 void enableSwitchedIO () {
Matt Briggs 49:18f1354f9e51 326 mSwitchedIOCtrl = 0; // assert since PMOS
Matt Briggs 49:18f1354f9e51 327 }
Matt Briggs 49:18f1354f9e51 328 void disableSwitchedIO () {
Matt Briggs 49:18f1354f9e51 329 mSwitchedIOCtrl = 1; // deassertted since PMOS
Matt Briggs 49:18f1354f9e51 330 // mSwitchedIOCtrl = 0; // FIXME
Matt Briggs 49:18f1354f9e51 331 }
Matt Briggs 49:18f1354f9e51 332
Matt Briggs 40:2ec4be320961 333 /**
Matt Briggs 40:2ec4be320961 334 * @brief Reads baseboard information from non-volatile memory (NVM)
Matt Briggs 40:2ec4be320961 335 *
Matt Briggs 40:2ec4be320961 336 * @details This data is read from the xDot's internal EEPROM. This
Matt Briggs 40:2ec4be320961 337 * method is called from init(). The following
Matt Briggs 40:2ec4be320961 338 * is stored:
Matt Briggs 40:2ec4be320961 339 * 1. Storage code word
Matt Briggs 40:2ec4be320961 340 * 2. 8-bit Baseboard configuration data
Matt Briggs 40:2ec4be320961 341 * 3. 8-bit Baseboard revision data
Matt Briggs 40:2ec4be320961 342 * 4. 16-bit Baseboard serial number
Matt Briggs 40:2ec4be320961 343 * 5. 2 x 64-bit OneWire ROM port expander addresses
Matt Briggs 40:2ec4be320961 344 *
Matt Briggs 40:2ec4be320961 345 * TODO add memory map information
Matt Briggs 40:2ec4be320961 346 *
Matt Briggs 40:2ec4be320961 347 * @return CmdResult
Matt Briggs 40:2ec4be320961 348 */
Matt Briggs 40:2ec4be320961 349 CmdResult readInfoFromNVM();
Matt Briggs 40:2ec4be320961 350
Matt Briggs 40:2ec4be320961 351 /**
Matt Briggs 40:2ec4be320961 352 * @brief Stores baseboard information to non-volatile memory (NVM)
Matt Briggs 40:2ec4be320961 353 *
Matt Briggs 40:2ec4be320961 354 * @details This method is called during special configuration events like first time boot or factory reset.
Matt Briggs 40:2ec4be320961 355 *
Matt Briggs 40:2ec4be320961 356 * TODO add memory map information
Matt Briggs 40:2ec4be320961 357 *
Matt Briggs 40:2ec4be320961 358 * @return CmdResult
Matt Briggs 40:2ec4be320961 359 */
Matt Briggs 40:2ec4be320961 360 CmdResult writeInfoToNVM();
Matt Briggs 40:2ec4be320961 361
Matt Briggs 40:2ec4be320961 362 /**
Matt Briggs 40:2ec4be320961 363 * @brief Scans OneWire bus for port expanders and attempts to identify each.
Matt Briggs 40:2ec4be320961 364 *
Matt Briggs 40:2ec4be320961 365 * @details For this method to succeed switches must be in factory reset positions.
Matt Briggs 44:ece6330e9b57 366 * Rotary 1 and 2 should be at 0
Matt Briggs 44:ece6330e9b57 367 * DIP Switches should be fully closed
Matt Briggs 40:2ec4be320961 368 *
Matt Briggs 40:2ec4be320961 369 * @return CmdResult
Matt Briggs 40:2ec4be320961 370 */
Matt Briggs 40:2ec4be320961 371 CmdResult identifyPortExpanders();
Matt Briggs 44:ece6330e9b57 372
Matt Briggs 44:ece6330e9b57 373 /**
Matt Briggs 44:ece6330e9b57 374 * @brief Forces relay to closed state
Matt Briggs 44:ece6330e9b57 375 *
Matt Briggs 44:ece6330e9b57 376 * @details Note coil assertion timing is done here
Matt Briggs 44:ece6330e9b57 377 *
Matt Briggs 44:ece6330e9b57 378 * @return CmdResult
Matt Briggs 44:ece6330e9b57 379 */
Matt Briggs 44:ece6330e9b57 380 CmdResult closeRelay();
Matt Briggs 44:ece6330e9b57 381
Matt Briggs 44:ece6330e9b57 382 /**
Matt Briggs 44:ece6330e9b57 383 * @brief Forces relay to open state
Matt Briggs 44:ece6330e9b57 384 *
Matt Briggs 44:ece6330e9b57 385 * @details Note coil assertion timing is done here
Matt Briggs 44:ece6330e9b57 386 *
Matt Briggs 44:ece6330e9b57 387 * @return CmdResult
Matt Briggs 44:ece6330e9b57 388 */
Matt Briggs 44:ece6330e9b57 389 CmdResult openRelay();
Matt Briggs 40:2ec4be320961 390 };
Matt Briggs 40:2ec4be320961 391
Matt Briggs 40:2ec4be320961 392 #endif /* BASEBOARDIO_BASEBOARDIO_H_ */