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:
Wed Mar 01 17:28:32 2017 -0700
Revision:
58:15aa7a785b9f
Parent:
57:bdac7dd17af2
Child:
59:485545afc4dc
Major updates to power down during sleep code.  Other minior updates.  Used for test on 2017/03/01.

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