diff Discovery/Inc/logbook.h @ 38:5f11787b4f42

include in ostc4 repository
author heinrichsweikamp
date Sat, 28 Apr 2018 11:52:34 +0200
parents
children f23b9055436f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Discovery/Inc/logbook.h	Sat Apr 28 11:52:34 2018 +0200
@@ -0,0 +1,220 @@
+///////////////////////////////////////////////////////////////////////////////
+/// -*- coding: UTF-8 -*-
+///
+/// \file   Discovery/Inc/logbook.h
+/// \brief
+/// \author Heinrichs Weikamp
+/// \date   2018
+///
+/// $Id$
+///////////////////////////////////////////////////////////////////////////////
+/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+///
+///     This program is free software: you can redistribute it and/or modify
+///     it under the terms of the GNU General Public License as published by
+///     the Free Software Foundation, either version 3 of the License, or
+///     (at your option) any later version.
+///
+///     This program is distributed in the hope that it will be useful,
+///     but WITHOUT ANY WARRANTY; without even the implied warranty of
+///     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+///     GNU General Public License for more details.
+///
+///     You should have received a copy of the GNU General Public License
+///     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef LOGBOOK_H
+#define LOGBOOK_H
+
+#include "data_central.h"
+#include "settings.h"
+
+typedef struct
+{
+    uint8_t setpoint_cbar;
+    uint8_t depth_meter;
+} SSetpointLog;
+
+typedef struct
+{
+    uint8_t oxygen_percentage;
+    uint8_t helium_percentage;
+    uint8_t depth_meter;
+    gasbit8_Type note;
+} SGasListLog;
+
+//Logbook
+typedef struct
+{
+    uint16_t diveHeaderStart;
+    uint8_t  pBeginProfileData[3];
+    uint8_t  pEndProfileData[3];
+    uint8_t  profileLength[3];
+    uint8_t  logbookProfileVersion;
+    uint8_t  dateYear;
+    uint8_t  dateMonth;
+    uint8_t  dateDay;
+    uint8_t  timeHour;
+    uint8_t  timeMinute;
+    uint8_t  extraPagesWithData; /* from here on: changes in order with respect to OSTC3 */
+    uint16_t maxDepth;
+    uint16_t diveTimeMinutes;
+    uint8_t  diveTimeSeconds;
+    uint8_t  samplingRate;
+    int16_t  minTemp;
+    uint16_t surfacePressure_mbar;
+    uint16_t desaturationTime;
+    SGasListLog gasordil[5];
+    uint8_t  firmwareVersionLow;
+    uint8_t  firmwareVersionHigh;
+    uint16_t batteryVoltage;
+    uint16_t cnsAtBeginning;
+    uint8_t  gfAtBeginning;
+    uint8_t  gfAtEnd;
+    uint16_t personalDiveCount;
+    SSetpointLog setpoint[5];
+    uint16_t maxCNS;
+    uint16_t averageDepth_mbar;
+    uint16_t total_diveTime_seconds;
+    uint8_t  salinity;
+    uint8_t  gfLow_or_Vpm_conservatism;
+    uint8_t  gfHigh;
+    uint8_t  decoModel;
+    float    n2Compartments[16];
+    float    heCompartments[16];
+    uint8_t  n2CompartDesatTime_min[16];
+    uint8_t  heCompartDesatTime_min[16];
+    uint16_t diveNumber;
+    uint8_t  lastDecostop_m;
+    uint8_t  CCRmode;
+    uint8_t  diveMode;
+    uint8_t  hwHudLastStatus; /* from here on identical to OSTC3 again */
+    uint16_t hwHudBattery_mV;
+    uint8_t batteryGaugeRegisters[6];
+    uint16_t diveHeaderEnd;
+} SLogbookHeader;
+
+//Logbook OSTC3
+typedef struct
+{
+    uint8_t diveHeaderStart[2];
+    uint8_t pBeginProfileData[3];
+    uint8_t pEndProfileData[3];
+    uint8_t logbookProfileVersion;
+    uint8_t profileLength[3];
+    uint8_t dateYear;
+    uint8_t dateMonth;
+    uint8_t dateDay;
+    uint8_t timeHour;
+    uint8_t timeMinute;
+    uint8_t maxDepth[2];
+    uint8_t diveTimeMinutes[2];
+    uint8_t diveTimeSeconds;
+    uint8_t minTemp[2];
+    uint8_t surfacePressure_mbar[2];
+    uint8_t desaturationTime[2];
+    uint8_t gasordil[5*4];
+    uint8_t firmwareVersionLow;
+    uint8_t firmwareVersionHigh;
+    uint8_t batteryVoltage[2];
+    uint8_t samplingRate;
+    uint8_t cnsAtBeginning[2];
+    uint8_t gfAtBeginning;
+    uint8_t gfAtEnd;
+    uint8_t personalDiveCount[2];
+    uint8_t CCRmode;
+    uint8_t setpoint[5*2];
+    uint8_t salinity;
+    uint8_t maxCNS[2];
+    uint8_t averageDepth_mbar[2];
+    uint8_t total_diveTime_seconds[2];
+    uint8_t gfLow_or_Vpm_conservatism;
+    uint8_t gfHigh;
+    uint8_t decoModel;
+    uint8_t diveNumber[2];
+    uint8_t diveMode;
+    uint8_t n2CompartDesatTime_min[16];
+    uint8_t n2Compartments[16*4];
+    uint8_t heCompartDesatTime_min[16];
+    uint8_t heCompartments[16*4];
+    uint8_t lastDecostop_m;
+    uint8_t safetyDistance_10cm;
+    uint8_t hwHudBattery_mV[2];
+    uint8_t hwHudLastStatus;
+    uint8_t batteryGaugeRegisters[6];
+    uint8_t diveHeaderEnd[2];
+} SLogbookHeaderOSTC3;
+
+
+//Logbook OSTC3
+typedef struct
+{
+    uint8_t profileLength[3];
+    uint8_t dateYear;
+    uint8_t dateMonth;
+    uint8_t dateDay;
+    uint8_t timeHour;
+    uint8_t timeMinute;
+    uint8_t maxDepth[2];
+    uint8_t diveTimeMinutes[2];
+    uint8_t diveTimeSeconds;
+    uint8_t totalDiveNumberLow;
+    uint8_t totalDiveNumberHigh;
+    uint8_t profileVersion;
+} SLogbookHeaderOSTC3compact;
+
+
+typedef struct
+{
+    uint8_t profileLength[3];
+    uint8_t samplingRate_seconds;
+    uint8_t numDivisors;
+    uint8_t tempType;
+    uint8_t tempLength;
+    uint8_t tempDivisor;
+    uint8_t deco_ndlType;
+    uint8_t deco_ndlLength;
+    uint8_t deco_ndlDivisor;
+    uint8_t gfType;
+    uint8_t gfLength;
+    uint8_t gfDivisor;
+    uint8_t ppo2Type;
+    uint8_t ppo2Length;
+    uint8_t ppo2Divisor;
+    uint8_t decoplanType;
+    uint8_t decoplanLength;
+    uint8_t decoplanDivisor;
+    uint8_t cnsType;
+    uint8_t cnsLength;
+    uint8_t cnsDivisor;
+    uint8_t tankType;
+    uint8_t tankLength;
+    uint8_t tankDivisor;
+} SSmallHeader;
+
+typedef struct
+{
+    int8_t percentageO2;
+    int8_t percentageHe;
+} SManualGas;
+
+void logbook_writeSample(SDiveState state);
+//void logbook_writeSampleFinalBytes(void);
+void logbook_initNewdiveProfile(const SDiveState* pInfo, SSettings* pSettings);
+void logbook_EndDive(void);
+
+SLogbookHeader* logbook_getCurrentHeader(void);
+SLogbookHeaderOSTC3 * logbook_build_ostc3header(SLogbookHeader* pLogbookHeader);
+SLogbookHeaderOSTC3compact * logbook_build_ostc3header_compact(SLogbookHeader* pHead);
+
+uint8_t logbook_getNumberOfHeaders(void);
+uint8_t logbook_getHeader(uint8_t StepBackwards,SLogbookHeader* pLogbookHeader);
+uint16_t logbook_readSampleData(uint8_t StepBackwards, uint16_t length,uint16_t* depth, uint8_t*  gasid, int16_t* temperature, uint16_t* ppo2, uint16_t* setpoint, uint16_t* sensor1, uint16_t* sensor2, uint16_t* sensor3, uint16_t* cns, uint8_t* bailout, uint16_t* decostopDepth);
+void logbook_test(void);
+void logbook_InitAndWrite(void);
+void logbook_recover_brokenlog(uint8_t headerId);
+
+uint16_t logbook_lastDive_diveNumber(void);
+
+#endif /* LOGBOOK_H */