summaryrefslogtreecommitdiff
path: root/obdlogger/datalogger.h
diff options
context:
space:
mode:
authorStanley Huang <stanleyhuangyc@gmail.com>2014-03-18 22:37:18 +0800
committerStanley Huang <stanleyhuangyc@gmail.com>2014-03-18 22:37:18 +0800
commitbe625d6ca4cf59fb4f4d0e2fe79d798a529b8c3d (patch)
tree5381012b46ad39362d5c08dbd7c82736eee73a6f /obdlogger/datalogger.h
parent6aaf937f2c17d713966b3b3d647fa35980a3b8ce (diff)
download2021-arduino-obd-be625d6ca4cf59fb4f4d0e2fe79d798a529b8c3d.tar.gz
2021-arduino-obd-be625d6ca4cf59fb4f4d0e2fe79d798a529b8c3d.tar.bz2
2021-arduino-obd-be625d6ca4cf59fb4f4d0e2fe79d798a529b8c3d.zip
Cleanup
Diffstat (limited to 'obdlogger/datalogger.h')
-rw-r--r--obdlogger/datalogger.h377
1 files changed, 0 insertions, 377 deletions
diff --git a/obdlogger/datalogger.h b/obdlogger/datalogger.h
deleted file mode 100644
index 2c4ebfe..0000000
--- a/obdlogger/datalogger.h
+++ /dev/null
@@ -1,377 +0,0 @@
-typedef enum {
- LOG_TYPE_DEFAULT = 0,
- LOG_TYPE_0_60,
- LOG_TYPE_0_100,
- LOG_TYPE_100_200,
- LOG_TYPE_400M,
- LOG_TYPE_LAPS,
- LOG_TYPE_ROUTE,
-} LOG_TYPES;
-
-#define FLAG_CAR 0x1
-#define FLAG_CYCLING 0x2
-#define FLAG_OBD 0x10
-#define FLAG_GPS 0x20
-#define FLAG_ACC 0x40
-
-#define FORMAT_BIN 0
-#define FORMAT_CSV 1
-
-typedef struct {
- uint32_t time;
- uint16_t pid;
- uint8_t flags;
- uint8_t checksum;
- float value;
-} LOG_DATA;
-
-typedef struct {
- uint32_t time;
- uint16_t pid;
- uint8_t flags;
- uint8_t checksum;
- float value[3];
-} LOG_DATA_COMM;
-
-typedef struct {
- uint32_t time; /* e.g. 1307281259 */
- uint16_t pid;
- uint8_t message;
- uint8_t checksum;
- uint16_t fileIndex;
- uint16_t fileSize; /* KB */
- uint16_t logFlags;
- uint8_t logType;
- uint8_t data[5];
-} LOG_DATA_FILE_INFO;
-
-typedef struct {
- uint32_t time;
- uint16_t pid;
- uint8_t message;
- uint8_t checksum;
- uint8_t data[12];
-} LOG_DATA_COMMAND;
-
-typedef struct {
- uint32_t id;
- uint32_t dataOffset;
- uint8_t ver;
- uint8_t logType;
- uint16_t flags;
- uint32_t dateTime; //4, YYMMDDHHMM, e.g. 1305291359
- /*
- uint8_t devid[8];
- uint8_t vin[24];
- uint8_t unused[84];
- */
-} HEADER;
-
-#define HEADER_LEN 128 /* bytes */
-
-#define PID_GPS_COORDINATES 0xF00A
-#define PID_GPS_ALTITUDE 0xF00C
-#define PID_GPS_SPEED 0xF00D
-#define PID_GPS_HEADING 0xF00E
-#define PID_GPS_SAT_COUNT 0xF00F
-#define PID_GPS_TIME 0xF010
-
-#define PID_ACC 0xF020
-#define PID_GYRO 0xF021
-
-#define PID_MESSAGE 0xFE00
-#define PID_HEART_BEAT 0xFFEE
-
-#define MSG_FILE_LIST_BEGIN 0x1
-#define MSG_FILE_LIST_END 0x2
-#define MSG_FILE_INFO 0x3
-#define MSG_FILE_REQUEST 0x4
-
-#if LOG_FORMAT == FORMAT_BIN
-#define FILE_NAME_FORMAT "/DAT%05d.LOG"
-#else
-#define FILE_NAME_FORMAT "/DAT%05d.CSV"
-#endif
-
-#if ENABLE_DATA_OUT && !USE_OBD_BT
-#if defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
- SoftwareSerial mySerial(A8, A9); /* for BLE Shield on MEGA*/
-#elif defined(__AVR_ATmega644P__)
- SoftwareSerial mySerial(9, 10); /* for Microduino */
-#else
- SoftwareSerial mySerial(A2, A3); /* for BLE Shield on UNO*/
-#endif
-#endif
-
-void btInit(int baudrate);
-void btSend(byte* data, byte length);
-
-class CDataLogger {
-public:
- void initSender()
- {
-#if ENABLE_DATA_OUT
-#if USE_OBD_BT
- btInit(9600);
-#else
- mySerial.begin(9600);
-#endif
-#endif
-#if ENABLE_DATA_LOG && LOG_FORMAT == FORMAT_CSV
- m_lastDataTime = 0;
-#endif
- }
-#if ENABLE_DATA_OUT
- void sendFileInfo(File& file)
- {
- if (file.size() < HEADER_LEN) return;
-
- LOG_DATA_FILE_INFO info = {0};
- info.fileIndex = atol(file.name() + 3);
- if (info.fileIndex == 0) return;
-
- HEADER hdr;
- if (file.readBytes((char*)&hdr, sizeof(hdr)) != sizeof(hdr)) return;
-
- info.pid = PID_MESSAGE;
- info.message = MSG_FILE_INFO;
- info.fileSize = file.size();
- info.time = hdr.dateTime;
- info.logType = hdr.logType;
- info.logFlags = hdr.flags;
- info.checksum = getChecksum((char*)&info, sizeof(info));
-#if USE_OBD_BT
- btSend((uint8_t*)&info, sizeof(info));
-#else
- mySerial.write((uint8_t*)&info, sizeof(info));
-#endif
- }
- void sendCommand(byte message, void* data = 0, byte bytes = 0)
- {
- LOG_DATA_COMMAND msg = {0, PID_MESSAGE, message};
- if (data) memcpy(msg.data, data, bytes);
- msg.checksum = getChecksum((char*)&msg, sizeof(msg));
-#if USE_OBD_BT
- btSend((uint8_t*)&msg, sizeof(msg));
-#else
- mySerial.write((uint8_t*)&msg, sizeof(msg));
-#endif
- }
- bool receiveCommand(LOG_DATA_COMMAND& msg)
- {
-#if !USE_OBD_BT
- if (!mySerial.available())
- return false;
-
- if (mySerial.readBytes((char*)&msg, sizeof(msg)) != sizeof(msg))
- return false;
-
- uint8_t checksum = msg.checksum;
- msg.checksum = 0;
- if (getChecksum((char*)&msg, sizeof(msg)) != msg.checksum) {
- return false;
- }
-#endif
- return true;
- }
-#endif
- void logData(uint16_t pid, int value)
- {
- LOG_DATA_COMM ld = {dataTime, pid, 1, 0, value};
- ld.checksum = getChecksum((char*)&ld, 12);
-#if ENABLE_DATA_OUT
-#if USE_OBD_BT
- btSend((uint8_t*)&ld, 12);
-#else
- mySerial.write((uint8_t*)&ld, 12);
-#endif
-#endif
-#if ENABLE_DATA_LOG
-#if LOG_FORMAT == FORMAT_BIN
- sdfile.write((uint8_t*)&ld, 12);
- dataSize += 12;
-#else
- dataSize += sdfile.print(dataTime - m_lastDataTime);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(pid, HEX);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value);
- dataSize += sdfile.write('\n');
- m_lastDataTime = dataTime;
-#endif
-#endif
- }
- void logData(uint16_t pid, float value)
- {
- LOG_DATA_COMM ld = {dataTime, pid, 1, 0, value};
- ld.checksum = getChecksum((char*)&ld, 12);
-#if ENABLE_DATA_OUT
-#if USE_OBD_BT
- btSend((uint8_t*)&ld, 12);
-#else
- mySerial.write((uint8_t*)&ld, 12);
-#endif
-#endif
-#if ENABLE_DATA_LOG
-#if LOG_FORMAT == FORMAT_BIN
- sdfile.write((uint8_t*)&ld, 12);
- dataSize += 12;
-#else
- dataSize += sdfile.print(dataTime - m_lastDataTime);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(pid, HEX);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value);
- dataSize += sdfile.write('\n');
- m_lastDataTime = dataTime;
-#endif
-#endif
- }
- void logData(uint16_t pid, float value1, float value2)
- {
- LOG_DATA_COMM ld = {dataTime, pid, 2, 0, {value1, value2}};
- ld.checksum = getChecksum((char*)&ld, 16);
-#if ENABLE_DATA_OUT
-#if USE_OBD_BT
- btSend((uint8_t*)&ld, 16);
-#else
- mySerial.write((uint8_t*)&ld, 16);
-#endif
-#endif
-#if ENABLE_DATA_LOG
-#if LOG_FORMAT == FORMAT_BIN
- sdfile.write((uint8_t*)&ld, 16);
- dataSize += 16;
-#else
- dataSize += sdfile.print(dataTime - m_lastDataTime);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(pid, HEX);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value1, 6);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value2, 6);
- dataSize += sdfile.write('\n');
- m_lastDataTime = dataTime;
-#endif
-#endif
- }
- void logData(uint16_t pid, uint32_t value1, uint32_t value2)
- {
- LOG_DATA_COMM ld = {dataTime, pid, 2, 0, {value1, value2}};
- ld.checksum = getChecksum((char*)&ld, 16);
-#if ENABLE_DATA_OUT
-#if USE_OBD_BT
- btSend((uint8_t*)&ld, 16);
-#else
- mySerial.write((uint8_t*)&ld, 16);
-#endif
-#endif
-#if ENABLE_DATA_LOG
-#if LOG_FORMAT == FORMAT_BIN
- sdfile.write((uint8_t*)&ld, 16);
- dataSize += 16;
-#else
- dataSize += sdfile.print(dataTime - m_lastDataTime);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(pid, HEX);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value1);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value2);
- dataSize += sdfile.write('\n');
- m_lastDataTime = dataTime;
-#endif
-#endif
- }
- void logData(uint16_t pid, int value1, int value2, int value3)
- {
- LOG_DATA_COMM ld = {dataTime, pid, 3, 0, {value1, value2, value3}};
- ld.checksum = getChecksum((char*)&ld, 20);
-#if ENABLE_DATA_OUT
-#if USE_OBD_BT
- btSend((uint8_t*)&ld, 20);
-#else
- mySerial.write((uint8_t*)&ld, 20);
-#endif
-#endif
-#if ENABLE_DATA_LOG
-#if LOG_FORMAT == FORMAT_BIN
- sdfile.write((uint8_t*)&ld, 20);
- dataSize += 20;
-#else
- dataSize += sdfile.print(dataTime - m_lastDataTime);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(pid, HEX);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value1);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value2);
- dataSize += sdfile.write(',');
- dataSize += sdfile.print(value3);
- dataSize += sdfile.write('\n');
- m_lastDataTime = dataTime;
-#endif
-#endif
- }
-#if ENABLE_DATA_LOG
- uint16_t openFile(LOG_TYPES logType, uint16_t logFlags = 0, uint32_t dateTime = 0)
- {
- uint16_t fileIndex;
- char filename[24] = "/FRMATICS";
-
- if (SD.exists(filename)) {
- for (fileIndex = 1; fileIndex; fileIndex++) {
- sprintf(filename + 9, FILE_NAME_FORMAT, fileIndex);
- if (!SD.exists(filename)) {
- break;
- }
- }
- if (fileIndex == 0)
- return 0;
- } else {
- SD.mkdir(filename);
- fileIndex = 1;
- sprintf(filename + 9, FILE_NAME_FORMAT, 1);
- }
-
- sdfile = SD.open(filename, FILE_WRITE);
- if (!sdfile) {
- return 0;
- }
-
-#if LOG_FORMAT == FORMAT_BIN
- HEADER hdr = {'UDUS', HEADER_LEN, 1, logType, logFlags, dateTime};
- sdfile.write((uint8_t*)&hdr, sizeof(hdr));
- for (byte i = 0; i < HEADER_LEN - sizeof(hdr); i++)
- sdfile.write((uint8_t)0);
- dataSize = HEADER_LEN;
-#endif
- return fileIndex;
- }
- void closeFile()
- {
- sdfile.close();
- }
- void flushFile()
- {
- sdfile.flush();
- }
-#endif
- uint32_t dataTime;
- uint32_t dataSize;
-private:
- static byte getChecksum(char* buffer, byte len)
- {
- uint8_t checksum = 0;
- for (byte i = 0; i < len; i++) {
- checksum ^= buffer[i];
- }
- return checksum;
- }
-#if ENABLE_DATA_LOG
- File sdfile;
-#if LOG_FORMAT == FORMAT_CSV
- uint32_t m_lastDataTime;
-#endif
-#endif
-};