annotate Small_CPU/Src/scheduler.c @ 331:b4c578caaafb I2C_Improvment

Added plausibility check for pressure values In case of I2C communication problems at startup the dc jumped into dive mode with depth up to 300m. As no CRC is applied a bit flip may also occure during normal operation without detection => added a plausibility check if last measured value fits to the last measurements
author ideenmodellierer
date Wed, 17 Jul 2019 22:43:51 +0200
parents 95928ef3986f
children b6a59e93cc91
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
2 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
3 * @file scheduler.c
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
5 * @date 27-March-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
6 * @version V0.0.6
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
7 * @since 18-June-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
8 * @brief the main part except for base.c
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
9 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
10 @verbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
11 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
12 ##### How to use #####
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
13 ==============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
14 @endverbatim
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
15 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
16 * @attention
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
17 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
18 * <h2><center>&copy; COPYRIGHT(c) 2015 heinrichs weikamp</center></h2>
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
19 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
20 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
21 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
22
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
23
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
24 //#define DEBUGMODE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
25
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
26 /* Includes ------------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
27 #include <string.h>
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
28 #include "baseCPU2.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
29 #include "stm32f4xx_hal.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
30 #include "i2c.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
31 #include "scheduler.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
32 #include "pressure.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
33 #include "compass.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
34 #include "batteryGasGauge.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
35 #include "batteryCharger.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
36 #include "spi.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
37 #include "rtc.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
38 #include "dma.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
39 #include "adc.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
40 #include "calc_crush.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
41 #include "stm32f4xx_hal_rtc_ex.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
42 #include "decom.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
43 #include "tm_stm32f4_otp.h"
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
44
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
45
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
46 #define INVALID_PREASURE_VALUE (100.0F)
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
47
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
48 /* Private types -------------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
49 const SGas Air = {79,0,0,0,0};
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
50
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
51 /* Exported variables --------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
52 SGlobal global;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
53 SDevice DeviceDataFlash;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
54 uint8_t deviceDataFlashValid = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
55 uint8_t deviceDataSubSeconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
56
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
57 /* Private variables ---------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
58 /* can be lost while in sleep */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
59 uint8_t clearDecoNow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
60 uint8_t setButtonsNow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
61
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
62 /* has to be in SRAM2 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
63 uint8_t secondsCount = 0;
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
64
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
65 static uint8_t dospisync = SPI_SYNC_METHOD_NONE;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
66
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
67 SScheduleCtrl Scheduler;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
68
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
69 /* Private function prototypes -----------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
70
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
71 _Bool vpm_crush2(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
72 void scheduleUpdateDeviceData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
73 long get_nofly_time_minutes(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
74 void copyActualGas(SGas gas);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
75 void copyPressureData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
76 void copyCnsAndOtuData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
77 void copyTimeData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
78 void copyCompassData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
79 void copyCompassDataDuringCalibration(int16_t dx, int16_t dy, int16_t dz);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
80 void copyAmbientLightData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
81 void copyTissueData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
82 void copyVpmCrushingData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
83 void copyDeviceData(void);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
84 void copyPICdata(void);
230
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
85 static void schedule_update_timer_helper(int8_t thisSeconds);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
86 uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
87
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
88 void scheduleSetDate(SDeviceLine *line);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
89
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
90 /* Exported functions --------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
91
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
92 void initGlobals(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
93 {
231
f6961efb3794 cleanup: do not re-implement a standard function
Jan Mulder <jlmulder@xs4all.nl>
parents: 230
diff changeset
94 bzero(&global, sizeof(SGlobal));
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
95
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
96 global.dataSendToSlavePending = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
97 global.dataSendToSlaveIsValid = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
98 global.dataSendToSlaveIsNotValidCount = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
99
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
100 global.mode = MODE_POWERUP;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
101 global.repetitive_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
102 global.conservatism = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
103 global.whichGas = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
104 global.aktualGas[0] = Air;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
105 global.lifeData.actualGas = global.aktualGas[0];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
106
172
c659fda83e44 Minor: Button defaults, release date adjusted, use SPI_SHOW_SYNC_STATS
heinrichsweikamp
parents: 155
diff changeset
107 const uint8_t button_standard_sensitivity = 85;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
108 global.ButtonResponsiveness[0] = button_standard_sensitivity;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
109 global.ButtonResponsiveness[1] = button_standard_sensitivity;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
110 global.ButtonResponsiveness[2] = button_standard_sensitivity;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
111 global.ButtonResponsiveness[3] = button_standard_sensitivity;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
112
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
113 global.ButtonPICdata[0] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
114 global.ButtonPICdata[1] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
115 global.ButtonPICdata[2] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
116 global.ButtonPICdata[3] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
117
240
625d20070261 Improvement SPI stability/recoverability
Jan Mulder <jlmulder@xs4all.nl>
parents: 231
diff changeset
118 global.I2C_SystemStatus = HAL_ERROR; // 0x00 would be everything working
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
119
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
120 global.lifeData.pressure_ambient_bar = INVALID_PREASURE_VALUE;
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
121 global.lifeData.pressure_surface_bar = INVALID_PREASURE_VALUE;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
122 decom_reset_with_1000mbar(&global.lifeData);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
123
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
124 global.demo_mode = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
125
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
126 for(int i = 0; i < MAX_SENSORS; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
127 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
128 global.sensorError[i] = HAL_OK; // HAL_OK = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
129 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
130
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
131 global.dataSendToMaster.RTE_VERSION_high = firmwareVersionHigh();//RTE_VERSION_HIGH;;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
132 global.dataSendToMaster.RTE_VERSION_low = firmwareVersionLow();//RTE_VERSION_LOW;;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
133 global.dataSendToMaster.chargeStatus = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
134
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
135 global.dataSendToMaster.power_on_reset = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
136 global.dataSendToMaster.header.checkCode[0] = 0xA1;
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
137 global.dataSendToMaster.header.checkCode[1] = SPI_RX_STATE_OFFLINE;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
138 global.dataSendToMaster.header.checkCode[2] = 0xA3;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
139 global.dataSendToMaster.header.checkCode[3] = 0xA4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
140 global.dataSendToMaster.footer.checkCode[3] = 0xE4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
141 global.dataSendToMaster.footer.checkCode[2] = 0xE3;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
142 global.dataSendToMaster.footer.checkCode[1] = 0xE2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
143 global.dataSendToMaster.footer.checkCode[0] = 0xE1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
144 global.dataSendToMaster.sensorErrors = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
145
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
146 global.sync_error_count = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
147 global.check_sync_not_running = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
148
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
149 global.deviceDataSendToMaster.RTE_VERSION_high = firmwareVersionHigh();//RTE_VERSION_HIGH;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
150 global.deviceDataSendToMaster.RTE_VERSION_low = firmwareVersionLow();//RTE_VERSION_LOW;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
151 global.deviceDataSendToMaster.chargeStatus = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
152
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
153 global.deviceDataSendToMaster.power_on_reset = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
154 global.deviceDataSendToMaster.header.checkCode[0] = 0xDF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
155 global.deviceDataSendToMaster.header.checkCode[1] = 0xDE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
156 global.deviceDataSendToMaster.header.checkCode[2] = 0xDD;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
157 global.deviceDataSendToMaster.header.checkCode[3] = 0xDC;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
158 global.deviceDataSendToMaster.footer.checkCode[3] = 0xE4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
159 global.deviceDataSendToMaster.footer.checkCode[2] = 0xE3;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
160 global.deviceDataSendToMaster.footer.checkCode[1] = 0xE2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
161 global.deviceDataSendToMaster.footer.checkCode[0] = 0xE1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
162
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
163 global.dataSendToSlave.getDeviceDataNow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
164
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
165 global.deviceData.batteryChargeCompleteCycles.value_int32 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
166 global.deviceData.batteryChargeCycles.value_int32 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
167 global.deviceData.depthMaximum.value_int32 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
168 global.deviceData.diveCycles.value_int32 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
169 global.deviceData.hoursOfOperation.value_int32 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
170 global.deviceData.temperatureMaximum.value_int32 = INT32_MIN;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
171 global.deviceData.temperatureMinimum.value_int32 = INT32_MAX;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
172 global.deviceData.voltageMinimum.value_int32 = INT32_MAX;
148
ee744c7160ce Use SPI TX callback to synchronize to main CPU
Ideenmodellierer
parents: 142
diff changeset
173
265
a91d99265884 Increase SPI com timeout for cold start and wake up
ideenmodellierer
parents: 264
diff changeset
174 Scheduler.communicationTimeout = SPI_COM_TIMEOUT_START;
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
175 Scheduler_Request_sync_with_SPI(SPI_SYNC_METHOD_HARD);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
176 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
177
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
178 void reinitGlobals(void)
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
179 {
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
180 global.dataSendToSlavePending = 0;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
181 global.dataSendToSlaveIsValid = 0;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
182 global.dataSendToSlaveIsNotValidCount = 0;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
183 global.sync_error_count = 0;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
184 global.check_sync_not_running = 0;
265
a91d99265884 Increase SPI com timeout for cold start and wake up
ideenmodellierer
parents: 264
diff changeset
185 Scheduler.communicationTimeout = SPI_COM_TIMEOUT_START;
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
186 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
187
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
188 void scheduleSpecial_Evaluate_DataSendToSlave(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
189 {
104
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
190 //TEMPORARY fix for compass calibration.
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
191 //TODO: Fix I2C timeout for complete solving problem.
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
192 if(global.mode==MODE_CALIB){
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
193 return;
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
194 }
90
83857eb3b12b +- stable
Dmitry Romanov <kitt@bk.ru>
parents: 89
diff changeset
195
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
196 global.dataSendToSlavePending = 0;
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
197 if(!global.dataSendToSlaveIsValid) return;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
198
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
199 global.dataSendToMaster.confirmRequest.uw = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
200
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
201 if(TM_OTP_Read(0,0) == 0xFF)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
202 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
203 if(global.dataSendToSlave.revisionHardware == (global.dataSendToSlave.revisionCRCx0x7A ^ 0x7A))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
204 TM_OTP_Write(0,0,global.dataSendToSlave.revisionHardware);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
205 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
206
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
207 if(global.dataSendToSlave.setAccidentFlag)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
208 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
209 global.dataSendToMaster.confirmRequest.ub.accident = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
210 global.deviceData.diveAccident.value_int32 = global.dataSendToSlave.setAccidentFlag;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
211 scheduleSetDate(&global.deviceData.diveAccident);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
212 global.accidentFlag |= global.dataSendToSlave.setAccidentFlag;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
213 if(global.accidentFlag == ACCIDENT_CNS) // LVL1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
214 global.accidentRemainingSeconds = 2*60*60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
215 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
216 global.accidentRemainingSeconds = 24*60*60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
217 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
218
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
219 if(global.dataSendToSlave.setTimeNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
220 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
221 global.dataSendToMaster.confirmRequest.ub.time = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
222 RTC_SetTime(global.dataSendToSlave.data.newTime);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
223 schedule_update_timer_helper(0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
224 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
225
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
226 if(global.dataSendToSlave.setDateNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
227 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
228 global.dataSendToMaster.confirmRequest.ub.date = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
229 RTC_SetDate(global.dataSendToSlave.data.newDate);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
230 schedule_update_timer_helper(0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
231 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
232
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
233 if(global.dataSendToSlave.calibrateCompassNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
234 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
235 global.dataSendToMaster.confirmRequest.ub.compass = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
236 global.mode = MODE_CALIB;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
237 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
238
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
239 if(global.dataSendToSlave.clearDecoNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
240 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
241 global.dataSendToMaster.confirmRequest.ub.clearDeco = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
242 clearDecoNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
243 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
244
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
245 if(global.dataSendToSlave.setButtonSensitivityNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
246 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
247 global.dataSendToMaster.confirmRequest.ub.button = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
248 global.ButtonResponsiveness[0] = global.dataSendToSlave.data.buttonResponsiveness[0];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
249 global.ButtonResponsiveness[1] = global.dataSendToSlave.data.buttonResponsiveness[1];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
250 global.ButtonResponsiveness[2] = global.dataSendToSlave.data.buttonResponsiveness[2];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
251 global.ButtonResponsiveness[3] = global.dataSendToSlave.data.buttonResponsiveness[3];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
252 setButtonsNow = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
253 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
254
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
255 if(global.dataSendToSlave.setBatteryGaugeNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
256 {
104
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
257 if(global.mode!=MODE_CALIB){
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
258 global.dataSendToMaster.confirmRequest.ub.batterygauge = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
259 battery_gas_gauge_set(global.dataSendToSlave.data.newBatteryGaugePercentageFloat);
104
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
260 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
261 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
262
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
263 if((global.mode == MODE_SURFACE) && (global.dataSendToSlave.mode == MODE_SHUTDOWN))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
264 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
265 global.mode = MODE_SHUTDOWN;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
266 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
267
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
268 if(global.mode == MODE_DIVE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
269 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
270 copyActualGas(global.dataSendToSlave.data.actualGas);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
271 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
272 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
273 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
274 copyActualGas(Air);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
275 global.settings.divetimeToCreateLogbook = global.dataSendToSlave.data.divetimeToCreateLogbook;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
276 global.settings.timeoutDiveReachedZeroDepth = global.dataSendToSlave.data.timeoutDiveReachedZeroDepth;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
277 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
278
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
279 /* for simulation / testing */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
280 global.ceiling_from_main_CPU_mbar = global.dataSendToSlave.data.ambient_pressure_mbar_ceiling;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
281
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
282 /* for device data updates */
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
283 deviceDataFlashValid = 0;
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
284 memcpy(&DeviceDataFlash, &global.dataSendToSlave.data.DeviceData, sizeof(SDevice));
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
285 deviceDataFlashValid = 1;
89
ff7775cc34c4 temp! full cyclic SPI
Dmitry Romanov <kitt@bk.ru>
parents: 88
diff changeset
286
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
287 #if 0
104
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
288 //TODO: Temporary placed here. Duration ~210 ms.
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
289 if (global.I2C_SystemStatus != HAL_OK) {
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
290 MX_I2C1_TestAndClear();
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
291 MX_I2C1_Init();
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
292 // init_pressure();
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
293 // compass_init(0, 7);
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
294 // accelerator_init();
22a1094545f3 Tested and alive.
Dmitry Romanov <kitt@bk.ru>
parents: 100
diff changeset
295 }
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
296 #endif /* already called once a second */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
297 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
298
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
299
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
300 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
301 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
302 * @brief schedule_time_compare_helper.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
303 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
304 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
305 * @date 20-Oct-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
306 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
307 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
308
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
309 uint8_t RtcBugFixChsw(uint8_t inStupidTime)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
310 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
311 uint8_t multiplesOf16 = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
312
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
313 multiplesOf16 = inStupidTime / 16;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
314
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
315 inStupidTime -= multiplesOf16 * 16;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
316
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
317 return (10 * multiplesOf16) + inStupidTime;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
318 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
319
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
320 uint32_t schedule_time_compare_helper(RTC_TimeTypeDef timeNow, RTC_DateTypeDef dateNow, RTC_TimeTypeDef timeLast, RTC_DateTypeDef dateLast)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
321 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
322 uint32_t nowInSeconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
323 uint32_t lastInSeconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
324 uint32_t resultDiff;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
325
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
326 nowInSeconds = (uint32_t)RtcBugFixChsw(timeNow.Hours) * 3600;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
327 nowInSeconds += (uint32_t)RtcBugFixChsw(timeNow.Minutes) * 60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
328 nowInSeconds += (uint32_t)RtcBugFixChsw(timeNow.Seconds);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
329
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
330 lastInSeconds = (uint32_t)RtcBugFixChsw(timeLast.Hours) * 3600;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
331 lastInSeconds += (uint32_t)RtcBugFixChsw(timeLast.Minutes) * 60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
332 lastInSeconds += (uint32_t)RtcBugFixChsw(timeLast.Seconds);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
333
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
334 if(dateNow.Date != dateLast.Date)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
335 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
336 resultDiff = 86400 + nowInSeconds - lastInSeconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
337 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
338 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
339 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
340 resultDiff = nowInSeconds - lastInSeconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
341 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
342 return resultDiff;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
343 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
344
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
345
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
346
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
347 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
348 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
349 * @brief schedule_update_timer_helper.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
350 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
351 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
352 * @date 20-Oct-2016
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
353 * @brief use 0 for init
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
354 use -1 for RTC controlled
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
355 use >= 1 for manual control
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
356 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
357 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
358 extern RTC_HandleTypeDef RTCHandle;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
359
230
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
360 static void schedule_update_timer_helper(int8_t thisSeconds)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
361 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
362 static RTC_TimeTypeDef sTimeLast;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
363 static RTC_DateTypeDef sDateLast;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
364 RTC_TimeTypeDef sTimeNow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
365 RTC_DateTypeDef sDateNow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
366 uint32_t secondsPast;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
367
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
368 HAL_RTC_GetTime(&RTCHandle, &sTimeNow, RTC_FORMAT_BCD);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
369 HAL_RTC_GetDate(&RTCHandle, &sDateNow, RTC_FORMAT_BCD);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
370
230
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
371 if(thisSeconds != 0) // otherwise just store sTimeLast, sDateLast
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
372 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
373 if(thisSeconds > 0) // use this value instead, good for pre-loading sTimeLast and sDateLast
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
374 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
375 secondsPast = thisSeconds;
230
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
376 } else {
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
377 // thisSeconds < 0 and not <= !
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
378 secondsPast = schedule_time_compare_helper(sTimeNow, sDateNow, sTimeLast, sDateLast);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
379 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
380
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
381 if(global.seconds_since_last_dive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
382 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
383 if(secondsPast >= 777900)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
384 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
385 global.seconds_since_last_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
386 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
387 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
388 {
230
3973208c4a20 cleanup: make return void when never used
Jan Mulder <jlmulder@xs4all.nl>
parents: 220
diff changeset
389 uint32_t tempNewValue = ((uint32_t)global.seconds_since_last_dive) + secondsPast;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
390 if(tempNewValue > 777900) // a bit more than nine days [seconds]
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
391 global.seconds_since_last_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
392 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
393 global.seconds_since_last_dive = (long)tempNewValue;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
394 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
395 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
396 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
397
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
398 sTimeLast = sTimeNow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
399 sDateLast = sDateNow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
400 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
401
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
402 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
403 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
404 * @brief schedule_check_resync.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
405 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
406 * @version V0.0.2
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
407 * @date 18-June-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
408 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
409 */
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
410
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
411 void schedule_check_resync(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
412 {
155
4fd8bbc7d841 Do hard sync after communication timeout > 1 second
Ideenmodellierer
parents: 148
diff changeset
413 /* counter is incremented in cyclic 100ms loop and reset to 0 if the transmission complete callback is called */
265
a91d99265884 Increase SPI com timeout for cold start and wake up
ideenmodellierer
parents: 264
diff changeset
414 if((global.check_sync_not_running >= Scheduler.communicationTimeout))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
415 {
89
ff7775cc34c4 temp! full cyclic SPI
Dmitry Romanov <kitt@bk.ru>
parents: 88
diff changeset
416 // global.dataSendToSlaveIsNotValidCount = 0;
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
417 global.check_sync_not_running = 0;
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
418 global.sync_error_count++;
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
419
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
420 /* Try to start communication again. If exchange is stuck during execution for some reason the TX will be aborted by the
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
421 * function error handler
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
422 */
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
423 HAL_SPI_TransmitReceive_DMA(&hspi1,(uint8_t*) &(global.dataSendToMaster),(uint8_t*) &(global.dataSendToSlave), EXCHANGE_BUFFERSIZE);
265
a91d99265884 Increase SPI com timeout for cold start and wake up
ideenmodellierer
parents: 264
diff changeset
424 Scheduler.communicationTimeout = SPI_COM_TIMEOUT_COMMON; /* Reduce error detection time */
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
425 Scheduler_Request_sync_with_SPI(SPI_SYNC_METHOD_HARD);
155
4fd8bbc7d841 Do hard sync after communication timeout > 1 second
Ideenmodellierer
parents: 148
diff changeset
426 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
427 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
428
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
429
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
430 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
431 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
432 * @brief scheduleDiveMode. / Dive Mode: Main Loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
433 * @author Peter Ryser
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
434 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
435 * @date 22-April-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
436 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
437 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
438 void scheduleDiveMode(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
439 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
440 uint32_t ticksdiff = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
441 uint32_t lasttick = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
442 uint8_t counterAscentRate = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
443 float lastPressure_bar = 0.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
444 global.dataSendToMaster.mode = MODE_DIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
445 global.deviceDataSendToMaster.mode = MODE_DIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
446 uint8_t counter_exit = 0;
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
447
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
448 Scheduler.counterSPIdata100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
449 Scheduler.counterCompass100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
450 Scheduler.counterPressure100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
451 Scheduler.counterAmbientLight100msec = 0;
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
452 Scheduler.tick_execute1second = SCHEDULER_TICK_EXE1SEC;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
453
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
454 global.deviceData.diveCycles.value_int32++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
455 scheduleSetDate(&global.deviceData.diveCycles);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
456 global.lifeData.counterSecondsShallowDepth = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
457
240
625d20070261 Improvement SPI stability/recoverability
Jan Mulder <jlmulder@xs4all.nl>
parents: 231
diff changeset
458 Scheduler.tickstart = HAL_GetTick();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
459 while(global.mode == MODE_DIVE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
460 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
461 lasttick = HAL_GetTick();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
462 ticksdiff = time_elapsed_ms(Scheduler.tickstart,lasttick);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
463
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
464 if(ticksdiff >= Scheduler.counterSPIdata100msec * 100 + 10)
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
465 {
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
466 if(SPI_Evaluate_RX_Data()!=0) /* did we receive something ? */
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
467 {
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
468 Scheduler.counterSPIdata100msec++;
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
469 }
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
470 schedule_check_resync();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
471 }
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
472
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
473 //Evaluate pressure at 20 ms, 120 ms, 220 ms,....
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
474 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
475 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
476 global.check_sync_not_running++;
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
477 pressure_update_alternating();
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
478 scheduleUpdateDeviceData();
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 181
diff changeset
479 #ifdef DEMOMODE
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
480 if(global.demo_mode)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
481 {
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 181
diff changeset
482 int turbo_seconds = demo_modify_temperature_and_pressure(global.lifeData.dive_time_seconds, Scheduler.counterPressure100msec, global.ceiling_from_main_CPU_mbar);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
483 if(turbo_seconds)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
484 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
485 global.lifeData.dive_time_seconds += turbo_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
486 decom_tissues_exposure((int)(turbo_seconds), &global.lifeData);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
487 copyTissueData();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
488 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
489 if((global.lifeData.counterSecondsShallowDepth > 1) && (global.lifeData.counterSecondsShallowDepth < (global.settings.timeoutDiveReachedZeroDepth - 10)))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
490 global.lifeData.counterSecondsShallowDepth = (global.settings.timeoutDiveReachedZeroDepth - 10);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
491 }
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 181
diff changeset
492 #endif
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
493
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
494 //Calc ascentrate every two second (20 * 100 ms)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
495 counterAscentRate++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
496 if(counterAscentRate == 20)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
497 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
498 global.lifeData.pressure_ambient_bar = get_pressure_mbar() / 1000.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
499 if(lastPressure_bar >= 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
500 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
501 //2 seconds * 30 == 1 minute, bar * 10 = meter
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
502 global.lifeData.ascent_rate_meter_per_min = (lastPressure_bar - global.lifeData.pressure_ambient_bar) * 30 * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
503 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
504 lastPressure_bar = global.lifeData.pressure_ambient_bar;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
505 counterAscentRate = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
506 }
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
507 copyPressureData();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
508 Scheduler.counterPressure100msec++;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
509 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
510 //evaluate compass data at 50 ms, 150 ms, 250 ms,....
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
511 if(ticksdiff >= Scheduler.counterCompass100msec * 100 + 50)
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
512 {
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
513 compass_read();
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
514 acceleration_read();
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
515 compass_calc();
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
516 copyCompassData();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
517 Scheduler.counterCompass100msec++;
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
518 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
519
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
520 if(ticksdiff >= Scheduler.counterAmbientLight100msec * 100 + 70)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
521 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
522 adc_ambient_light_sensor_get_data();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
523 copyAmbientLightData();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
524 Scheduler.counterAmbientLight100msec++;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
525 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
526
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
527 //Evaluate tissues, toxic data, vpm, etc. once a second
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
528 if(ticksdiff >= Scheduler.tick_execute1second)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
529 {
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
530 Scheduler.tick_execute1second = 0xFFFFFFFF; /* execute once only in the second cycle */
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
531 if(global.dataSendToSlave.diveModeInfo != DIVEMODE_Apnea)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
532 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
533 scheduleUpdateLifeData(0); // includes tissues
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
534 global.lifeData.dive_time_seconds++; // there is dive_time_seconds_without_surface_time too
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
535 global.lifeData.ppO2 = decom_calc_ppO2(global.lifeData.pressure_ambient_bar, &global.lifeData.actualGas);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
536 decom_oxygen_calculate_cns(&global.lifeData.cns,global.lifeData.ppO2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
537 decom_oxygen_calculate_otu(&global.lifeData.otu,global.lifeData.ppO2);
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
538 battery_gas_gauge_get_data();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
539
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
540
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
541 /** counter_exit allows safe exit via button for testing
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
542 * and demo_mode is exited too if aplicable.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
543 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
544 if(global.dataSendToMaster.mode == MODE_ENDDIVE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
545 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
546 counter_exit++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
547 if(counter_exit >= 2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
548 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
549 global.mode = MODE_SURFACE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
550 global.demo_mode = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
551 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
552 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
553
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
554 if(is_ambient_pressure_close_to_surface(&global.lifeData))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
555 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
556 global.lifeData.counterSecondsShallowDepth++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
557 if((global.lifeData.counterSecondsShallowDepth >= global.settings.timeoutDiveReachedZeroDepth) || ((global.lifeData.dive_time_seconds < 60) && (global.demo_mode == 0)) || (global.dataSendToSlave.setEndDive))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
558 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
559 global.seconds_since_last_dive = 1; // start counter
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
560 schedule_update_timer_helper(0); // zum starten :-)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
561 global.dataSendToMaster.mode = MODE_ENDDIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
562 global.deviceDataSendToMaster.mode = MODE_ENDDIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
563 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
564 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
565 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
566 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
567 global.lifeData.counterSecondsShallowDepth = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
568 global.lifeData.dive_time_seconds_without_surface_time++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
569 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
570 vpm_crush2();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
571 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
572 else // DIVEMODE_Apnea
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
573 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
574 global.lifeData.dive_time_seconds++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
575
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
576 // exit dive mode
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
577 if(global.dataSendToMaster.mode == MODE_ENDDIVE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
578 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
579 counter_exit++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
580 if(counter_exit >= 2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
581 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
582 scheduleUpdateLifeData(-1); // 'restart' tissue calculations without calculating time during apnea mode
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
583 global.lifeData.dive_time_seconds = 0; // use backup noflytime and desaturation time
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
584 global.mode = MODE_SURFACE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
585 global.demo_mode = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
586 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
587 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
588
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
589 // surface break
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
590 if(is_ambient_pressure_close_to_surface(&global.lifeData))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
591 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
592 global.lifeData.counterSecondsShallowDepth++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
593 if(global.lifeData.counterSecondsShallowDepth > 3) // time for main cpu to copy to apnea_last_dive_time_seconds
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
594 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
595 global.lifeData.dive_time_seconds = 0; // this apnea dive ends here
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
596 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
597 if((global.lifeData.counterSecondsShallowDepth >= global.settings.timeoutDiveReachedZeroDepth) || (global.dataSendToSlave.setEndDive))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
598 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
599 global.dataSendToMaster.mode = MODE_ENDDIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
600 global.deviceDataSendToMaster.mode = MODE_ENDDIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
601 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
602 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
603 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
604 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
605 global.lifeData.counterSecondsShallowDepth = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
606 global.lifeData.dive_time_seconds_without_surface_time++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
607 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
608 } // standard dive or DIVEMODE_Apnea
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
609
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
610 copyVpmCrushingData();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
611 copyTimeData();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
612 copyCnsAndOtuData();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
613 copyBatteryData();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
614
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
615 // new hw 170523
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
616 if(global.I2C_SystemStatus != HAL_OK)
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
617 {
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
618 MX_I2C1_TestAndClear();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
619 MX_I2C1_Init();
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
620 init_pressure();
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
621 }
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
622 }
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
623 if(ticksdiff >= 1000)
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
624 {
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
625 /* reset counter */
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
626 Scheduler.tickstart = HAL_GetTick();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
627 Scheduler.counterSPIdata100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
628 Scheduler.counterCompass100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
629 Scheduler.counterPressure100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
630 Scheduler.counterAmbientLight100msec = 0;
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
631 Scheduler.tick_execute1second = SCHEDULER_TICK_EXE1SEC;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
632 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
633 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
634 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
635
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
636
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
637 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
638 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
639 * @brief scheduleSurfaceMode / surface mode: Main Loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
640 * @author Peter Ryser
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
641 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
642 * @date 22-April-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
643 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
644 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
645
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
646
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
647 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
648 // scheduleTestMode
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
649 /// @brief included for sealed hardware with permanent RTE update message
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
650 // ===============================================================================
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
651 void scheduleTestMode(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
652 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
653 uint32_t ticksdiff = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
654 uint32_t lasttick = 0;
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
655 Scheduler.tickstart = HAL_GetTick();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
656
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
657 Scheduler.counterPressure100msec = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
658
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
659 float temperature_carousel = 0.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
660 float temperature_changer = 0.1f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
661
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
662 while(global.mode == MODE_TEST)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
663 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
664 lasttick = HAL_GetTick();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
665 ticksdiff = time_elapsed_ms(Scheduler.tickstart,lasttick);
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
666
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
667 //Evaluate received data at 10 ms, 110 ms, 210 ms,...
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
668 if(ticksdiff >= Scheduler.counterSPIdata100msec * 100 + 10)
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
669 {
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
670 if(SPI_Evaluate_RX_Data()!=0) /* did we receive something ? */
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
671 {
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
672 Scheduler.counterSPIdata100msec++;
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
673 }
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
674 schedule_check_resync();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
675 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
676
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
677 //Evaluate pressure at 20 ms, 120 ms, 220 ms,...
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
678 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
679 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
680 global.check_sync_not_running++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
681
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
682 pressure_update_alternating();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
683 scheduleUpdateDeviceData();
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
684 global.lifeData.ascent_rate_meter_per_min = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
685 copyPressureData();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
686
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
687 if(temperature_carousel > 20.0f)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
688 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
689 temperature_carousel = 20.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
690 temperature_changer = -0.1f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
691 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
692 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
693 if(temperature_carousel < 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
694 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
695 temperature_carousel = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
696 temperature_changer = +0.1f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
697 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
698
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
699 temperature_carousel += temperature_changer;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
700
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
701 uint8_t boolPressureData = !global.dataSendToMaster.boolPressureData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
702
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
703 global.dataSendToMaster.data[boolPressureData].pressure_mbar = get_pressure_mbar();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
704
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
705 global.dataSendToMaster.data[boolPressureData].temperature = temperature_carousel;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
706 global.dataSendToMaster.data[boolPressureData].pressure_uTick = HAL_GetTick();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
707 global.dataSendToMaster.boolPressureData = boolPressureData;
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
708 Scheduler.counterPressure100msec++;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
709 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
710
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
711 if(ticksdiff >= 1000)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
712 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
713 //Set back tick counter
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
714 Scheduler.tickstart = HAL_GetTick();
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
715 Scheduler.counterPressure100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
716 Scheduler.counterSPIdata100msec = 0;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
717 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
718 };
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
719 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
720
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
721
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
722
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
723 void scheduleSurfaceMode(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
724 {
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
725
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
726 uint32_t ticksdiff = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
727 uint32_t lasttick = 0;
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
728 Scheduler.tickstart = HAL_GetTick();
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
729 Scheduler.counterSPIdata100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
730 Scheduler.counterCompass100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
731 Scheduler.counterPressure100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
732 Scheduler.counterAmbientLight100msec = 0;
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
733 Scheduler.tick_execute1second = SCHEDULER_TICK_EXE1SEC;
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
734
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
735 global.dataSendToMaster.mode = MODE_SURFACE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
736 global.deviceDataSendToMaster.mode = MODE_SURFACE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
737
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
738 while(global.mode == MODE_SURFACE)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
739 {
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
740
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
741 lasttick = HAL_GetTick();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
742 ticksdiff = time_elapsed_ms(Scheduler.tickstart,lasttick);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
743
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
744 if(setButtonsNow == 1)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
745 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
746 if(scheduleSetButtonResponsiveness())
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
747 setButtonsNow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
748 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
749
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
750 /* Evaluate received data at 10 ms, 110 ms, 210 ms,... duration ~<1ms */
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
751 if(ticksdiff >= Scheduler.counterSPIdata100msec * 100 + 10)
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
752 {
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
753 if(SPI_Evaluate_RX_Data()!=0) /* did we receive something ? */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
754 {
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
755 Scheduler.counterSPIdata100msec++;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
756 }
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
757 schedule_check_resync();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
758 }
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
759
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
760 /* Evaluate pressure at 20 ms, 120 ms, 220 ms,... duration ~22ms] */
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
761 if(ticksdiff >= Scheduler.counterPressure100msec * 100 + 20)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
762 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
763 global.check_sync_not_running++;
277
580822b5d3d1 Rework SPI error handling.
ideenmodellierer
parents: 265
diff changeset
764 pressure_update_alternating();
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
765 scheduleUpdateDeviceData();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
766 global.lifeData.ascent_rate_meter_per_min = 0;
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
767 copyPressureData();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
768 Scheduler.counterPressure100msec++;
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
769
301
a09b1855d656 cleanup, RTE: factor out scheduleCheck_pressure_reached_dive_mode_level
Jan Mulder <jlmulder@xs4all.nl>
parents: 277
diff changeset
770 if (!is_ambient_pressure_close_to_surface(&global.lifeData))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
771 global.mode = MODE_DIVE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
772 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
773
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
774 /* Evaluate compass data at 50 ms, 150 ms, 250 ms,... duration ~5ms */
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
775 if(ticksdiff >= Scheduler.counterCompass100msec * 100 + 50)
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
776 {
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
777 compass_read();
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
778 acceleration_read();
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
779 compass_calc();
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
780 copyCompassData();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
781 Scheduler.counterCompass100msec++;
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
782 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
783
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
784 /* evaluate compass data at 70 ms, 170 ms, 270 ms,... duration <1ms */
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
785 if(ticksdiff >= Scheduler.counterAmbientLight100msec * 100 + 70)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
786 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
787 adc_ambient_light_sensor_get_data();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
788 copyAmbientLightData();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
789 Scheduler.counterAmbientLight100msec++;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
790 }
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
791
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
792
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
793
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
794 /* Evaluate tissues, toxic data, etc. once a second... duration ~1ms */
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
795 if(ticksdiff >= Scheduler.tick_execute1second)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
796 {
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
797 Scheduler.tick_execute1second = 0xFFFFFFFF;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
798 if(clearDecoNow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
799 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
800 decom_reset_with_1000mbar(&global.lifeData); ///< this should almost reset desaturation time
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
801 // new 160215 hw
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
802 global.repetitive_dive = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
803 global.seconds_since_last_dive = 0; ///< this will reset OTU and CNS as well
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
804 global.no_fly_time_minutes = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
805 global.accidentFlag = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
806 global.accidentRemainingSeconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
807 vpm_init(&global.vpm, global.conservatism, global.repetitive_dive, global.seconds_since_last_dive);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
808 clearDecoNow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
809 }
89
ff7775cc34c4 temp! full cyclic SPI
Dmitry Romanov <kitt@bk.ru>
parents: 88
diff changeset
810
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
811 if(global.seconds_since_last_dive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
812 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
813 schedule_update_timer_helper(-1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
814 }
89
ff7775cc34c4 temp! full cyclic SPI
Dmitry Romanov <kitt@bk.ru>
parents: 88
diff changeset
815
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
816 if(global.accidentRemainingSeconds)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
817 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
818 global.accidentRemainingSeconds--;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
819 if(!global.accidentRemainingSeconds)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
820 global.accidentFlag = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
821 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
822 global.dataSendToMaster.accidentFlags = global.accidentFlag;
89
ff7775cc34c4 temp! full cyclic SPI
Dmitry Romanov <kitt@bk.ru>
parents: 88
diff changeset
823
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
824 update_surface_pressure(1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
825 scheduleUpdateLifeData(0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
826 decom_oxygen_calculate_otu_degrade(&global.lifeData.otu, global.seconds_since_last_dive);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
827 decom_oxygen_calculate_cns_degrade(&global.lifeData.cns, global.seconds_since_last_dive);
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
828
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
829 /* start desaturation calculation after first valid measurement has been done */
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
830 if(global.lifeData.pressure_surface_bar != INVALID_PREASURE_VALUE)
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
831 {
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
832 global.lifeData.desaturation_time_minutes = decom_calc_desaturation_time(global.lifeData.tissue_nitrogen_bar,global.lifeData.tissue_helium_bar,global.lifeData.pressure_surface_bar);
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
833 }
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
834 else
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
835 {
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
836 global.lifeData.desaturation_time_minutes = 0;
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
837 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
838 battery_charger_get_status_and_contral_battery_gas_gauge(0);
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
839 battery_gas_gauge_get_data();
89
ff7775cc34c4 temp! full cyclic SPI
Dmitry Romanov <kitt@bk.ru>
parents: 88
diff changeset
840
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
841 copyCnsAndOtuData();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
842 copyTimeData();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
843 copyBatteryData();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
844 copyDeviceData();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
845
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
846 /* check if I2C is not up an running and try to reactivate if necessary. Also do initialization if problem occured during startup */
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
847 if(global.I2C_SystemStatus != HAL_OK)
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
848 {
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
849 MX_I2C1_TestAndClear();
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
850 MX_I2C1_Init();
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
851 if(global.I2C_SystemStatus == HAL_OK)
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
852 {
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
853 init_pressure();
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
854 if(is_init_pressure_done()) /* Init surface data with initial measurement */
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
855 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
856 init_surface_ring();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
857 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
858
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
859 if(!battery_gas_gauge_CheckConfigOK())
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
860 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
861 init_battery_gas_gauge();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
862 }
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
863 }
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
864 }
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
865 }
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
866
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
867 if(ticksdiff >= 1000)
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
868 {
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
869 //Set back tick counter
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
870 Scheduler.tickstart = HAL_GetTick();
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
871 Scheduler.counterSPIdata100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
872 Scheduler.counterCompass100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
873 Scheduler.counterPressure100msec = 0;
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
874 Scheduler.counterAmbientLight100msec = 0;
220
e524a824d8f2 Added schedule point for functions executed once in a second
ideenmodellierer
parents: 207
diff changeset
875 Scheduler.tick_execute1second = SCHEDULER_TICK_EXE1SEC;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
876 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
877 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
878 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
879
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
880 inline void Scheduler_Request_sync_with_SPI(uint8_t SyncMethod)
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
881 {
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
882 if( SyncMethod < SPI_SYNC_METHOD_INVALID)
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
883 {
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
884 dospisync = SyncMethod;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
885 }
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
886 }
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
887
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
888 void Scheduler_SyncToSPI(uint8_t TXtick)
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
889 {
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
890 uint32_t deltatick = 0;
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
891 int8_t TXcompensation;
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
892
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
893 switch(dospisync)
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
894 {
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
895 case SPI_SYNC_METHOD_HARD:
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
896 //Set back tick counter
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
897 Scheduler.tickstart = HAL_GetTick() - 4; /* consider 4ms offset for transfer */
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
898 Scheduler.counterSPIdata100msec = 0;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
899 Scheduler.counterCompass100msec = 0;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
900 Scheduler.counterPressure100msec = 0;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
901 Scheduler.counterAmbientLight100msec = 0;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
902 dospisync = SPI_SYNC_METHOD_NONE;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
903 break;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
904 case SPI_SYNC_METHOD_SOFT:
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
905 deltatick = time_elapsed_ms(Scheduler.tickstart,HAL_GetTick());
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
906 deltatick %= 100; /* clip to 100ms window */
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
907 if(Scheduler.tickstart - deltatick >= 0) /* adjust start time to the next 100ms window */
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
908 {
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
909 Scheduler.tickstart -= deltatick;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
910 }
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
911 else
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
912 {
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
913 Scheduler.tickstart = 0xFFFFFFFF- (deltatick - Scheduler.tickstart);
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
914 }
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
915 dospisync = SPI_SYNC_METHOD_NONE;
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
916 break;
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
917 default: /* continous sync activity */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
918 if(TXtick < 100) /* do not handle unexpected jump length > 100ms */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
919 {
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
920 TXtick += 4; /* add 4ms TX time to offset of 100ms time stamp */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
921 deltatick = time_elapsed_ms(Scheduler.tickstart,HAL_GetTick());
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
922 deltatick %= 100;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
923 if(deltatick > 50)
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
924 {
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
925 TXcompensation = deltatick - 100; /* neg drift */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
926 }
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
927 else
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
928 {
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
929 TXcompensation = deltatick; /* pos drift */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
930 }
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
931 TXcompensation = TXtick - TXcompensation;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
932 Scheduler.tickstart -= TXcompensation;
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
933 }
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
934 else
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
935 {
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
936 Scheduler_Request_sync_with_SPI(SPI_SYNC_METHOD_SOFT); /* A large shift in 100ms cycle occured => clip to 100ms in next sync call */
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
937 }
207
b95741467355 Introduce scheduler function
ideenmodellierer
parents: 186
diff changeset
938 break;
142
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
939 }
69f4b8067daa Use one global structure for all schedule counters
Ideenmodellierer
parents: 135
diff changeset
940 }
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
941
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
942 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
943 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
944 * @brief scheduleCompassCalibrationMode
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
945 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
946 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
947 * @since 31-March-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
948 * @date 31-March-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
949 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
950 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
951 void scheduleCompassCalibrationMode(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
952 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
953 compass_init(1,7); // fast mode, max gain
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
954 compass_calib(); // duration : 1 minute!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
955 compass_init(0,7); // back to normal mode
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
956
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
957 if(global.seconds_since_last_dive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
958 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
959 schedule_update_timer_helper(-1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
960 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
961
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
962 scheduleUpdateLifeData(0);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
963 global.mode = MODE_SURFACE;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
964 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
965
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
966
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
967 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
968 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
969 * @brief scheduleSleepMode / sleep mode: Main Loop
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
970 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
971 * @version V0.0.2
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
972 * @since 31-March-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
973 * @date 22-April-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
974 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
975 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
976
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
977 void scheduleSleepMode(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
978 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
979 global.dataSendToMaster.mode = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
980 global.deviceDataSendToMaster.mode = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
981
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
982 /* prevent button wake up problem while in sleep_prepare
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
983 * sleep prepare does I2C_DeInit()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
984 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
985 if(global.mode != MODE_SLEEP)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
986 MX_I2C1_Init();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
987 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
988 do
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
989 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
990 I2C_DeInit();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
991
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
992 #ifdef DEBUGMODE
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
993 HAL_Delay(2000);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
994 #else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
995 RTC_StopMode_2seconds();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
996 #endif
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
997
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
998
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
999
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1000 if(global.mode == MODE_SLEEP)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1001 secondsCount += 2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1002
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1003 MX_I2C1_Init();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1004 pressure_sensor_get_pressure_raw();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1005
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1006 /* check if I2C is not up an running and try to reactivate if necessary. Also do initialization if problem occured during startup */
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1007 if(global.I2C_SystemStatus != HAL_OK)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1008 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1009 MX_I2C1_TestAndClear();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1010 MX_I2C1_Init();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1011 if(global.I2C_SystemStatus == HAL_OK)
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1012 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1013 init_pressure();
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1014 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1015 }
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1016
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1017 if(secondsCount >= 30)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1018 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1019 pressure_sensor_get_temperature_raw();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1020 battery_gas_gauge_get_data();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1021 // ReInit_battery_charger_status_pins();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1022 battery_charger_get_status_and_contral_battery_gas_gauge(1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1023 // DeInit_battery_charger_status_pins();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1024 secondsCount = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1025 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1026
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1027 pressure_calculation();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1028
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1029 scheduleUpdateDeviceData();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1030 update_surface_pressure(2);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1031
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1032 if(global.seconds_since_last_dive)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1033 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1034 schedule_update_timer_helper(-1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1035 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1036
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1037 if(global.accidentRemainingSeconds)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1038 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1039 if(global.accidentRemainingSeconds > 2)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1040 global.accidentRemainingSeconds -= 2;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1041 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1042 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1043 global.accidentRemainingSeconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1044 global.accidentFlag = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1045 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1046 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1047
301
a09b1855d656 cleanup, RTE: factor out scheduleCheck_pressure_reached_dive_mode_level
Jan Mulder <jlmulder@xs4all.nl>
parents: 277
diff changeset
1048 if (!is_ambient_pressure_close_to_surface(&global.lifeData))
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1049 global.mode = MODE_BOOT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1050
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1051 scheduleUpdateLifeData(2000);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1052 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1053 while(global.mode == MODE_SLEEP);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1054 /* new section for system after Standby */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1055 scheduleUpdateLifeData(-1);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1056 clearDecoNow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1057 setButtonsNow = 0;
264
b3685fbada3b Sync to Main 100ms time stamp & added Reinitialization of globals after startup
ideenmodellierer
parents: 240
diff changeset
1058 reinitGlobals();
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1059 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1060
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1061
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1062
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1063 /* Private functions ---------------------------------------------------------*/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1064
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1065 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1066 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1067 * @brief scheduleUpdateLifeData / calculates tissues
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1068 * @author Peter Ryser
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1069 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1070 * @date 22-April-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1071 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1072 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1073
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1074
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1075 void scheduleUpdateLifeData(int32_t asynchron_milliseconds_since_last)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1076 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1077 static _Bool first = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1078 static uint32_t tickstart = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1079 static uint32_t ticksrest = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1080
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1081 uint32_t ticksdiff = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1082 uint32_t ticksnow = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1083 uint32_t time_seconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1084 uint8_t whichGasTmp = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1085
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1086 uint8_t updateTissueData = 0;
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1087
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1088
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1089 if(global.lifeData.pressure_surface_bar == INVALID_PREASURE_VALUE)
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1090 {
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1091 updateTissueData = 1;
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1092 }
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1093
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1094 if(asynchron_milliseconds_since_last < 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1095 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1096 first = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1097 tickstart = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1098 ticksrest = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1099 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1100 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1101
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1102 if(!asynchron_milliseconds_since_last && first)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1103 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1104 tickstart = HAL_GetTick();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1105 first = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1106 return;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1107 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1108
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1109 whichGasTmp = global.whichGas;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1110 global.lifeData.actualGas = global.aktualGas[whichGasTmp];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1111 global.lifeData.pressure_ambient_bar = get_pressure_mbar() / 1000.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1112 global.lifeData.pressure_surface_bar = get_surface_mbar() / 1000.0f;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1113
135
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1114 if(updateTissueData)
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1115 {
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1116 decom_reset_with_ambientmbar(global.lifeData.pressure_surface_bar,&global.lifeData);
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1117 }
5df4f1a315cb Restore old data copy locations
Ideenmodellierer
parents: 120
diff changeset
1118
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1119 if(!asynchron_milliseconds_since_last)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1120 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1121 ticksnow = HAL_GetTick();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1122 ticksdiff = time_elapsed_ms(tickstart,ticksnow);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1123 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1124 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1125 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1126 first = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1127 ticksdiff = asynchron_milliseconds_since_last;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1128 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1129
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1130 if(ticksrest > 1000) // whatever happens after standby with STM32L476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1131 ticksrest = 0; // maybe move static to SRAM2
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1132
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1133 ticksdiff += ticksrest;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1134 time_seconds = ticksdiff/ 1000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1135 ticksrest = ticksdiff - time_seconds * 1000;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1136 tickstart = ticksnow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1137
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1138 decom_tissues_exposure((int)time_seconds, &global.lifeData);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1139 if(global.demo_mode)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1140 decom_tissues_exposure((int)(3*time_seconds), &global.lifeData);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1141 copyTissueData();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1142 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1143
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1144
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1145 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1146 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1147 * @brief scheduleUpdateDeviceData
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1148 * @author heinrichs weikamp gmbh
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1149 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1150 * @date 16-March-2015
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1151 *
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1152 * two step process
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1153 * first compare with data from main CPU == externalLogbookFlash
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1154 * second update with new sensor data
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1155 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1156 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1157 void scheduleSetDate(SDeviceLine *line)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1158 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1159 extern RTC_HandleTypeDef RTCHandle;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1160
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1161 line->date_rtc_dr = (uint32_t)(RTCHandle.Instance->DR & RTC_DR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1162 line->time_rtc_tr = (uint32_t)(RTCHandle.Instance->TR & RTC_TR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1163 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1164
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1165
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1166 void scheduleCopyDeviceData(SDeviceLine *lineWrite, const SDeviceLine *lineRead)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1167 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1168 lineWrite->date_rtc_dr = lineRead->date_rtc_dr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1169 lineWrite->time_rtc_tr = lineRead->time_rtc_tr;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1170 lineWrite->value_int32 = lineRead->value_int32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1171 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1172
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1173
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1174 void scheduleUpdateDeviceData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1175 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1176 /* first step, main CPU */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1177
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1178 if(deviceDataFlashValid)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1179 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1180 /* max values */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1181 if(global.deviceData.batteryChargeCompleteCycles.value_int32 < DeviceDataFlash.batteryChargeCompleteCycles.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1182 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1183 scheduleCopyDeviceData(&global.deviceData.batteryChargeCompleteCycles, &DeviceDataFlash.batteryChargeCompleteCycles);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1184 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1185 if(global.deviceData.batteryChargeCycles.value_int32 < DeviceDataFlash.batteryChargeCycles.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1186 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1187 scheduleCopyDeviceData(&global.deviceData.batteryChargeCycles, &DeviceDataFlash.batteryChargeCycles);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1188 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1189 if(global.deviceData.temperatureMaximum.value_int32 < DeviceDataFlash.temperatureMaximum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1190 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1191 scheduleCopyDeviceData(&global.deviceData.temperatureMaximum, &DeviceDataFlash.temperatureMaximum);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1192 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1193 if(global.deviceData.depthMaximum.value_int32 < DeviceDataFlash.depthMaximum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1194 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1195 scheduleCopyDeviceData(&global.deviceData.depthMaximum, &DeviceDataFlash.depthMaximum);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1196 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1197 if(global.deviceData.diveCycles.value_int32 < DeviceDataFlash.diveCycles.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1198 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1199 scheduleCopyDeviceData(&global.deviceData.diveCycles, &DeviceDataFlash.diveCycles);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1200 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1201 if(global.deviceData.hoursOfOperation.value_int32 < DeviceDataFlash.hoursOfOperation.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1202 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1203 scheduleCopyDeviceData(&global.deviceData.hoursOfOperation, &DeviceDataFlash.hoursOfOperation);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1204 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1205
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1206 /* min values */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1207 if(global.deviceData.temperatureMinimum.value_int32 > DeviceDataFlash.temperatureMinimum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1208 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1209 scheduleCopyDeviceData(&global.deviceData.temperatureMinimum, &DeviceDataFlash.temperatureMinimum);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1210 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1211 if(global.deviceData.voltageMinimum.value_int32 > DeviceDataFlash.voltageMinimum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1212 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1213 scheduleCopyDeviceData(&global.deviceData.voltageMinimum, &DeviceDataFlash.voltageMinimum);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1214 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1215 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1216
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1217 /* second step, sensor data */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1218 int32_t temperature_centigrad_int32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1219 int32_t pressure_mbar_int32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1220 int32_t voltage_mvolt_int32;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1221
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1222 temperature_centigrad_int32 = (int32_t)(get_temperature() * 100);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1223 if(temperature_centigrad_int32 < global.deviceData.temperatureMinimum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1224 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1225 global.deviceData.temperatureMinimum.value_int32 = temperature_centigrad_int32;
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
1226 scheduleSetDate(&global.deviceData.temperatureMinimum);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1227 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1228
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1229 if(temperature_centigrad_int32 > global.deviceData.temperatureMaximum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1230 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1231 global.deviceData.temperatureMaximum.value_int32 = temperature_centigrad_int32;
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
1232 scheduleSetDate(&global.deviceData.temperatureMaximum);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1233 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1234
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1235 pressure_mbar_int32 = (int32_t)get_pressure_mbar();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1236 if(pressure_mbar_int32 > global.deviceData.depthMaximum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1237 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1238 global.deviceData.depthMaximum.value_int32 = pressure_mbar_int32;
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
1239 scheduleSetDate(&global.deviceData.depthMaximum);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1240 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1241
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1242 voltage_mvolt_int32 = (int32_t)(get_voltage() * 1000);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1243 if(voltage_mvolt_int32 < global.deviceData.voltageMinimum.value_int32)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1244 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1245 global.deviceData.voltageMinimum.value_int32 = voltage_mvolt_int32;
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
1246 scheduleSetDate(&global.deviceData.voltageMinimum);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1247 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1248
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1249 /* third step, counter */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1250 switch (global.mode)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1251 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1252 case MODE_SURFACE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1253 case MODE_DIVE:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1254 default:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1255 deviceDataSubSeconds++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1256 if(deviceDataSubSeconds > 10)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1257 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1258 deviceDataSubSeconds = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1259 global.deviceData.hoursOfOperation.value_int32++;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1260 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1261 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1262
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1263 case MODE_SLEEP:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1264 case MODE_SHUTDOWN:
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1265 break;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1266 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1267 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1268
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1269
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1270 void scheduleUpdateDeviceDataChargerFull(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1271 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1272 global.deviceData.batteryChargeCompleteCycles.value_int32++;
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
1273 scheduleSetDate(&global.deviceData.batteryChargeCompleteCycles);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1274 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1275
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1276
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1277 void scheduleUpdateDeviceDataChargerCharging(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1278 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1279 global.deviceData.batteryChargeCycles.value_int32++;
88
Dmitry Romanov <kitt@bk.ru>
parents: 87
diff changeset
1280 scheduleSetDate(&global.deviceData.batteryChargeCycles);
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1281 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1282
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1283
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1284 /**
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1285 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1286 * @brief vpm_crush / calls vpm calc_crushing_pressure every four seconds during descend
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1287 * @author Peter Ryser
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1288 * @version V0.0.1
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1289 * @date 22-April-2014
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1290 ******************************************************************************
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1291 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1292 _Bool vpm_crush2(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1293 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1294 int i = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1295 static float starting_ambient_pressure = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1296 static float ending_ambient_pressure = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1297 static float time_calc_begin = -1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1298 static float initial_helium_pressure[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1299 static float initial_nitrogen_pressure[16];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1300 ending_ambient_pressure = global.lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1301
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1302 if((global.lifeData.dive_time_seconds <= 4) || (starting_ambient_pressure >= ending_ambient_pressure))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1303 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1304 time_calc_begin = global.lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1305 starting_ambient_pressure = global.lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1306 for( i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1307 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1308 initial_helium_pressure[i] = global.lifeData.tissue_helium_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1309 initial_nitrogen_pressure[i] = global.lifeData.tissue_nitrogen_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1310 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1311 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1312 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1313 if(global.lifeData.dive_time_seconds - time_calc_begin >= 4)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1314 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1315 if(ending_ambient_pressure > starting_ambient_pressure + 0.5f)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1316 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1317 float rate = (ending_ambient_pressure - starting_ambient_pressure) * 60 / 4;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1318 calc_crushing_pressure(&global.lifeData, &global.vpm, initial_helium_pressure, initial_nitrogen_pressure, starting_ambient_pressure, rate);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1319
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1320 time_calc_begin = global.lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1321 starting_ambient_pressure = global.lifeData.pressure_ambient_bar * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1322 for( i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1323 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1324 initial_helium_pressure[i] = global.lifeData.tissue_helium_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1325 initial_nitrogen_pressure[i] = global.lifeData.tissue_nitrogen_bar[i] * 10;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1326 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1327
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1328 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1329 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1330
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1331 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1332 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1333 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1334
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1335
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1336 long get_nofly_time_minutes(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1337 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1338
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1339 if(global.no_fly_time_minutes <= 0)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1340 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1341
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1342 long minutes_since_last_dive = global.seconds_since_last_dive/60;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1343
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1344 if((global.seconds_since_last_dive > 0) && (global.no_fly_time_minutes > minutes_since_last_dive))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1345 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1346 return (global.no_fly_time_minutes - minutes_since_last_dive);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1347 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1348 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1349 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1350 global.no_fly_time_minutes = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1351 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1352 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1353 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1354
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1355
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1356 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1357 void copyActualGas(SGas gas)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1358 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1359 uint8_t whichGas = !global.whichGas;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1360 global.aktualGas[whichGas] = gas;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1361 global.whichGas = whichGas;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1362 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1363
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1364
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1365 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1366 void copyPressureData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1367 {
240
625d20070261 Improvement SPI stability/recoverability
Jan Mulder <jlmulder@xs4all.nl>
parents: 231
diff changeset
1368 global.dataSendToMaster.sensorErrors = global.I2C_SystemStatus;
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1369 uint8_t boolPressureData = !global.dataSendToMaster.boolPressureData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1370 global.dataSendToMaster.data[boolPressureData].temperature = get_temperature();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1371 global.dataSendToMaster.data[boolPressureData].pressure_mbar = get_pressure_mbar();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1372 global.dataSendToMaster.data[boolPressureData].surface_mbar = get_surface_mbar();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1373 global.dataSendToMaster.data[boolPressureData].ascent_rate_meter_per_min = global.lifeData.ascent_rate_meter_per_min;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1374 global.dataSendToMaster.data[boolPressureData].pressure_uTick = HAL_GetTick();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1375 global.dataSendToMaster.boolPressureData = boolPressureData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1376 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1377
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1378
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1379 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1380 void copyCnsAndOtuData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1381 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1382 //uint8_t dataSendToMaster.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1383 uint8_t boolToxicData = !global.dataSendToMaster.boolToxicData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1384 global.dataSendToMaster.data[boolToxicData].cns = global.lifeData.cns;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1385 global.dataSendToMaster.data[boolToxicData].otu = global.lifeData.otu;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1386 global.dataSendToMaster.data[boolToxicData].desaturation_time_minutes = global.lifeData.desaturation_time_minutes;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1387 global.dataSendToMaster.data[boolToxicData].no_fly_time_minutes = get_nofly_time_minutes();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1388 global.dataSendToMaster.boolToxicData = boolToxicData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1389 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1390
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1391
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1392 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1393 void copyTimeData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1394 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1395 extern RTC_HandleTypeDef RTCHandle;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1396
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1397 uint8_t boolTimeData = !global.dataSendToMaster.boolTimeData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1398 global.dataSendToMaster.data[boolTimeData].localtime_rtc_tr = (uint32_t)(RTCHandle.Instance->TR & RTC_TR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1399 global.dataSendToMaster.data[boolTimeData].localtime_rtc_dr = (uint32_t)(RTCHandle.Instance->DR & RTC_DR_RESERVED_MASK);
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1400 global.dataSendToMaster.data[boolTimeData].divetime_seconds = (uint32_t)global.lifeData.dive_time_seconds;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1401 global.dataSendToMaster.data[boolTimeData].dive_time_seconds_without_surface_time = (uint32_t)global.lifeData.dive_time_seconds_without_surface_time;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1402 global.dataSendToMaster.data[boolTimeData].surfacetime_seconds = (uint32_t)global.seconds_since_last_dive;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1403 global.dataSendToMaster.data[boolTimeData].counterSecondsShallowDepth = (uint32_t)global.lifeData.counterSecondsShallowDepth;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1404 global.dataSendToMaster.boolTimeData = boolTimeData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1405 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1406
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1407
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1408 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1409 void copyCompassData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1410 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1411 extern float compass_heading;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1412 extern float compass_roll;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1413 extern float compass_pitch;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1414 //uint8_t dataSendToMaster.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1415 uint8_t boolCompassData = !global.dataSendToMaster.boolCompassData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1416 global.dataSendToMaster.data[boolCompassData].compass_heading = compass_heading;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1417 global.dataSendToMaster.data[boolCompassData].compass_roll = compass_roll;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1418 global.dataSendToMaster.data[boolCompassData].compass_pitch = compass_pitch;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1419 global.dataSendToMaster.data[boolCompassData].compass_DX_f = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1420 global.dataSendToMaster.data[boolCompassData].compass_DY_f = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1421 global.dataSendToMaster.data[boolCompassData].compass_DZ_f = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1422 global.dataSendToMaster.data[boolCompassData].compass_uTick = HAL_GetTick();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1423 global.dataSendToMaster.boolCompassData = boolCompassData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1424 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1425
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1426
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1427 void copyCompassDataDuringCalibration(int16_t dx, int16_t dy, int16_t dz)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1428 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1429 extern float compass_heading;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1430 extern float compass_roll;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1431 extern float compass_pitch;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1432 //uint8_t dataSendToMaster.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1433 uint8_t boolCompassData = !global.dataSendToMaster.boolCompassData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1434 global.dataSendToMaster.data[boolCompassData].compass_heading = compass_heading;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1435 global.dataSendToMaster.data[boolCompassData].compass_roll = compass_roll;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1436 global.dataSendToMaster.data[boolCompassData].compass_pitch = compass_pitch;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1437 global.dataSendToMaster.data[boolCompassData].compass_DX_f = dx;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1438 global.dataSendToMaster.data[boolCompassData].compass_DY_f = dy;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1439 global.dataSendToMaster.data[boolCompassData].compass_DZ_f = dz;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1440 global.dataSendToMaster.boolCompassData = boolCompassData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1441 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1442
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1443
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1444 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1445 void copyBatteryData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1446 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1447 uint8_t boolBatteryData = !global.dataSendToMaster.boolBatteryData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1448 global.dataSendToMaster.data[boolBatteryData].battery_voltage = get_voltage();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1449 global.dataSendToMaster.data[boolBatteryData].battery_charge= get_charge();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1450 global.dataSendToMaster.boolBatteryData = boolBatteryData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1451 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1452
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1453
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1454 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1455 void copyAmbientLightData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1456 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1457 uint8_t boolAmbientLightData = !global.dataSendToMaster.boolAmbientLightData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1458 global.dataSendToMaster.data[boolAmbientLightData].ambient_light_level = get_ambient_light_level();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1459 global.dataSendToMaster.boolAmbientLightData = boolAmbientLightData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1460 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1461
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1462
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1463 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1464 void copyTissueData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1465 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1466 //uint8_t dataSendToMaster.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1467 uint8_t boolTisssueData = !global.dataSendToMaster.boolTisssueData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1468 for(int i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1469 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1470 global.dataSendToMaster.data[boolTisssueData].tissue_nitrogen_bar[i] = global.lifeData.tissue_nitrogen_bar[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1471 global.dataSendToMaster.data[boolTisssueData].tissue_helium_bar[i] = global.lifeData.tissue_helium_bar[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1472 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1473 global.dataSendToMaster.boolTisssueData = boolTisssueData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1474 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1475
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1476
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1477 //Supports threadsave copying!!!
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1478 void copyVpmCrushingData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1479 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1480 //uint8_t dataSendToMaster.
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1481 uint8_t boolCrushingData = !global.dataSendToMaster.boolCrushingData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1482 for(int i = 0; i < 16; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1483 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1484 global.dataSendToMaster.data[boolCrushingData].max_crushing_pressure_n2[i] = global.vpm.max_crushing_pressure_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1485 global.dataSendToMaster.data[boolCrushingData].max_crushing_pressure_he[i] = global.vpm.max_crushing_pressure_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1486 global.dataSendToMaster.data[boolCrushingData].adjusted_critical_radius_he[i] = global.vpm.adjusted_critical_radius_he[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1487 global.dataSendToMaster.data[boolCrushingData].adjusted_critical_radius_n2[i] = global.vpm.adjusted_critical_radius_n2[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1488 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1489 global.dataSendToMaster.boolCrushingData = boolCrushingData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1490 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1491
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1492
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1493 void copyDeviceData(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1494 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1495 uint8_t boolDeviceData = !global.deviceDataSendToMaster.boolDeviceData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1496 memcpy(&global.deviceDataSendToMaster.DeviceData[boolDeviceData], &global.deviceData,sizeof(SDevice));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1497 global.deviceDataSendToMaster.boolDeviceData = boolDeviceData;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1498
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1499 global.deviceDataSendToMaster.boolVpmRepetitiveDataValid = 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1500 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.adjusted_critical_radius_he, &global.vpm.adjusted_critical_radius_he, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1501 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.adjusted_critical_radius_n2, &global.vpm.adjusted_critical_radius_n2, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1502 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.adjusted_crushing_pressure_he, &global.vpm.adjusted_crushing_pressure_he, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1503 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.adjusted_crushing_pressure_n2, &global.vpm.adjusted_crushing_pressure_n2, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1504 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.initial_allowable_gradient_he, &global.vpm.initial_allowable_gradient_he, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1505 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.initial_allowable_gradient_n2, &global.vpm.initial_allowable_gradient_n2, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1506 memcpy(&global.deviceDataSendToMaster.VpmRepetitiveData.max_actual_gradient, &global.vpm.max_actual_gradient, sizeof(16*4));
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1507 global.deviceDataSendToMaster.VpmRepetitiveData.repetitive_variables_not_valid = global.vpm.repetitive_variables_not_valid;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1508 global.deviceDataSendToMaster.boolVpmRepetitiveDataValid = 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1509 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1510
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1511 /* copyPICdata(); is used in spi.c */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1512 void copyPICdata(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1513 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1514 uint8_t boolPICdata = !global.dataSendToMaster.boolPICdata;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1515 for(int i = 0; i < 3; i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1516 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1517 global.dataSendToMaster.data[boolPICdata].button_setting[i] = global.ButtonPICdata[i];
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1518 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1519 global.dataSendToMaster.boolPICdata = boolPICdata;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1520 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1521
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1522
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1523 typedef enum
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1524 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1525 SPI3_OK = 0x00,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1526 SPI3_DEINIT = 0x01,
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1527 } SPI3_StatusTypeDef;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1528 /* if spi3 is running and the SPI3_ButtonAdjust call returns OK, all is fine
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1529 if the SPI3_ButtonAdjust call returns error, the spi3 is DeInit
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1530 and will be init the next call of scheduleSetButtonResponsiveness()
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1531 and data will be send again on the third call
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1532 therefore on return 0 of scheduleSetButtonResponsiveness() the caller flag should kept active
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1533 */
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1534 uint8_t scheduleSetButtonResponsiveness(void)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1535 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1536 static uint8_t SPI3status = SPI3_OK;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1537
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1538 if((SPI3status == SPI3_OK) && (SPI3_ButtonAdjust(global.ButtonResponsiveness, global.ButtonPICdata)))
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1539 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1540 copyPICdata();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1541 return 1;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1542 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1543 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1544 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1545 for(int i=0;i<3;i++)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1546 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1547 global.ButtonPICdata[i] = 0xFF;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1548 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1549 copyPICdata();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1550
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1551 if(SPI3status == SPI3_OK)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1552 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1553 MX_SPI3_DeInit();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1554 SPI3status = SPI3_DEINIT;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1555 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1556 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1557 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1558 MX_SPI3_Init();
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1559 SPI3status = SPI3_OK;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1560 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1561 return 0;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1562 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1563 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1564
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1565
186
f11f0bf6ef2d cleanup: remove obsolete code, make static, etc.
Jan Mulder <jlmulder@xs4all.nl>
parents: 181
diff changeset
1566 //save time difference
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1567 uint32_t time_elapsed_ms(uint32_t ticksstart,uint32_t ticksnow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1568 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1569 if(ticksstart <= ticksnow)
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1570 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1571 return ticksnow - ticksstart;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1572 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1573 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1574 {
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1575 return 0xFFFFFFFF - ticksstart + ticksnow;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1576 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1577 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1578
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1579 /* same as in data_central.c */
310
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 301
diff changeset
1580 _Bool is_ambient_pressure_close_to_surface(SLifeData *lifeData)
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1581 {
331
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1582 if(lifeData->pressure_ambient_bar == INVALID_PREASURE_VALUE) /* as long as no valid data is available expect we are close to surface */
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1583 {
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1584 return true;
b4c578caaafb Added plausibility check for pressure values
ideenmodellierer
parents: 310
diff changeset
1585 }
310
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 301
diff changeset
1586 if (lifeData->pressure_ambient_bar > 1.16)
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 301
diff changeset
1587 return false;
95928ef3986f Make dive mode detection more advanced
Jan Mulder <jlmulder@xs4all.nl>
parents: 301
diff changeset
1588 else if(lifeData->pressure_ambient_bar < (lifeData->pressure_surface_bar + 0.1f)) // hw 161121 now 1 mter, before 0.04f
38
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1589 return true;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1590 else
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1591 return false;
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1592 }
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1593
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1594
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1595 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/
5f11787b4f42 include in ostc4 repository
heinrichsweikamp
parents:
diff changeset
1596