Mercurial > public > ostc4
annotate Discovery/Src/data_exchange_main.c @ 1078:082825daccb5 Icon_Integration tip
Added control views for HUD:
The HUD implementation may now be activated by the compile switch ENABLE_HUD_SUPPORT. The HUD will become visible onces detected in the CvOpt overview menu. The first implementation is for testing only => The LEDs may be operated by a number field. Positiv values activate the red, negativ the green LEDs. Depending on the value blink sequences will be scheduled.
At the moment no dive specific data is mapped to the LED operation (like e.g. warnings).
| author | Ideenmodellierer |
|---|---|
| date | Mon, 02 Mar 2026 17:30:38 +0100 |
| parents | 4499227a2db8 |
| children |
| rev | line source |
|---|---|
| 38 | 1 /** |
| 2 ****************************************************************************** | |
| 3 * @file data_exchange_main.c | |
| 4 * @author heinrichs weikamp gmbh | |
| 5 * @date 13-Oct-2014 | |
| 6 * @version V0.0.3 | |
| 7 * @since 17-Feb-2016 | |
| 8 | |
| 9 * @brief Communication with the second CPU == RTE system | |
| 10 * | |
| 11 @verbatim | |
| 12 ============================================================================== | |
| 13 ##### Version Changes ##### | |
| 14 ============================================================================== | |
| 15 160217 V0.0.3 pStateUsed->decolistXXXXX.tickstamp = HAL_GetTick(); added | |
| 16 150627 V0.0.2 | |
| 17 | |
| 18 ============================================================================== | |
| 19 ##### How to use ##### | |
| 20 ============================================================================== | |
| 21 | |
| 22 ============================================================================== | |
| 23 ##### Button, Set Time, Clear Deco etc Request ##### | |
| 24 ============================================================================== | |
| 25 was updated (151207) for buttons and clear deco at the moment only | |
| 26 using requestNecessary and checking in DataEX_copy_to_LifeData() | |
| 27 Hence if there is no confirm from the smallCPU on the data after the request | |
| 28 the request will be send again. | |
| 29 | |
| 30 ============================================================================== | |
| 31 ##### Device Data ##### | |
| 32 ============================================================================== | |
| 33 | |
| 34 main CPU always sends the device data info that it has at the moment | |
| 35 | |
| 36 on start it is INT32_MIN, INT32_MAX and 0 | |
| 37 as initialized in data_central.c variable declaration | |
| 38 | |
| 39 second small CPU gets request to send its device data | |
| 40 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
41 on reception the data is merged with the data in externLogbookFlash, |
| 38 | 42 stored on the externLogbookFlash and from now on send to small CPU |
| 43 | |
| 44 ============================================================================== | |
| 45 ##### Magnet Reset ##### | |
| 46 ============================================================================== | |
| 47 | |
| 48 @endverbatim | |
| 49 ****************************************************************************** | |
| 50 * @attention | |
| 51 * | |
| 52 * <h2><center>© COPYRIGHT(c) 2014 heinrichs weikamp</center></h2> | |
| 53 * | |
| 54 ****************************************************************************** | |
| 55 */ | |
| 56 | |
| 57 /* Includes ------------------------------------------------------------------*/ | |
|
133
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
58 #include <stdlib.h> |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
59 #include <string.h> // for memcpy |
|
747
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
60 #include <math.h> |
| 38 | 61 #include "stm32f4xx_hal.h" |
| 62 #include "stdio.h" | |
| 63 #include "ostc.h" | |
| 64 #include "settings.h" | |
| 65 #include "data_central.h" | |
| 66 #include "data_exchange_main.h" | |
| 67 #include "base.h" | |
| 68 #include "decom.h" | |
| 69 #include "calc_crush.h" /* for vpm_init */ | |
| 70 #include "simulation.h" | |
| 71 #include "tCCR.h" | |
| 72 #include "timer.h" | |
| 73 #include "buehlmann.h" | |
| 74 #include "externLogbookFlash.h" | |
| 911 | 75 #include "vpm.h" |
| 951 | 76 #include "check_warning.h" |
| 38 | 77 |
| 662 | 78 /* #define TESTBENCH */ |
| 38 | 79 |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
80 /* Exported variables --------------------------------------------------------*/ |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
81 static uint8_t wasPowerOn = 0; |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
82 static confirmbit8_Type requestNecessary = { .uw = 0 }; |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
83 static uint8_t wasUpdateNotPowerOn = 0; |
| 38 | 84 |
| 85 /* Private variables with external access ------------------------------------*/ | |
| 86 | |
| 87 /* Private variables ---------------------------------------------------------*/ | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
88 static uint8_t told_reset_logik_alles_ok = 0; |
| 559 | 89 static hw_Info_t hw_Info; |
| 38 | 90 |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
91 static SDataReceiveFromMaster dataOut; |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
92 static SDataExchangeSlaveToMaster dataIn; |
| 38 | 93 |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
94 static uint8_t data_old__lost_connection_to_slave_counter_temp = 0; |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
95 static uint8_t data_old__lost_connection_to_slave_counter_retry = 0; |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
96 static uint32_t data_old__lost_connection_to_slave_counter_total = 0; |
| 38 | 97 |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
98 static uint8_t DeviceDataUpdated = 0; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
99 |
| 662 | 100 static uint16_t externalInterface_Cmd = 0; |
| 101 | |
| 38 | 102 /* Private types -------------------------------------------------------------*/ |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
103 #define UNKNOWN_TIME_HOURS 1 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
104 #define UNKNOWN_TIME_MINUTES 0 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
105 #define UNKNOWN_TIME_SECOND 0 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
106 #define UNKNOWN_DATE_DAY 1 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
107 #define UNKNOWN_DATE_MONTH 1 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
108 #define UNKNOWN_DATE_YEAR 16 |
| 38 | 109 |
|
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
110 |
| 38 | 111 /* Private function prototypes -----------------------------------------------*/ |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
112 static uint8_t DataEX_check_header_and_footer_ok(void); |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
113 static uint8_t DataEX_check_header_and_footer_shifted(void); |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
114 static uint8_t DataEX_check_header_and_footer_devicedata(void); |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
115 static void DataEX_check_DeviceData(void); |
| 38 | 116 |
| 117 /* Exported functions --------------------------------------------------------*/ | |
| 118 uint8_t DataEX_was_power_on(void) | |
| 119 { | |
| 120 return wasPowerOn; | |
| 121 } | |
| 122 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
123 static uint8_t count_DataEX_Error_Handler = 0; |
|
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
124 static uint8_t last_error_DataEX_Error_Handler = 0; |
| 38 | 125 |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
126 static void DataEX_Error_Handler(uint8_t answer) |
| 38 | 127 { |
| 128 count_DataEX_Error_Handler++; | |
| 129 last_error_DataEX_Error_Handler = answer; | |
|
133
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
130 |
|
156
1fbdb45db701
Removed special indicator for DMA transfer error
Ideenmodellierer
parents:
154
diff
changeset
|
131 /* A wrong footer indicates a communication interrupt. State machine is waiting for new data which is not received because no new transmission is triggered */ |
|
133
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
132 /* ==> Abort data exchange to enable a new RX / TX cycle */ |
|
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
133 if(answer == HAL_BUSY) |
|
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
134 { |
|
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
135 HAL_SPI_Abort_IT(&cpu2DmaSpi); |
|
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
136 } |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
137 |
| 38 | 138 return; |
| 139 } | |
| 140 | |
| 141 | |
| 142 uint32_t DataEX_lost_connection_count(void) | |
| 143 { | |
| 144 return data_old__lost_connection_to_slave_counter_total; | |
| 145 } | |
| 146 | |
| 147 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
148 SDataReceiveFromMaster *dataOutGetPointer(void) |
| 38 | 149 { |
| 150 return &dataOut; | |
| 151 } | |
| 152 | |
| 153 void DataEX_init(void) | |
| 154 { | |
| 155 SDiveState * pStateReal = stateRealGetPointerWrite(); | |
| 99 | 156 pStateReal->data_old__lost_connection_to_slave = 0; //initial value |
| 38 | 157 data_old__lost_connection_to_slave_counter_temp = 0; |
| 158 data_old__lost_connection_to_slave_counter_total = 0; | |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
159 DeviceDataUpdated = 0; |
| 38 | 160 |
| 161 memset((void *)&dataOut, 0, sizeof(SDataReceiveFromMaster)); | |
| 162 | |
| 163 dataOut.header.checkCode[0] = 0xBB; | |
| 208 | 164 dataOut.header.checkCode[1] = SPI_RX_STATE_OK; |
| 165 dataOut.header.checkCode[2] = SPI_RX_STATE_OK; | |
| 38 | 166 dataOut.header.checkCode[3] = 0xBB; |
| 167 | |
| 168 dataOut.footer.checkCode[0] = 0xF4; | |
| 169 dataOut.footer.checkCode[1] = 0xF3; | |
| 170 dataOut.footer.checkCode[2] = 0xF2; | |
| 171 dataOut.footer.checkCode[3] = 0xF1; | |
| 172 } | |
| 173 | |
| 174 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
175 static void DataEx_call_helper_requests(void) |
| 38 | 176 { |
| 177 static uint8_t setDateWasSend = 0; | |
| 178 static uint8_t setTimeWasSend = 0; | |
| 179 static uint8_t calibrateCompassWasSend = 0; | |
| 180 static uint8_t setButtonSensitivityWasSend = 0; | |
| 181 static uint8_t clearDecoWasSend = 0; | |
| 182 static uint8_t getDeviceDataWasSend = 0; | |
| 183 static uint8_t setAccidentFlagWasSend = 0; | |
| 184 static uint8_t setEndDiveWasSend = 0; | |
| 185 | |
| 186 if(getDeviceDataWasSend) | |
| 187 { | |
| 188 dataOut.getDeviceDataNow = 0; | |
| 189 } | |
| 190 getDeviceDataWasSend = 0; | |
| 191 if(dataOut.getDeviceDataNow) | |
| 192 { | |
| 193 getDeviceDataWasSend = 1; | |
| 662 | 194 requestNecessary.ub.devicedata = 1; |
| 38 | 195 } |
| 196 | |
| 197 if(setEndDiveWasSend) | |
| 198 { | |
| 199 dataOut.setEndDive = 0; | |
| 200 //requestNecessary.ub.XXX = 1; not implemented and no space here | |
| 201 } | |
| 202 setEndDiveWasSend = 0; | |
| 203 if(dataOut.setEndDive) | |
| 204 { | |
| 205 setEndDiveWasSend = 1; | |
| 206 } | |
| 207 | |
| 208 if(setAccidentFlagWasSend) | |
| 209 { | |
| 210 dataOut.setAccidentFlag = 0; | |
| 211 } | |
| 212 setAccidentFlagWasSend = 0; | |
| 213 if(dataOut.setAccidentFlag) | |
| 214 { | |
| 215 setAccidentFlagWasSend = 1; | |
| 662 | 216 requestNecessary.ub.accident = 1; |
| 38 | 217 } |
| 218 | |
| 219 if(setDateWasSend) | |
| 220 { | |
| 221 dataOut.setDateNow = 0; | |
| 222 } | |
| 223 setDateWasSend = 0; | |
| 224 if(dataOut.setDateNow) | |
| 225 { | |
| 226 setDateWasSend = 1; | |
| 662 | 227 requestNecessary.ub.date = 1; |
| 38 | 228 } |
| 229 | |
| 230 if(setTimeWasSend) | |
| 231 { | |
| 232 dataOut.setTimeNow = 0; | |
| 233 } | |
| 234 setTimeWasSend = 0; | |
| 235 if(dataOut.setTimeNow) | |
| 236 { | |
| 237 setTimeWasSend = 1; | |
| 662 | 238 requestNecessary.ub.time = 1; |
| 38 | 239 } |
| 240 | |
| 241 if(calibrateCompassWasSend) | |
| 242 { | |
| 243 dataOut.calibrateCompassNow = 0; | |
| 244 } | |
| 245 calibrateCompassWasSend = 0; | |
| 246 if(dataOut.calibrateCompassNow) | |
| 247 { | |
| 248 calibrateCompassWasSend = 1; | |
| 249 } | |
| 250 | |
| 251 if(clearDecoWasSend) | |
| 252 { | |
| 253 dataOut.clearDecoNow = 0; | |
| 662 | 254 requestNecessary.ub.compass = 1; |
| 38 | 255 } |
| 256 if(dataOut.clearDecoNow) | |
| 257 { | |
| 258 clearDecoWasSend = 1; | |
| 662 | 259 requestNecessary.ub.clearDeco = 1; |
| 38 | 260 } |
| 261 | |
| 262 if(setButtonSensitivityWasSend) | |
| 263 { | |
| 264 dataOut.setButtonSensitivityNow = 0; | |
| 265 } | |
| 266 setButtonSensitivityWasSend = 0; | |
| 267 if(dataOut.setButtonSensitivityNow) | |
| 268 { | |
| 269 setButtonSensitivityWasSend = 1; | |
| 662 | 270 requestNecessary.ub.button = 1; |
| 38 | 271 } |
| 272 } | |
| 273 | |
| 274 | |
| 275 uint8_t DataEX_call(void) | |
| 276 { | |
| 208 | 277 static uint32_t RTEOfflineCnt = 0; |
| 278 static uint8_t SusppressCom = 0; | |
| 279 | |
| 38 | 280 uint8_t SPI_DMA_answer = 0; |
| 141 | 281 |
| 208 | 282 if(SusppressCom) |
| 38 | 283 { |
| 208 | 284 SusppressCom--; |
| 38 | 285 } |
| 149 | 286 else |
| 287 { | |
|
763
aa6006975e76
increase HAL_Delay to 10ms for cold-start-button reset
heinrichsweikamp
parents:
747
diff
changeset
|
288 if(data_old__lost_connection_to_slave_counter_temp >= 2) /* error reaction is triggered whenever communication could not be reestablished within two cycles */ |
| 208 | 289 { |
| 290 data_old__lost_connection_to_slave_counter_temp = 0; | |
| 291 if(DataEX_check_header_and_footer_shifted()) | |
| 292 { | |
| 293 if(RTEOfflineCnt > 1) /* RTE restarted communication after a longer silent time => restart error handling to recover */ | |
| 294 { | |
| 295 data_old__lost_connection_to_slave_counter_retry = 0; | |
| 296 RTEOfflineCnt = 0; | |
| 297 } | |
| 38 | 298 |
| 208 | 299 /* We received shifted data. Step one. Reset DMA to see if the problem is located at main */ |
| 300 if (data_old__lost_connection_to_slave_counter_retry == 0) | |
| 301 { | |
| 302 HAL_SPI_Abort_IT(&cpu2DmaSpi); | |
| 303 } | |
|
763
aa6006975e76
increase HAL_Delay to 10ms for cold-start-button reset
heinrichsweikamp
parents:
747
diff
changeset
|
304 /* reset of own DMA does not work ==> request reset of slave dma by indicating shifted reception */ |
| 208 | 305 if (data_old__lost_connection_to_slave_counter_retry == 1) |
| 306 { | |
| 307 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_SHIFTED; | |
| 308 } | |
| 309 | |
| 310 /* stop communication with RTE to trigger RTE timeout reaction */ | |
| 311 if (data_old__lost_connection_to_slave_counter_retry == 2) | |
| 312 { | |
| 313 SusppressCom = 3; | |
| 314 } | |
| 38 | 315 |
| 208 | 316 data_old__lost_connection_to_slave_counter_retry++; |
| 317 } | |
| 318 else | |
| 319 { | |
| 320 RTEOfflineCnt++; /* based on footer status the RTE does not seem to provide data in time */ | |
| 321 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_OFFLINE; | |
| 322 } | |
| 323 } | |
| 324 #if USE_OLD_SYNC_METHOD | |
| 325 /* one cycle with NotChipSelect true to clear slave spi buffer */ | |
| 326 else | |
| 327 { | |
| 328 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_RESET); | |
| 329 } | |
| 330 #endif | |
|
133
acc98f5bd8c4
Intoduced transfer abort function for data exchange recovery
Ideenmodellierer
parents:
115
diff
changeset
|
331 |
| 208 | 332 DataEx_call_helper_requests(); |
| 333 | |
| 334 //HAL_GPIO_WritePin(OSCILLOSCOPE2_GPIO_PORT,OSCILLOSCOPE2_PIN,GPIO_PIN_RESET); /* only for testing with Oscilloscope */ | |
| 335 | |
| 336 if(SusppressCom == 0) | |
| 337 { | |
| 338 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_RESET); | |
| 339 | |
| 340 SPI_DMA_answer = HAL_SPI_TransmitReceive_DMA(&cpu2DmaSpi, (uint8_t *)&dataOut, (uint8_t *)&dataIn, EXCHANGE_BUFFERSIZE); | |
| 341 if(SPI_DMA_answer != HAL_OK) | |
| 342 { | |
| 343 DataEX_Error_Handler(SPI_DMA_answer); | |
| 344 } | |
| 345 } | |
| 346 } | |
| 104 | 347 // HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET); |
| 38 | 348 //HAL_Delay(3); |
| 349 //HAL_GPIO_WritePin(OSCILLOSCOPE2_GPIO_PORT,OSCILLOSCOPE2_PIN,GPIO_PIN_SET); /* only for testing with Oscilloscope */ | |
| 350 | |
| 351 return 1; | |
| 352 } | |
| 353 | |
| 82 | 354 |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
355 static uint32_t SPI_CALLBACKS; |
| 82 | 356 uint32_t get_num_SPI_CALLBACKS(void){ |
| 357 return SPI_CALLBACKS; | |
| 358 } | |
| 359 | |
| 360 SDataExchangeSlaveToMaster* get_dataInPointer(void){ | |
| 361 return &dataIn; | |
| 362 } | |
| 363 | |
| 364 void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) | |
| 365 { | |
| 366 if(hspi == &cpu2DmaSpi) | |
| 367 { | |
| 154 | 368 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET); |
| 82 | 369 SPI_CALLBACKS+=1; |
| 370 } | |
| 371 } | |
| 372 | |
| 373 | |
| 38 | 374 void DateEx_copy_to_dataOut(void) |
| 375 { | |
| 376 const SDiveState * pStateReal = stateRealGetPointer(); | |
| 377 SSettings *settings = settingsGetPointer(); | |
| 378 | |
|
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
379 uint8_t SensorActive[SENSOR_END]; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
380 uint8_t index = 0; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
381 |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
382 |
| 38 | 383 if(get_globalState() == StStop) |
| 384 dataOut.mode = MODE_SHUTDOWN; | |
| 385 else | |
| 386 dataOut.mode = 0; | |
| 387 | |
| 388 dataOut.diveModeInfo = pStateReal->diveSettings.diveMode; // hw 170215 | |
| 389 | |
| 390 memcpy(&dataOut.data.DeviceData, stateDeviceGetPointer(), sizeof(SDevice)); | |
| 391 | |
| 392 dataOut.data.VPMconservatism = pStateReal->diveSettings.vpm_conservatism; | |
| 393 dataOut.data.actualGas = pStateReal->lifeData.actualGas; | |
| 394 dataOut.data.ambient_pressure_mbar_ceiling = (pStateReal->decolistBuehlmann.output_ceiling_meter * 100) + (pStateReal->lifeData.pressure_surface_bar * 1000); | |
| 395 dataOut.data.divetimeToCreateLogbook = settings->divetimeToCreateLogbook; | |
| 396 dataOut.data.timeoutDiveReachedZeroDepth = settings->timeoutDiveReachedZeroDepth; | |
| 397 | |
| 398 dataOut.data.offsetPressureSensor_mbar = settings->offsetPressure_mbar; | |
| 399 dataOut.data.offsetTemperatureSensor_centiDegree = settings->offsetTemperature_centigrad; | |
| 400 | |
| 691 | 401 |
| 796 | 402 memcpy(dataOut.data.externalInterface_SensorMap, settings->ext_sensor_map, EXT_INTERFACE_SENSOR_CNT); |
| 691 | 403 |
|
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
404 memset(SensorActive, 0, sizeof(SensorActive)); |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
405 for (index = 0; index < EXT_INTERFACE_SENSOR_CNT; index++) |
| 691 | 406 { |
|
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
407 switch(settings->ext_sensor_map[index]) |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
408 { |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
409 case SENSOR_ANALOG: SensorActive[SENSOR_ANALOG] = 1; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
410 break; |
| 796 | 411 case SENSOR_DIGO2M: SensorActive[SENSOR_DIGO2] = 1; |
|
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
412 break; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
413 case SENSOR_CO2: SensorActive[SENSOR_CO2] = 1; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
414 break; |
| 988 | 415 #if defined ENABLE_GNSS_INTERNAL || defined ENABLE_GNSS_EXTERN |
| 920 | 416 case SENSOR_GNSS: SensorActive[SENSOR_GNSS] = 1; |
| 417 break; | |
| 418 #endif | |
|
747
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
419 #ifdef ENABLE_SENTINEL_MODE |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
420 case SENSOR_SENTINEL: SensorActive[SENSOR_SENTINEL] = 1; |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
421 break; |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
422 #endif |
|
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
423 default: |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
424 break; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
425 } |
| 691 | 426 } |
| 427 | |
|
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
428 if(SensorActive[SENSOR_ANALOG]) |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
429 { |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
430 externalInterface_Cmd |= EXT_INTERFACE_ADC_ON | EXT_INTERFACE_33V_ON; |
|
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
716
diff
changeset
|
431 } |
| 920 | 432 if((SensorActive[SENSOR_DIGO2]) || (SensorActive[SENSOR_CO2])|| (SensorActive[SENSOR_GNSS])) |
|
702
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
433 { |
| 839 | 434 externalInterface_Cmd |= EXT_INTERFACE_33V_ON; |
|
702
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
435 } |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
436 |
| 691 | 437 #ifdef ENABLE_SENTINEL_MODE |
|
747
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
438 if(SensorActive[SENSOR_SENTINEL]) |
| 691 | 439 { |
|
842
c3dd461ca3f9
Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents:
839
diff
changeset
|
440 externalInterface_Cmd |= EXT_INTERFACE_33V_ON; |
| 691 | 441 externalInterface_Cmd &= (~EXT_INTERFACE_ADC_ON); |
| 442 } | |
| 443 #endif | |
| 444 | |
| 988 | 445 if((isNewDisplay()) && getBuzzerActivationState()) |
| 951 | 446 { |
| 447 externalInterface_Cmd |= EXT_INTERFACE_BUZZER_ON; | |
| 448 } | |
| 449 | |
| 662 | 450 dataOut.data.externalInterface_Cmd = externalInterface_Cmd; |
| 451 externalInterface_Cmd = 0; | |
| 452 | |
| 38 | 453 if((hardwareDataGetPointer()->primarySerial <= 32) || (((hardwareDataGetPointer()->primarySerial == 72) && (hardwareDataGetPointer()->secondarySerial == 15)))) |
| 454 { | |
| 455 dataOut.revisionHardware = 0x00; | |
| 456 dataOut.revisionCRCx0x7A = 0x7A; | |
| 457 } | |
| 458 else | |
| 459 if(hardwareDataGetPointer()->primarySerial < 0xFFFF) | |
| 460 { | |
| 461 dataOut.revisionHardware = hardwareDataGetPointer()->revision8bit; | |
| 462 dataOut.revisionCRCx0x7A = hardwareDataGetPointer()->revision8bit ^ 0x7A; | |
| 463 } | |
| 464 else | |
| 465 { | |
| 466 dataOut.revisionHardware = 0xFF; | |
| 467 dataOut.revisionCRCx0x7A = 0xFF; | |
| 468 } | |
| 988 | 469 if(isNewDisplay()) |
| 470 { | |
| 471 dataOut.displayVersion = 1; | |
| 472 } | |
| 1078 | 473 #ifdef ENABLE_HUD_SUPPORT |
| 474 memcpy (dataOut.data.externalInterface_HUD_Update, pStateReal->lifeData.HUD_led_sequence, EXT_INTERFACE_HUD_LED_MAX); | |
| 475 dataOut.data.externalInterface_HUD_Brightness = pStateReal->lifeData.HUD_led_brightness; | |
| 476 #endif | |
| 38 | 477 if(DataEX_check_header_and_footer_ok() && !told_reset_logik_alles_ok) |
| 478 { | |
| 479 MX_tell_reset_logik_alles_ok(); | |
| 480 told_reset_logik_alles_ok = 1; | |
| 481 } | |
| 482 | |
| 483 if(DataEX_check_header_and_footer_ok() && (dataIn.power_on_reset == 1)) | |
| 484 { | |
| 485 if(!wasUpdateNotPowerOn) | |
| 486 wasPowerOn = 1; | |
| 487 | |
| 488 settingsHelperButtonSens_keepPercentageValues(settingsGetPointerStandard()->ButtonResponsiveness[3], settings->ButtonResponsiveness); | |
| 489 setButtonResponsiveness(settings->ButtonResponsiveness); | |
|
957
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
490 DataEX_setExtInterface_Cmd(EXT_INTERFACE_COPY_SENSORMAP, 0); |
| 38 | 491 } |
| 492 } | |
| 493 | |
| 494 | |
| 495 void DataEX_copy_to_deco(void) | |
| 496 { | |
| 497 if(decoLock == DECO_CALC_running) | |
| 498 return; | |
| 499 | |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
500 if(decoLock == DECO_CALC_init_as_is_start_of_dive) |
|
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
501 { |
| 907 | 502 vpm_table_init(); |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
503 vpm_init(&stateUsedWrite->vpm, stateUsedWrite->diveSettings.vpm_conservatism, 0, 0); |
| 38 | 504 buehlmann_init(); |
| 505 timer_init(); | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
506 resetEvents(stateUsedWrite); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
507 stateUsedWrite->diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero = 0; |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
508 } |
| 38 | 509 |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
510 if(decoLock == DECO_CALC_FINSHED_Buehlmann) |
| 38 | 511 { |
| 512 | |
| 513 } | |
| 514 switch(decoLock) | |
| 515 { | |
| 516 | |
| 517 //Deco_calculation finished | |
| 518 case DECO_CALC_FINSHED_vpm: | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
519 memcpy(&stateUsedWrite->decolistVPM,&stateDeco.decolistVPM,sizeof(SDecoinfo)); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
520 stateUsedWrite->decolistVPM.tickstamp = HAL_GetTick(); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
521 stateUsedWrite->vpm.deco_zone_reached = stateDeco.vpm.deco_zone_reached; |
| 38 | 522 for(int i = 0; i< 16; i++) |
| 523 { | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
524 stateUsedWrite->vpm.adjusted_critical_radius_he[i] = stateDeco.vpm.adjusted_critical_radius_he[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
525 stateUsedWrite->vpm.adjusted_critical_radius_n2[i] = stateDeco.vpm.adjusted_critical_radius_n2[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
526 stateUsedWrite->vpm.adjusted_crushing_pressure_he[i] = stateDeco.vpm.adjusted_crushing_pressure_he[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
527 stateUsedWrite->vpm.adjusted_crushing_pressure_n2[i] = stateDeco.vpm.adjusted_crushing_pressure_n2[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
528 stateUsedWrite->vpm.initial_allowable_gradient_he[i] = stateDeco.vpm.initial_allowable_gradient_he[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
529 stateUsedWrite->vpm.initial_allowable_gradient_n2[i] = stateDeco.vpm.initial_allowable_gradient_n2[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
530 stateUsedWrite->vpm.max_actual_gradient[i] = stateDeco.vpm.max_actual_gradient[i]; |
| 38 | 531 } |
| 532 break; | |
| 533 case DECO_CALC_FINSHED_Buehlmann: | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
534 memcpy(&stateUsedWrite->decolistBuehlmann,&stateDeco.decolistBuehlmann,sizeof(SDecoinfo)); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
535 stateUsedWrite->decolistBuehlmann.tickstamp = HAL_GetTick(); |
| 38 | 536 //Copy Data to be stored if regular Buehlmann, not FutureBuehlmann |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
537 stateUsedWrite->diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero = stateDeco.diveSettings.internal__pressure_first_stop_ambient_bar_as_upper_limit_for_gf_low_otherwise_zero; |
| 38 | 538 break; |
| 539 case DECO_CALC_FINSHED_FutureBuehlmann: | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
540 memcpy(&stateUsedWrite->decolistFutureBuehlmann,&stateDeco.decolistFutureBuehlmann,sizeof(SDecoinfo)); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
541 stateUsedWrite->decolistFutureBuehlmann.tickstamp = HAL_GetTick(); |
| 38 | 542 break; |
| 543 case DECO_CALC_FINSHED_Futurevpm: | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
544 memcpy(&stateUsedWrite->decolistFutureVPM,&stateDeco.decolistFutureVPM,sizeof(SDecoinfo)); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
545 stateUsedWrite->decolistFutureVPM.tickstamp = HAL_GetTick(); |
| 38 | 546 break; |
| 547 } | |
| 548 | |
| 549 //Copy Inputdata from stateReal to stateDeco | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
550 memcpy(&stateDeco.lifeData,&stateUsedWrite->lifeData,sizeof(SLifeData)); |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
551 memcpy(&stateDeco.diveSettings,&stateUsedWrite->diveSettings,sizeof(SDiveSettings)); |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
552 memcpy(&stateDeco.decolistVPM,&stateUsedWrite->decolistVPM,sizeof(SDecoinfo)); |
| 38 | 553 |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
554 stateDeco.vpm.deco_zone_reached = stateUsedWrite->vpm.deco_zone_reached; |
| 38 | 555 // memcpy(&stateDeco.vpm,&pStateUsed->vpm,sizeof(SVpm)); |
| 556 for(int i = 0; i< 16; i++) | |
| 557 { | |
|
288
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
558 stateDeco.vpm.max_crushing_pressure_he[i] = stateUsedWrite->vpm.max_crushing_pressure_he[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
559 stateDeco.vpm.max_crushing_pressure_n2[i] = stateUsedWrite->vpm.max_crushing_pressure_n2[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
560 stateDeco.vpm.adjusted_critical_radius_he[i] = stateUsedWrite->vpm.adjusted_critical_radius_he[i]; |
|
ba229a012ac7
cleanup: no useless checks for simulator state
Jan Mulder <jlmulder@xs4all.nl>
parents:
278
diff
changeset
|
561 stateDeco.vpm.adjusted_critical_radius_n2[i] = stateUsedWrite->vpm.adjusted_critical_radius_n2[i]; |
| 38 | 562 } |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
563 decoLock = DECO_CALC_ready; |
| 38 | 564 } |
| 565 | |
| 566 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
567 static void DataEX_helper_copy_deviceData(SDeviceLine *lineWrite, const SDeviceLine *lineRead) |
| 38 | 568 { |
| 569 lineWrite->date_rtc_dr = lineRead->date_rtc_dr; | |
| 570 lineWrite->time_rtc_tr = lineRead->time_rtc_tr; | |
| 571 lineWrite->value_int32 = lineRead->value_int32; | |
| 572 } | |
| 573 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
574 static void DataEX_helper_SetTime(RTC_TimeTypeDef inStimestructure, uint32_t *outTimetmpreg) |
| 38 | 575 { |
| 576 inStimestructure.TimeFormat = RTC_HOURFORMAT_24; | |
| 577 | |
| 578 *outTimetmpreg = (uint32_t)(((uint32_t)RTC_ByteToBcd2(inStimestructure.Hours) << 16U) | \ | |
| 579 ((uint32_t)RTC_ByteToBcd2(inStimestructure.Minutes) << 8U) | \ | |
| 580 ((uint32_t)RTC_ByteToBcd2(inStimestructure.Seconds)) | \ | |
| 581 (((uint32_t)inStimestructure.TimeFormat) << 16U)); | |
| 582 } | |
| 583 | |
| 584 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
585 static void DataEX_helper_SetDate(RTC_DateTypeDef inSdatestructure, uint32_t *outDatetmpreg) |
| 38 | 586 { |
| 587 *outDatetmpreg = (((uint32_t)RTC_ByteToBcd2(inSdatestructure.Year) << 16U) | \ | |
| 588 ((uint32_t)RTC_ByteToBcd2(inSdatestructure.Month) << 8U) | \ | |
| 589 ((uint32_t)RTC_ByteToBcd2(inSdatestructure.Date)) | \ | |
| 590 ((uint32_t)inSdatestructure.WeekDay << 13U)); | |
| 591 } | |
| 592 | |
| 593 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
594 static void DataEX_helper_set_Unknown_Date_deviceData(SDeviceLine *lineWrite) |
| 38 | 595 { |
| 596 RTC_DateTypeDef sdatestructure; | |
| 597 RTC_TimeTypeDef stimestructure; | |
| 598 | |
| 951 | 599 const SFirmwareData *pFirmwareInfo; |
| 600 pFirmwareInfo = firmwareDataGetPointer(); | |
| 601 | |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
602 stimestructure.Hours = UNKNOWN_TIME_HOURS; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
603 stimestructure.Minutes = UNKNOWN_TIME_MINUTES; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
604 stimestructure.Seconds = UNKNOWN_TIME_SECOND; |
| 38 | 605 |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
606 sdatestructure.Date = UNKNOWN_DATE_DAY; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
607 sdatestructure.Month = UNKNOWN_DATE_MONTH; |
| 951 | 608 sdatestructure.Year = pFirmwareInfo->release_year; |
| 38 | 609 setWeekday(&sdatestructure); |
| 610 | |
| 611 DataEX_helper_SetTime(stimestructure, &lineWrite->time_rtc_tr); | |
| 612 DataEX_helper_SetDate(sdatestructure, &lineWrite->date_rtc_dr); | |
| 613 } | |
| 614 | |
| 615 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
616 static uint8_t DataEX_helper_Check_And_Correct_Date_deviceData(SDeviceLine *lineWrite) |
| 38 | 617 { |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
618 uint8_t retval = 0; |
| 38 | 619 RTC_DateTypeDef sdatestructure; |
| 620 RTC_TimeTypeDef stimestructure; | |
| 621 | |
| 622 // from lineWrite to structure | |
| 623 translateDate(lineWrite->date_rtc_dr, &sdatestructure); | |
| 624 translateTime(lineWrite->time_rtc_tr, &stimestructure); | |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
625 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
626 /* Check if date is out of range */ |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
627 if(!( (sdatestructure.Year >= 15) |
| 38 | 628 && (sdatestructure.Year <= 30) |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
629 && (sdatestructure.Month <= 12))) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
630 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
631 DataEX_helper_set_Unknown_Date_deviceData(lineWrite); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
632 retval = 1; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
633 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
634 return retval; |
| 38 | 635 } |
| 636 | |
| 637 | |
|
1070
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
638 void DataEX_helper_Get_ID_Of_O2_Diluent(uint8_t* pIdO2, uint8_t* pIdDiluent) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
639 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
640 const SDiveState *pStateReal = stateRealGetPointer(); |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
641 uint8_t index = 0; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
642 |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
643 *pIdO2 = 0xff; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
644 *pIdDiluent = 0xff; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
645 |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
646 for (index = NUM_GASES; index <= NUM_GASES*2; index++) /* search for o2 and start gas in diluent table */ |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
647 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
648 if(pStateReal->diveSettings.gas[index].note.ub.first) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
649 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
650 *pIdDiluent = index; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
651 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
652 if(pStateReal->diveSettings.gas[index].oxygen_percentage >= 99) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
653 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
654 *pIdO2 = index; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
655 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
656 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
657 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
658 |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
659 static uint8_t DataEX_helper_Check_And_Correct_Value_deviceData(SDeviceLine *lineWrite, int32_t from, int32_t to, uint8_t defaulttofrom) |
| 38 | 660 { |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
661 uint8_t retval = 0; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
662 RTC_DateTypeDef sdatestructure; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
663 |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
664 /* Is value out of valid range? */ |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
665 if(!(lineWrite->value_int32 >= from && lineWrite->value_int32 <= to)) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
666 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
667 if(defaulttofrom) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
668 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
669 lineWrite->value_int32 = from; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
670 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
671 else |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
672 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
673 lineWrite->value_int32 = to; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
674 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
675 DataEX_helper_set_Unknown_Date_deviceData(lineWrite); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
676 } |
| 38 | 677 |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
678 /* This is just a repair function to restore metric if a corruption occurred in an older fw version */ |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
679 if(((lineWrite->value_int32 == to) && defaulttofrom ) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
680 || ((lineWrite->value_int32 == from) && !defaulttofrom )) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
681 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
682 translateDate(lineWrite->date_rtc_dr, &sdatestructure); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
683 if(sdatestructure.Year == UNKNOWN_DATE_YEAR) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
684 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
685 if(defaulttofrom) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
686 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
687 lineWrite->value_int32 = from; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
688 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
689 else |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
690 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
691 lineWrite->value_int32 = to; |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
692 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
693 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
694 } |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
695 return retval; |
| 38 | 696 } |
| 697 | |
| 698 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
699 static void DataEX_check_DeviceData(void) |
| 38 | 700 { |
| 701 SDevice *DeviceData = stateDeviceGetPointerWrite(); | |
| 702 | |
| 703 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->batteryChargeCompleteCycles); | |
| 704 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->batteryChargeCycles); | |
| 705 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->depthMaximum); | |
| 706 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->diveCycles); | |
| 707 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->hoursOfOperation); | |
| 708 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->temperatureMaximum); | |
| 709 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->temperatureMinimum); | |
| 710 DataEX_helper_Check_And_Correct_Date_deviceData(&DeviceData->voltageMinimum); | |
| 711 | |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
712 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->batteryChargeCompleteCycles, 0, 10000,1); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
713 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->batteryChargeCycles, 0, 20000,1); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
714 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->depthMaximum, 0, (500*100)+1000,1); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
715 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->diveCycles, 0, 20000,1); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
716 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->hoursOfOperation, 0, 1000000,1); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
717 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->temperatureMaximum, -30*100, 150*100,1); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
718 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->temperatureMinimum, -30*100, 150*100,0); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
719 DataEX_helper_Check_And_Correct_Value_deviceData(&DeviceData->voltageMinimum, 2*1000, 6*1000,0); |
| 38 | 720 } |
| 721 | |
| 722 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
723 static void DataEX_merge_DeviceData_and_store(void) |
| 38 | 724 { |
| 725 uint16_t dataLengthRead; | |
| 726 SDevice DeviceDataFlash; | |
| 727 SDevice *DeviceData = stateDeviceGetPointerWrite(); | |
| 728 | |
| 729 dataLengthRead = ext_flash_read_devicedata((uint8_t *)&DeviceDataFlash,sizeof(SDevice)); | |
| 730 | |
| 731 if(dataLengthRead == 0) | |
| 732 { | |
|
421
3f7d80f37bfc
Enable sequentionel writing of device data:
ideenmodellierer
parents:
407
diff
changeset
|
733 ext_flash_write_devicedata(false); |
| 38 | 734 return; |
| 735 } | |
| 736 | |
| 737 /* max values */ | |
| 738 if(DeviceData->batteryChargeCompleteCycles.value_int32 < DeviceDataFlash.batteryChargeCompleteCycles.value_int32) | |
| 739 { | |
| 740 DataEX_helper_copy_deviceData(&DeviceData->batteryChargeCompleteCycles, &DeviceDataFlash.batteryChargeCompleteCycles); | |
| 741 } | |
| 742 if(DeviceData->batteryChargeCycles.value_int32 < DeviceDataFlash.batteryChargeCycles.value_int32) | |
| 743 { | |
| 744 DataEX_helper_copy_deviceData(&DeviceData->batteryChargeCycles, &DeviceDataFlash.batteryChargeCycles); | |
| 745 } | |
| 746 if(DeviceData->temperatureMaximum.value_int32 < DeviceDataFlash.temperatureMaximum.value_int32) | |
| 747 { | |
| 748 DataEX_helper_copy_deviceData(&DeviceData->temperatureMaximum, &DeviceDataFlash.temperatureMaximum); | |
| 749 } | |
| 750 if(DeviceData->depthMaximum.value_int32 < DeviceDataFlash.depthMaximum.value_int32) | |
| 751 { | |
| 752 DataEX_helper_copy_deviceData(&DeviceData->depthMaximum, &DeviceDataFlash.depthMaximum); | |
| 753 } | |
| 754 if(DeviceData->diveCycles.value_int32 < DeviceDataFlash.diveCycles.value_int32) | |
| 755 { | |
| 756 DataEX_helper_copy_deviceData(&DeviceData->diveCycles, &DeviceDataFlash.diveCycles); | |
| 757 } | |
|
406
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
758 if(DeviceData->hoursOfOperation.value_int32 < DeviceDataFlash.hoursOfOperation.value_int32) |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
759 { |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
760 DataEX_helper_copy_deviceData(&DeviceData->hoursOfOperation, &DeviceDataFlash.hoursOfOperation); |
|
439874690f85
Bugfix Min max values for device data checks:
ideenmodellierer
parents:
342
diff
changeset
|
761 } |
| 38 | 762 |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
763 |
| 38 | 764 /* min values */ |
| 765 if(DeviceData->temperatureMinimum.value_int32 > DeviceDataFlash.temperatureMinimum.value_int32) | |
| 766 { | |
| 767 DataEX_helper_copy_deviceData(&DeviceData->temperatureMinimum, &DeviceDataFlash.temperatureMinimum); | |
| 768 } | |
| 769 if(DeviceData->voltageMinimum.value_int32 > DeviceDataFlash.voltageMinimum.value_int32) | |
| 770 { | |
| 771 DataEX_helper_copy_deviceData(&DeviceData->voltageMinimum, &DeviceDataFlash.voltageMinimum); | |
| 772 } | |
| 773 | |
| 774 DataEX_check_DeviceData (); | |
|
421
3f7d80f37bfc
Enable sequentionel writing of device data:
ideenmodellierer
parents:
407
diff
changeset
|
775 ext_flash_write_devicedata(false); |
| 38 | 776 } |
| 777 | |
| 778 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
779 static void DataEX_copy_to_DeviceData(void) |
| 38 | 780 { |
| 781 SDataExchangeSlaveToMasterDeviceData * dataInDevice = (SDataExchangeSlaveToMasterDeviceData *)&dataIn; | |
| 782 SDevice * pDeviceState = stateDeviceGetPointerWrite(); | |
| 783 | |
| 784 memcpy(pDeviceState, &dataInDevice->DeviceData[dataInDevice->boolDeviceData], sizeof(SDevice)); | |
| 559 | 785 memcpy(&hw_Info, &dataInDevice->hw_Info, sizeof(dataInDevice->hw_Info)); |
| 786 | |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
787 DeviceDataUpdated = 1; /* indicate new data to be written to flash by background task (at last op hour count will be updated) */ |
| 38 | 788 } |
| 789 | |
| 790 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
791 static void DataEX_copy_to_VpmRepetitiveData(void) |
| 38 | 792 { |
| 793 SDataExchangeSlaveToMasterDeviceData * dataInDevice = (SDataExchangeSlaveToMasterDeviceData *)&dataIn; | |
| 794 SVpmRepetitiveData * pVpmState = stateVpmRepetitiveDataGetPointerWrite(); | |
| 795 | |
| 796 if(dataInDevice->boolVpmRepetitiveDataValid) | |
| 797 { | |
| 798 memcpy(pVpmState, &dataInDevice->VpmRepetitiveData, sizeof(SVpmRepetitiveData)); | |
| 799 pVpmState->is_data_from_RTE_CPU = 1; | |
| 800 } | |
| 801 } | |
| 802 | |
| 803 | |
| 804 void DataEX_control_connection_while_asking_for_sleep(void) | |
| 805 { | |
| 806 if(!DataEX_check_header_and_footer_ok()) | |
| 807 { | |
| 808 if(DataEX_check_header_and_footer_devicedata()) | |
| 809 { | |
| 810 data_old__lost_connection_to_slave_counter_retry = 0; | |
| 811 data_old__lost_connection_to_slave_counter_temp = 0; | |
| 812 stateRealGetPointerWrite()->data_old__lost_connection_to_slave = 0; | |
| 208 | 813 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_OK; |
| 38 | 814 } |
| 815 else | |
| 816 { | |
| 817 stateRealGetPointerWrite()->data_old__lost_connection_to_slave = 1; | |
| 818 data_old__lost_connection_to_slave_counter_temp += 1; | |
| 819 data_old__lost_connection_to_slave_counter_total += 1; | |
| 820 } | |
| 821 } | |
| 822 } | |
| 823 | |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
824 static float getSampleDepth(SDataExchangeSlaveToMaster *d, SDiveState *ds) |
|
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
825 { |
|
342
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
826 float ambient = 0; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
827 float surface = 0; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
828 float depth = 0; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
829 float density = 0; |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
830 |
|
342
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
831 ambient = d->data[d->boolPressureData].pressure_mbar / 1000.0f; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
832 surface = d->data[d->boolPressureData].surface_mbar / 1000.0f; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
833 density = ((float)( 100 + settingsGetPointer()->salinity)) / 100.0f; |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
834 |
|
497
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
835 #ifdef TESTBENCH |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
836 /* do plausibility check (typically only needed at debug hardware) */ |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
837 if(ambient < 0) |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
838 { |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
839 ambient = 1.0; |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
840 } |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
841 if(surface < 0) |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
842 { |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
843 surface = 1.0; |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
844 } |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
845 #endif |
|
342
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
846 ds->lifeData.pressure_ambient_bar = ambient; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
847 ds->lifeData.pressure_surface_bar = surface; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
848 depth = (ambient - surface) / (0.09807f * density); |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
849 ds->lifeData.bool_temp1 = d->data[d->boolPressureData].SPARE1; |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
850 |
|
342
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
851 return depth; |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
852 } |
| 38 | 853 |
|
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
173
diff
changeset
|
854 static float getTemperature(SDataExchangeSlaveToMaster *d) |
|
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
173
diff
changeset
|
855 { |
|
342
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
856 float temp = 0; |
|
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
857 temp = d->data[d->boolPressureData].temperature; |
|
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
173
diff
changeset
|
858 |
|
497
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
859 #ifdef TESTBENCH |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
860 /* do plausibility check (typically only needed at debug hardware */ |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
861 if(temp < -40.0) |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
862 { |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
863 temp = 20.0; |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
864 } |
|
5757edda56b7
Added worst case plausibility check (disabled by compile switch)
Ideenmodellierer
parents:
451
diff
changeset
|
865 #endif |
|
342
ea3fda8eb93e
Removed averaging of pressure and temperatur values
ideenmodellierer
parents:
309
diff
changeset
|
866 return temp; |
|
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
173
diff
changeset
|
867 } |
|
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
173
diff
changeset
|
868 |
| 38 | 869 void DataEX_copy_to_LifeData(_Bool *modeChangeFlag) |
| 870 { | |
| 662 | 871 static uint16_t getDeviceDataAfterStartOfMainCPU = 20; |
| 1058 | 872 static uint16_t lastcounterSecondsShallowDepth = 0; |
| 662 | 873 |
|
1070
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
874 static uint8_t pressureIdO2 = 0xFF; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
875 static uint8_t pressureIdDiluent = 0xFF; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
876 |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
877 SDiveState *pStateReal = stateRealGetPointerWrite(); |
|
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
878 uint8_t idx; |
| 662 | 879 float meter = 0; |
|
1014
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
880 |
|
747
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
881 #ifdef ENABLE_EXTERNAL_PRESSURE |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
882 float CO2Corr = 0.0; |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
883 #endif |
| 662 | 884 |
| 38 | 885 // wireless - �ltere daten aufr�umen |
|
446
f1257a32f2d4
Introduced configuration header for variant managment:
ideenmodellierer
parents:
436
diff
changeset
|
886 #if 0 |
|
51
8f8ea3a32e82
Resolved warnings pointing to possible invalid memory access
Ideenmodellierer
parents:
38
diff
changeset
|
887 for(int i=0;i<(2*NUM_GASES+1);i++) |
| 38 | 888 { |
| 889 if(pStateReal->lifeData.bottle_bar[i]) | |
| 890 { | |
| 891 if((pStateReal->lifeData.bottle_bar_age_MilliSeconds[i] == 0) || (pStateReal->lifeData.bottle_bar_age_MilliSeconds[i] > 60000)) | |
| 892 { | |
| 893 pStateReal->lifeData.bottle_bar_age_MilliSeconds[i] = 0; | |
| 894 pStateReal->lifeData.bottle_bar[i] = 0; | |
| 895 } | |
| 896 else | |
| 897 pStateReal->lifeData.bottle_bar_age_MilliSeconds[i] += 100; | |
| 898 } | |
| 899 } | |
|
446
f1257a32f2d4
Introduced configuration header for variant managment:
ideenmodellierer
parents:
436
diff
changeset
|
900 #else |
|
451
c2e02b87774f
Allocate received bar value to active gas (was static allocated to gas[1])
ideenmodellierer
parents:
446
diff
changeset
|
901 if(stateRealGetPointer()->lifeData.bottle_bar_age_MilliSeconds[stateRealGetPointer()->lifeData.actualGas.GasIdInSettings] < 6000) /* max age after ten minutes */ |
|
446
f1257a32f2d4
Introduced configuration header for variant managment:
ideenmodellierer
parents:
436
diff
changeset
|
902 { |
|
451
c2e02b87774f
Allocate received bar value to active gas (was static allocated to gas[1])
ideenmodellierer
parents:
446
diff
changeset
|
903 stateRealGetPointerWrite()->lifeData.bottle_bar_age_MilliSeconds[stateRealGetPointer()->lifeData.actualGas.GasIdInSettings]++; |
|
446
f1257a32f2d4
Introduced configuration header for variant managment:
ideenmodellierer
parents:
436
diff
changeset
|
904 } |
|
f1257a32f2d4
Introduced configuration header for variant managment:
ideenmodellierer
parents:
436
diff
changeset
|
905 #endif |
| 38 | 906 if(!DataEX_check_header_and_footer_ok()) |
| 907 { | |
| 908 if(DataEX_check_header_and_footer_devicedata()) | |
| 909 { | |
| 910 DataEX_copy_to_DeviceData(); | |
| 911 DataEX_copy_to_VpmRepetitiveData(); | |
| 912 data_old__lost_connection_to_slave_counter_temp = 0; | |
| 913 data_old__lost_connection_to_slave_counter_retry = 0; | |
|
275
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
914 /* Do not yet reset state. Wait till common data has been received in next cycle. Otherwise invalid data may be forwarded for processing */ |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
915 /* pStateReal->data_old__lost_connection_to_slave = 0; */ |
| 208 | 916 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_OK; |
| 38 | 917 } |
| 918 else | |
| 919 { | |
| 920 pStateReal->data_old__lost_connection_to_slave = 1; | |
| 921 data_old__lost_connection_to_slave_counter_temp += 1; | |
| 922 data_old__lost_connection_to_slave_counter_total += 1; | |
| 923 } | |
| 924 return; | |
| 925 } | |
| 141 | 926 else /* RX data OK */ |
| 927 { | |
| 928 data_old__lost_connection_to_slave_counter_temp = 0; | |
| 929 data_old__lost_connection_to_slave_counter_retry = 0; | |
| 930 pStateReal->data_old__lost_connection_to_slave = 0; | |
| 208 | 931 dataOut.header.checkCode[SPI_HEADER_INDEX_RX_STATE] = SPI_RX_STATE_OK; |
| 141 | 932 } |
| 38 | 933 |
| 934 if(getDeviceDataAfterStartOfMainCPU) | |
| 935 { | |
| 936 getDeviceDataAfterStartOfMainCPU--; | |
| 937 if(getDeviceDataAfterStartOfMainCPU == 0) | |
| 938 { | |
| 939 dataOut.getDeviceDataNow = 1; | |
| 141 | 940 getDeviceDataAfterStartOfMainCPU = 10*60*10; /* * 100ms = 60 second => update device data every 10 minutes */ |
| 38 | 941 } |
| 942 } | |
| 943 | |
|
1014
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
944 SSettings *pSettings = settingsGetPointer(); |
| 662 | 945 if((requestNecessary.uw != 0) && (dataIn.confirmRequest.uw != 0)) |
| 38 | 946 { |
| 947 if(((dataIn.confirmRequest.uw) & CRBUTTON) != 0) | |
| 948 { | |
| 949 requestNecessary.ub.button = 0; | |
| 950 } | |
| 662 | 951 if(((dataIn.confirmRequest.uw) & CRCLEARDECO) != 0) |
| 952 { | |
| 953 requestNecessary.ub.clearDeco = 0; | |
| 954 } | |
| 955 if(((dataIn.confirmRequest.uw) & CRDATE) != 0) | |
| 956 { | |
| 957 requestNecessary.ub.date = 0; | |
| 958 } | |
| 959 if(((dataIn.confirmRequest.uw) & CRTIME) != 0) | |
| 960 { | |
| 961 requestNecessary.ub.time = 0; | |
| 962 } | |
| 963 if(((dataIn.confirmRequest.uw) & CRCOMPASS) != 0) | |
| 964 { | |
| 965 requestNecessary.ub.compass = 0; | |
| 966 } | |
| 967 if(((dataIn.confirmRequest.uw) & CRDEVICEDATA) != 0) | |
| 968 { | |
| 969 requestNecessary.ub.devicedata = 0; | |
| 970 } | |
| 971 if(((dataIn.confirmRequest.uw) & CRBATTERY) != 0) | |
| 972 { | |
| 973 requestNecessary.ub.batterygauge = 0; | |
| 974 } | |
| 975 if(((dataIn.confirmRequest.uw) & CRACCIDENT) != 0) | |
| 976 { | |
| 977 requestNecessary.ub.accident = 0; | |
| 978 } | |
| 38 | 979 |
| 662 | 980 if(requestNecessary.ub.button == 1) /* send button values to RTE */ |
| 38 | 981 { |
|
1014
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
982 setButtonResponsiveness(pSettings->ButtonResponsiveness); |
| 38 | 983 } |
| 984 } | |
| 149 | 985 |
| 38 | 986 /* uint8_t IAmStolenPleaseKillMe; |
| 987 */ | |
|
51
8f8ea3a32e82
Resolved warnings pointing to possible invalid memory access
Ideenmodellierer
parents:
38
diff
changeset
|
988 if(pSettings->IAmStolenPleaseKillMe > 3) |
| 38 | 989 { |
| 990 pSettings->salinity = 0; | |
| 991 dataIn.data[dataIn.boolPressureData].surface_mbar = 999; | |
| 992 dataIn.data[dataIn.boolPressureData].pressure_mbar = 98971; | |
| 993 dataIn.mode = MODE_DIVE; | |
| 994 } | |
| 995 | |
|
556
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
996 |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
997 /* internal sensor: HUD data */ |
| 559 | 998 if(pSettings->ppo2sensors_source == O2_SENSOR_SOURCE_OPTIC) |
|
556
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
999 { |
|
716
74cfd91199bd
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
1000 pStateReal->lifeData.extIf_sensor_Id = 0; |
|
556
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1001 for(int i=0;i<3;i++) |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1002 { |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1003 pStateReal->lifeData.ppO2Sensor_bar[i] = get_ppO2Sensor_bar(i); |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1004 pStateReal->lifeData.sensorVoltage_mV[i] = get_sensorVoltage_mV(i); |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1005 } |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1006 pStateReal->lifeData.HUD_battery_voltage_V = get_HUD_battery_voltage_V(); |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1007 } |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1008 else /* use data from external ADC */ |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1009 { |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1010 if(pStateReal->data_old__lost_connection_to_slave == 0) |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1011 { |
|
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1012 for(idx = 0; idx < 3; idx++) |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1013 { |
| 691 | 1014 pStateReal->lifeData.sensorVoltage_mV[idx] = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_ADC)].extADC_voltage[idx]; |
|
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1015 if(pStateReal->lifeData.sensorVoltage_mV[idx] < IGNORE_O2_VOLTAGE_LEVEL_MV) |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1016 { |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1017 pStateReal->lifeData.sensorVoltage_mV[idx] = 0.0; |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1018 pStateReal->lifeData.ppO2Sensor_bar[idx] = 0; |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1019 } |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1020 else |
|
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1021 { |
| 796 | 1022 if(dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_ADC)].sensor_map[idx] == SENSOR_DIGO2M) |
|
702
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1023 { |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1024 pStateReal->lifeData.ppO2Sensor_bar[idx] = pStateReal->lifeData.sensorVoltage_mV[idx] / 100.0; |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1025 } |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1026 else |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1027 { |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1028 pStateReal->lifeData.ppO2Sensor_bar[idx] = pStateReal->lifeData.sensorVoltage_mV[idx] * pSettings->ppo2sensors_calibCoeff[idx]; |
|
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
1029 } |
|
577
9bb9a52d6ae5
Handle o2 voltage values < 0.5mV as invalid:
Ideenmodellierer
parents:
559
diff
changeset
|
1030 } |
|
716
74cfd91199bd
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
1031 } |
|
556
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1032 } |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1033 } |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1034 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1035 if(pStateReal->data_old__lost_connection_to_slave == 0) |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1036 { |
|
734
190e5814b2f5
Removed interface selection from sensor menu:
Ideenmodellierer
parents:
728
diff
changeset
|
1037 pStateReal->lifeData.extIf_sensor_Id = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_ADC)].externalInterface_SensorID; |
| 1078 | 1038 if(pStateReal->lifeData.extIf_sensor_Id < EXT_INTERFACE_SENSOR_CNT) |
|
734
190e5814b2f5
Removed interface selection from sensor menu:
Ideenmodellierer
parents:
728
diff
changeset
|
1039 { |
| 786 | 1040 memcpy(pStateReal->lifeData.extIf_sensor_data[pStateReal->lifeData.extIf_sensor_Id], dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_ADC)].sensor_data, 32); |
|
734
190e5814b2f5
Removed interface selection from sensor menu:
Ideenmodellierer
parents:
728
diff
changeset
|
1041 } |
|
190e5814b2f5
Removed interface selection from sensor menu:
Ideenmodellierer
parents:
728
diff
changeset
|
1042 memcpy(pStateReal->lifeData.extIf_sensor_map, dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_ADC)].sensor_map, EXT_INTERFACE_SENSOR_CNT); |
|
190e5814b2f5
Removed interface selection from sensor menu:
Ideenmodellierer
parents:
728
diff
changeset
|
1043 |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
1044 meter = getSampleDepth(&dataIn, pStateReal); |
| 38 | 1045 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1046 pStateReal->pressure_uTick_old = pStateReal->pressure_uTick_new; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1047 pStateReal->pressure_uTick_new = dataIn.data[dataIn.boolPressureData].pressure_uTick; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1048 pStateReal->pressure_uTick_local_new = HAL_GetTick(); |
| 38 | 1049 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1050 pStateReal->lifeData.dateBinaryFormat = dataIn.data[dataIn.boolTimeData].localtime_rtc_dr; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1051 pStateReal->lifeData.timeBinaryFormat = dataIn.data[dataIn.boolTimeData].localtime_rtc_tr; |
|
899
2225c467f1e9
Added data path and visualization for position data:
Ideenmodellierer
parents:
842
diff
changeset
|
1052 |
| 931 | 1053 memcpy(&pStateReal->lifeData.gnssData, &dataIn.data[0].gnssInfo, sizeof(dataIn.data[0].gnssInfo)); |
|
1070
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1054 |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1055 if((dataIn.data[dataIn.boolPressureData].pressure_bottle[0] != 0) || (dataIn.data[dataIn.boolPressureData].pressure_bottle[1] != 0)) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1056 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1057 if((pressureIdO2 == 0xFF) || (pressureIdDiluent == 0xFF)) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1058 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1059 DataEX_helper_Get_ID_Of_O2_Diluent(&pressureIdO2, &pressureIdDiluent); |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1060 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1061 if(pressureIdO2 != 0xFF) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1062 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1063 pStateReal->lifeData.bottle_bar[pressureIdO2] = dataIn.data[dataIn.boolPressureData].pressure_bottle[0]; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1064 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1065 if(pressureIdDiluent != 0xFF) |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1066 { |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1067 pStateReal->lifeData.bottle_bar[pressureIdDiluent] = dataIn.data[dataIn.boolPressureData].pressure_bottle[1]; |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1068 } |
|
4499227a2db8
Added compile option for o2/diluent pressure display:
Ideenmodellierer
parents:
1058
diff
changeset
|
1069 } |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1070 } |
| 38 | 1071 |
| 141 | 1072 if(pStateReal->data_old__lost_connection_to_slave == 0) |
| 38 | 1073 { |
| 141 | 1074 //Start of diveMode? |
| 1075 if(pStateReal->mode != MODE_DIVE && dataIn.mode == MODE_DIVE) | |
| 1076 { | |
| 1077 if(modeChangeFlag) | |
| 1078 { | |
| 1079 *modeChangeFlag = 1; | |
| 1080 } | |
| 1081 if(stateUsed == stateSimGetPointer()) | |
| 38 | 1082 { |
| 1083 simulation_exit(); | |
| 1084 } | |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
796
diff
changeset
|
1085 disableTimer(); |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
796
diff
changeset
|
1086 |
| 141 | 1087 // new 170508 |
|
1014
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1088 pSettings->bluetoothActive = 0; |
| 38 | 1089 MX_Bluetooth_PowerOff(); |
| 1090 //Init dive Mode | |
| 141 | 1091 decoLock = DECO_CALC_init_as_is_start_of_dive; |
| 1092 pStateReal->lifeData.boolResetAverageDepth = 1; | |
|
924
4d98fb2a178e
Bugfix real scrubber time decreased in sim mode:
Ideenmodellierer
parents:
920
diff
changeset
|
1093 |
|
4d98fb2a178e
Bugfix real scrubber time decreased in sim mode:
Ideenmodellierer
parents:
920
diff
changeset
|
1094 memcpy(pStateReal->scrubberDataDive, pSettings->scrubberData, sizeof(pStateReal->scrubberDataDive)); |
| 38 | 1095 } |
| 141 | 1096 |
|
197
c853f5d23bb7
cleanup: fix (harmless) use before assign
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1097 pStateReal->lifeData.cns = dataIn.data[dataIn.boolToxicData].cns; |
|
c853f5d23bb7
cleanup: fix (harmless) use before assign
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1098 pStateReal->lifeData.otu = dataIn.data[dataIn.boolToxicData].otu; |
|
c853f5d23bb7
cleanup: fix (harmless) use before assign
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1099 pStateReal->lifeData.no_fly_time_minutes = dataIn.data[dataIn.boolToxicData].no_fly_time_minutes; |
|
c853f5d23bb7
cleanup: fix (harmless) use before assign
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1100 pStateReal->lifeData.desaturation_time_minutes = dataIn.data[dataIn.boolToxicData].desaturation_time_minutes; |
|
c853f5d23bb7
cleanup: fix (harmless) use before assign
Jan Mulder <jlmulder@xs4all.nl>
parents:
189
diff
changeset
|
1101 |
| 141 | 1102 //End of diveMode? |
| 1103 if(pStateReal->mode == MODE_DIVE && dataIn.mode != MODE_DIVE) | |
| 1104 { | |
| 1105 if(modeChangeFlag) | |
| 1106 { | |
| 1107 *modeChangeFlag = 1; | |
| 1108 } | |
| 1109 createDiveSettings(); | |
| 38 | 1110 |
|
805
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
796
diff
changeset
|
1111 disableTimer(); |
|
dd7ce655db26
Adds a simple countdown timer, available as a custom view in surface and dive mode.
heinrichsweikamp
parents:
796
diff
changeset
|
1112 |
| 141 | 1113 if(pStateReal->warnings.cnsHigh) |
| 1114 { | |
| 1115 if(pStateReal->lifeData.cns >= 130) | |
| 1116 dataOut.setAccidentFlag += ACCIDENT_CNSLVL2; | |
| 1117 else if(pStateReal->lifeData.cns >= 100) | |
| 1118 dataOut.setAccidentFlag += ACCIDENT_CNS; | |
| 1119 } | |
| 1120 if(pStateReal->warnings.decoMissed) | |
| 1121 dataOut.setAccidentFlag += ACCIDENT_DECOSTOP; | |
|
924
4d98fb2a178e
Bugfix real scrubber time decreased in sim mode:
Ideenmodellierer
parents:
920
diff
changeset
|
1122 |
|
4d98fb2a178e
Bugfix real scrubber time decreased in sim mode:
Ideenmodellierer
parents:
920
diff
changeset
|
1123 memcpy(pSettings->scrubberData, pStateReal->scrubberDataDive, sizeof(pStateReal->scrubberDataDive)); /* Store value of current usage */ |
| 141 | 1124 } |
| 1125 pStateReal->mode = dataIn.mode; | |
| 1126 pStateReal->chargeStatus = dataIn.chargeStatus; | |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1127 |
|
306
2f43419102c8
bugfix, cleanup: do not clip depth to 0
Jan Mulder <jlmulder@xs4all.nl>
parents:
288
diff
changeset
|
1128 pStateReal->lifeData.depth_meter = meter; |
| 141 | 1129 |
|
189
8b8074080d7b
Bugfix: average temperature on arrival from RTE instead of display time
Jan Mulder <jlmulder@xs4all.nl>
parents:
173
diff
changeset
|
1130 pStateReal->lifeData.temperature_celsius = getTemperature(&dataIn); |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1131 pStateReal->lifeData.ascent_rate_meter_per_min = dataIn.data[dataIn.boolPressureData].ascent_rate_meter_per_min; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1132 if(pStateReal->mode != MODE_DIVE) |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1133 pStateReal->lifeData.max_depth_meter = 0; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1134 else |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1135 { |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1136 if(meter > pStateReal->lifeData.max_depth_meter) |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1137 pStateReal->lifeData.max_depth_meter = meter; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1138 } |
| 38 | 1139 |
| 662 | 1140 if(requestNecessary.ub.clearDeco == 0) /* No "reset deco" is send to RTE ? */ |
| 1141 { | |
| 1142 if(dataIn.accidentFlags & ACCIDENT_DECOSTOP) | |
| 1143 { | |
| 1144 pStateReal->decoMissed_at_the_end_of_dive = 1; | |
| 1145 } | |
| 1146 else | |
| 1147 { | |
| 1148 pStateReal->decoMissed_at_the_end_of_dive = 0; | |
| 1149 } | |
| 1150 if(dataIn.accidentFlags & ACCIDENT_CNS) | |
| 1151 { | |
| 1152 pStateReal->cnsHigh_at_the_end_of_dive = 1; | |
| 1153 } | |
| 1154 else | |
| 1155 { | |
| 1156 pStateReal->cnsHigh_at_the_end_of_dive = 0; | |
| 1157 } | |
| 1158 } | |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1159 pStateReal->lifeData.dive_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].divetime_seconds; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1160 pStateReal->lifeData.dive_time_seconds_without_surface_time = (int32_t)dataIn.data[dataIn.boolTimeData].dive_time_seconds_without_surface_time; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1161 pStateReal->lifeData.counterSecondsShallowDepth = dataIn.data[dataIn.boolTimeData].counterSecondsShallowDepth; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1162 pStateReal->lifeData.surface_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].surfacetime_seconds; |
| 38 | 1163 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1164 pStateReal->lifeData.compass_heading = dataIn.data[dataIn.boolCompassData].compass_heading; |
|
776
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1165 if (pStateReal->lifeData.compass_heading != -1) { |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1166 if (pSettings->FlipDisplay) { /* consider that diver is targeting into the opposite direction */ |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1167 pStateReal->lifeData.compass_heading -= 180.0; |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1168 } |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1169 |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1170 if (pSettings->compassDeclinationDeg != 0) { |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1171 pStateReal->lifeData.compass_heading = pStateReal->lifeData.compass_heading + pSettings->compassDeclinationDeg - 360.0; |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1172 } |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1173 |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1174 while (pStateReal->lifeData.compass_heading < 0) { |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1175 pStateReal->lifeData.compass_heading += 360.0; |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1176 } |
|
45b8f3c2acce
Add support for a configurable compass declination in a range of -99 to 99 degrees.
heinrichsweikamp
parents:
763
diff
changeset
|
1177 } |
|
109
65a6e352ce08
Consider computer heading in case of a flipped display
Ideenmodellierer
parents:
51
diff
changeset
|
1178 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1179 pStateReal->lifeData.compass_roll = dataIn.data[dataIn.boolCompassData].compass_roll; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1180 pStateReal->lifeData.compass_pitch = dataIn.data[dataIn.boolCompassData].compass_pitch; |
| 38 | 1181 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1182 pStateReal->lifeData.compass_DX_f = dataIn.data[dataIn.boolCompassData].compass_DX_f; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1183 pStateReal->lifeData.compass_DY_f = dataIn.data[dataIn.boolCompassData].compass_DY_f; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1184 pStateReal->lifeData.compass_DZ_f = dataIn.data[dataIn.boolCompassData].compass_DZ_f; |
| 38 | 1185 |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1186 pStateReal->compass_uTick_old = pStateReal->compass_uTick_new; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1187 pStateReal->compass_uTick_new = dataIn.data[dataIn.boolCompassData].compass_uTick; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1188 pStateReal->compass_uTick_local_new = HAL_GetTick(); |
|
539
d784f281833a
Added inertia simulation for compass heading:
Ideenmodellierer
parents:
497
diff
changeset
|
1189 compass_Inertia(pStateReal->lifeData.compass_heading); |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1190 |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1191 memcpy(pStateReal->lifeData.tissue_nitrogen_bar, dataIn.data[dataIn.boolTisssueData].tissue_nitrogen_bar,sizeof(pStateReal->lifeData.tissue_nitrogen_bar)); |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1192 memcpy(pStateReal->lifeData.tissue_helium_bar, dataIn.data[dataIn.boolTisssueData].tissue_helium_bar,sizeof(pStateReal->lifeData.tissue_helium_bar)); |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1193 |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1194 if(pStateReal->mode == MODE_DIVE) |
| 38 | 1195 { |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1196 for(int i= 0; i <16; i++) |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1197 { |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1198 pStateReal->vpm.max_crushing_pressure_he[i] = dataIn.data[dataIn.boolCrushingData].max_crushing_pressure_he[i]; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1199 pStateReal->vpm.max_crushing_pressure_n2[i] = dataIn.data[dataIn.boolCrushingData].max_crushing_pressure_n2[i]; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1200 pStateReal->vpm.adjusted_critical_radius_he[i] = dataIn.data[dataIn.boolCrushingData].adjusted_critical_radius_he[i]; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1201 pStateReal->vpm.adjusted_critical_radius_n2[i] = dataIn.data[dataIn.boolCrushingData].adjusted_critical_radius_n2[i]; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1202 } |
| 38 | 1203 } |
| 1204 | |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1205 /* battery and ambient light sensors |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1206 */ |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1207 pStateReal->lifeData.ambient_light_level = dataIn.data[dataIn.boolAmbientLightData].ambient_light_level; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1208 pStateReal->lifeData.battery_charge = dataIn.data[dataIn.boolBatteryData].battery_charge; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1209 pStateReal->lifeData.battery_voltage = dataIn.data[dataIn.boolBatteryData].battery_voltage; |
|
275
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1210 |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1211 /* PIC data |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1212 */ |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1213 for(int i=0;i<4;i++) |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1214 { |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1215 pStateReal->lifeData.buttonPICdata[i] = dataIn.data[dataIn.boolPICdata].button_setting[i]; |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1216 } |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1217 |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1218 /* sensorErrors |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1219 */ |
|
189387bf23a8
Do not mark data as valid if devicedata is received.
ideenmodellierer
parents:
232
diff
changeset
|
1220 pStateReal->sensorErrorsRTE = dataIn.sensorErrors; |
| 662 | 1221 |
| 1222 /* data from CO2 sensor */ | |
| 831 | 1223 pStateReal->lifeData.CO2_data.CO2_ppm = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_CO2)].CO2_ppm; |
| 691 | 1224 pStateReal->lifeData.CO2_data.signalStrength = dataIn.data[(dataIn.boolADCO2Data && DATA_BUFFER_CO2)].CO2_signalStrength; |
|
747
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
1225 |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
1226 #ifdef ENABLE_EXTERNAL_PRESSURE |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
1227 CO2Corr = 2.811*pow(10,-38)*pow(pStateReal->lifeData.CO2_data.CO2_ppm,6)- 9.817*pow(10,-32)*pow(pStateReal->lifeData.CO2_data.CO2_ppm,5)+1.304*pow(10,-25)*pow(pStateReal->lifeData.CO2_data.CO2_ppm,4) |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
1228 -8.216*pow(10,-20)*pow(pStateReal->lifeData.CO2_data.CO2_ppm,3)+2.311*pow(10,-14)*pow(pStateReal->lifeData.CO2_data.CO2_ppm,2) - 2.195*pow(10,-9)*pStateReal->lifeData.CO2_data.CO2_ppm - 1.471*pow(10,-3); |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
1229 pStateReal->lifeData.CO2_data.CO2_ppm = pStateReal->lifeData.CO2_data.CO2_ppm / (1.0 + (CO2Corr * ((stateRealGetPointer()->lifeData.pressure_surface_bar * 1000) - ((stateRealGetPointer()->lifeData.ppO2Sensor_bar[2] *1000))))); |
|
df0d43da1614
Added pressure compensation to CO2 detection:
Ideenmodellierer
parents:
734
diff
changeset
|
1230 #endif |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1231 } |
| 38 | 1232 |
| 1058 | 1233 /* close to surface ? */ |
| 1234 if((pStateReal->lifeData.counterSecondsShallowDepth != 0) && (lastcounterSecondsShallowDepth == 0)) | |
| 1235 { | |
| 1236 if( (pStateReal->decolistBuehlmann.gf_surf * 100.0) < 255.0) | |
| 1237 { | |
| 1238 pStateReal->lifeData.gf_surf_log = pStateReal->decolistBuehlmann.gf_surf * 100.0; | |
| 1239 } | |
| 1240 else | |
| 1241 { | |
| 1242 pStateReal->lifeData.gf_surf_log = 255; | |
| 1243 } | |
| 1244 } | |
| 1245 lastcounterSecondsShallowDepth = pStateReal->lifeData.counterSecondsShallowDepth; | |
| 1246 | |
| 38 | 1247 /* apnea specials |
| 1248 */ | |
| 1249 if(pStateReal->diveSettings.diveMode == DIVEMODE_Apnea) | |
| 1250 { | |
| 1251 if(pStateReal->mode != MODE_DIVE) | |
| 1252 { | |
| 1253 pStateReal->lifeData.apnea_total_max_depth_meter = 0; | |
| 1254 pStateReal->lifeData.apnea_last_dive_time_seconds = 0; | |
| 1255 pStateReal->lifeData.apnea_last_max_depth_meter = 0; | |
| 1256 } | |
| 1257 else | |
| 1258 { | |
| 1259 if(pStateReal->lifeData.max_depth_meter > pStateReal->lifeData.apnea_total_max_depth_meter) | |
| 1260 pStateReal->lifeData.apnea_total_max_depth_meter = pStateReal->lifeData.max_depth_meter; | |
| 1261 } | |
| 1262 | |
| 1263 if(pStateReal->lifeData.dive_time_seconds > 15) | |
| 1264 { | |
| 1265 pStateReal->lifeData.apnea_last_dive_time_seconds = pStateReal->lifeData.dive_time_seconds; | |
| 1266 } | |
| 1267 | |
| 1268 if(pStateReal->lifeData.counterSecondsShallowDepth) | |
| 1269 { | |
| 1270 if(pStateReal->lifeData.max_depth_meter > 1.5f) | |
| 1271 { | |
| 1272 pStateReal->lifeData.apnea_last_max_depth_meter = pStateReal->lifeData.max_depth_meter; | |
| 1273 } | |
|
173
05c770dc2911
Bugfix: make max depth move with current depth (part 1)
Jan Mulder <jlmulder@xs4all.nl>
parents:
156
diff
changeset
|
1274 // reset max_depth_meter, average_depth_meter and internal values |
| 38 | 1275 pStateReal->lifeData.max_depth_meter = 0; |
| 1276 pStateReal->lifeData.boolResetAverageDepth = 1; | |
| 1277 } | |
| 1278 } | |
| 1279 | |
|
308
1203255481e4
cleanup: introduce function setAvgDepth
Jan Mulder <jlmulder@xs4all.nl>
parents:
307
diff
changeset
|
1280 setAvgDepth(pStateReal); |
|
1203255481e4
cleanup: introduce function setAvgDepth
Jan Mulder <jlmulder@xs4all.nl>
parents:
307
diff
changeset
|
1281 } |
|
1203255481e4
cleanup: introduce function setAvgDepth
Jan Mulder <jlmulder@xs4all.nl>
parents:
307
diff
changeset
|
1282 |
|
1203255481e4
cleanup: introduce function setAvgDepth
Jan Mulder <jlmulder@xs4all.nl>
parents:
307
diff
changeset
|
1283 void setAvgDepth(SDiveState *pStateReal) { |
|
1203255481e4
cleanup: introduce function setAvgDepth
Jan Mulder <jlmulder@xs4all.nl>
parents:
307
diff
changeset
|
1284 |
| 38 | 1285 float *AvgDepthValue = &pStateReal->lifeData.average_depth_meter; |
| 1286 float DepthNow = pStateReal->lifeData.depth_meter; | |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1287 static uint32_t AvgDepthCount = 0; |
|
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1288 static uint32_t AvgDepthTimer = 0; |
| 38 | 1289 uint32_t AvgSecondsSinceLast; |
| 1290 uint32_t DiveTime = pStateReal->lifeData.dive_time_seconds_without_surface_time; | |
|
308
1203255481e4
cleanup: introduce function setAvgDepth
Jan Mulder <jlmulder@xs4all.nl>
parents:
307
diff
changeset
|
1291 |
| 38 | 1292 if(pStateReal->lifeData.boolResetAverageDepth) |
| 1293 { | |
| 1294 *AvgDepthValue = DepthNow; | |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1295 AvgDepthCount = 0; |
|
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1296 AvgDepthTimer = DiveTime; |
| 38 | 1297 pStateReal->lifeData.boolResetAverageDepth = 0; |
| 1298 } | |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1299 else if (DiveTime > AvgDepthTimer) |
| 38 | 1300 { |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1301 AvgSecondsSinceLast = DiveTime - AvgDepthTimer; |
| 38 | 1302 for(int i=0;i<AvgSecondsSinceLast;i++) |
| 1303 { | |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1304 *AvgDepthValue = (*AvgDepthValue * AvgDepthCount + DepthNow) / (AvgDepthCount + 1); |
|
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1305 AvgDepthCount += 1; |
| 38 | 1306 } |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1307 AvgDepthTimer = DiveTime; |
| 38 | 1308 } |
|
309
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1309 if(AvgDepthCount == 0) |
|
b0045281cb2d
cleanup: factor out SHelper typedef (and more)
Jan Mulder <jlmulder@xs4all.nl>
parents:
308
diff
changeset
|
1310 *AvgDepthValue = DepthNow; |
| 38 | 1311 } |
| 1312 | |
| 1313 | |
| 1314 uint8_t DataEX_check_RTE_version__needs_update(void) | |
| 1315 { | |
| 1316 if(data_old__lost_connection_to_slave_counter_retry > 10) | |
| 1317 return 1; | |
| 1318 else | |
| 1319 { | |
| 1320 if(stateRealGetPointer()->data_old__lost_connection_to_slave == 0) | |
| 1321 { | |
| 1322 setActualRTEversion(dataIn.RTE_VERSION_high, dataIn.RTE_VERSION_low); | |
| 1323 | |
| 1324 if(RTEminimum_required_high() < dataIn.RTE_VERSION_high) | |
| 1325 return 0; | |
| 1326 else | |
| 1327 if((RTEminimum_required_high() == dataIn.RTE_VERSION_high) && (RTEminimum_required_low() <= dataIn.RTE_VERSION_low)) | |
| 1328 return 0; | |
| 1329 else | |
| 1330 return 1; | |
| 1331 } | |
| 1332 else | |
| 1333 return 0; | |
| 1334 } | |
| 1335 } | |
| 1336 | |
| 1337 | |
| 1338 /* Private functions ---------------------------------------------------------*/ | |
| 1339 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
1340 /* Check if there is an empty frame provided by RTE (all 0) or even no data provided by RTE (all 0xFF) |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1341 * If that is not the case the DMA is somehow not in sync |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1342 */ |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
1343 static uint8_t DataEX_check_header_and_footer_shifted() |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1344 { |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1345 uint8_t ret = 1; |
| 141 | 1346 if((dataIn.footer.checkCode[0] == 0x00) |
| 1347 && (dataIn.footer.checkCode[1] == 0x00) | |
| 1348 && (dataIn.footer.checkCode[2] == 0x00) | |
| 1349 && (dataIn.footer.checkCode[3] == 0x00)) { ret = 0; } | |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1350 |
| 141 | 1351 if((dataIn.footer.checkCode[0] == 0xff) |
| 1352 && (dataIn.footer.checkCode[1] == 0xff) | |
| 1353 && (dataIn.footer.checkCode[2] == 0xff) | |
| 1354 && (dataIn.footer.checkCode[3] == 0xff)) { ret = 0; } | |
|
137
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1355 |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1356 return ret; |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1357 } |
|
9eda5a75c5fd
Only copy data if data connection to RTE is valid
Ideenmodellierer
parents:
133
diff
changeset
|
1358 |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
1359 static uint8_t DataEX_check_header_and_footer_ok(void) |
| 38 | 1360 { |
| 1361 if(dataIn.header.checkCode[0] != 0xA1) | |
| 1362 return 0; | |
| 141 | 1363 #if USE_OLD_HEADER_FORMAT |
| 38 | 1364 if(dataIn.header.checkCode[1] != 0xA2) |
| 1365 return 0; | |
| 1366 if(dataIn.header.checkCode[2] != 0xA3) | |
| 1367 return 0; | |
| 141 | 1368 #endif |
| 38 | 1369 if(dataIn.header.checkCode[3] != 0xA4) |
| 1370 return 0; | |
| 1371 if(dataIn.footer.checkCode[0] != 0xE1) | |
| 1372 return 0; | |
| 1373 if(dataIn.footer.checkCode[1] != 0xE2) | |
| 1374 return 0; | |
| 1375 if(dataIn.footer.checkCode[2] != 0xE3) | |
| 1376 return 0; | |
| 1377 if(dataIn.footer.checkCode[3] != 0xE4) | |
| 1378 return 0; | |
| 1379 | |
| 1380 return 1; | |
| 1381 } | |
| 1382 | |
|
198
878dc9e0dbc5
cleanup: another cleanup session (data_exchange_main.c)
Jan Mulder <jlmulder@xs4all.nl>
parents:
197
diff
changeset
|
1383 static uint8_t DataEX_check_header_and_footer_devicedata(void) |
| 38 | 1384 { |
| 1385 if(dataIn.header.checkCode[0] != 0xDF) | |
| 1386 return 0; | |
| 1387 if(dataIn.header.checkCode[1] != 0xDE) | |
| 1388 return 0; | |
| 1389 if(dataIn.header.checkCode[2] != 0xDD) | |
| 1390 return 0; | |
| 1391 if(dataIn.header.checkCode[3] != 0xDC) | |
| 1392 return 0; | |
| 1393 if(dataIn.footer.checkCode[0] != 0xE1) | |
| 1394 return 0; | |
| 1395 if(dataIn.footer.checkCode[1] != 0xE2) | |
| 1396 return 0; | |
| 1397 if(dataIn.footer.checkCode[2] != 0xE3) | |
| 1398 return 0; | |
| 1399 if(dataIn.footer.checkCode[3] != 0xE4) | |
| 1400 return 0; | |
| 1401 | |
| 1402 return 1; | |
| 1403 } | |
|
407
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1404 |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1405 void DataEX_merge_devicedata(void) |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1406 { |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1407 if(DeviceDataUpdated) |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1408 { |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1409 DeviceDataUpdated = 0; |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1410 DataEX_merge_DeviceData_and_store(); |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1411 } |
|
b11e50415982
Bugfix parallel call of external flash functions:
ideenmodellierer
parents:
406
diff
changeset
|
1412 } |
|
556
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1413 uint8_t DataEX_external_ADC_Present(void) |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1414 { |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1415 uint8_t retval; |
| 559 | 1416 retval = hw_Info.extADC; |
|
556
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1417 |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1418 return retval; |
|
eb2060caca7d
Switch source of o2 sensor data depending on availability of external ADC:
Ideenmodellierer
parents:
539
diff
changeset
|
1419 } |
| 662 | 1420 |
|
957
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1421 void DataEX_setExtInterface_Cmd(uint16_t Cmd, uint8_t sensorId) |
| 662 | 1422 { |
|
957
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1423 if(sensorId < EXT_INTERFACE_SENSOR_CNT - 1) |
|
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1424 { |
|
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1425 externalInterface_Cmd |= Cmd; |
|
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1426 externalInterface_Cmd |= sensorId << 8; |
|
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1427 } |
|
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
951
diff
changeset
|
1428 |
| 662 | 1429 return; |
| 1430 } | |
| 1431 | |
|
1014
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1432 bool isScrubberTimerEnabled(const SSettings *settings) |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1433 { |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1434 return settings->scrubberActiveId != 0x00 && isLoopMode(settings->dive_mode); |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1435 } |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1436 |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1437 bool isScrubberTimerRunning(const SDiveState *diveState, const SSettings *settings) |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1438 { |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1439 return isScrubberTimerEnabled(settings) && diveState->mode == MODE_DIVE && isLoopMode(diveState->diveSettings.diveMode); |
|
8c0134a287da
Add a log data event to the scrubber timer at the start of the dive and every time the timer (in minutes)
heinrichsweikamp
parents:
988
diff
changeset
|
1440 } |
