From 818d67466db91c4fab22d34c9a9a7396b38e0a96 Mon Sep 17 00:00:00 2001 From: nrs1g15 <nrs1g15@soton.ac.uk> Date: Fri, 26 Jul 2019 16:19:40 +0100 Subject: [PATCH] Removed folders now in legacy folder --- sufst-can-sd-xbee/sufst-can-sd-xbee.ino | 1638 ----------------- sufst-openlogger/.idea/codeStyles/Project.xml | 76 - .../.idea/codeStyles/codeStyleConfig.xml | 5 - sufst-openlogger/.idea/misc.xml | 6 - sufst-openlogger/.idea/modules.xml | 8 - sufst-openlogger/.idea/sufst-openlogger.iml | 8 - sufst-openlogger/.idea/vcs.xml | 6 - sufst-openlogger/.idea/workspace.xml | 301 --- sufst-openlogger/buffer.cpp | 135 -- sufst-openlogger/buffer.h | 42 - sufst-openlogger/openLogger.cpp | 434 ----- sufst-openlogger/openLogger.h | 53 - sufst-openlogger/sufst-openlogger.ino | 21 - .../.idea/codeStyles/Project.xml | 60 - .../.idea/codeStyles/codeStyleConfig.xml | 5 - sufst-openlogger_controller/.idea/misc.xml | 6 - sufst-openlogger_controller/.idea/modules.xml | 8 - .../.idea/sufst-openlogger_controller.iml | 8 - sufst-openlogger_controller/.idea/vcs.xml | 6 - .../.idea/workspace.xml | 374 ---- sufst-openlogger_controller/buffer.cpp | 142 -- sufst-openlogger_controller/buffer.h | 48 - sufst-openlogger_controller/can.cpp | 310 ---- sufst-openlogger_controller/can.h | 69 - sufst-openlogger_controller/ecuCan.cpp | 304 --- sufst-openlogger_controller/ecuCan.h | 38 - .../ecuOpenloggerTags.h | 19 - .../openLoggerController.cpp | 296 --- .../openLoggerController.h | 49 - .../sufst-openlogger_controller.ino | 103 -- 30 files changed, 4578 deletions(-) delete mode 100644 sufst-can-sd-xbee/sufst-can-sd-xbee.ino delete mode 100644 sufst-openlogger/.idea/codeStyles/Project.xml delete mode 100644 sufst-openlogger/.idea/codeStyles/codeStyleConfig.xml delete mode 100644 sufst-openlogger/.idea/misc.xml delete mode 100644 sufst-openlogger/.idea/modules.xml delete mode 100644 sufst-openlogger/.idea/sufst-openlogger.iml delete mode 100644 sufst-openlogger/.idea/vcs.xml delete mode 100644 sufst-openlogger/.idea/workspace.xml delete mode 100644 sufst-openlogger/buffer.cpp delete mode 100644 sufst-openlogger/buffer.h delete mode 100644 sufst-openlogger/openLogger.cpp delete mode 100644 sufst-openlogger/openLogger.h delete mode 100644 sufst-openlogger/sufst-openlogger.ino delete mode 100644 sufst-openlogger_controller/.idea/codeStyles/Project.xml delete mode 100644 sufst-openlogger_controller/.idea/codeStyles/codeStyleConfig.xml delete mode 100644 sufst-openlogger_controller/.idea/misc.xml delete mode 100644 sufst-openlogger_controller/.idea/modules.xml delete mode 100644 sufst-openlogger_controller/.idea/sufst-openlogger_controller.iml delete mode 100644 sufst-openlogger_controller/.idea/vcs.xml delete mode 100644 sufst-openlogger_controller/.idea/workspace.xml delete mode 100644 sufst-openlogger_controller/buffer.cpp delete mode 100644 sufst-openlogger_controller/buffer.h delete mode 100644 sufst-openlogger_controller/can.cpp delete mode 100644 sufst-openlogger_controller/can.h delete mode 100644 sufst-openlogger_controller/ecuCan.cpp delete mode 100644 sufst-openlogger_controller/ecuCan.h delete mode 100644 sufst-openlogger_controller/ecuOpenloggerTags.h delete mode 100644 sufst-openlogger_controller/openLoggerController.cpp delete mode 100644 sufst-openlogger_controller/openLoggerController.h delete mode 100644 sufst-openlogger_controller/sufst-openlogger_controller.ino diff --git a/sufst-can-sd-xbee/sufst-can-sd-xbee.ino b/sufst-can-sd-xbee/sufst-can-sd-xbee.ino deleted file mode 100644 index 0d9a240..0000000 --- a/sufst-can-sd-xbee/sufst-can-sd-xbee.ino +++ /dev/null @@ -1,1638 +0,0 @@ -// Watchdog -#include <avr/wdt.h> - -/* TABLE OF CONTENTS */ -/* 1. START OF MODULES CONFIG */ -/* 2. START OF DEBUG */ -/* 3. COMPILER NOTICES */ -/* 4. SHAFT SPEED */ -/* 5. SD */ -/* 6. XBee */ -/* 7. CAN */ -/* 8. FUNCTION PROTOTYPES */ -/* 9. FUNCTION POINTERS */ -/* 10. SHAFT FUNCTIONS */ -/* 11. ECU FUNCTIONS */ -/* 12. CAN FUNCTIONS */ -/* 13. TIMER FUNCTIONS */ -/* 14. SD FUNCTIONS */ -/* 15. XBee FUNCTIONS */ -/* 16. ARDUINO FUNCTIONS (SETUP AND LOOP) */ - - -/***************** START OF MODULES CONFIG *********************/ -#define SD_ENABLED 1 - -// TODO: ADD XBEE BUFFERS -#define XBEE_ENABLED 0 - -#define SHAFT_SPEED_SENSOR_ENABLED 0 - -#define EMULATE_ECU 0 - -#define ECU_ATTACHED_ENABLED 1 - -#define RPM_LEDS_ENABLED 0 - -/***************** START OF DEBUG *********************/ -#define DEBUG_CAN_RX 0 -#define DEBUG_CAN_RX_MINIMAL 0 - -#define DEBUG_CAN_TX 0 -#define DEBUG_CAN_TX_MINIMAL 0 -#define DEBUG_CAN_TX_REQS 0 - -#define DEBUG_ECU_CAN 0 -#define DEBUG_ECU_CAN_MINIMAL 0 - -#define DEBUG_SD 0 -#define DEBUG_SD_MINIMAL 1 -#define SD_SERIAL_PRINT_BLOCK_WRITES 1 - -#define DEBUG_SHAFT_SPEED 0 -/***************** END OF DEBUG ********************/ - -/***************** START OF COMPLIER NOTICES *********************/ -#if EMULATE_ECU -#pragma message "Emulate ECU Enabled" -#endif //EMULATE_ECU - -#if ECU_ATTACHED_ENABLED -#pragma message "ECU Attached Enabled" -#endif //ECU_ATTACHED_ENABLED - -#if DEBUG_CAN_RX -#pragma message "Can Rx Debug Enabled" -#endif //DEBUG_CAN_RX - -#if DEBUG_CAN_RX_MINIMAL -#pragma message "Can Rx Minimal Debug Enabled" -#endif //DEBUG_CAN_RX_MINIMAL - -#if DEBUG_CAN_TX -#pragma message "Can Tx Debug Enabled" -#endif //DEBUG_CAN_TX - -#if DEBUG_CAN_TX_MINIMAL -#pragma message "Can Tx Minimal Debug Enabled" -#endif //DEBUG_CAN_TX_MINIMAL - -#if DEBUG_CAN_TX_REQS -#pragma message "Can Tx Requests Debug Enabled" -#endif //DEBUG_CAN_TX_REQS - -#if DEBUG_ECU_CAN -#pragma message "ECU Debug Enabled" -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL -#pragma message "ECU Minimal Debug Enabled" -#endif //DEBUG_ECU_CAN_MINIMAL - -#if DEBUG_SD -#pragma message "SD Debug Enabled" -#endif //DEBUG_SD - -#if DEBUG_SD_MINIMAL -#pragma message "SD Minimal Debug Enabled" -#endif //DEBUG_SD_MINIMAL - -#if SD_ENABLED -#pragma message "SD Enabled" -#endif //SD_ENABLED - -#if XBEE_ENABLED -#pragma message "Xbee Enabled" -#endif //XBEE_ENABLED - -#if SHAFT_SPEED_SENSOR_ENABLED -#pragma message "Shaft Speed Sensor Enabled" -#endif // SHAFT_SPEED_SENSOR_ENABLED - -#if DEBUG_SHAFT_SPEED -#pragma message "Shaft Speed Debug Enabled" -#endif //DEBUG_SHAFT_SPEED - -#if SD_SERIAL_PRINT_BLOCK_WRITES -#pragma message "SD Serial Printing Block Writes Info Enabled" -#endif //SD_SERIAL_PRINT_BLOCK_WRITES - -#if RPM_LEDS_ENABLED -#pragma message "RPM LEDs Enabled" -#endif //RPM_LEDS_ENABLED -/***************** END OF COMPLIER NOTICES *********************/ - -/***************** START OF SHAFT SPEED *********************/ -#if SHAFT_SPEED_SENSOR_ENABLED - -#define SHAFT_SPEED_SENSOR_PIN A15 - -#define SHAFT_HARDWARE_TIMER_NR 5 - -#define SHAFT_SPEED_THRESHOLD_VALUE 2 - -#define SHAFT_CALC_FREQUENCY_RATE_FREQ 10000 - -volatile float shaftLastCalcFrequency = 0.0; - -#endif //SHAFT_SPEED_SENSOR_ENABLED -/***************** END OF SHAFT SPEED *********************/ - -/***************** START OF RPM LEDS **********************/ -#if RPM_LEDS_ENABLED -#define RPM1_PIN 0 -#define RPM2_PIN 1 -#define RPM3_PIN 2 -#define RPM4_PIN 3 -#define RPM5_PIN 4 -#define UPSHIT_PIN 5 //CHANGED XBEE CTS AND RTS PIN care - -#define RED1_THRESHOLD 6000 // below this, time to downshit -#define RED2_THRESHOLD 8000 -#define GREEN1_THRESHOLD 10000 -#define GREEN2_THRESHOLD 11000 -#define GREEN3_THRESHOLD 12000 -#define UPSHIT_THRESHOLD 13000 //above this, time to upshit - - -uint16_t g_RPM = 0; - -#endif // RPM_LEDS_ENABLED -/***************** END OF RPM LEDS **********************/ -/***************** START OF SD *********************/ -#if SD_ENABLED - -#define SD_WRITE_BUFFER_LEN 3 - -#define SD_WRITE_FREQUENCY 10 -#define SD_HARDWARE_TIMER_NR 4 - -#define SD_CS_PIN 8 - -#include <SdFat.h> - -typedef struct { - uint16_t blockHead; - // Writing 512 bytes per write gives fastest performance due to - // least overheads. - uint8_t block[512]; -} sdBlockTemplate; - -static sdBlockTemplate sdWriteBuffer[SD_WRITE_BUFFER_LEN]; - -uint16_t sdWriteBufferHead = 0; -uint16_t sdWriteBufferTail = 0; - -SdFat sd; -SdFile file; - -uint8_t sdCardStatus = 0; - -#if ECU_ATTACHED_ENABLED - -#define ECU_SD_START_BYTE 0x8C -#define ECU_SD_END_BYTE 0xA7 - -#endif //ECU_ATTACHED_ENABLED - -#endif // SD_ENABLED - -/***************** END OF SD *********************/ - -/***************** START OF XBEE *********************/ -#if XBEE_ENABLED - -#define XBEE_USE_OWN_TX_BUFFER 1 - -#define XBEE_CTS_PIN 6 -#define XBEE_RTS_PIN 7 - -#define XBEE_CAN_NO_REC_PERIOD_BEFORE_TRANSMIT_MS 2 - -#include "XBee.h" - -XBee xbee; - -XBeeAddress64 xbeeAddress64(0x0013A200, 0x410AC922); -Tx64Request xbeeTx64Request(xbeeAddress64, 0, 0); - -#endif // XBEE_ENABLED - -/***************** END OF XBEE *********************/ - -/***************** START OF CAN *********************/ -// CAN_INT_PIN MUST BE 2 -#define CAN_INT_PIN 2 -#define CAN_CS_PIN 10 - -#define CAN_RX_BUFFER_LEN 128 -#define CAN_TX_BUFFER_LEN 64 - -#define CAN_RESET_DEVICE_ON_TIMEOUT 0 -#define CAN_NO_MSG_TIMEOUT_RESET_MS 10000 - -#define CAN_TX_RETRY_LIMIT 5 - - -#include <mcp_can.h> -#include <mcp_can_dfs.h> - -typedef struct { - union { - uint16_t id; - // if id is 0x2001 then idByte[0] is 0x01 and idByte[1] is 0x20 - // due to the endianness of the system - uint8_t idByte[2]; - }; - uint8_t len; - - union { - uint8_t data[8]; - uint16_t data16[4]; - uint32_t data32[2]; - float dataFl[2]; - }; - -} CanMsgTemplate; - -// Can Rx Buffer -static CanMsgTemplate canRxBuffer[CAN_RX_BUFFER_LEN]; -volatile uint8_t canRxBufferHead = 0; -volatile uint8_t canRxBufferTail = 0; - -// Can Tx Buffer -static CanMsgTemplate canTxBuffer[CAN_TX_BUFFER_LEN]; -volatile uint8_t canTxBufferHead = 0; -volatile uint8_t canTxBufferTail = 0; - -// Can instance -MCP_CAN can; - -// Keep track of the last time we received a can msg -volatile unsigned long lastCanMsgRecTimeMs = 0; -unsigned long currMs = 0; - -/***************** END OF CAN *********************/ - -/***************** START OF FUNCTION PROTOS *********************/ -// ECU -#if ECU_ATTACHED_ENABLED - -static uint8_t ecuCanMsg0x2000(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2001(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2002(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2003(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2004(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2005(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2006(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2007(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2008(CanMsgTemplate *canMsg); - -static uint8_t ecuCanMsg0x2009(CanMsgTemplate *canMsg); - -#if SD_ENABLED - -uint8_t ecuAddToSdWriteRequest(CanMsgTemplate *canMsg); - -#endif // SD_ENABLED - -#endif // ECU_ATTACHED_ENABLED - -// CAN -uint8_t canSaveMsg(); - -void canAddTxRequest(uint16_t id, void *data, uint8_t lenBytes); - -void canBeginExtInterrupt(); - -uint8_t canParseRxMsg(CanMsgTemplate *canMsg); - -uint8_t canProcessRx(); - -uint8_t canProcessTx(); - -void canNoActivityResetDevice(); - -// TIMERS -#if SD_ENABLED || EMULATE_ECU || SHAFT_SPEED_SENSOR_ENABLED - -void timerBegin(uint16_t freq); - -static uint8_t timerSetupTimer3Using256Prescal(uint16_t freq); - -static uint8_t timerSetupTimer4Using256Prescal(uint16_t freq); - -static uint8_t timerSetupTimer5Using256Prescal(uint16_t freq); - -#endif // SD_ENABLED || EMULATE_ECU - -// SD -#if SD_ENABLED - -uint8_t sdBegin(); - -uint8_t sdWriteBufferBlocks(); - -uint8_t sdAddToWriteBlocks(void *pPayload, uint8_t payloadLen); - -uint8_t sdProcessWrite(); - -#endif // SD_ENABLED - -// XBEE -#if XBEE_ENABLED -uint8_t canTransmitRxToXbee() -#endif //XBEE_ENABLED - -/***************** END OF FUNCTION PROTOS *********************/ - - -/***************** START OF FUNCTIONS PTRS *********************/ -// CAN -#define CAN_ECU_MSG_0x2000_FUNC ecuCanMsg0x2000 -#define CAN_ECU_MSG_0x2001_FUNC ecuCanMsg0x2001 -#define CAN_ECU_MSG_0x2002_FUNC ecuCanMsg0x2002 -#define CAN_ECU_MSG_0x2003_FUNC ecuCanMsg0x2003 -#define CAN_ECU_MSG_0x2004_FUNC ecuCanMsg0x2004 -#define CAN_ECU_MSG_0x2005_FUNC ecuCanMsg0x2005 -#define CAN_ECU_MSG_0x2006_FUNC ecuCanMsg0x2006 -#define CAN_ECU_MSG_0x2007_FUNC ecuCanMsg0x2007 -#define CAN_ECU_MSG_0x2008_FUNC ecuCanMsg0x2008 -#define CAN_ECU_MSG_0x2009_FUNC ecuCanMsg0x2009 - -#define CAN_ECU_NUMBER_CAN_IDS 10 - -// ECU can messages function pointers for calling the corresponding function when that msg is seen. -// Used in function canParseRxMsg. -uint8_t -(*ecuCanFuncPtrs[CAN_ECU_NUMBER_CAN_IDS])(CanMsgTemplate *) = {CAN_ECU_MSG_0x2000_FUNC, CAN_ECU_MSG_0x2001_FUNC, - CAN_ECU_MSG_0x2002_FUNC, - CAN_ECU_MSG_0x2003_FUNC, - CAN_ECU_MSG_0x2004_FUNC, CAN_ECU_MSG_0x2005_FUNC, - CAN_ECU_MSG_0x2006_FUNC, - CAN_ECU_MSG_0x2007_FUNC, CAN_ECU_MSG_0x2008_FUNC, - CAN_ECU_MSG_0x2009_FUNC}; - - -// TIMERS -#if SD_ENABLED || EMULATE_ECU || SHAFT_SPEED_SENSOR_ENABLED - -#define HARDWARE_TIMER_0_BEGIN_FUNC NULL -#define HARDWARE_TIMER_1_BEGIN_FUNC NULL -#define HARDWARE_TIMER_2_BEGIN_FUNC NULL -#define HARDWARE_TIMER_3_BEGIN_FUNC timerSetupTimer3Using256Prescal -#define HARDWARE_TIMER_4_BEGIN_FUNC timerSetupTimer4Using256Prescal -#define HARDWARE_TIMER_5_BEGIN_FUNC timerSetupTimer5Using256Prescal - -// Array of pointers for calling the corresponding hardware timer setup function from the selected -// hardtimer number passed to timerBegin -uint8_t (*timerBeginFuncPtrs[6])(uint16_t) -= { -HARDWARE_TIMER_0_BEGIN_FUNC, HARDWARE_TIMER_1_BEGIN_FUNC, HARDWARE_TIMER_2_BEGIN_FUNC, -HARDWARE_TIMER_3_BEGIN_FUNC, HARDWARE_TIMER_4_BEGIN_FUNC, HARDWARE_TIMER_5_BEGIN_FUNC}; - -#endif // SD_ENABLED || EMULATE_ECU || SHAFT_SPEED_SENSOR_ENABLED -/***************** END OF FUNCTIONS PTRS *********************/ - -/***************** START OF SHAFT FUNCTIONS *********************/ -#if SHAFT_SPEED_SENSOR_ENABLED - -static void shaftCheckThreshold() { - volatile uint16_t shaftVal = analogRead(SHAFT_SPEED_SENSOR_PIN); - - //Serial.print("SH "); - //Serial.println(shaftVal); - - volatile uint8_t shaftThresholdPassed = (shaftVal > SHAFT_SPEED_THRESHOLD_VALUE) ? 1 : 0; - - volatile static uint8_t shaftLastSeenThreshold = 0; - - volatile static unsigned long shaftLastPulseDetectedMs = 0; - - volatile static float shaftPrevCalcFrequencies[4] = {0, 0, 0, 0}; - - if (shaftThresholdPassed) { - if (!shaftLastSeenThreshold) { - unsigned long currMs = millis(); - - memcpy(shaftPrevCalcFrequencies, &(shaftPrevCalcFrequencies[1]), 4); - memcpy(&(shaftPrevCalcFrequencies[1]), &(shaftPrevCalcFrequencies[2]), 4); - memcpy(&(shaftPrevCalcFrequencies[2]), &(shaftPrevCalcFrequencies[3]), 4); - - shaftPrevCalcFrequencies[3] = 1000.0 / (currMs - shaftLastPulseDetectedMs); - - //Serial.print("FREQ "); - Serial.println(shaftPrevCalcFrequencies[3]); - - shaftLastCalcFrequency = - (shaftPrevCalcFrequencies[0] + shaftPrevCalcFrequencies[1] + shaftPrevCalcFrequencies[2] + - shaftPrevCalcFrequencies[3]) / 4; - -#if DEBUG_SHAFT_SPEED - //Serial.print("SHAFT : FREQ CALC "); - //Serial.println(shaftLastCalcFrequency); -#endif // DEBUG_SHAFT_SPEED - - shaftLastPulseDetectedMs = currMs; - shaftLastSeenThreshold = 1; - } - } else { - if (shaftLastSeenThreshold) { - shaftLastSeenThreshold = 0; - } - } -} - -#endif // SHAFT_SPEED_SENSOR_ENABLED - -/***************** END OF SHAFT FUNCTIONS *********************/ - -/***************** START OF ECU FUNCTIONS *********************/ -#if SD_ENABLED - -uint8_t ecuAddToSdWriteRequest(CanMsgTemplate *canMsg) { - - uint8_t ecuSdStartByte = ECU_SD_START_BYTE; - - uint8_t ecuSdEndByte = ECU_SD_END_BYTE; - - if (sdCardStatus) { - uint8_t retVal = sdAddToWriteBlocks(&ecuSdStartByte, 1); - retVal = sdAddToWriteBlocks(&(canMsg->idByte[0]), 1); - retVal = sdAddToWriteBlocks(&(canMsg->data), 8); - } - - return 1; -} - -#endif // SD_ENABLED - -static uint8_t ecuCanMsg0x2000(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2000 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2000"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t rpm = canMsg->data16[0]; -#if RPM_LEDS_ENABLED - g_RPM = rpm; -#endif - - uint16_t tpsPerc = canMsg->data16[1]; - uint16_t waterTempC = canMsg->data16[2]; - uint16_t airTempC = canMsg->data16[3]; - - Serial.println(tpsPerc); - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2001(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2001 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2001"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t mainifoldPresKpa = canMsg->data16[0]; - uint16_t lambdax1000 = canMsg->data16[1]; - uint16_t speedKphx10 = canMsg->data16[2]; - uint16_t oilPressKpa = canMsg->data16[3]; - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2002(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2002 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2002"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t fuelPressKpa = canMsg->data16[0]; - uint16_t oilTempC = canMsg->data16[1]; - uint16_t batteryVx10 = canMsg->data16[2]; - uint16_t fuelComsumLpHrx10 = canMsg->data16[3]; - - - // Serial.println((float)(batteryVx10 / 10.0)); - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2003(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2003 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2003"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t currentGear = canMsg->data16[0]; - uint16_t advanceDegx10 = canMsg->data16[1]; - uint16_t injectionTimeMsx100 = canMsg->data16[2]; - uint16_t fuelComsumLp100kMx10 = canMsg->data16[3]; - - Serial.println(currentGear); - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2004(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2004 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2004"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t ana1mV = canMsg->data16[0]; - uint16_t ana2mV = canMsg->data16[1]; - uint16_t ana3mV = canMsg->data16[2]; - uint16_t camAdvanceDegx10 = canMsg->data16[3]; - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2005(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2005 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2005"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t camTargDegx10 = canMsg->data16[0]; - uint16_t camPwmPercx10 = canMsg->data16[1]; - uint16_t crankErrorsNr = canMsg->data16[2]; - uint16_t camErrorsNr = canMsg->data16[3]; - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2006(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2006 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2006"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t cam2AdvDegx10 = canMsg->data16[0]; - uint16_t cam2TargDegx10 = canMsg->data16[1]; - uint16_t cam2PwmPercx10 = canMsg->data16[2]; - uint16_t external5VmV = canMsg->data16[3]; - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - - return 1; -} - -static uint8_t ecuCanMsg0x2007(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2007 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2007"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t injDutyCyclePerc = canMsg->data16[0]; - uint16_t lambdaPidTargPercx10 = canMsg->data16[1]; - uint16_t lambdaPidAdjPercx10 = canMsg->data16[2]; - uint16_t ecuSwitchesBitField = canMsg->data16[3]; - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2008(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2008 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2008"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t rdSpeedKphx10 = canMsg->data16[0]; - uint16_t rUdSpeedKphx10 = canMsg->data16[1]; - uint16_t ldSpeedKphx10 = canMsg->data16[2]; - uint16_t lUdSpeedKphx10 = canMsg->data16[3]; - -#if SD_ENABLED - ecuAddToSdWriteRequest(canMsg); -#endif // SD_ENABLED - - return 1; -} - -static uint8_t ecuCanMsg0x2009(CanMsgTemplate *canMsg) { -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2009 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2008"); -#endif //DEBUG_ECU_CAN_MINIMAL - - //uint16_t rightLambdax1000 = canMsg->data16[0]; - - return 1; -} - -/***************** END OF ECU FUNCTIONS *********************/ - -/***************** START OF CAN FUNCTIONS *********************/ - -uint8_t canSaveMsg() { - if (digitalRead(CAN_INT_PIN)) { - return 0; - } - - union { - uint8_t id[4]; - uint32_t id32; - } uid; - - if (can.checkReceive() != CAN_MSGAVAIL) { - return 0; - } - - CanMsgTemplate *currCanRxBufferSlot = &(canRxBuffer[canRxBufferHead]); - - if (can.readMsgBuf(&(currCanRxBufferSlot->len), currCanRxBufferSlot->data) != CAN_OK) { - return 0; - } - - uid.id32 = can.getCanId(); - - currCanRxBufferSlot->id = (uid.id[1] << 8) | uid.id[0]; - - canRxBufferHead = (canRxBufferHead + 1) % CAN_RX_BUFFER_LEN; - -#if DEBUG_CAN_RX - Serial.print("CAN SV RX: "); - - Serial.print(currCanRxBufferSlot->id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < 7; i++) { - Serial.print(currCanRxBufferSlot->data[i]); - Serial.print(", "); - } - Serial.println(currCanRxBufferSlot->data[7]); -#endif // DEBUG_CAN_RX - -#if DEBUG_CAN_RX - Serial.print("CAN SV RX: HEAD AT "); - Serial.println(canRxBufferHead); -#endif // DEBUG_CAN_RX - - if (canRxBufferHead == canRxBufferTail) { - canRxBufferTail = (canRxBufferTail + 1) % CAN_RX_BUFFER_LEN; - -#if DEBUG_CAN_RX || DEBUG_CAN_RX_MINIMAL - Serial.println("CAN SV RX: BUFFER FULL"); -#endif // DEBUG_CAN_RX - -#if DEBUG_CAN_RX - Serial.print("CAN SV RX: TAIL AT "); - Serial.println(canRxBufferTail); -#endif // DEBUG_CAN_RX - } - - return 1; -} - -void canAddTxRequest(uint16_t id, void *data, uint8_t lenBytes) { - data = (uint8_t *) data; - - CanMsgTemplate *currCanTxBufferSlot = &(canTxBuffer[canTxBufferHead]); - - if (NULL == data) { - return; - } - - noInterrupts(); - currCanTxBufferSlot->id = id; - - currCanTxBufferSlot->len = lenBytes; - - memcpy(currCanTxBufferSlot->data, data, lenBytes); - - interrupts(); - -#if DEBUG_CAN_TX_REQS - Serial.print("CAN TX ADD: "); - Serial.print(currCanTxBufferSlot->id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < 7; i++) { - Serial.print(currCanTxBufferSlot->data[i], HEX); - Serial.print(", "); - } - Serial.println(currCanTxBufferSlot->data[7], HEX); -#endif // DEBUG_CAN_TX_REQS - - noInterrupts(); - canTxBufferHead = (canTxBufferHead + 1) % CAN_TX_BUFFER_LEN; - interrupts(); - - noInterrupts(); - if (canTxBufferHead == canTxBufferTail) { - canTxBufferTail = (canTxBufferTail + 1) % CAN_TX_BUFFER_LEN; - -#if DEBUG_CAN_TX || DEBUG_CAN_TX_MINIMAL - Serial.println("CAN TX BUFFER FULL"); -#endif // DEBUG_CAN_TX - } - interrupts(); - -} - -// External interrupt currently only designed to work with atmega 2560 -#if !defined(__AVR_ATmega2560__) -#error "PLATFORM NOT SUPPORTED CURRENTLY" -#endif // !defined(atmega2560) - -#if CAN_INT_PIN != 2 -#error "CAN_INT_PIN CHANGED FROM 2" -#endif //CAN_INT_PIN != 2 - -void canBeginExtInterrupt() { - noInterrupts(); - - // On the mega 2560 pin 2 is external interrupt 4 - EIMSK &= ~(1 << INT4); - - EICRB &= ~(1 << ISC41); - //EICRB &= ~(1 << ISC40); - - EIMSK |= (1 << INT4); - - interrupts(); -} - -ISR(INT4_vect) { - - noInterrupts(); - - lastCanMsgRecTimeMs = millis(); - - canSaveMsg(); - - interrupts(); -} - -uint8_t canParseRxMsg(CanMsgTemplate *canMsg) { - if ((canMsg->id >= 0x2000) && (canMsg->id <= 0x200A)) { - // canMsg->idByte[0] holds the 0x01 in 0x2001 received can msg - // We use the sub byte of the can ecu msg to determine the corresonding function - // This removes the need for a long if statement giving significant performance boosts - return (*ecuCanFuncPtrs[canMsg->idByte[0]])(canMsg); - } - - - return 0; -} - -uint8_t canProcessRx() { - uint8_t retVal = 0; - - noInterrupts(); - canSaveMsg(); - - CanMsgTemplate *currCanRxBufferSlot = &(canRxBuffer[canRxBufferTail]); - interrupts(); - - noInterrupts(); - while (canRxBufferTail != canRxBufferHead) { - -#if DEBUG_CAN_RX - Serial.print("CAN RX: "); - - Serial.print(currCanRxBufferSlot->id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < 7; i++) { - Serial.print(currCanRxBufferSlot->data[i]); - Serial.print(", "); - } - Serial.println(currCanRxBufferSlot->data[7]); -#endif // DEBUG_CAN_RX - -#if DEBUG_CAN_RX_MINIMAL - Serial.print("CAN PRO RX : "); - Serial.println(currCanRxBufferSlot->id, HEX); -#endif // DEBUG_CAN_RX_MINIMAL - - retVal = canParseRxMsg(currCanRxBufferSlot); - - canRxBufferTail = (canRxBufferTail + 1) % CAN_RX_BUFFER_LEN; - -#if DEBUG_CAN_RX || DEBUG_CAN_RX_MINIMAL - Serial.print("CAN PRO RX: TAIL AT "); - Serial.println(canRxBufferTail); -#endif // DEBUG_CAN_RX || DEBUG_CAN_RX_MINIMAL - - currCanRxBufferSlot = &(canRxBuffer[canRxBufferTail]); - - // This may seem dumb but this allows any pending interrupts to be serviced safely - // just before we start another loop. Otherwise if we stay in this loop too long without - // servicing any interrupts we might miss one. - interrupts(); - noInterrupts(); - } - interrupts(); - - return retVal; -} - -uint8_t canProcessTx() { - - noInterrupts(); - CanMsgTemplate *currCanTxBufferSlot = &(canTxBuffer[canTxBufferTail]); - - uint8_t retVal = 0; - - while (canTxBufferTail != canTxBufferHead) { - -#if DEBUG_CAN_TX - Serial.print("CAN TX: "); - Serial.print(currCanTxBufferSlot->id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < (currCanTxBufferSlot->len - 1); i++) { - Serial.print(currCanTxBufferSlot->data[i]); - Serial.print(", "); - } - Serial.println(currCanTxBufferSlot->data[currCanTxBufferSlot->len - 1]); -#endif // DEBUG_CAN_TX - -#if DEBUG_CAN_TX_MINIMAL - Serial.print("CAN TX : "); - Serial.println(currCanTxBufferSlot->id, HEX); -#endif // DEBUG_CAN_TX_MINIMAL - - uint8_t canTxWasSuccessful = 0; - - for (uint8_t i = 0; i < CAN_TX_RETRY_LIMIT; i++) { - if (can.sendMsgBuf(currCanTxBufferSlot->id, 1, currCanTxBufferSlot->len, - currCanTxBufferSlot->data, true) == CAN_OK) { - - canTxBufferTail = (canTxBufferTail + 1) % CAN_TX_BUFFER_LEN; - - currCanTxBufferSlot = &(canTxBuffer[canTxBufferTail]); - - canTxWasSuccessful = 1; - - retVal = 1; - - break; - } else { - - retVal = 0; - } - } - - if (!canTxWasSuccessful) { - -#if DEBUG_CAN_TX || DEBUG_CAN_TX_MINIMAL - Serial.println("CAN TX: TX FAILED"); -#endif // DEBUG_CAN_TX || DEBUG_CAN_TX_MINIMAL - - canTxBufferTail = (canTxBufferTail + 1) % CAN_TX_BUFFER_LEN; - - currCanTxBufferSlot = &(canTxBuffer[canTxBufferTail]); - } - - // This may seem dumb but this allows any pending interrupts to be serviced safely - // just before we start another loop. Otherwise if we stay in this loop too long without - // servicing any interrupts we might miss one. - interrupts(); - noInterrupts(); - } - - interrupts(); - - return retVal; -} - -void canNoActivityResetDevice() { - Serial.println("CAN ERROR : RESETTING DEVICE"); - Serial.flush(); - -#if SD_ENABLED - - uint8_t payload[10] = {0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00}; - - sdAddToWriteBlocks(payload, 10); - - sdWriteBufferBlocks(); - -#endif //SD_ENABLED - - // Enabled watchdog timer to reset device as we will not pat it - wdt_enable(WDTO_15MS); - - while (true); - -} - -/***************** END OF CAN FUNCTIONS *********************/ - -/***************** START OF TIMER FUNCTIONS *********************/ -#if SD_ENABLED || EMULATE_ECU || SHAFT_SPEED_SENSOR_ENABLED - -// Hardware timers currently only designed to work with atmega 2560 -#if !defined(__AVR_ATmega2560__) -#error "PLATFORM NOT SUPPORTED CURRENTLY" -#endif // !defined(atmega2560) - -/* - * FOR REFERENCE: - * - * The defines here such as TCCR3A are defined in AVR backend files - * Hence, they are not defined anywhere - * - */ - -static uint8_t timerSetupTimer3Using256Prescal(uint16_t freq) { - if ((freq < 1) || (freq > 62500)) { - return 0; - } - noInterrupts(); - - TCCR3A = 0; - TCCR3B = 0; - TCNT3 = 0; - - // F_CPU is passed to the compilier by arduino so we do not defined it ourselves - // but we can access it - OCR3A = (uint16_t)(F_CPU / (256 * freq)); - - // 256 Prescaler - TCCR3B |= (1 << WGM32); - TCCR3B |= (1 << CS32); - - // Enable timer - TIMSK3 |= (1 << OCIE3A); - - interrupts(); - - return 1; -} - -static uint8_t timerSetupTimer4Using256Prescal(uint16_t freq) { - if ((freq < 1) || (freq > 62500)) { - return 0; - } - - noInterrupts(); - - TCCR4A = 0; - TCCR4B = 0; - TCNT4 = 0; - - // F_CPU is passed to the compilier by arduino so we do not defined it ourselves - // but we can access it - OCR4A = (uint16_t)(F_CPU / (256 * freq)); - - // 256 Prescaler - TCCR4B |= (1 << WGM42); - TCCR4B |= (1 << CS42); - - // Enable timer - TIMSK4 |= (1 << OCIE4A); - - interrupts(); - - return 1; -} - -static uint8_t timerSetupTimer5Using256Prescal(uint16_t freq) { - if ((freq < 1) || (freq > 62500)) { - return 0; - } - - noInterrupts(); - - TCCR5A = 0; - TCCR5B = 0; - TCNT5 = 0; - - // F_CPU is passed to the compilier by arduino so we do not defined it ourselves - // but we can access it - OCR5A = (uint16_t)(F_CPU / (256 * freq)); - - // 256 Prescaler - TCCR5B |= (1 << WGM52); - TCCR5B |= (1 << CS52); - - // Enable timer - TIMSK5 |= (1 << OCIE5A); - - interrupts(); - - return 1; -} - -uint8_t timerBegin(uint16_t freq, uint8_t hwTimerNr) { - return (*timerBeginFuncPtrs[hwTimerNr])(freq); -} - -ISR(TIMER3_COMPA_vect) { -#if EMULATE_ECU - uint16_t data[4] = { 0xFFBB, 0xAA88, 0x7799, 0xCCFF }; - - canAddTxRequest(0x2000, data, 8); - canAddTxRequest(0x2001, data, 8); - canAddTxRequest(0x2002, data, 8); - canAddTxRequest(0x2003, data, 8); - canAddTxRequest(0x2004, data, 8); - canAddTxRequest(0x2005, data, 8); - canAddTxRequest(0x2006, data, 8); - -#endif //EMULATE_ECU -} - -ISR(TIMER4_COMPA_vect) { -#if RPM_LEDS_ENABLED - if (rpmBlueFlashFlag){ - rpmBlueFlashFlag = ~rpmBlueFlashFlag; - } - -#endif // RPM_LEDS_ENABLED -} - -ISR(TIMER5_COMPA_vect) { -#if SHAFT_SPEED_SENSOR_ENABLED - - shaftCheckThreshold(); - -#endif // SHAFT_SPEED_SENSOR_ENABLED -} - -#endif // SD_ENABLED || EMULATE_ECU || SHAFT_SPEED_SENSOR_ENABLED -/***************** END OF TIMER FUNCTIONS *********************/ - -/***************** START OF SD FUNCTIONS *********************/ -#if SD_ENABLED - -uint8_t sdBegin() { - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: STARTING SD SERIAL"); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - noInterrupts(); - - if (!sd.begin(SD_CS_PIN, SD_SCK_MHZ(10))) { - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); - - sd.card()->spiStop(); - interrupts(); - return 0; - } - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: STARTED SD SERIAL"); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - if (sd.exists("DATA.BIN")) { - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: FILE EXISTS - REMOVING"); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - if (!sd.remove("DATA.BIN")) { - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); - - sd.card()->spiStop(); - interrupts(); - return 0; - } - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: REMOVED FILE"); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - } - - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: OPENING FILE"); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - if (!file.open("DATA.BIN", O_WRITE | O_CREAT)) { - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); - - sd.card()->spiStop(); - interrupts(); - return 0; - } - - sd.card()->spiStop(); - interrupts(); - - Serial.println("SD: OPEN FOR WRITES"); - Serial.println("SD: !!IMPORTANT NOTICE!!"); - Serial.println("SD: SEND 's' TO STOP WRITES"); - Serial.println("SD: REMOVING SD WITHOUT STOPPING WRITES WILL CORRUPT DATA LOG FILE!"); - - sdCardStatus = 1; - - return 1; -} - -uint8_t sdProcessWrite() { - - if (Serial.available()) { - - char sdReceivedByte = Serial.read(); - - if (sdReceivedByte == 's') { - - if (!sdCardStatus) { - - Serial.println("SD: WRITES ALREADY STOPPED"); - return 0; - } - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: SHUTTING DOWN"); - Serial.flush(); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - noInterrupts(); - sd.card()->spiStart(); - sd.card()->writeStop(); - - if (!file.close()) { - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); - sd.card()->spiStop(); - interrupts(); - - Serial.println("SD: FAILED TO STOP WRITES"); - Serial.println("SD: TRY 's' AGAIN"); - return 0; - } - - sd.card()->spiStop(); - - sdCardStatus = 0; - - interrupts(); - - Serial.println("SD: WRITES STOPPED"); - - } else if (sdReceivedByte == 'g') { - - if (sdCardStatus) { - Serial.println("SD: ALREADY WRITING"); - return 0; - } - - while (!sdBegin()) { - Serial.println("SD: BEGIN FAIL"); - delay(100); - } - - sdCardStatus = 1; - } - } else { - - if (!sdCardStatus) { - return 0; - } - - noInterrupts(); - if ((millis() - lastCanMsgRecTimeMs) > 2) { - interrupts(); - - if (sdWriteBufferTail != sdWriteBufferHead) { - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.println("SD: WRITING BLOCK"); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - sdWriteBufferBlocks(); - } - } - interrupts(); - } - - return 1; -} - -uint8_t sdAddToWriteBlocks(void *pPayload, uint8_t payloadLen) { - -#if DEBUG_SD || DEBUG_SD_MINIMAL - Serial.print("SD: REQ "); - Serial.println(payloadLen); - - Serial.print("SD: BLOCK NR "); - Serial.println(sdWriteBufferHead); - Serial.flush(); -#endif //DEBUG_SD || DEBUG_SD_MINIMAL - - sdBlockTemplate *sdCurrBlock = &(sdWriteBuffer[sdWriteBufferHead]); - - uint16_t sdBytesLeftInCurrBlock = 512 - sdCurrBlock->blockHead; - -#if DEBUG_SD - Serial.print("SD: CURRENT BLOCK HEAD "); - Serial.println(sdCurrBlock->blockHead); - - Serial.print("SD: BYTES LEFT IN BLOCK "); - Serial.println(sdBytesLeftInCurrBlock); - Serial.flush(); -#endif //DEBUG_SD - - if ((payloadLen + sdCurrBlock->blockHead) <= 512) { - memcpy(&(sdCurrBlock->block[sdCurrBlock->blockHead]), pPayload, payloadLen); - - sdCurrBlock->blockHead = sdCurrBlock->blockHead + payloadLen; - -#if DEBUG_SD - Serial.print("SD: WROTE TO CURR BLOCK "); - Serial.println(payloadLen); - Serial.flush(); -#endif //DEBUG_SD - } else { -#if DEBUG_SD - Serial.print("SD: WR THIS AND NEXT BLOCK "); - Serial.println(payloadLen); - Serial.flush(); -#endif //DEBUG_SD - - uint16_t sdBytesToAddThisBlock = sdBytesLeftInCurrBlock; - uint16_t sdBytesToAddNextBlock = payloadLen - sdBytesToAddThisBlock; - -#if DEBUG_SD - Serial.print("SD: WR THIS "); - Serial.println(sdBytesLeftInCurrBlock); - Serial.print("SD: WR NEXT "); - Serial.println(sdBytesToAddNextBlock); - - Serial.flush(); -#endif //DEBUG_SD - - memcpy(&(sdCurrBlock->block[sdCurrBlock->blockHead]), pPayload, sdBytesToAddThisBlock); - - sdWriteBufferHead = (sdWriteBufferHead + 1) % SD_WRITE_BUFFER_LEN; - - sdCurrBlock = &(sdWriteBuffer[sdWriteBufferHead]); - - memcpy(&(sdCurrBlock->block), (uint8_t * )((pPayload + sdBytesToAddThisBlock) - 1), sdBytesToAddNextBlock); - - sdCurrBlock->blockHead = sdBytesToAddNextBlock; - -#if DEBUG_SD - Serial.print("SD: WROTE TO CURR BLOCK "); - Serial.println(sdBytesToAddThisBlock); - - Serial.print("SD: WROTE TO NEXT BLOCK "); - Serial.println(sdBytesToAddNextBlock); - Serial.flush(); -#endif //DEBUG_SD - - } - - return 1; -} - -uint8_t sdWriteBufferBlocks() { - - sdBlockTemplate *sdCurrBlock = &(sdWriteBuffer[sdWriteBufferTail]); - - static uint8_t sdBlocksBeforeSync = 0; - - static uint32_t sdTotalBlocksWrittenToCard = 0; - - noInterrupts(); - sd.card()->spiStart(); - - if (!(file.write(sdCurrBlock->block, 512))) { - return 0; - } - - sd.card()->spiStop(); - noInterrupts(); - - if (sdBlocksBeforeSync >= 2) { - noInterrupts(); - sd.card()->spiStart(); - - file.flush(); - - sd.card()->spiStop(); - noInterrupts(); - - sdBlocksBeforeSync = 0; - } - -#if SD_SERIAL_PRINT_BLOCK_WRITES - Serial.print("SD: BL WR "); - Serial.println(sdTotalBlocksWrittenToCard); -#endif // SD_SERIAL_PRINT_BLOCK_WRITES - - sdBlocksBeforeSync++; - - sdCurrBlock->blockHead = 0; - - sdTotalBlocksWrittenToCard++; - - sdWriteBufferTail = (sdWriteBufferTail + 1) % SD_WRITE_BUFFER_LEN; - - - return 1; -} - -#endif // SD_ENABLED -/***************** END OF SD/EMULATE ECU FUNCTIONS *********************/ - -/***************** START OF XBEE FUNCTIONS *********************/ -#if XBEE_ENABLED - -uint8_t canTransmitRxToXbee() -{ - if (digitalRead(XBEE_CTS_PIN)) { - return 0; - } - - noInterrupts(); - - while (canRxBufferTail != canRxBufferHead) { - - xbeeTx64Request.setPayload(canRxBuffer[canRxBufferTail].data); - xbeeTx64Request.setPayloadLength(canRxBuffer[canRxBufferTail].len); - - xbee.send(xbeeTx64Request); - - canRxBufferTail = (canRxBufferTail + 1) % CAN_RX_BUFFER_LEN; - - if (digitalRead(XBEE_CTS_PIN)) { - interrupts(); - return 0; - } - - // This may seem dumb but this allows any pending interrupts to be serviced safely - // just before we start another loop. Otherwise if we stay in this loop too long without - // servicing any interrupts we might miss one. - interrupts(); - noInterrupts(); - - } - - interrupts(); - - return 1; -} - -#endif //XBEE_ENABLED -/***************** END OF XBEE FUNCTIONS *********************/ -/***************** START OF RPM LED FUNCTIONS *********************/ - -/***************** END OF RPM LED FUNCTIONS *********************/ -#if RPM_LEDS_ENABLED - -void rpmBegin() { - pinMode(RPM1_PIN, OUTPUT); - pinMode(RPM2_PIN, OUTPUT); - pinMode(RPM3_PIN, OUTPUT); - pinMode(RPM4_PIN, OUTPUT); - pinMode(RPM5_PIN, OUTPUT); - timerBegin(4, 4); -} - -void rpmProcessLEDS() { - //Use g_RPM to set LED INDICATORS - //for testing change rpm to tps for testing :) - if (g_RPM > RED1_THRESHOLD) //RED ONE - { - //TURN ON - digitalWrite(RPM1_PIN, 1); - //TURN OFF - digitalWrite(RPM2_PIN, 0); - digitalWrite(RPM3_PIN, 0); - digitalWrite(RPM4_PIN, 0); - digitalWrite(RPM5_PIN, 0); - - - } else if (g_RPM > RED2_THRESHOLD) { //RED TWO - //TURN ON - digitalWrite(RPM1_PIN, 1); - digitalWrite(RPM2_PIN, 1); - //TURN OFF - digitalWrite(RPM3_PIN, 0); - digitalWrite(RPM4_PIN, 0); - digitalWrite(RPM5_PIN, 0); - digitalWrite(UPSHIT_PIN, 0); - } else if (g_RPM > GREEN1_THRESHOLD) { - //TURN ON - digitalWrite(RPM1_PIN, 1); - digitalWrite(RPM2_PIN, 1); - digitalWrite(RPM3_PIN, 1); - //TURN OFF - digitalWrite(RPM4_PIN, 0); - digitalWrite(RPM5_PIN, 0); - digitalWrite(UPSHIT_PIN, 0); - } else if (g_RPM > GREEN2_THRESHOLD) { - //TURN ON - digitalWrite(RPM1_PIN, 1); - digitalWrite(RPM2_PIN, 1); - digitalWrite(RPM3_PIN, 1); - digitalWrite(RPM4_PIN, 1); - //TURN OFF - digitalWrite(RPM5_PIN, 0); - digitalWrite(UPSHIT_PIN, 0); - - } else if (g_RPM > GREEN3_THRESHOLD) { - digitalWrite(RPM1_PIN, 1); - digitalWrite(RPM2_PIN, 1); - digitalWrite(RPM3_PIN, 1); - digitalWrite(RPM4_PIN, 1); - digitalWrite(RPM5_PIN, 1); - digitalWrite(UPSHIT_PIN, 0); - - - } else if (g_RPM > UPSHIT_THRESHOLD) { - if (rpmBlueFlashFlag) { - digitalWrite(UPSHIT_PIN, 1); - } else - digitalWrite(UPSHIT_PIN, 0); - digitalWrite(RPM1_PIN, 0); - digitalWrite(RPM2_PIN, 0); - digitalWrite(RPM3_PIN, 0); - digitalWrite(RPM4_PIN, 0); - digitalWrite(RPM5_PIN, 0); - } -} - -#endif // RPM_LEDS_ENABLED - -/***************** START OF ARDUINO FUNCTIONS *********************/ -void setup() { - Serial.begin(230400); - - Serial.println("~~~~ BEGIN PROGRAM ~~~~"); - - pinMode(CAN_INT_PIN, INPUT_PULLUP); - - can.init_CS(CAN_CS_PIN); - - while (can.begin(CAN_1000KBPS) != CAN_OK) { - Serial.println("CAN : INIT FAIL"); - delay(100); - } - -//#if SD_ENABLED -// while (!sdBegin()) { -// Serial.println("SD: BEGIN FAIL"); -// delay(100); -// } -//#endif //SD_ENABLED - -#if SD_ENABLED - Serial.println("SD: SEND 'g' TO START WRITES"); -#endif //SD_ENABLED - -#if EMULATE_ECU - timerBegin(50, 3); -#endif //EMULATE_CAN - -#if SHAFT_SPEED_SENSOR_ENABLED - timerBegin(1000, SHAFT_HARDWARE_TIMER_NR); -#endif // SHAFT_SPEED_SENSOR_ENABLED - -#if XBEE_ENABLED - xbee.setSerial(Serial); - - pinMode(XBEE_CTS_PIN, INPUT); - - pinMode(XBEE_RTS_PIN, OUTPUT); - - digitalWrite(XBEE_RTS_PIN, LOW); -#endif //XBEE_ENABLED - - canBeginExtInterrupt(); - - // Initial read to get current ms - lastCanMsgRecTimeMs = millis(); - - wdt_enable(WDTO_1S); -} - -void loop() { - // put your main code here, to run repeatedly: - - canProcessRx(); - canProcessTx(); - -#if SD_ENABLED - sdProcessWrite(); -#endif // SD_ENABLED - - wdt_reset(); - -} diff --git a/sufst-openlogger/.idea/codeStyles/Project.xml b/sufst-openlogger/.idea/codeStyles/Project.xml deleted file mode 100644 index a7d5539..0000000 --- a/sufst-openlogger/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,76 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <code_scheme name="Project" version="173"> - <Objective-C> - <option name="INDENT_NAMESPACE_MEMBERS" value="0" /> - <option name="INDENT_C_STRUCT_MEMBERS" value="2" /> - <option name="INDENT_CLASS_MEMBERS" value="2" /> - <option name="INDENT_VISIBILITY_KEYWORDS" value="1" /> - <option name="INDENT_INSIDE_CODE_BLOCK" value="2" /> - <option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true" /> - <option name="KEEP_CASE_EXPRESSIONS_IN_ONE_LINE" value="true" /> - <option name="FUNCTION_NON_TOP_AFTER_RETURN_TYPE_WRAP" value="0" /> - <option name="FUNCTION_TOP_AFTER_RETURN_TYPE_WRAP" value="0" /> - <option name="FUNCTION_PARAMETERS_WRAP" value="5" /> - <option name="FUNCTION_CALL_ARGUMENTS_WRAP" value="5" /> - <option name="TEMPLATE_CALL_ARGUMENTS_WRAP" value="5" /> - <option name="TEMPLATE_CALL_ARGUMENTS_ALIGN_MULTILINE" value="true" /> - <option name="CLASS_CONSTRUCTOR_INIT_LIST_WRAP" value="5" /> - <option name="ALIGN_INIT_LIST_IN_COLUMNS" value="false" /> - <option name="HEADER_GUARD_STYLE_PATTERN" value="${PROJECT_NAME}_${PROJECT_REL_PATH}_${FILE_NAME}_${EXT}_" /> - <option name="NAMESPACES_NAMING_CONVENTION"> - <value prefix="" style="SNAKE_CASE" suffix="" /> - </option> - <option name="CLASSES_AND_STRUCTS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="ENUMS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="ENUMERATORS_NAMING_CONVENTION"> - <value prefix="" style="SCREAMING_SNAKE_CASE" suffix="" /> - </option> - <option name="TYPEDEFS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="UNIONS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="METHODS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="FIELDS_NAMING_CONVENTION"> - <value prefix="" style="SNAKE_CASE" suffix="_" /> - </option> - <option name="GLOBAL_FUNCTIONS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="GLOBAL_VARIABLES_NAMING_CONVENTION"> - <value prefix="" style="SNAKE_CASE" suffix="" /> - </option> - <option name="PARAMETERS_NAMING_CONVENTION"> - <value prefix="" style="SNAKE_CASE" suffix="" /> - </option> - <option name="LOCAL_VARIABLES_NAMING_CONVENTION"> - <value prefix="" style="SNAKE_CASE" suffix="" /> - </option> - </Objective-C> - <codeStyleSettings language="ObjectiveC"> - <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> - <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> - <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" /> - <option name="BLANK_LINES_BEFORE_IMPORTS" value="0" /> - <option name="BLANK_LINES_AFTER_IMPORTS" value="0" /> - <option name="BLANK_LINES_AROUND_CLASS" value="0" /> - <option name="BLANK_LINES_AROUND_METHOD" value="0" /> - <option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0" /> - <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false" /> - <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> - <option name="FOR_STATEMENT_WRAP" value="1" /> - <option name="ASSIGNMENT_WRAP" value="1" /> - <indentOptions> - <option name="INDENT_SIZE" value="2" /> - <option name="CONTINUATION_INDENT_SIZE" value="4" /> - </indentOptions> - </codeStyleSettings> - </code_scheme> -</component> \ No newline at end of file diff --git a/sufst-openlogger/.idea/codeStyles/codeStyleConfig.xml b/sufst-openlogger/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index a55e7a1..0000000 --- a/sufst-openlogger/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <state> - <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" /> - </state> -</component> \ No newline at end of file diff --git a/sufst-openlogger/.idea/misc.xml b/sufst-openlogger/.idea/misc.xml deleted file mode 100644 index 28a804d..0000000 --- a/sufst-openlogger/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="JavaScriptSettings"> - <option name="languageLevel" value="ES6" /> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger/.idea/modules.xml b/sufst-openlogger/.idea/modules.xml deleted file mode 100644 index 72d5b8a..0000000 --- a/sufst-openlogger/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/sufst-openlogger.iml" filepath="$PROJECT_DIR$/.idea/sufst-openlogger.iml" /> - </modules> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger/.idea/sufst-openlogger.iml b/sufst-openlogger/.idea/sufst-openlogger.iml deleted file mode 100644 index bc2cd87..0000000 --- a/sufst-openlogger/.idea/sufst-openlogger.iml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="CPP_MODULE" version="4"> - <component name="NewModuleRootManager"> - <content url="file://$MODULE_DIR$" /> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module> \ No newline at end of file diff --git a/sufst-openlogger/.idea/vcs.xml b/sufst-openlogger/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/sufst-openlogger/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger/.idea/workspace.xml b/sufst-openlogger/.idea/workspace.xml deleted file mode 100644 index 54a3d4b..0000000 --- a/sufst-openlogger/.idea/workspace.xml +++ /dev/null @@ -1,301 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true"> - <generated /> - </component> - <component name="CMakeSettings"> - <configurations> - <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> - </configurations> - </component> - <component name="ChangeListManager"> - <list default="true" id="81322c4e-6adb-4223-9d00-22249012da89" name="Default Changelist" comment=""> - <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/buffer.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/buffer.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/openLogger.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/openLogger.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger_controller/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/buffer.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger_controller/buffer.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/openLoggerController.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger_controller/openLoggerController.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger_controller/openLoggerController.h" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger_controller/openLoggerController.h" afterDir="false" /> - </list> - <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> - <option name="SHOW_DIALOG" value="false" /> - <option name="HIGHLIGHT_CONFLICTS" value="true" /> - <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> - <option name="LAST_RESOLUTION" value="IGNORE" /> - </component> - <component name="ClangdSettings"> - <option name="formatViaClangd" value="false" /> - </component> - <component name="FavoritesManager"> - <favorites_list name="sufst-openlogger" /> - </component> - <component name="FileEditorManager"> - <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/sufst-openlogger.ino"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="255"> - <caret line="15" column="37" lean-forward="true" selection-start-line="15" selection-start-column="37" selection-end-line="15" selection-end-column="37" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/openLogger.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-384"> - <caret line="221" lean-forward="true" selection-start-line="221" selection-end-line="221" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/openLogger.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="374"> - <caret line="22" column="35" selection-start-line="22" selection-start-column="8" selection-end-line="22" selection-end-column="35" /> - <folding> - <element signature="e#188#230#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/buffer.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="2081"> - <caret line="128" lean-forward="true" selection-start-line="128" selection-end-line="128" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/buffer.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="527"> - <caret line="31" column="5" selection-start-line="31" selection-start-column="5" selection-end-line="31" selection-end-column="5" /> - </state> - </provider> - </entry> - </file> - </leaf> - </component> - <component name="FindInProjectRecents"> - <findStrings> - <find>Read</find> - <find>Write</find> - <find>UartCir</find> - <find>1</find> - <find>Fast</find> - <find>sdUartByte</find> - <find>cirBuffer</find> - <find>SerialE</find> - <find>Begin</find> - <find>openloggerWriteBufferBlocks</find> - <find>cir</find> - <find>fast</find> - <find>start</find> - <find>begin</find> - <find>close</find> - <find>SERIAL</find> - <find>OPENLOGGER_INFO_WRITES_STARTED</find> - <find>OPENLOGGER_UART_STOP_BYTE</find> - <find>openloggerInformMaster</find> - <find>Serial</find> - <find>sdRx</find> - <find>uartTxBufferUsedCapacity</find> - <find>openloggerBeginSd</find> - <find>wdt</find> - <find>[</find> - <find>bein</find> - <find>unitSizeBytes</find> - <find>sdB</find> - <find>sdBufferUsedBytes</find> - <find>write</find> - </findStrings> - <replaceStrings> - <replace>DEBUG_OPENLOGGER</replace> - <replace>rxUartByte</replace> - <replace>uartStopByte</replace> - <replace>sdRxBufferUsedCapacity</replace> - <replace>unitSize</replace> - </replaceStrings> - </component> - <component name="Git.Settings"> - <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> - </component> - <component name="IdeDocumentHistory"> - <option name="CHANGED_PATHS"> - <list> - <option value="$PROJECT_DIR$/circularBuffer.h" /> - <option value="$PROJECT_DIR$/circularBuffer.cpp" /> - <option value="$PROJECT_DIR$/sufst-openlogger.ino" /> - <option value="$PROJECT_DIR$/buffer.h" /> - <option value="$PROJECT_DIR$/openLogger.h" /> - <option value="$PROJECT_DIR$/buffer.cpp" /> - <option value="$PROJECT_DIR$/openLogger.cpp" /> - </list> - </option> - </component> - <component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" /> - <component name="ProjectFrameBounds"> - <option name="x" value="1909" /> - <option name="width" value="1940" /> - <option name="height" value="2111" /> - </component> - <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> - <component name="ProjectView"> - <navigator proportions="" version="1"> - <foldersAlwaysOnTop value="true" /> - </navigator> - <panes> - <pane id="ProjectPane"> - <subPane> - <expand> - <path> - <item name="sufst-openlogger" type="b2602c69:ProjectViewProjectNode" /> - <item name="sufst-openlogger" type="462c0819:PsiDirectoryNode" /> - </path> - </expand> - <select /> - </subPane> - </pane> - <pane id="Scope" /> - </panes> - </component> - <component name="PropertiesComponent"> - <property name="ASKED_SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> - <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> - <property name="WebServerToolWindowFactoryState" value="false" /> - <property name="last_opened_file_path" value="$PROJECT_DIR$/../sufst-openlogger_controller" /> - <property name="node.js.detected.package.eslint" value="true" /> - <property name="node.js.detected.package.tslint" value="true" /> - <property name="node.js.path.for.package.eslint" value="project" /> - <property name="node.js.path.for.package.tslint" value="project" /> - <property name="node.js.selected.package.eslint" value="(autodetect)" /> - <property name="node.js.selected.package.tslint" value="(autodetect)" /> - <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> - <property name="nodejs_npm_path_reset_for_default_project" value="true" /> - <property name="nodejs_package_manager_path" value="npm" /> - <property name="settings.editor.selected.configurable" value="preferences.sourceCode.C/C++" /> - </component> - <component name="RunDashboard"> - <option name="ruleStates"> - <list> - <RuleState> - <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> - </RuleState> - <RuleState> - <option name="name" value="StatusDashboardGroupingRule" /> - </RuleState> - </list> - </option> - </component> - <component name="SvnConfiguration"> - <configuration /> - </component> - <component name="TaskManager"> - <task active="true" id="Default" summary="Default task"> - <changelist id="81322c4e-6adb-4223-9d00-22249012da89" name="Default Changelist" comment="" /> - <created>1563140776084</created> - <option name="number" value="Default" /> - <option name="presentableId" value="Default" /> - <updated>1563140776084</updated> - <workItem from="1563140777259" duration="246000" /> - <workItem from="1563216461708" duration="10620000" /> - <workItem from="1563385421018" duration="9848000" /> - <workItem from="1563401015844" duration="2752000" /> - <workItem from="1563476541945" duration="26985000" /> - </task> - <servers /> - </component> - <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="77388000" /> - </component> - <component name="ToolWindowManager"> - <frame x="1273" y="0" width="1293" height="1407" extended-state="0" /> - <editor active="true" /> - <layout> - <window_info content_ui="combo" id="Project" order="0" sideWeight="0.4972549" visible="true" weight="0.2652068" /> - <window_info active="true" id="Structure" order="1" sideWeight="0.5027451" side_tool="true" visible="true" weight="0.2652068" /> - <window_info id="Favorites" order="2" side_tool="true" weight="0.32916266" /> - <window_info anchor="bottom" id="Message" order="0" /> - <window_info anchor="bottom" id="Find" order="1" /> - <window_info anchor="bottom" id="Run" order="2" /> - <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> - <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> - <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> - <window_info anchor="bottom" id="TODO" order="6" /> - <window_info anchor="bottom" id="Database Changes" order="7" /> - <window_info anchor="bottom" id="Version Control" order="8" /> - <window_info anchor="bottom" id="Terminal" order="9" /> - <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" /> - <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> - <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> - <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> - <window_info anchor="right" id="Database" order="3" /> - </layout> - </component> - <component name="TypeScriptGeneratedFilesManager"> - <option name="version" value="1" /> - </component> - <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/circularBuffer.cpp" /> - <entry file="file://$PROJECT_DIR$/circularBuffer.h" /> - <entry file="file://$PROJECT_DIR$/buffer.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="527"> - <caret line="31" column="5" selection-start-line="31" selection-start-column="5" selection-end-line="31" selection-end-column="5" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/openLogger.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="374"> - <caret line="22" column="35" selection-start-line="22" selection-start-column="8" selection-end-line="22" selection-end-column="35" /> - <folding> - <element signature="e#188#230#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/sufst-openlogger.ino"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="255"> - <caret line="15" column="37" lean-forward="true" selection-start-line="15" selection-start-column="37" selection-end-line="15" selection-end-column="37" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/buffer.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="2081"> - <caret line="128" lean-forward="true" selection-start-line="128" selection-end-line="128" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/openLogger.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-384"> - <caret line="221" lean-forward="true" selection-start-line="221" selection-end-line="221" /> - </state> - </provider> - </entry> - </component> - <component name="masterDetails"> - <states> - <state key="ScopeChooserConfigurable.UI"> - <settings> - <splitter-proportions> - <option name="proportions"> - <list> - <option value="0.2" /> - </list> - </option> - </splitter-proportions> - </settings> - </state> - </states> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger/buffer.cpp b/sufst-openlogger/buffer.cpp deleted file mode 100644 index ad56e02..0000000 --- a/sufst-openlogger/buffer.cpp +++ /dev/null @@ -1,135 +0,0 @@ -// -// Created by Sil on 7/19/2019. -// - -#include "buffer.h" - -uint8_t cirBufferBegin(cirBuffer_handle cirBuff, void *data, uint16_t len, uint8_t unitSize) -{ - - if (cirBuff == NULL) { - return 0; - } - - if (data == NULL) { - return 0; - } - - cirBuff->head = 0; - cirBuff->tail = 0; - cirBuff->capacity = len; - cirBuff->full = 0; - cirBuff->data = (uint8_t *) data; - cirBuff->unitSize = unitSize; - - return 1; -} - -uint16_t cirBufferAvailable(cirBuffer_handle cirBuff) -{ - if (!cirBuff->full) { - if (cirBuff->head >= cirBuff->tail) { - return (cirBuff->head - cirBuff->tail); - } - else { - return (cirBuff->capacity + cirBuff->head - cirBuff->tail); - } - } - else { - return cirBuff->capacity; - } -} - -uint16_t cirBufferAvailableForWrite(cirBuffer_handle cirBuff) -{ - return cirBuff->capacity - cirBufferAvailable(cirBuff); -} - -void cirBufferWrite(cirBuffer_handle cirBuff, void *unit) -{ - - - memcpy(&(cirBuff->data[cirBuff->head * cirBuff->unitSize]), unit, cirBuff->unitSize); - - ++cirBuff->head &= (cirBuff->capacity - 1); - - if (cirBuff->head == cirBuff->tail) { - cirBuff->full = 1; - - ++cirBuff->tail &= (cirBuff->capacity - 1); - } -} - -void cirBufferWriteBytes(cirBuffer_handle cirBuff, void *src, uint16_t len) -{ - uint16_t head = cirBuff->head; - uint16_t andOperator = cirBuff->capacity - 1; - - uint16_t remainingBytes = cirBufferAvailableForWrite(cirBuff); - - if ((remainingBytes + len) >= cirBuff->capacity) { - cirBuff->full = 1; - } - - for (uint16_t i = 0; i < len; i++) { - cirBuff->data[head] = ((uint8_t *) src)[i]; - - ++head &= andOperator; - } - - if (cirBuff->full) { - cirBuff->tail = (cirBuff->tail + (len - (cirBuff->capacity - remainingBytes))) & (cirBuff->capacity - 1); - - } - - cirBuff->head = head; - cirBuff->full = 0; -} - -uint8_t *cirBufferExternalWrite(cirBuffer_handle cirBuff) -{ - uint8_t *head = &(cirBuff->data[cirBuff->head]); - - ++cirBuff->head &= cirBuff->capacity - 1; - - if (cirBuff->head == cirBuff->tail) { - cirBuff->full = 1; - - ++cirBuff->tail &= (cirBuff->capacity - 1); - } - - return head; -} - -void cirBufferRead(cirBuffer_handle cirBuff, void *loc) -{ - - memcpy(loc, &(cirBuff->data[cirBuff->tail * cirBuff->unitSize]), cirBuff->unitSize); - - ++cirBuff->tail &= (cirBuff->capacity - 1); - - cirBuff->full = 0; - -} - -void cirBufferReadBytes(cirBuffer_handle cirBuff, void *loc, uint16_t len) -{ - uint16_t tail = cirBuff->tail; - uint16_t andOperator = cirBuff->capacity - 1; - - for (uint16_t i = 0; i < len; i++) { - ((uint8_t *) loc)[i] = cirBuff->data[tail]; - - ++tail &= andOperator; - } - - cirBuff->tail = tail; - cirBuff->full = 0; -} - -void cirBufferReset(cirBuffer_handle cirBuff) -{ - cirBuff->head = 0; - cirBuff->tail = 0; - cirBuff->full = 0; -} diff --git a/sufst-openlogger/buffer.h b/sufst-openlogger/buffer.h deleted file mode 100644 index f05bf2b..0000000 --- a/sufst-openlogger/buffer.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// Created by Sil on 7/19/2019. -// - -#ifndef BUFFER_H -#define BUFFER_H - -#include "Arduino.h" - -typedef struct CirBuffer -{ - uint16_t head; - uint16_t tail; - uint8_t full; - uint8_t *data; - uint16_t capacity; - uint8_t unitSize; -}; - -typedef CirBuffer *cirBuffer_handle; - -/* - * THE LEN OF THE BUFFER MUST BE A POWER OF 2 - */ - -uint8_t cirBufferBegin(cirBuffer_handle cirBuff, void *data, uint16_t len, uint8_t unitSize); - -uint16_t cirBufferAvailable(cirBuffer_handle cirBuff); - -uint16_t cirBufferAvailableForWrite(cirBuffer_handle cirBuff); - -void cirBufferWrite(cirBuffer_handle cirBuff, void *unit); - -uint8_t *cirBufferExternalWrite(cirBuffer_handle cirBuff); - -void cirBufferRead(cirBuffer_handle cirBuff, void *loc); - -void cirBufferReadBytes(cirBuffer_handle cirBuff, void *loc, uint16_t len); - -void cirBufferReset(cirBuffer_handle cirBuff); - -#endif //BUFFER_H diff --git a/sufst-openlogger/openLogger.cpp b/sufst-openlogger/openLogger.cpp deleted file mode 100644 index 99b9d8d..0000000 --- a/sufst-openlogger/openLogger.cpp +++ /dev/null @@ -1,434 +0,0 @@ -// -// Created by Sil on 14/07/2019. -// - -#include "openLogger.h" - -#include <avr/wdt.h> -#include <avr/interrupt.h> -#include "buffer.h" - -#include <SdFat.h> - -SdFat sd; - -SdFile file; - -#if DEBUG_OPENLOGGER -enum -{ - uartStartByte = 's', - uartStopByte = 'f' -}; - -enum -{ - uartTypeData = 'd', - uartTypeCommand = 'c', - uartTypeInfo = 'i' -}; - -enum -{ - uartCommandStartWrites = 'v', - uartCommandStopWrites = 'b' -}; - -enum -{ - uartInfoAlreadyRunning = '1', - uartInfoAlreadyIdle = '2', - uartInfoWritesStarted = '3', - uartInfoWritesStartError = '4', - uartInfoStopped = '5', - uartInfoStopError = '6', - uartInfoWriteError = '7', - uartInfoWritesNotStarted = '8' -}; -#else -enum -{ - uartStartByte = 's', - uartStopByte = 'f' -}; - -enum -{ - uartTypeData = 0, - uartTypeCommand, - uartTypeInfo -}; - -enum -{ - uartCommandStartWrites = 0, - uartCommandStopWrites -}; - -enum -{ - uartInfoAlreadyRunning = 0, - uartInfoAlreadyIdle, - uartInfoWritesStarted, - uartInfoWritesStartError, - uartInfoStopped, - uartInfoStopError, - uartInfoWriteError, - uartInfoWritesNotStarted -}; -#endif // DEBUG_OPENLOGGER - -typedef enum -{ - idle = 0, - starting, - running, - stopping -} OpenloggerState; - -typedef enum -{ - checkingForStart = 0, - checkingForType, - checkingForLength, - receivingData, - checkingForCommand -} UartRxState; - -uint8_t openloggerBeginSd(); - -void uartCheckingForStartByte(); - -void uartCheckingForType(); - -void uartCheckingForLength(); - -void uartReceivingData(); - -void uartCheckingForCommand(); - -void openloggerIdle(); - -void openloggerStarting(); - -void openloggerRunning(); - -void openloggerStopping(); - -void openloggerInformMaster(uint8_t info); - -void watchdogBegin500ms(); - -OpenloggerState openloggerState = idle; - -UartRxState uartRxState = checkingForStart; - -uint8_t sdBuffer[OPENLOGGER_WRITE_BUFFER_LEN]; - -CirBuffer sdCirBuffer; - -void (*openloggerState_ptrs[4])(void) = {openloggerIdle, openloggerStarting, openloggerRunning, openloggerStopping}; - -void -(*uartRxState_ptrs[5])(void) = {uartCheckingForStartByte, uartCheckingForType, uartCheckingForLength, uartReceivingData, - uartCheckingForCommand}; - -volatile uint8_t uartExpectedDataLength = 0; - -uint8_t openloggerLastSeenCommand = 0; - -bool ledStatus = false; - -void serialEvent() -{ - - wdt_reset(); - - uartRxState_ptrs[uartRxState](); -} - -ISR(WDT_vect) { - uartRxState = checkingForStart; -} - -void uartCheckingForStartByte() -{ - -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING START "); - Serial.println((char) Serial.peek()); -#endif // DEBUG_OPENLOGGER - - if (Serial.read() == uartStartByte) { - uartRxState = checkingForType; - } -} - -void uartCheckingForType() -{ -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING FOR TYPE "); - Serial.println((char) Serial.peek()); -#endif // DEBUG_OPENLOGGER - - if (Serial.peek() <= uartTypeInfo) { - uartRxState = (Serial.read() == uartTypeData) ? checkingForLength : checkingForCommand; - } -} - -void uartCheckingForLength() -{ - if (openloggerState != running) { -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: NOT running"); -#endif // DEBUG_OPENLOGGER - - openloggerInformMaster(uartInfoWritesNotStarted); - - uartRxState = checkingForStart; - - return; - } - -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING LENGTH "); - Serial.println((char) Serial.peek()); -#endif // DEBUG_OPENLOGGER - - if (Serial.peek() <= OPENLOGGER_WRITE_BUFFER_LEN) { - uartExpectedDataLength = Serial.read(); - - uartRxState = receivingData; - } - else { - uartRxState = checkingForStart; - } -} - -void uartReceivingData() -{ - for (; uartExpectedDataLength > 0; uartExpectedDataLength--) { - -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: LEFT "); - Serial.println(uartExpectedDataLength); -#endif // DEBUG_OPENLOGGER - - Serial.readBytes(cirBufferExternalWrite(&sdCirBuffer), 1); - } - - uartRxState = checkingForStart; -} - -void uartCheckingForCommand() -{ -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING COMMAND "); - Serial.println((char) Serial.peek()); -#endif // DEBUG_OPENLOGGER - - openloggerState = (Serial.read() == uartCommandStartWrites) ? starting : stopping; - - uartRxState = checkingForStart; -} - -void openloggerIdle() -{ - -} - -void openloggerStarting() -{ -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: starting WRITES"); -#endif // DEBUG_OPENLOGGER - - if (openloggerBeginSd()) { - - if (!ledStatus) { - digitalWrite(5, HIGH); - - ledStatus = true; - } - - openloggerInformMaster(uartInfoWritesStarted); - - openloggerState = running; - } - else { - openloggerInformMaster(uartInfoWritesStartError); - - openloggerState = idle; - } -} - -void openloggerRunning() -{ - static uint8_t sdPayload[OPENLOGGER_BYTES_PER_BLOCK_WRITE]; - - if (cirBufferAvailable(&sdCirBuffer) >= OPENLOGGER_BYTES_PER_BLOCK_WRITE) { - -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: WRITING BLOCK"); -#endif // DEBUG_OPENLOGGER - - static uint8_t sdBlocksWritten = 0; - - cirBufferReadBytes(&sdCirBuffer, sdPayload, OPENLOGGER_BYTES_PER_BLOCK_WRITE); - - if (!file.write(sdPayload, OPENLOGGER_BYTES_PER_BLOCK_WRITE)) { - - openloggerInformMaster(uartInfoWriteError); - - openloggerState = stopping; - } - - sdBlocksWritten++; - - if (sdBlocksWritten >= OPENLOGGER_BLOCKS_BEFORE_FLUSH) { - file.flush(); - - sdBlocksWritten = 0; - } - } -} - -void openloggerStopping() -{ -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: stopping "); -#endif // DEBUG_OPENLOGGER - - if (file.close()) { - - openloggerInformMaster(uartInfoStopped); - } - else { - - openloggerInformMaster(uartInfoStopError); - } - - openloggerState = idle; - - if (ledStatus) { - digitalWrite(5, LOW); - - ledStatus = false; - } - -} - -void openloggerProcess() -{ - openloggerState_ptrs[openloggerState](); -} - -uint8_t openloggerBegin() -{ - - Serial.begin(OPENLOGGER_SERIAL_BUAD_RATE); - -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: BEGIN"); - - Serial.setTimeout((uint32_t)(-1)); -#endif // DEBUG_OPENLOGGER - -#if !DEBUG_OPENLOGGER - watchdogBegin500ms(); -#endif // !DEBUG_OPENLOGGER - - pinMode(5, OUTPUT); - - digitalWrite(5, LOW); - - cirBufferBegin(&sdCirBuffer, sdBuffer, OPENLOGGER_WRITE_BUFFER_LEN, sizeof(uint8_t)); - - return 1; -} - -void openloggerInformMaster(uint8_t info) -{ - Serial.write(uartStartByte); - Serial.write(uartTypeInfo); - Serial.write(info); - Serial.write(uartStopByte); -} - -void watchdogBegin500ms() -{ - cli(); - - WDTCSR = (1 << WDCE) | (1 << WDE); - WDTCSR = 0; - - WDTCSR = (1 << WDIE) | (1 << WDP2) | (1 << WDP0); - - sei(); -} - -uint8_t openloggerBeginSd() -{ - -#if DEBUG_OPENLOGGER - Serial.println("SD: starting SD SERIAL"); -#endif //DEBUG_OPENLOGGER - - noInterrupts(); - - if (!sd.begin(OPENLOGGER_CS_PIN, SD_SCK_MHZ(10))) { - -#if DEBUG_OPENLOGGER - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); -#endif // DEBUG_OPENLOGGER - - interrupts(); - return 0; - } - -#if DEBUG_OPENLOGGER - Serial.println("SD: STARTED SD SERIAL"); -#endif //DEBUG_OPENLOGGER - - if (sd.exists("DATA.BIN")) { - -#if DEBUG_OPENLOGGER - Serial.println("SD: FILE EXISTS - REMOVING"); -#endif //DEBUG_OPENLOGGER - - if (!sd.remove("DATA.BIN")) { - -#if DEBUG_OPENLOGGER - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); -#endif // DEBUG_OPENLOGGER - - interrupts(); - return 0; - } - -#if DEBUG_OPENLOGGER - Serial.println("SD: REMOVED FILE"); -#endif //DEBUG_OPENLOGGER - } - -#if DEBUG_OPENLOGGER - Serial.println("SD: OPENING FILE"); -#endif //DEBUG_OPENLOGGER - - if (!file.open("DATA.BIN", O_WRITE | O_CREAT)) { -#if DEBUG_OPENLOGGER - Serial.print("SD: ERROR "); - Serial.println(sd.card()->errorCode(), HEX); -#endif // DEBUG_OPENLOGGER - - interrupts(); - return 0; - } - - interrupts(); - - return 1; -} - diff --git a/sufst-openlogger/openLogger.h b/sufst-openlogger/openLogger.h deleted file mode 100644 index 281500a..0000000 --- a/sufst-openlogger/openLogger.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// Created by Sil on 14/07/2019. -// - -#ifndef SUFST_OPENLOGGER_INO_SDCARD_H -#define SUFST_OPENLOGGER_INO_SDCARD_H - -#include "Arduino.h" - -#define DEBUG_OPENLOGGER 0 - -#if DEBUG_OPENLOGGER - -#define OPENLOGGER_SERIAL_BUAD_RATE 115200 - -#else - -#define OPENLOGGER_SERIAL_BUAD_RATE 115200 - -#endif // DEBUG_OPENLOGGER - -#define OPENLOGGER_BYTES_PER_BLOCK_WRITE 128 -#define OPENLOGGER_WRITE_BUFFER_LEN OPENLOGGER_BYTES_PER_BLOCK_WRITE * 4 -#define OPENLOGGER_BLOCKS_BEFORE_FLUSH 4 - -#define OPENLOGGER_CS_PIN 10 - -/* - * - * There are three types of transactions: save this data, do this command or heres some info. - * - * STRUCTURE OF A VALID SD CARD UART SAVE THIS DATA TRANSACTION - * - * START BYTE | DATA TYPE | LENGTH BYTE | DATA BYTES | STOP BYTE - * - * STRUCTURE OF A VALID COMMAND TRANSACTION - * - * START BYTE | COMMAND TYPE | COMMAND BYTE | STOP BYTE - * - * STUCTURE OF VALID INFO TRANSACTION - * - * START BYTE | INFO TYPE | INFO BYTE | STOP BYTE - * - * If no rx has been received for more than 500ms the rx state is reset to checking for start byte - * This ensures the open logger does not get stuck in the middle of a transaction if the master stops sending data - * - */ - -void openloggerProcess(); - -uint8_t openloggerBegin(); - -#endif //SUFST_OPENLOGGER_INO_SDCARD_H diff --git a/sufst-openlogger/sufst-openlogger.ino b/sufst-openlogger/sufst-openlogger.ino deleted file mode 100644 index 2cf83c8..0000000 --- a/sufst-openlogger/sufst-openlogger.ino +++ /dev/null @@ -1,21 +0,0 @@ - -#include "openLogger.h" - -void setup() -{ - // put your setup code here, to run once: - - openloggerBegin(); - -} - -void loop() -{ - - /* - * ALL PROCESSES *MUST* BE NON BLOCKING - */ - - openloggerProcess(); - -} diff --git a/sufst-openlogger_controller/.idea/codeStyles/Project.xml b/sufst-openlogger_controller/.idea/codeStyles/Project.xml deleted file mode 100644 index 1be0d30..0000000 --- a/sufst-openlogger_controller/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,60 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <code_scheme name="Project" version="173"> - <Objective-C> - <option name="INDENT_NAMESPACE_MEMBERS" value="0" /> - <option name="KEEP_STRUCTURES_IN_ONE_LINE" value="true" /> - <option name="KEEP_CASE_EXPRESSIONS_IN_ONE_LINE" value="true" /> - <option name="NAMESPACE_BRACE_PLACEMENT" value="2" /> - <option name="FUNCTION_BRACE_PLACEMENT" value="2" /> - <option name="BLOCK_BRACE_PLACEMENT" value="2" /> - <option name="FUNCTION_NON_TOP_AFTER_RETURN_TYPE_WRAP" value="0" /> - <option name="FUNCTION_TOP_AFTER_RETURN_TYPE_WRAP" value="0" /> - <option name="FUNCTION_PARAMETERS_WRAP" value="5" /> - <option name="FUNCTION_CALL_ARGUMENTS_WRAP" value="5" /> - <option name="TEMPLATE_CALL_ARGUMENTS_WRAP" value="5" /> - <option name="TEMPLATE_CALL_ARGUMENTS_ALIGN_MULTILINE" value="true" /> - <option name="CLASS_CONSTRUCTOR_INIT_LIST_WRAP" value="5" /> - <option name="CLASS_CONSTRUCTOR_INIT_LIST_NEW_LINE_BEFORE_COLON" value="1" /> - <option name="ALIGN_INIT_LIST_IN_COLUMNS" value="false" /> - <option name="SPACE_BEFORE_SUPERCLASS_COLON" value="false" /> - <option name="HEADER_GUARD_STYLE_PATTERN" value="${FILE_NAME}_${EXT}" /> - <option name="NAMESPACES_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="CLASSES_AND_STRUCTS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="ENUMS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="TYPEDEFS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - <option name="UNIONS_NAMING_CONVENTION"> - <value prefix="" style="PASCAL_CASE" suffix="" /> - </option> - </Objective-C> - <codeStyleSettings language="ObjectiveC"> - <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> - <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" /> - <option name="BLANK_LINES_BEFORE_IMPORTS" value="0" /> - <option name="BLANK_LINES_AFTER_IMPORTS" value="0" /> - <option name="BLANK_LINES_AROUND_CLASS" value="0" /> - <option name="BLANK_LINES_AROUND_FIELD" value="1" /> - <option name="BLANK_LINES_AROUND_METHOD" value="0" /> - <option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="0" /> - <option name="CLASS_BRACE_STYLE" value="2" /> - <option name="ELSE_ON_NEW_LINE" value="true" /> - <option name="WHILE_ON_NEW_LINE" value="true" /> - <option name="CATCH_ON_NEW_LINE" value="true" /> - <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false" /> - <option name="METHOD_CALL_CHAIN_WRAP" value="1" /> - <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> - <option name="FOR_STATEMENT_WRAP" value="1" /> - <option name="ASSIGNMENT_WRAP" value="1" /> - <indentOptions> - <option name="CONTINUATION_INDENT_SIZE" value="4" /> - </indentOptions> - </codeStyleSettings> - </code_scheme> -</component> \ No newline at end of file diff --git a/sufst-openlogger_controller/.idea/codeStyles/codeStyleConfig.xml b/sufst-openlogger_controller/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123..0000000 --- a/sufst-openlogger_controller/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <state> - <option name="USE_PER_PROJECT_SETTINGS" value="true" /> - </state> -</component> \ No newline at end of file diff --git a/sufst-openlogger_controller/.idea/misc.xml b/sufst-openlogger_controller/.idea/misc.xml deleted file mode 100644 index 28a804d..0000000 --- a/sufst-openlogger_controller/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="JavaScriptSettings"> - <option name="languageLevel" value="ES6" /> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger_controller/.idea/modules.xml b/sufst-openlogger_controller/.idea/modules.xml deleted file mode 100644 index 24eddf4..0000000 --- a/sufst-openlogger_controller/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/sufst-openlogger_controller.iml" filepath="$PROJECT_DIR$/.idea/sufst-openlogger_controller.iml" /> - </modules> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger_controller/.idea/sufst-openlogger_controller.iml b/sufst-openlogger_controller/.idea/sufst-openlogger_controller.iml deleted file mode 100644 index bc2cd87..0000000 --- a/sufst-openlogger_controller/.idea/sufst-openlogger_controller.iml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="CPP_MODULE" version="4"> - <component name="NewModuleRootManager"> - <content url="file://$MODULE_DIR$" /> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module> \ No newline at end of file diff --git a/sufst-openlogger_controller/.idea/vcs.xml b/sufst-openlogger_controller/.idea/vcs.xml deleted file mode 100644 index 6c0b863..0000000 --- a/sufst-openlogger_controller/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger_controller/.idea/workspace.xml b/sufst-openlogger_controller/.idea/workspace.xml deleted file mode 100644 index e0c2f6f..0000000 --- a/sufst-openlogger_controller/.idea/workspace.xml +++ /dev/null @@ -1,374 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true"> - <generated /> - </component> - <component name="CMakeSettings"> - <configurations> - <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> - </configurations> - </component> - <component name="ChangeListManager"> - <list default="true" id="e173ebdc-c119-4235-9653-364cc21b27a5" name="Default Changelist" comment=""> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger/buffer.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger/buffer.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/../sufst-openlogger/openLogger.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/../sufst-openlogger/openLogger.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/buffer.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/buffer.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/openLoggerController.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/openLoggerController.cpp" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/openLoggerController.h" beforeDir="false" afterPath="$PROJECT_DIR$/openLoggerController.h" afterDir="false" /> - </list> - <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> - <option name="SHOW_DIALOG" value="false" /> - <option name="HIGHLIGHT_CONFLICTS" value="true" /> - <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> - <option name="LAST_RESOLUTION" value="IGNORE" /> - </component> - <component name="ClangdSettings"> - <option name="formatViaClangd" value="false" /> - </component> - <component name="DatabaseView"> - <option name="SHOW_INTERMEDIATE" value="true" /> - <option name="GROUP_DATA_SOURCES" value="true" /> - <option name="GROUP_SCHEMA" value="true" /> - <option name="GROUP_CONTENTS" value="false" /> - <option name="SORT_POSITIONED" value="false" /> - <option name="SHOW_EMPTY_GROUPS" value="false" /> - <option name="AUTO_SCROLL_FROM_SOURCE" value="false" /> - <option name="HIDDEN_KINDS"> - <set /> - </option> - <expand /> - <select /> - </component> - <component name="FavoritesManager"> - <favorites_list name="sufst-openlogger_controller" /> - </component> - <component name="FileEditorManager"> - <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/sufst-openlogger_controller.ino"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="856"> - <caret line="70" column="23" selection-start-line="70" selection-start-column="23" selection-end-line="70" selection-end-column="23" /> - <folding> - <element signature="e#57#90#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/openLoggerController.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="576"> - <caret line="175" column="87" selection-start-line="175" selection-start-column="87" selection-end-line="175" selection-end-column="87" /> - <folding> - <element signature="e#40#73#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/openLoggerController.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="187"> - <caret line="11" column="37" lean-forward="true" selection-start-line="11" selection-start-column="37" selection-end-line="11" selection-end-column="37" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/buffer.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="255"> - <caret line="15" column="22" lean-forward="true" selection-start-line="15" selection-start-column="22" selection-end-line="15" selection-end-column="22" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/buffer.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="763"> - <caret line="47" column="1" lean-forward="true" selection-start-line="47" selection-start-column="1" selection-end-line="47" selection-end-column="1" /> - </state> - </provider> - </entry> - </file> - </leaf> - </component> - <component name="FindInProjectRecents"> - <findStrings> - <find>cir</find> - <find>open</find> - <find>openloggerStopped</find> - <find>CHECKING_FOR_START</find> - <find>OPENLOGGER_TYPE_INFO</find> - <find>OPENLOGGER_UART_TX_BUFFER_LEN</find> - <find>OPEN</find> - <find>uartStopbyte</find> - <find>openloggerRxCheckingForInfo</find> - <find>head</find> - <find>uartCurrentlyTransmitting</find> - <find>Serial1</find> - <find>*(</find> - <find>buffer</find> - <find>peek</find> - <find>openloggerTxDataCirBuffer</find> - <find>writes</find> - <find>uartTxDataAmount</find> - <find>cirBufferAvailable</find> - <find>availableForWrite</find> - <find>available</find> - <find>tail</find> - <find>Serial</find> - <find>OPENLOGGER_TX_BUFFER_LEN</find> - <find>startTag</find> - <find>&</find> - <find>tx</find> - <find>&=</find> - <find>openloggerProcess</find> - <find>cirBuffer</find> - </findStrings> - <replaceStrings> - <replace>Serial1</replace> - <replace>uartTypeInfo</replace> - <replace>uartStopByte</replace> - <replace>Serial</replace> - </replaceStrings> - </component> - <component name="Git.Settings"> - <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> - </component> - <component name="IdeDocumentHistory"> - <option name="CHANGED_PATHS"> - <list> - <option value="$PROJECT_DIR$/circularBuffer.cpp" /> - <option value="$PROJECT_DIR$/circularBuffer.h" /> - <option value="$PROJECT_DIR$/buffer.h" /> - <option value="$PROJECT_DIR$/ecuCan.h" /> - <option value="$PROJECT_DIR$/can.cpp" /> - <option value="$PROJECT_DIR$/can.h" /> - <option value="$PROJECT_DIR$/ecuOpenloggerTags.h" /> - <option value="$PROJECT_DIR$/ecuCan.cpp" /> - <option value="$PROJECT_DIR$/buffer.cpp" /> - <option value="$PROJECT_DIR$/openLoggerController.h" /> - <option value="$PROJECT_DIR$/openLoggerController.cpp" /> - <option value="$PROJECT_DIR$/sufst-openlogger_controller.ino" /> - </list> - </option> - </component> - <component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" /> - <component name="ProjectFrameBounds"> - <option name="x" value="691" /> - <option name="width" value="3158" /> - <option name="height" value="2111" /> - </component> - <component name="ProjectLevelVcsManager" settingsEditedManually="true"> - <ConfirmationsSetting value="2" id="Add" /> - </component> - <component name="ProjectView"> - <navigator proportions="" version="1"> - <foldersAlwaysOnTop value="true" /> - </navigator> - <panes> - <pane id="Scope" /> - <pane id="ProjectPane"> - <subPane> - <expand> - <path> - <item name="sufst-openlogger_controller" type="b2602c69:ProjectViewProjectNode" /> - <item name="sufst-openlogger_controller" type="462c0819:PsiDirectoryNode" /> - </path> - </expand> - <select /> - </subPane> - </pane> - </panes> - </component> - <component name="PropertiesComponent"> - <property name="ASKED_SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> - <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> - <property name="WebServerToolWindowFactoryState" value="false" /> - <property name="last_opened_file_path" value="$PROJECT_DIR$" /> - <property name="node.js.detected.package.eslint" value="true" /> - <property name="node.js.detected.package.tslint" value="true" /> - <property name="node.js.path.for.package.eslint" value="project" /> - <property name="node.js.path.for.package.tslint" value="project" /> - <property name="node.js.selected.package.eslint" value="(autodetect)" /> - <property name="node.js.selected.package.tslint" value="(autodetect)" /> - <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> - <property name="nodejs_npm_path_reset_for_default_project" value="true" /> - <property name="settings.editor.selected.configurable" value="preferences.sourceCode.C/C++" /> - </component> - <component name="RunDashboard"> - <option name="ruleStates"> - <list> - <RuleState> - <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> - </RuleState> - <RuleState> - <option name="name" value="StatusDashboardGroupingRule" /> - </RuleState> - </list> - </option> - </component> - <component name="SvnConfiguration"> - <configuration /> - </component> - <component name="TaskManager"> - <task active="true" id="Default" summary="Default task"> - <changelist id="e173ebdc-c119-4235-9653-364cc21b27a5" name="Default Changelist" comment="" /> - <created>1563403781995</created> - <option name="number" value="Default" /> - <option name="presentableId" value="Default" /> - <updated>1563403781995</updated> - <workItem from="1563403785876" duration="5878000" /> - <workItem from="1563472777392" duration="25184000" /> - <workItem from="1563556486428" duration="2811000" /> - <workItem from="1563582896736" duration="1316000" /> - </task> - <servers /> - </component> - <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="100996000" /> - </component> - <component name="ToolWindowManager"> - <frame x="461" y="0" width="2105" height="1407" extended-state="0" /> - <editor active="true" /> - <layout> - <window_info active="true" content_ui="combo" id="Project" order="0" sideWeight="0.49490196" visible="true" weight="0.16136919" /> - <window_info id="Structure" order="1" sideWeight="0.50509804" side_tool="true" visible="true" weight="0.16136919" /> - <window_info id="Favorites" order="2" side_tool="true" weight="0.3298872" /> - <window_info anchor="bottom" id="Message" order="0" /> - <window_info anchor="bottom" id="Find" order="1" /> - <window_info anchor="bottom" id="Run" order="2" /> - <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> - <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> - <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> - <window_info anchor="bottom" id="TODO" order="6" /> - <window_info anchor="bottom" id="Version Control" order="7" weight="0.3295129" /> - <window_info anchor="bottom" id="Database Changes" order="8" /> - <window_info anchor="bottom" id="Terminal" order="9" /> - <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" /> - <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> - <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> - <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> - <window_info anchor="right" id="Database" order="3" weight="0.3295129" /> - </layout> - </component> - <component name="TypeScriptGeneratedFilesManager"> - <option name="version" value="1" /> - </component> - <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/../sufst-openlogger/openLogger.cpp"> - <provider selected="true" editor-type-id="text-editor" /> - </entry> - <entry file="file://$PROJECT_DIR$/../sufst-openlogger/openLogger.h"> - <provider selected="true" editor-type-id="text-editor" /> - </entry> - <entry file="file://$PROJECT_DIR$/circularBuffer.cpp" /> - <entry file="file://$PROJECT_DIR$/circularBuffer.h" /> - <entry file="file://$PROJECT_DIR$/can.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="401"> - <caret line="28" column="15" selection-start-line="28" selection-start-column="15" selection-end-line="28" selection-end-column="15" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/ecuCan.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="357"> - <caret line="21" selection-start-line="21" selection-end-line="21" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/ecuCan.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-2485"> - <caret line="19" selection-start-line="19" selection-end-line="19" /> - <folding> - <element signature="e#39#58#0" expanded="true" /> - <element signature="e#767#962#0" expanded="true" /> - <element signature="e#1017#1048#0" expanded="true" /> - <element signature="e#1415#1610#0" expanded="true" /> - <element signature="e#1665#1696#0" expanded="true" /> - <element signature="e#2008#2203#0" expanded="true" /> - <element signature="e#2258#2289#0" expanded="true" /> - <element signature="e#3273#3468#0" expanded="true" /> - <element signature="e#3523#3554#0" expanded="true" /> - <element signature="e#3914#4109#0" expanded="true" /> - <element signature="e#4164#4195#0" expanded="true" /> - <element signature="e#4492#4687#0" expanded="true" /> - <element signature="e#4742#4773#0" expanded="true" /> - <element signature="e#5086#5281#0" expanded="true" /> - <element signature="e#5336#5367#0" expanded="true" /> - <element signature="e#5683#5878#0" expanded="true" /> - <element signature="e#5933#5964#0" expanded="true" /> - <element signature="e#6301#6496#0" expanded="true" /> - <element signature="e#6551#6582#0" expanded="true" /> - <element signature="e#6899#7094#0" expanded="true" /> - <element signature="e#7149#7180#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/ecuOpenloggerTags.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="119"> - <caret line="7" column="38" selection-start-line="7" selection-start-column="8" selection-end-line="7" selection-end-column="38" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/can.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="306"> - <caret line="18" lean-forward="true" selection-start-line="18" selection-end-line="18" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/buffer.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="763"> - <caret line="47" column="1" lean-forward="true" selection-start-line="47" selection-start-column="1" selection-end-line="47" selection-end-column="1" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/buffer.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="255"> - <caret line="15" column="22" lean-forward="true" selection-start-line="15" selection-start-column="22" selection-end-line="15" selection-end-column="22" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/openLoggerController.h"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="187"> - <caret line="11" column="37" lean-forward="true" selection-start-line="11" selection-start-column="37" selection-end-line="11" selection-end-column="37" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/openLoggerController.cpp"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="576"> - <caret line="175" column="87" selection-start-line="175" selection-start-column="87" selection-end-line="175" selection-end-column="87" /> - <folding> - <element signature="e#40#73#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/sufst-openlogger_controller.ino"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="856"> - <caret line="70" column="23" selection-start-line="70" selection-start-column="23" selection-end-line="70" selection-end-column="23" /> - <folding> - <element signature="e#57#90#0" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </component> -</project> \ No newline at end of file diff --git a/sufst-openlogger_controller/buffer.cpp b/sufst-openlogger_controller/buffer.cpp deleted file mode 100644 index b9f3742..0000000 --- a/sufst-openlogger_controller/buffer.cpp +++ /dev/null @@ -1,142 +0,0 @@ -// -// Created by Sil on 7/19/2019. -// - -#include "buffer.h" - -uint8_t cirBufferBegin(cirBuffer_handle cirBuff, void *data, uint16_t len, uint8_t unitSize) -{ - - if (cirBuff == NULL) { - return 0; - } - - if (data == NULL) { - return 0; - } - - cirBuff->head = 0; - cirBuff->tail = 0; - cirBuff->capacity = len; - cirBuff->full = 0; - cirBuff->data = (uint8_t *) data; - cirBuff->unitSize = unitSize; - - return 1; -} - -uint16_t cirBufferAvailable(cirBuffer_handle cirBuff) -{ - uint16_t availableForWrite = 0; - - if (!cirBuff->full) { - if (cirBuff->head >= cirBuff->tail) { - availableForWrite = cirBuff->head - cirBuff->tail; - } - else { - availableForWrite = cirBuff->capacity - cirBuff->tail + cirBuff->head; - } - } - else { - availableForWrite = cirBuff->capacity; - } - - return availableForWrite; -} - -uint16_t cirBufferAvailableForWrite(cirBuffer_handle cirBuff) -{ - return cirBuff->capacity - cirBufferAvailable(cirBuff); -} - -void cirBufferWrite(cirBuffer_handle cirBuff, void *unit) -{ - memcpy(&(cirBuff->data[cirBuff->head * cirBuff->unitSize]), unit, cirBuff->unitSize); - - ++cirBuff->head &= (cirBuff->capacity - 1); - - if (cirBuff->head == cirBuff->tail) { - cirBuff->full = 1; - - ++cirBuff->tail &= (cirBuff->capacity - 1); - } -} - -void cirBufferWriteBytes(cirBuffer_handle cirBuff, void *src, uint16_t len) -{ - - uint16_t usedBytes = cirBufferAvailable(cirBuff); - - if ((usedBytes + len) > cirBuff->capacity) { - cirBuff->full = 1; - } - - for (uint16_t i = 0; i < len; i++) { - cirBuff->data[cirBuff->head] = ((uint8_t *) src)[i]; - - ++cirBuff->head &= cirBuff->capacity - 1; - } - - if (cirBuff->full) { - cirBuff->tail = (cirBuff->tail + (len - (cirBuff->capacity - usedBytes))) & (cirBuff->capacity - 1); - } -} - -void *cirBufferExternalWrite(cirBuffer_handle cirBuff) -{ - uint8_t *head = &(cirBuff->data[cirBuff->head]); - - ++cirBuff->head &= cirBuff->capacity - 1; - - if (cirBuff->head == cirBuff->tail) { - cirBuff->full = 1; - - ++cirBuff->tail &= (cirBuff->capacity - 1); - } - - return head; -} - -void *cirBufferExternalRead(cirBuffer_handle cirBuff) -{ - uint8_t *tail = &(cirBuff->data[cirBuff->tail]); - - ++cirBuff->tail &= (cirBuff->capacity - 1); - - return (void *) tail; -} - -void cirBufferRead(cirBuffer_handle cirBuff, void *loc) -{ - - memcpy(loc, &(cirBuff->data[cirBuff->tail * cirBuff->unitSize]), cirBuff->unitSize); - - ++cirBuff->tail &= (cirBuff->capacity - 1); - - cirBuff->full = 0; - -} - -void *cirBufferPeek(cirBuffer_handle cirBuff) -{ - return (void *) (cirBuff->data[cirBuff->tail]); -} - -void cirBufferReadBytes(cirBuffer_handle cirBuff, void *loc, uint16_t len) -{ - cirBuff->full = 0; - - for (uint16_t i = 0; i < len; i++) { - ((uint8_t *) loc)[i] = cirBuff->data[cirBuff->tail]; - - ++cirBuff->tail &= cirBuff->capacity - 1; - } - -} - -void cirBufferReset(cirBuffer_handle cirBuff) -{ - cirBuff->head = 0; - cirBuff->tail = 0; - cirBuff->full = 0; -} \ No newline at end of file diff --git a/sufst-openlogger_controller/buffer.h b/sufst-openlogger_controller/buffer.h deleted file mode 100644 index d8f886d..0000000 --- a/sufst-openlogger_controller/buffer.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Created by Sil on 7/19/2019. -// - -#ifndef BUFFER_H -#define BUFFER_H - -#include "Arduino.h" - -typedef struct CirBuffer -{ - uint16_t head; - uint16_t tail; - uint8_t full; - uint8_t *data; - uint16_t capacity; - uint8_t unitSize; -}; - -typedef CirBuffer *cirBuffer_handle; - -/* - * THE LEN OF THE BUFFER MUST BE A POWER OF 2 - */ - -uint8_t cirBufferBegin(cirBuffer_handle cirBuff, void *data, uint16_t len, uint8_t unitSize); - -uint16_t cirBufferAvailable(cirBuffer_handle cirBuff); - -uint16_t cirBufferAvailableForWrite(cirBuffer_handle cirBuff); - -void cirBufferWrite(cirBuffer_handle cirBuff, void *unit); - -void cirBufferWriteBytes(cirBuffer_handle cirBuff, void *src, uint16_t len); - -void *cirBufferExternalWrite(cirBuffer_handle cirBuff); - -void cirBufferRead(cirBuffer_handle cirBuff, void *loc); - -void cirBufferReadBytes(cirBuffer_handle cirBuff, void *loc, uint16_t len); - -void *cirBufferExternalRead(cirBuffer_handle cirBuff); - -void *cirBufferPeek(cirBuffer_handle cirBuff); - -void cirBufferReset(cirBuffer_handle cirBuff); - -#endif //BUFFER_H \ No newline at end of file diff --git a/sufst-openlogger_controller/can.cpp b/sufst-openlogger_controller/can.cpp deleted file mode 100644 index 08097a4..0000000 --- a/sufst-openlogger_controller/can.cpp +++ /dev/null @@ -1,310 +0,0 @@ -// -// Created by Sil on 15/07/2019. -// - -#include "can.h" -// Watchdog -#include <avr/wdt.h> -#include "buffer.h" -#include <mcp_can.h> -#include <mcp_can_dfs.h> - -#include "ecuCan.h" - -// Can instance -MCP_CAN can; - -volatile unsigned long lastCanMsgRecTimeMs = 0; - -static CanMsgTemplate canRxBuffer[CAN_RX_BUFFER_LEN]; - -volatile CirBuffer canRxCirBuffer; - -static CanMsgTemplate canTxBuffer[CAN_TX_BUFFER_LEN]; - -volatile CirBuffer canTxCirBuffer; - -extern void ecuCanMsg0x2000(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2001(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2002(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2003(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2004(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2005(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2006(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2007(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2008(CanMsgTemplate *canMsg); - -extern void ecuCanMsg0x2009(CanMsgTemplate *canMsg); - -// ECU can messages function pointers for calling the corresponding function when that msg is seen. -// Used in function canParseRxMsg. -void -(*ecuCanFuncPtrs[10])(CanMsgTemplate *) = {ecuCanMsg0x2000, ecuCanMsg0x2001, - ecuCanMsg0x2002, - ecuCanMsg0x2003, - ecuCanMsg0x2004, ecuCanMsg0x2005, - ecuCanMsg0x2006, - ecuCanMsg0x2007, ecuCanMsg0x2008, - ecuCanMsg0x2009}; - -uint8_t canBegin() -{ - if (!cirBufferBegin(&canRxCirBuffer, canRxBuffer, CAN_RX_BUFFER_LEN, sizeof(CanMsgTemplate))) { - return 0; - } - - if (!cirBufferBegin(&canTxCirBuffer, canTxBuffer, CAN_TX_BUFFER_LEN, sizeof(CanMsgTemplate))) { - return 0; - } - - return 1; -} - -uint8_t canSaveMsg() -{ - if (digitalRead(CAN_INT_PIN)) { - return 0; - } - - union - { - uint8_t id[4]; - uint32_t id32; - } uid; - - if (can.checkReceive() != CAN_MSGAVAIL) { - return 0; - } - - CanMsgTemplate canReceivedMsg; - - if (can.readMsgBuf(&(canReceivedMsg.len), canReceivedMsg.data) != CAN_OK) { - return 0; - } - - uid.id32 = can.getCanId(); - - canReceivedMsg.timestamp = millis(); - - canReceivedMsg.id = (uid.id[1] << 8) | uid.id[0]; - - cirBufferWrite(&canRxCirBuffer, &canReceivedMsg); - -#if DEBUG_CAN_RX - Serial.print("CAN SV RX: "); - - Serial.print(canReceivedMsg.id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < 7; i++) { - Serial.print(canReceivedMsg.data[i]); - Serial.print(", "); - } - Serial.println(canReceivedMsg.data[7]); -#endif // DEBUG_CAN_RX; - - return 1; -} - -void canAddTxRequest(CanMsgTemplate *canMsg) -{ - if (NULL == canMsg) { - return; - } - -#if DEBUG_CAN_TX_REQS - Serial.print("CAN TX ADD: "); - Serial.print(canMsg.id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < 7; i++) { - Serial.print(canMsg.data[i], HEX); - Serial.print(", "); - } - Serial.println(canMsg.data[7], HEX); -#endif // DEBUG_CAN_TX_REQS - - cirBufferWrite(&canTxCirBuffer, canMsg); -} - -// External interrupt currently only designed to work with atmega 2560 -#if !defined(__AVR_ATmega2560__) -#error "PLATFORM NOT SUPPORTED CURRENTLY" -#endif // !defined(atmega2560) - -#if CAN_INT_PIN != 2 -#error "CAN_INT_PIN CHANGED FROM 2" -#endif //CAN_INT_PIN != 2 - -void canBeginExtInterrupt() -{ - noInterrupts(); - - // On the mega 2560 pin 2 is external interrupt 4 - EIMSK &= ~(1 << INT4); - - EICRB &= ~(1 << ISC41); - //EICRB &= ~(1 << ISC40); - - EIMSK |= (1 << INT4); - - interrupts(); -} - -ISR(INT4_vect) { - - noInterrupts(); - - lastCanMsgRecTimeMs = millis(); - - canSaveMsg(); - - interrupts(); -} - -void canParseRxMsg(CanMsgTemplate *canMsg) -{ - if ((canMsg->id >= 0x2000) && (canMsg->id <= 0x200A)) { - // canMsg->idByte[0] holds the 0x01 in 0x2001 received can msg - // We use the sub byte of the can ecu msg to determine the corresonding function - // This removes the need for a long if statement giving significant performance boosts - (*ecuCanFuncPtrs[canMsg->idByte[0]])(canMsg); - } -} - -void canProcessRx() -{ - uint8_t retVal = 0; - - noInterrupts(); - canSaveMsg(); - interrupts(); - - noInterrupts(); - while (cirBufferAvailable(&canRxCirBuffer) > 0) { - - CanMsgTemplate canMsg; - - cirBufferRead(&canRxCirBuffer, &canMsg); - -#if DEBUG_CAN_RX - Serial.print("CAN RX: "); - - Serial.print(canMsg.id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < 7; i++) { - Serial.print(canMsg.data[i]); - Serial.print(", "); - } - Serial.println(canMsg.data[7]); -#endif // DEBUG_CAN_RX - -#if DEBUG_CAN_RX_MINIMAL - Serial.print("CAN RX : "); - Serial.println(canMsg.id, HEX); -#endif // DEBUG_CAN_RX_MINIMAL - - canParseRxMsg(&canMsg); - - // This may seem dumb but this allows any pending interrupts to be serviced safely - // just before we start another loop. Otherwise if we stay in this loop too long without - // servicing any interrupts we might miss one. - interrupts(); - noInterrupts(); - } - interrupts(); -} - -uint8_t canProcessTx() -{ - - uint8_t retVal = 1; - - noInterrupts(); - while (cirBufferAvailable(&canTxCirBuffer) > 0) { - - CanMsgTemplate canMsg; - - cirBufferRead(&canTxCirBuffer, &canMsg); - -#if DEBUG_CAN_TX - Serial.print("CAN TX: "); - Serial.print(canMsg.id, HEX); - Serial.print(" : "); - for(uint8_t i = 0; i < (canMsg.len - 1); i++) { - Serial.print(canMsg.data[i]); - Serial.print(", "); - } - Serial.println(canMsg.data[canMsg.len - 1]); -#endif // DEBUG_CAN_TX - -#if DEBUG_CAN_TX_MINIMAL - Serial.print("CAN TX : "); - Serial.println(canMsg.id, HEX); -#endif // DEBUG_CAN_TX_MINIMAL - - uint8_t canTxWasSuccessful = 0; - - for (uint8_t i = 0; i < CAN_TX_RETRY_LIMIT; i++) { - if (can.sendMsgBuf(canMsg.id, 1, canMsg.len, - canMsg.data, true) == CAN_OK) { - - canTxWasSuccessful = 1; - - retVal = 1; - - break; - } - else { - retVal = 0; - } - - } - - if (!canTxWasSuccessful) { - -#if DEBUG_CAN_TX || DEBUG_CAN_TX_MINIMAL - Serial.println("CAN TX: TX FAILED"); -#endif // DEBUG_CAN_TX || DEBUG_CAN_TX_MINIMAL - - } - - // This may seem dumb but this allows any pending interrupts to be serviced safely - // just before we start another loop. Otherwise if we stay in this loop too long without - // servicing any interrupts we might miss one. - interrupts(); - noInterrupts(); - } - - interrupts(); - - return retVal; -} - -void canNoActivityResetDevice() -{ - Serial.println("CAN ERROR : RESETTING DEVICE"); - Serial.flush(); - -#if SD_ENABLED - - uint8_t payload[10] = {0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00}; - - sdAddToWriteBlocks(payload, 10); - - sdWriteBufferBlocks(); - -#endif //SD_ENABLED - - // Enabled watchdog timer to reset device as we will not pat it - wdt_enable(WDTO_15MS); - - while (true); - -} \ No newline at end of file diff --git a/sufst-openlogger_controller/can.h b/sufst-openlogger_controller/can.h deleted file mode 100644 index 4fc862a..0000000 --- a/sufst-openlogger_controller/can.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// Created by Sil on 15/07/2019. -// - -#ifndef SUFST_OPENLOGGER_CONTROLLER_CAN_H -#define SUFST_OPENLOGGER_CONTROLLER_CAN_H - -#include "Arduino.h" - -// CAN_INT_PIN MUST BE 2 -#define CAN_INT_PIN 2 -#define CAN_CS_PIN 10 - -#define CAN_RX_BUFFER_LEN 32 -#define CAN_TX_BUFFER_LEN 32 - -#define CAN_RESET_DEVICE_ON_TIMEOUT 0 -#define CAN_NO_MSG_TIMEOUT_RESET_MS 10000 - -#define CAN_TX_RETRY_LIMIT 5 - -#define DEBUG_CAN_RX 0 -#define DEBUG_CAN_RX_MINIMAL 0 - -#define DEBUG_CAN_TX 0 -#define DEBUG_CAN_TX_MINIMAL 0 -#define DEBUG_CAN_TX_REQS 0 - -typedef struct CanMsgTemplate -{ - uint32_t timestamp; - - union - { - uint16_t id; - // if id is 0x2001 then idByte[0] is 0x01 and idByte[1] is 0x20 - // due to the endianness of the system - uint8_t idByte[2]; - }; - - uint8_t len; - - union - { - uint8_t data[8]; - uint16_t data16[4]; - uint32_t data32[2]; - float dataFl[2]; - }; - -}; - -uint8_t canBegin(); - -uint8_t canSaveMsg(); - -uint8_t canAddTxRequest(uint16_t id, void *data, uint8_t lenBytes); - -void canBeginExtInterrupt(); - -void canParseRxMsg(CanMsgTemplate *canMsg); - -void canProcessRx(); - -uint8_t canProcessTx(); - -void canNoActivityResetDevice(); - -#endif //SUFST_OPENLOGGER_CONTROLLER_CAN_H diff --git a/sufst-openlogger_controller/ecuCan.cpp b/sufst-openlogger_controller/ecuCan.cpp deleted file mode 100644 index cd6e5eb..0000000 --- a/sufst-openlogger_controller/ecuCan.cpp +++ /dev/null @@ -1,304 +0,0 @@ -// -// Created by Sil on 7/21/2019. -// - -#include "ecuCan.h" -#include "openLoggerController.h" -#include "ecuOpenloggerTags.h" - -struct EcuDataOpenlogger -{ - uint8_t startTag; - uint32_t timestamp; - uint16_t data; - uint8_t endTag; -}; - -void ecuOpenloggerWrite(EcuDataOpenlogger *ecuDataOpenlogger); - -void ecuOpenloggerSave(CanMsgTemplate *canMsgTemplate, uint8_t index); - -void ecuOpenloggerWrite(EcuDataOpenlogger &ecuDataOpenlogger) -{ - static uint8_t openloggerPayload[8]; - - memcpy(openloggerPayload, &(ecuDataOpenlogger.startTag), 1); - - memcpy(&(openloggerPayload[1]), &(ecuDataOpenlogger.timestamp), 4); - - memcpy(&(openloggerPayload[5]), &(ecuDataOpenlogger.data), 2); - - memcpy(&(openloggerPayload[7]), &(ecuDataOpenlogger.endTag), 1); - - openloggerWrite(openloggerPayload, 8); -} - -void ecuOpenloggerSave(CanMsgTemplate *canMsg, uint8_t index) -{ - static EcuDataOpenlogger ecuDataOpenlogger; - - uint8_t ecuId = canMsg->idByte[0]; - - uint8_t ecuParamterTag = ecuMsgParameterToOpenloggerTag[ecuId][index]; - - ecuDataOpenlogger.startTag = ecuParamterTag; - - ecuDataOpenlogger.timestamp = canMsg->timestamp; - - ecuDataOpenlogger.data = canMsg->data16[index]; - - ecuDataOpenlogger.endTag = ecuParamterTag; - - ecuOpenloggerWrite(ecuDataOpenlogger); -} - -void ecuCanMsg0x2000(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2000 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2000"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t rpm = canMsg->data16[0]; - uint16_t tpsPerc = canMsg->data16[1]; - uint16_t waterTempC = canMsg->data16[2]; - uint16_t airTempC = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); -} - -void ecuCanMsg0x2001(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2001 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2001"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t mainifoldPresKpa = canMsg->data16[0]; - uint16_t lambdax1000 = canMsg->data16[1]; - uint16_t speedKphx10 = canMsg->data16[2]; - uint16_t oilPressKpa = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); - -} - -void ecuCanMsg0x2002(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2002 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2002"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t fuelPressKpa = canMsg->data16[0]; - uint16_t oilTempC = canMsg->data16[1]; - uint16_t batteryVx10 = canMsg->data16[2]; - uint16_t fuelComsumLpHrx10 = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); - - // Serial.println((float)(batteryVx10 / 10.0)); -} - -void ecuCanMsg0x2003(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2003 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2003"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t currentGear = canMsg->data16[0]; - uint16_t advanceDegx10 = canMsg->data16[1]; - uint16_t injectionTimeMsx100 = canMsg->data16[2]; - uint16_t fuelComsumLp100kMx10 = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); -} - -void ecuCanMsg0x2004(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2004 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2004"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t ana1mV = canMsg->data16[0]; - uint16_t ana2mV = canMsg->data16[1]; - uint16_t ana3mV = canMsg->data16[2]; - uint16_t camAdvanceDegx10 = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); -} - -void ecuCanMsg0x2005(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2005 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2005"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t camTargDegx10 = canMsg->data16[0]; - uint16_t camPwmPercx10 = canMsg->data16[1]; - uint16_t crankErrorsNr = canMsg->data16[2]; - uint16_t camErrorsNr = canMsg->data16[3]; -} - -void ecuCanMsg0x2006(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2006 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2006"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t cam2AdvDegx10 = canMsg->data16[0]; - uint16_t cam2TargDegx10 = canMsg->data16[1]; - uint16_t cam2PwmPercx10 = canMsg->data16[2]; - uint16_t external5VmV = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); - -} - -void ecuCanMsg0x2007(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2007 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2007"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t injDutyCyclePerc = canMsg->data16[0]; - uint16_t lambdaPidTargPercx10 = canMsg->data16[1]; - uint16_t lambdaPidAdjPercx10 = canMsg->data16[2]; - uint16_t ecuSwitchesBitField = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); -} - -void ecuCanMsg0x2008(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2008 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2008"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t rdSpeedKphx10 = canMsg->data16[0]; - uint16_t rUdSpeedKphx10 = canMsg->data16[1]; - uint16_t ldSpeedKphx10 = canMsg->data16[2]; - uint16_t lUdSpeedKphx10 = canMsg->data16[3]; - - ecuOpenloggerSave(canMsg, 0); - ecuOpenloggerSave(canMsg, 1); - ecuOpenloggerSave(canMsg, 2); - ecuOpenloggerSave(canMsg, 3); -} - -void ecuCanMsg0x2009(CanMsgTemplate *canMsg) -{ -#if DEBUG_ECU_CAN - Serial.print("ECU : 0x2009 : "); - for (uint8_t i = 0; i < 3; i++) { - Serial.print(canMsg->data16[i], HEX); - Serial.print(" , "); - } - Serial.println(canMsg->data16[3], HEX); -#endif //DEBUG_ECU_CAN - -#if DEBUG_ECU_CAN_MINIMAL - Serial.println("ECU : 0x2008"); -#endif //DEBUG_ECU_CAN_MINIMAL - - uint16_t rightLambdax1000 = canMsg->data16[0]; -} \ No newline at end of file diff --git a/sufst-openlogger_controller/ecuCan.h b/sufst-openlogger_controller/ecuCan.h deleted file mode 100644 index 3e0f985..0000000 --- a/sufst-openlogger_controller/ecuCan.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Created by Sil on 7/21/2019. -// - -#ifndef ECUCAN_H -#define ECUCAN_H - -#include "Arduino.h" -#include "can.h" - -/* - * These are called from can.cpp when their corresponding can msg id is seen. - * So functions name *must* ecuCanMsg0x200N. - * - */ - -void ecuCanMsg0x2000(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2001(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2002(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2003(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2004(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2005(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2006(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2007(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2008(CanMsgTemplate *canMsg); - -void ecuCanMsg0x2009(CanMsgTemplate *canMsg); - - -#endif //ECUCAN_H diff --git a/sufst-openlogger_controller/ecuOpenloggerTags.h b/sufst-openlogger_controller/ecuOpenloggerTags.h deleted file mode 100644 index c0bc6d3..0000000 --- a/sufst-openlogger_controller/ecuOpenloggerTags.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Created by Sil on 7/21/2019. -// - -#ifndef ECUOPENLOGGERTAGS_H -#define ECUOPENLOGGERTAGS_H - -uint8_t ecuMsgParameterToOpenloggerTag[8][4] = { - {1, 2, 3, 4}, - {5, 6, 7, 8}, - {9, 10, 11, 12}, - {13, 14, 15, 16}, - {17, 18, 19, 20}, - {21, 22, 23, 24}, - {25, 26, 27, 28}, - {29, 30, 31, 32} -}; - -#endif //ECUOPENLOGGERTAGS_H diff --git a/sufst-openlogger_controller/openLoggerController.cpp b/sufst-openlogger_controller/openLoggerController.cpp deleted file mode 100644 index d530acb..0000000 --- a/sufst-openlogger_controller/openLoggerController.cpp +++ /dev/null @@ -1,296 +0,0 @@ -// -// Created by Sil on 14/07/2019. -// - -#include "openLoggerController.h" -#include "buffer.h" - -enum -{ - uartStartByte = 's', - uartStopByte = 'f' -}; - -enum -{ - uartTypeData = 0, - uartTypeCommand, - uartTypeInfo -}; - -enum -{ - uartCommandStartWrites = 0, - uartCommandStopWrites -}; - -enum -{ - uartInfoAlreadyRunning = 0, - uartInfoAlreadyIdle, - uartInfoWritesStarted, - uartInfoWritesStartError, - uartInfoStopped, - uartInfoStopError, - uartInfoWriteError, - uartInfoWritesNotStarted -}; - -typedef enum -{ - idle = 0, - running, - failedToStart, - failedToStop, - failToWrite -} OpenloggerState; - -typedef enum -{ - checkingForStart = 0, - checkingForType, - checkingForInfo -} OpenloggerUartRxState; - -static uint8_t openloggerTxDataBuffer[OPENLOGGER_TX_BUFFER_LEN]; - -static CirBuffer openloggerTxDataCirBuffer; - -static uint8_t openloggerTxCommandBuffer[OPENLOGGER_TX_COMMAND_BUFFER_LEN]; - -static CirBuffer openloggerTxCommandCirBuffer; - -OpenloggerState openloggerState = idle; - -OpenloggerUartRxState openloggerUartRxState = checkingForStart; - -static bool uartCurrentlyTransmitting = false; - -void openloggerIdle(); - -void openloggerRunning(); - -void openloggerFailedToStart(); - -void openloggerFailedToStop(); - -void openloggerFailedToWrite(); - -void openloggerRxCheckingForStart(); - -void openloggerRxCheckingForType(); - -void openloggerRxCheckingForInfo(); - -/* - * openloggerState_ptrs correspond to INFO packets, so e.g if OPENLOGGER_INFO_WRITES_STARTED (0x02) is seen then - * [2] is called which is openloggerRunning. - */ - -OpenloggerState rxInfoTypeToStateLookup[8] = {running, idle, running, failedToStart, idle, failedToStop, - failToWrite, idle}; - -void (*openloggerState_ptrs[8])(void) = {openloggerIdle, openloggerRunning, - openloggerFailedToStart, openloggerFailedToStop, - openloggerFailedToWrite}; - -void (*openloggerUartRxState_ptrs[3])(void) = {openloggerRxCheckingForStart, openloggerRxCheckingForType, - openloggerRxCheckingForInfo}; - -void serialEvent1() -{ - openloggerUartRxState_ptrs[openloggerUartRxState](); -} - -void openloggerRxCheckingForStart() -{ - -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING START "); - Serial.println(Serial1.peek()); -#endif // DEBUG_OPENLOGGER - - if (Serial1.read() == uartStartByte) { - openloggerUartRxState = checkingForType; - } -} - -void openloggerRxCheckingForType() -{ -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING FOR TYPE "); - Serial.println(Serial1.peek()); -#endif // DEBUG_OPENLOGGER - - if (Serial1.read() == uartTypeInfo) { - openloggerUartRxState = checkingForInfo; - } - else { - openloggerUartRxState = checkingForStart; - } -} - -void openloggerRxCheckingForInfo() -{ -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: CHECKING FOR INFO "); - Serial.println(Serial1.peek()); -#endif // DEBUG_OPENLOGGER - /* - * The value received from the openlogger dictates what state we are in. - */ - openloggerState = rxInfoTypeToStateLookup[Serial1.read()]; - - openloggerUartRxState = checkingForStart; - -} - -void openloggerIdle() -{ - -} - -void openloggerRunning() -{ - /* - * The uart Tx buffer has a capacity of 64 bytes, if we try to write more than this then Serial.write becomes - * blocking, so we want to avoid this at all costs. - * - */ - - static uint8_t uartTxPayload[64]; - - static uint16_t uartAmountToTransmit = 0; - - static uint32_t uartLastTransmissionMs = millis(); - - uint32_t uartCurrentMs = millis(); - - uint16_t uartTxDataAmount = cirBufferAvailable(&openloggerTxDataCirBuffer); - - if (uartTxDataAmount > 0) { - - if ((uartCurrentMs - uartLastTransmissionMs) >= 5) { - if (Serial1.availableForWrite() >= 35) { - - uint8_t uartTxBytes = (uartTxDataAmount >= 32) ? 32 : uartTxDataAmount; - - Serial1.write(uartStartByte); - Serial1.write(uartTypeData); - Serial1.write(uartTxBytes); - - cirBufferReadBytes(&openloggerTxDataCirBuffer, uartTxPayload, uartTxBytes); - - Serial1.write(uartTxPayload, uartTxBytes); - - uartLastTransmissionMs = millis(); - } - } - } -} - -void openloggerFailedToStart() -{ -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: FAILED TO START"); -#endif // DEBUG_OPENLOGGER - - openloggerState = idle; -} - -void openloggerFailedToStop() -{ -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: FAILED TO STOP"); -#endif // DEBUG_OPENLOGGER - - openloggerState = idle; -} - -void openloggerFailedToWrite() -{ -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: FAILED TO WRITE"); -#endif // DEBUG_OPENLOGGER - - openloggerState = idle; -} - -void openloggerBegin(uint32_t serialBaud) -{ - - Serial1.begin(serialBaud); - - cirBufferBegin(&openloggerTxDataCirBuffer, - openloggerTxDataBuffer, - OPENLOGGER_TX_BUFFER_LEN, - sizeof(uint8_t)); - - cirBufferBegin(&openloggerTxCommandCirBuffer, - openloggerTxCommandBuffer, - OPENLOGGER_TX_COMMAND_BUFFER_LEN, - sizeof(uint8_t)); - -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: BEGIN FINISHED"); -#endif // DEBUG_OPENLOGGER -} - -void openloggerBeginWrites() -{ - openloggerWriteCommand(uartCommandStartWrites); - -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: OPLOG STARTING WRITES"); -#endif // DEBUG_OPENLOGGER -} - -void openloggerStopWrites() -{ - openloggerWriteCommand(uartCommandStopWrites); - -#if DEBUG_OPENLOGGER - Serial.println("OPLOG: OPLOG STOPPING WRITES"); -#endif // DEBUG_OPENLOGGER -} - -void openloggerProcess() -{ - if (!uartCurrentlyTransmitting) { - if (cirBufferAvailable(&openloggerTxCommandCirBuffer) > 0) { - -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: COMMAND "); - Serial.println(*((uint8_t *)cirBufferPeek(&openloggerTxCommandCirBuffer)), HEX); -#endif // DEBUG_OPENLOGGER - - Serial1.write(uartStartByte); - Serial1.write(uartTypeCommand); - Serial1.write(*((uint8_t *) cirBufferExternalRead(&openloggerTxCommandCirBuffer))); - Serial1.flush(); - } - } - - openloggerState_ptrs[openloggerState](); -} - -void openloggerWrite(void *pPayload, uint8_t payloadLen) -{ - - if (openloggerState == running) { - cirBufferWriteBytes(&openloggerTxDataCirBuffer, pPayload, payloadLen); - } -} - -void openloggerWriteCommand(uint8_t command) -{ - -#if DEBUG_OPENLOGGER - Serial.print("OPLOG: APPENDING COMMAND "); - Serial.println(command, HEX); - Serial.flush(); -#endif // DEBUG_OPENLOGGER - - cirBufferWrite(&openloggerTxCommandCirBuffer, &command); - -} diff --git a/sufst-openlogger_controller/openLoggerController.h b/sufst-openlogger_controller/openLoggerController.h deleted file mode 100644 index fd48ca6..0000000 --- a/sufst-openlogger_controller/openLoggerController.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// Created by Sil on 14/07/2019. -// - -#ifndef SUFST_OPENLOGGER_INO_SDCARDMASTER_H -#define SUFST_OPENLOGGER_INO_SDCARDMASTER_H - -#include "Arduino.h" - -#define DEBUG_OPENLOGGER 0 - -#define OPENLOGGER_TX_BUFFER_LEN 1024 -#define OPENLOGGER_TX_COMMAND_BUFFER_LEN 8 - -/* - * The serial port is hard coded to serial1 so ensure openlogger is connected to serial1. - * - * There are three types of transactions: save this data, do this command or heres some info. - * - * STRUCTURE OF A VALID SD CARD UART SAVE THIS DATA TRANSACTION - * - * START BYTE | DATA TYPE | LENGTH BYTE | DATA BYTES | STOP BYTE - * - * STRUCTURE OF A VALID COMMAND TRANSACTION - * - * START BYTE | COMMAND TYPE | COMMAND BYTE | STOP BYTE - * - * STUCTURE OF VALID INFO TRANSACTION - * - * START BYTE | INFO TYPE | INFO BYTE | STOP BYTE - * - * If no rx has been received for more than 500ms the rx state is reset to checking for start byte - * This ensures the open logger does not get stuck in the middle of a transaction if the master stops sending data - * - */ -void openloggerBegin(uint32_t serialBaud); - -void openloggerBeginWrites(); - -void openloggerStopWrites(); - -void openloggerProcess(); - -void openloggerWrite(void *pPayload, uint8_t payloadLen); - -void openloggerWriteCommand(uint8_t command); - - -#endif //SUFST_OPENLOGGER_INO_SDCARDMASTER_H diff --git a/sufst-openlogger_controller/sufst-openlogger_controller.ino b/sufst-openlogger_controller/sufst-openlogger_controller.ino deleted file mode 100644 index af9bf61..0000000 --- a/sufst-openlogger_controller/sufst-openlogger_controller.ino +++ /dev/null @@ -1,103 +0,0 @@ -#define DEBUG_ECU_CAN 0 -#define DEBUG_ECU_CAN_MINIMAL 0 - -#include "openLoggerController.h" -#include "ecuCan.h" -#include "can.h" - -// Watchdog -#include <avr/wdt.h> - -#define OPENLOGGER_SERIAL_BUAD_RATE 115200 - -uint8_t arduinoProcessSerial(); - -void setup() -{ - // put your setup code here, to run once: - - - // Serial port for host pc communications - Serial.begin(115200); - - Serial.println("BEGIN"); - - // Openlogger runs on uart port TX1 RX1 (Serial1) - openloggerBegin(OPENLOGGER_SERIAL_BUAD_RATE); - - //canBegin(); -} - -void loop() -{ - // put your main code here, to run repeatedly: - - /* - * ALL PROCESSES *MUST* BE NON BLOCKING - */ - unsigned long currMs = millis(); - - static unsigned long lastSdWriteMs = millis(); - - static uint16_t cnt = 0; - - static CanMsgTemplate emulateCanMsg; - - emulateCanMsg.len = 8; - - if ((currMs - lastSdWriteMs) >= 20) { - - emulateCanMsg.timestamp = millis(); - - emulateCanMsg.data16[0] = cnt++; - emulateCanMsg.data16[1] = cnt++; - emulateCanMsg.data16[2] = cnt++; - emulateCanMsg.data16[3] = cnt++; - - emulateCanMsg.id = 0x2000; - - ecuCanMsg0x2000(&emulateCanMsg); - - emulateCanMsg.id = 0x2001; - - ecuCanMsg0x2001(&emulateCanMsg); - - emulateCanMsg.id = 0x2002; - - ecuCanMsg0x2002(&emulateCanMsg); - - emulateCanMsg.id = 0x2003; - - ecuCanMsg0x2003(&emulateCanMsg); - - lastSdWriteMs = millis(); - } - - wdt_reset(); - - openloggerProcess(); - arduinoProcessSerial(); - //canProcessRx(); - //canProcessTx(); - -} - -uint8_t arduinoProcessSerial() -{ - if (Serial.available()) { - - uint8_t serialByte = Serial.read(); - - switch (serialByte) { - case 'g':openloggerBeginWrites(); - - break; - - case 's':openloggerStopWrites(); - - break; - } - } - - return 1; -} -- GitLab