![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Fork to see if I can get working
Dependencies: BufferedSerial OneWire WinbondSPIFlash libxDot-dev-mbed5-deprecated
Fork of xDotBridge_update_test20180823 by
Diff: xDotBridge/src/main.cpp
- Revision:
- 53:a1563574a980
- Parent:
- 52:64a2c71c7c49
- Child:
- 54:c04d7b6fa075
--- a/xDotBridge/src/main.cpp Tue Feb 21 15:33:57 2017 -0700 +++ b/xDotBridge/src/main.cpp Wed Feb 22 10:45:56 2017 -0700 @@ -31,6 +31,8 @@ int main() { + CommProtocolPeerBrute *protocol = new CommProtocolPeerBrute(); + BaseboardIO *bbio = new BaseboardIO(); CmdResult result; ccIntFlag = false; tamperIntFlag = false; @@ -53,7 +55,19 @@ dot->setLogLevel(mts::MTSLog::INFO_LEVEL); // attach the custom events handler - dot->setEvents(&events); // Little bonus event debug information +// dot->setEvents(&events); // Little bonus event debug information + + // Finish radio init + protocol->init(); + + // save changes to configuration +// logInfo("saving configuration"); +// core_util_critical_section_enter(); +// bool dotConfigSaved = dot->saveConfig(); +// core_util_critical_section_exit(); +// if (!dotConfigSaved) { +// logError("failed to save configuration"); +// } // Setup programmable voltage detector // PVD_LEVEL0 Falling 1.85 @@ -72,20 +86,14 @@ // logInfo("Programmable Voltage Detector set for level: %d", pvdConfig.PVDLevel); // // HAL_PWR_PVDCallback need to define this I think this will override the current implementation -// dot->setWakePin(WAKE); + dot->setWakePin(GPIO3); - // save changes to configuration - logInfo("saving configuration"); - if (!dot->saveConfig()) { - logError("failed to save configuration"); - } // display configuration - display_config(); - CommProtocolPeerBrute protocol; - BaseboardIO bbio; +// display_config(); - result = bbio.init(); + pc.printf("= Baseboard Init Starting =\r\n"); + result = bbio->init(); if (result == cmdSuccess) { pc.printf("= Baseboard Init Finished Successfully =\r\n"); } @@ -97,74 +105,88 @@ Callback<void()> ccInIntObj (&ccInIntCallback); Callback<void()> tamperIntObj (&tamperIntCallback); Callback<void()> pairBtnIntObj (&pairBtnIntCallback); - bbio.regCCInInt(ccInIntObj); - bbio.regTamperInt(tamperIntObj); - bbio.regPairBtnInt(pairBtnIntObj); - bbio.sampleUserSwitches(); - bbio.relayNormal(); // Always force relay in known state + bbio->sampleUserSwitches(); + bbio->relayNormal(); // Always force relay in known state + unsigned int intCnt = 0; // Just a quick temp varaible to keep track of ints /** * Main Loop */ while (true) { std::vector<uint8_t> data; - bbio.ledOff(); + bbio->ledOff(); // Sample IO and update any configuration - bool prevCCNormallyOpen = bbio.isCCNO(); - bbio.sampleUserSwitches(); - if (prevCCNormallyOpen == bbio.isCCNO()) { // Only activate the coil if the DIP SW has changed - bbio.relayNormal(); + bool prevCCNormallyOpen = bbio->isCCNO(); + bbio->sampleUserSwitches(); + if (prevCCNormallyOpen == bbio->isCCNO()) { // Only activate the coil if the DIP SW has changed + bbio->regCCInInt(ccInIntObj); + bbio->regTamperInt(tamperIntObj); + bbio->regPairBtnInt(pairBtnIntObj); + bbio->relayNormal(); } - if (bbio.isTx()) { - protocol.setTx(true); + if (bbio->isTx()) { + protocol->setTx(true); } else { // RX - protocol.setTx(false); + protocol->setTx(false); } // End sample and update - if (protocol.isTx()) { + if (protocol->isTx()) { + logInfo("Got int #%d. CCFlag %d, TamperFlag %d, PairBtnFlag %d", + intCnt, ccIntFlag, tamperIntFlag, pairBtnIntFlag); + // TODO add tamper + if (pairBtnIntFlag) { // Wait up to 1 second for short button hit + for (int i=0; i<10;i++) { + if (bbio->isPairBtn() == false){ // Button released + break; + } + wait(0.1); + } + } if (ccIntFlag || // If contact closure in - (tamperIntFlag && (bbio.isPairBtn() == false))) { // If short pair btn hit + (pairBtnIntFlag && (bbio->isPairBtn() == false))) { // If short pair btn hit ccIntFlag = false; tamperIntFlag = false; + pairBtnIntFlag = false; #if LED_FEEDBACK - bbio.ledOn(); + bbio->ledOn(); #endif data.push_back((seqNum >> 8) & 0xFF); data.push_back(seqNum & 0xFF); - protocol.send(data); + protocol->send(data); seqNum++; wait(0.5); // Leave the LED on so a person can see it. } - bbio.ledOff(); + bbio->ledOff(); // sleep_save_io(); // sleep_configure_io(); dot->sleep(0, mDot::INTERRUPT, false); // Go to sleep until wake button - sleep_restore_io(); +// sleep_restore_io(); } - if (protocol.isRx()) { + if (protocol->isRx()) { bool msgPending; - protocol.listen(msgPending); + protocol->listen(msgPending); + logInfo("Listening."); if (msgPending) { - protocol.recv(data); + protocol->recv(data); std::string dataStr(data.begin(), data.end()); logInfo("Got msg num: %d, payload: %s", seqNum, dataStr.c_str()); - bbio.relayAlert(); + bbio->relayAlert(); seqNum++; #if LED_FEEDBACK - bbio.ledOn(); + bbio->ledOn(); #endif wait(0.5); // TODO this should be configurable } - bbio.ledOff(); - bbio.relayNormal(); + bbio->ledOff(); + bbio->relayNormal(); logInfo("Sleeping. Time %d", us_ticker_read()); // sleep_save_io(); // sleep_configure_io(); @@ -180,6 +202,7 @@ // Need to re-implement some of these sleep functions // sleep_save_io(); // sleep_configure_io(); + intCnt++; } return 0;