Mercurial > public > ostc4
diff Common/Inc/data_exchange.h @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children | 8f8ea3a32e82 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Common/Inc/data_exchange.h Sat Apr 28 11:52:34 2018 +0200 @@ -0,0 +1,315 @@ +/////////////////////////////////////////////////////////////////////////////// +/// -*- coding: UTF-8 -*- +/// +/// \file Common/Inc/data_exchange.h +/// \brief Data exchange between RTE and Discovery processors. +/// \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 DATA_EXCHANGE_H +#define DATA_EXCHANGE_H + +#include "data_central.h" +#include "settings.h" +#include "stm32f4xx_hal.h" + +enum MODE +{ + MODE_SURFACE = 0, + MODE_DIVE = 1, + MODE_CALIB = 2, + MODE_SLEEP = 3, + MODE_SHUTDOWN = 4, + MODE_ENDDIVE = 5, + MODE_BOOT = 6, + MODE_CHARGESTART = 7, + MODE_TEST = 8, + MODE_POWERUP = 9, +}; + +enum ACCIDENT_BITS +{ + ACCIDENT_DECOSTOP = 0x01, + ACCIDENT_CNS = 0x02, + ACCIDENT_CNSLVL2 = 0x02 + 0x04, + ACCIDENT_SPARE2 = 0x08, + ACCIDENT_SPARE3 = 0x10, + ACCIDENT_SPARE4 = 0x20, + ACCIDENT_SPARE5 = 0x40, + ACCIDENT_SPARE6 = 0x80 +}; + +typedef struct{ +uint8_t button:1; +uint8_t date:1; +uint8_t time:1; +uint8_t clearDeco:1; +uint8_t compass:1; +uint8_t devicedata:1; +uint8_t batterygauge:1; +uint8_t accident:1; +} confirmbit8_t; + +#define CRBUTTON (0x01) +#define CRDATE (0x02) +#define CRTIME (0x04) +#define CRCLEARDECO (0x08) +#define CRCOMPASS (0x10) +#define CRDEVICEDATA (0x20) + +typedef union{ +confirmbit8_t ub; +uint8_t uw; +} confirmbit8_Type; + +typedef struct +{ + uint8_t checkCode[4]; + +} SDataExchangeHeader; + +typedef struct +{ + uint8_t checkCode[4]; + +} SDataExchangeFooter; + +typedef struct +{ + SDataExchangeHeader header; + SLifeData lifeData; +} SDataExchangeMasterToSlave; + +typedef struct +{ + //pressure + float temperature; + float pressure_mbar; + float surface_mbar; + float ascent_rate_meter_per_min; + //toxic + float otu; + float cns; + uint16_t desaturation_time_minutes; + uint16_t no_fly_time_minutes; + //tisssue + float tissue_nitrogen_bar[16]; + float tissue_helium_bar[16]; + //maxcrushingpressure + float max_crushing_pressure_he[16]; + float max_crushing_pressure_n2[16]; + float adjusted_critical_radius_he[16]; + float adjusted_critical_radius_n2[16]; + // Compass + float compass_heading; + float compass_roll; + float compass_pitch; + int16_t compass_DX_f; + int16_t compass_DY_f; + int16_t compass_DZ_f; + //time + uint16_t counterSecondsShallowDepth; + uint32_t localtime_rtc_tr; + uint32_t localtime_rtc_dr; + uint32_t divetime_seconds; + uint32_t surfacetime_seconds; + uint32_t dive_time_seconds_without_surface_time; + //battery /* take care of uint8_t count to be in multiplies of 4 */ + float battery_voltage; + float battery_charge; + //ambient light + uint16_t ambient_light_level; + // wireless data + SDataWireless wireless_data[4]; + // PIC data + uint8_t button_setting[3]; + uint8_t SPARE1; + //debug + uint32_t pressure_uTick; + uint32_t compass_uTick; + +} SExchangeData; + +typedef struct +{ + uint8_t VPMconservatism; + SGas actualGas; + + int8_t offsetPressureSensor_mbar; + int8_t offsetTemperatureSensor_centiDegree; + + uint8_t SPARE1; + uint8_t SPARE2; + + float UNUSED1[16-1];//VPM_adjusted_critical_radius_he[16]; + float UNUSED2[16];//VPM_adjusted_critical_radius_n2[16]; + float UNUSED3[16];//VPM_adjusted_crushing_pressure_he[16]; + float UNUSED4[16];//VPM_adjusted_crushing_pressure_n2[16]; + float UNUSED5[16];//VPM_initial_allowable_gradient_he[16]; + float UNUSED6[16];//VPM_initial_allowable_gradient_n2[16]; + float UNUSED7[16];//VPM_max_actual_gradient[16]; + + RTC_TimeTypeDef newTime; + RTC_DateTypeDef newDate; + + float ambient_pressure_mbar_ceiling; + float descend_rate_bar_per_minute; + float ascend_rate_bar_per_minute; + + uint16_t timeoutDiveReachedZeroDepth; + uint16_t divetimeToCreateLogbook; + + uint8_t buttonResponsiveness[4]; + + SDevice DeviceData; + + float newBatteryGaugePercentageFloat; + +} SReceiveData; + + +typedef struct +{ + SDataExchangeHeader header; + + uint8_t mode; + uint8_t power_on_reset; + uint8_t RTE_VERSION_high; + uint8_t RTE_VERSION_low; + + uint8_t chargeStatus; + uint8_t boolPICdata; + confirmbit8_Type confirmRequest; // confirmbit8_Type + uint8_t boolWirelessData; + + uint8_t boolPressureData; + uint8_t boolCompassData; + uint8_t boolTisssueData; + uint8_t boolCrushingData; + + uint8_t boolToxicData; + uint8_t boolTimeData; + uint8_t boolBatteryData; + uint8_t boolAmbientLightData; + + uint8_t accidentFlags; + uint8_t sensorErrors; + uint8_t spare2; + uint8_t spare3; + + SExchangeData data[2]; + SDataExchangeFooter footer; + uint8_t CRC_feature_by_SPI[4]; +} SDataExchangeSlaveToMaster; + + +typedef struct +{ + SDataExchangeHeader header; + + uint8_t mode; + uint8_t power_on_reset; + uint8_t RTE_VERSION_high; + uint8_t RTE_VERSION_low; + + uint8_t chargeStatus; + uint8_t spare1; + uint8_t spare2; + uint8_t spare3; + + uint8_t boolDeviceData; + uint8_t boolVpmRepetitiveDataValid; + uint8_t bool3; + uint8_t bool4; + + uint8_t spare1_1; + uint8_t spare1_2; + uint8_t spare1_3; + uint8_t spare1_4; + + uint8_t spare2_1; + uint8_t spare2_2; + uint8_t spare2_3; + uint8_t spare2_4; + + SDevice DeviceData[2]; + SVpmRepetitiveData VpmRepetitiveData; + + uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - ((2 * sizeof(SDevice)) + sizeof(SVpmRepetitiveData))]; + SDataExchangeFooter footer; + uint8_t CRC_feature_by_SPI[4]; +} SDataExchangeSlaveToMasterDeviceData; + + +typedef struct +{ + SDataExchangeHeader header; + + uint8_t mode; + uint8_t getDeviceDataNow; + uint8_t diveModeInfo; + uint8_t setEndDive; + + uint8_t bool4; + uint8_t setButtonSensitivityNow; + uint8_t setDateNow; + uint8_t setTimeNow; + + uint8_t calibrateCompassNow; + uint8_t clearDecoNow; + uint8_t setBatteryGaugeNow; + uint8_t bool9; + + uint8_t revisionHardware; + uint8_t revisionCRCx0x7A; + uint8_t spare1_3; + uint8_t spare1_4; + + uint8_t setAccidentFlag; + uint8_t spare2_1; + uint8_t spare2_2; + uint8_t spare2_3; + + SReceiveData data; + uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - sizeof(SReceiveData)]; + SDataExchangeFooter footer; + uint8_t CRC_feature_by_SPI[4]; +} SDataReceiveFromMaster; + + +/* Size of Transmission buffer */ +#define EXCHANGE_BUFFERSIZE (sizeof(SDataExchangeSlaveToMaster) - 2) +#define EXCHANGE_BUFFERSIZE2 (sizeof(SDataReceiveFromMaster) - 2) +// header: 5 +// mode+bool: 5 +// data 552 ( 69 * float/4 * 2 ) +// footer: 4 +// ______________ +// SUM 566 +// CRC_feature does not count into BUFFERSIZE! + +//(COUNTOF(struct SDataExchangeSlaveToMaster) + 1) + +/* Exported macro ------------------------------------------------------------*/ +//#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) + +#endif /* DATA_EXCHANGE_H */ +