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:
Mon Feb 27 08:06:36 2017 -0700
Revision:
55:79ab0bbc5008
Parent:
50:e89647e77fd5
Child:
56:40b454c952cc
Adding lots of NVM code to store parameters in eeprom.  Also some work on documentation.

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