Mercurial > public > ostc4
annotate Common/Inc/data_exchange.h @ 738:30717de00f3a
Added data init function for external interface:
If external sensors have been removed while OSTC was sleeping then (in case of digital sensor) an old value was displayed. By initializing the data structures after wakeup this is now avoided.
author | Ideenmodellierer |
---|---|
date | Thu, 02 Feb 2023 17:19:24 +0100 |
parents | 5143e927219f |
children | 6de83d8205a0 |
rev | line source |
---|---|
38 | 1 /////////////////////////////////////////////////////////////////////////////// |
2 /// -*- coding: UTF-8 -*- | |
3 /// | |
4 /// \file Common/Inc/data_exchange.h | |
5 /// \brief Data exchange between RTE and Discovery processors. | |
6 /// \author Heinrichs Weikamp | |
7 /// \date 2018 | |
8 /// | |
9 /// $Id$ | |
10 /////////////////////////////////////////////////////////////////////////////// | |
11 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh | |
12 /// | |
13 /// This program is free software: you can redistribute it and/or modify | |
14 /// it under the terms of the GNU General Public License as published by | |
15 /// the Free Software Foundation, either version 3 of the License, or | |
16 /// (at your option) any later version. | |
17 /// | |
18 /// This program is distributed in the hope that it will be useful, | |
19 /// but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 /// GNU General Public License for more details. | |
22 /// | |
23 /// You should have received a copy of the GNU General Public License | |
24 /// along with this program. If not, see <http://www.gnu.org/licenses/>. | |
25 ////////////////////////////////////////////////////////////////////////////// | |
26 | |
27 #ifndef DATA_EXCHANGE_H | |
28 #define DATA_EXCHANGE_H | |
29 | |
30 #include "data_central.h" | |
31 #include "settings.h" | |
32 #include "stm32f4xx_hal.h" | |
33 | |
691 | 34 /* Command definitions for control of external interface */ |
35 /* 1st nibble binary on/off states */ | |
36 /* 2nd nibble UART protocol selection */ | |
37 /* 3rd nibble reserve */ | |
38 /* 4th nibble command channel */ | |
39 #define EXT_INTERFACE_33V_ON (0x8000u) /* Bit set to enable 3.3V power interface */ | |
40 #define EXT_INTERFACE_ADC_ON (0x4000u) /* Bit set to enable ADC conversion */ | |
41 #define EXT_INTERFACE_UART_MASK (0x0700u) /* Reserve 3 bits for UART protocol selection */ | |
42 #define EXT_INTERFACE_UART_CO2 (0x0100u) /* Activate protocol for CO2 sensor */ | |
43 #define EXT_INTERFACE_UART_SENTINEL (0x0200u) /* Activate Sentinel Backup monitor protocol */ | |
702
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
44 #define EXT_INTERFACE_UART_O2 (0x0400u) /* Activate digital o2 sensor protocol (DiveO2) */ |
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
45 |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
46 /* Command subset */ |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
47 #define EXT_INTERFACE_AUTODETECT (0x0001u) /* Start auto detection of connected sensors */ |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
48 #define EXT_INTERFACE_COPY_SENSORMAP (0x0002u) /* Use the sensor map provided by master for internal operations */ |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
49 #define EXT_INTERFACE_CO2_CALIB (0x0010u) /* Request calibration of CO2Sensor */ |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
50 #define EXT_INTERFACE_O2_INDICATE (0x0020u) /* Request LED to blink*/ |
702
6d7c812fc173
Added digital o2 sensor to settings and data exchange:
Ideenmodellierer
parents:
691
diff
changeset
|
51 |
691 | 52 #define DATA_BUFFER_ADC (0x01u) |
53 #define DATA_BUFFER_CO2 (0x02u) | |
662 | 54 |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
55 #define EXTIF_SENSOR_INFO_SIZE (32u) /* size of data array reserved for extended sensor data from external interface */ |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
56 |
38 | 57 enum MODE |
58 { | |
59 MODE_SURFACE = 0, | |
60 MODE_DIVE = 1, | |
61 MODE_CALIB = 2, | |
62 MODE_SLEEP = 3, | |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
63 MODE_SHUTDOWN = 4, |
38 | 64 MODE_ENDDIVE = 5, |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
65 MODE_BOOT = 6, |
38 | 66 MODE_CHARGESTART = 7, |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
67 MODE_TEST = 8, |
38 | 68 MODE_POWERUP = 9, |
69 }; | |
70 | |
71 enum ACCIDENT_BITS | |
72 { | |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
73 ACCIDENT_DECOSTOP = 0x01, |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
74 ACCIDENT_CNS = 0x02, |
38 | 75 ACCIDENT_CNSLVL2 = 0x02 + 0x04, |
76 ACCIDENT_SPARE2 = 0x08, | |
77 ACCIDENT_SPARE3 = 0x10, | |
78 ACCIDENT_SPARE4 = 0x20, | |
79 ACCIDENT_SPARE5 = 0x40, | |
80 ACCIDENT_SPARE6 = 0x80 | |
81 }; | |
82 | |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
83 |
38 | 84 typedef struct{ |
85 uint8_t button:1; | |
86 uint8_t date:1; | |
87 uint8_t time:1; | |
88 uint8_t clearDeco:1; | |
89 uint8_t compass:1; | |
90 uint8_t devicedata:1; | |
91 uint8_t batterygauge:1; | |
92 uint8_t accident:1; | |
93 } confirmbit8_t; | |
94 | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
95 typedef struct{ |
559 | 96 uint8_t checkCompass:1; |
97 uint8_t checkADC:1; | |
98 uint8_t reserve:5; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
99 uint8_t extADC:1; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
100 uint8_t compass:8; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
101 } hw_Info_t; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
102 |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
103 |
38 | 104 #define CRBUTTON (0x01) |
105 #define CRDATE (0x02) | |
106 #define CRTIME (0x04) | |
662 | 107 #define CRCLEARDECO (0x08) |
108 #define CRCOMPASS (0x10) | |
109 #define CRDEVICEDATA (0x20) | |
110 #define CRBATTERY (0x40) | |
111 #define CRACCIDENT (0x80) | |
38 | 112 |
113 typedef union{ | |
114 confirmbit8_t ub; | |
115 uint8_t uw; | |
116 } confirmbit8_Type; | |
117 | |
118 typedef struct | |
119 { | |
120 uint8_t checkCode[4]; | |
121 | |
122 } SDataExchangeHeader; | |
123 | |
124 typedef struct | |
125 { | |
126 uint8_t checkCode[4]; | |
127 | |
128 } SDataExchangeFooter; | |
129 | |
130 typedef struct | |
131 { | |
132 SDataExchangeHeader header; | |
133 SLifeData lifeData; | |
134 } SDataExchangeMasterToSlave; | |
135 | |
136 typedef struct | |
137 { | |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
138 int32_t temperature; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
139 uint32_t status; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
140 uint64_t sensorId; |
723 | 141 int32_t intensity; |
142 int32_t ambient; | |
143 int32_t pressure; | |
144 int32_t humidity; | |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
145 } SSensorDataDiveO2; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
146 |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
147 typedef struct |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
148 { |
38 | 149 //pressure |
150 float temperature; | |
151 float pressure_mbar; | |
152 float surface_mbar; | |
153 float ascent_rate_meter_per_min; | |
154 //toxic | |
155 float otu; | |
156 float cns; | |
157 uint16_t desaturation_time_minutes; | |
158 uint16_t no_fly_time_minutes; | |
159 //tisssue | |
160 float tissue_nitrogen_bar[16]; | |
161 float tissue_helium_bar[16]; | |
162 //maxcrushingpressure | |
163 float max_crushing_pressure_he[16]; | |
164 float max_crushing_pressure_n2[16]; | |
165 float adjusted_critical_radius_he[16]; | |
166 float adjusted_critical_radius_n2[16]; | |
167 // Compass | |
168 float compass_heading; | |
169 float compass_roll; | |
170 float compass_pitch; | |
171 int16_t compass_DX_f; | |
172 int16_t compass_DY_f; | |
173 int16_t compass_DZ_f; | |
174 //time | |
175 uint16_t counterSecondsShallowDepth; | |
176 uint32_t localtime_rtc_tr; | |
177 uint32_t localtime_rtc_dr; | |
178 uint32_t divetime_seconds; | |
179 uint32_t surfacetime_seconds; | |
180 uint32_t dive_time_seconds_without_surface_time; | |
181 //battery /* take care of uint8_t count to be in multiplies of 4 */ | |
182 float battery_voltage; | |
183 float battery_charge; | |
184 //ambient light | |
185 uint16_t ambient_light_level; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
186 uint16_t SPARE_ALIGN32; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
187 float extADC_voltage[3]; |
662 | 188 uint16_t CO2_ppm; |
189 uint16_t CO2_signalStrength; | |
190 uint16_t externalInterface_CmdAnswer; | |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
191 uint8_t alignmentdummy; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
192 uint8_t externalInterface_SensorID; /* Used to identify how to read the sensor data array */ |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
193 uint8_t sensor_data[EXTIF_SENSOR_INFO_SIZE]; /* sensor specific data array. Content may vary from sensor type to sensor type */ |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
194 uint8_t sensor_map[EXT_INTERFACE_SENSOR_CNT]; |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
195 uint8_t SPARE_OldWireless[5]; /* 64 - 12 for extADC - 6 for CO2 - 34 for sensor (+dummmy) - sensor map*/ |
38 | 196 // PIC data |
51
8f8ea3a32e82
Resolved warnings pointing to possible invalid memory access
Ideenmodellierer
parents:
38
diff
changeset
|
197 uint8_t button_setting[4]; /* see dependency to SLiveData->buttonPICdata */ |
38 | 198 uint8_t SPARE1; |
199 //debug | |
200 uint32_t pressure_uTick; | |
201 uint32_t compass_uTick; | |
202 | |
203 } SExchangeData; | |
204 | |
205 typedef struct | |
206 { | |
207 uint8_t VPMconservatism; | |
208 SGas actualGas; | |
209 | |
210 int8_t offsetPressureSensor_mbar; | |
211 int8_t offsetTemperatureSensor_centiDegree; | |
212 | |
662 | 213 uint16_t externalInterface_Cmd; |
38 | 214 |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
215 uint8_t externalInterface_SensorMap[EXT_INTERFACE_SENSOR_CNT]; |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
216 |
38 | 217 float UNUSED1[16-1];//VPM_adjusted_critical_radius_he[16]; |
218 float UNUSED2[16];//VPM_adjusted_critical_radius_n2[16]; | |
219 float UNUSED3[16];//VPM_adjusted_crushing_pressure_he[16]; | |
220 float UNUSED4[16];//VPM_adjusted_crushing_pressure_n2[16]; | |
221 float UNUSED5[16];//VPM_initial_allowable_gradient_he[16]; | |
222 float UNUSED6[16];//VPM_initial_allowable_gradient_n2[16]; | |
223 float UNUSED7[16];//VPM_max_actual_gradient[16]; | |
224 | |
225 RTC_TimeTypeDef newTime; | |
226 RTC_DateTypeDef newDate; | |
227 | |
228 float ambient_pressure_mbar_ceiling; | |
229 float descend_rate_bar_per_minute; | |
230 float ascend_rate_bar_per_minute; | |
231 | |
232 uint16_t timeoutDiveReachedZeroDepth; | |
233 uint16_t divetimeToCreateLogbook; | |
234 | |
235 uint8_t buttonResponsiveness[4]; | |
236 | |
237 SDevice DeviceData; | |
238 | |
239 float newBatteryGaugePercentageFloat; | |
240 | |
241 } SReceiveData; | |
242 | |
243 | |
244 typedef struct | |
245 { | |
246 SDataExchangeHeader header; | |
247 | |
248 uint8_t mode; | |
249 uint8_t power_on_reset; | |
250 uint8_t RTE_VERSION_high; | |
251 uint8_t RTE_VERSION_low; | |
252 | |
253 uint8_t chargeStatus; | |
254 uint8_t boolPICdata; | |
255 confirmbit8_Type confirmRequest; // confirmbit8_Type | |
691 | 256 uint8_t boolADCO2Data; |
38 | 257 |
258 uint8_t boolPressureData; | |
259 uint8_t boolCompassData; | |
260 uint8_t boolTisssueData; | |
261 uint8_t boolCrushingData; | |
262 | |
263 uint8_t boolToxicData; | |
264 uint8_t boolTimeData; | |
265 uint8_t boolBatteryData; | |
266 uint8_t boolAmbientLightData; | |
267 | |
268 uint8_t accidentFlags; | |
269 uint8_t sensorErrors; | |
270 uint8_t spare2; | |
271 uint8_t spare3; | |
272 | |
273 SExchangeData data[2]; | |
274 SDataExchangeFooter footer; | |
275 uint8_t CRC_feature_by_SPI[4]; | |
276 } SDataExchangeSlaveToMaster; | |
277 | |
278 | |
279 typedef struct | |
280 { | |
281 SDataExchangeHeader header; | |
282 | |
283 uint8_t mode; | |
284 uint8_t power_on_reset; | |
285 uint8_t RTE_VERSION_high; | |
286 uint8_t RTE_VERSION_low; | |
287 | |
288 uint8_t chargeStatus; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
289 hw_Info_t hw_Info; |
38 | 290 uint8_t spare1; |
291 | |
292 uint8_t boolDeviceData; | |
293 uint8_t boolVpmRepetitiveDataValid; | |
294 uint8_t bool3; | |
295 uint8_t bool4; | |
296 | |
297 uint8_t spare1_1; | |
298 uint8_t spare1_2; | |
299 uint8_t spare1_3; | |
300 uint8_t spare1_4; | |
301 | |
302 uint8_t spare2_1; | |
303 uint8_t spare2_2; | |
304 uint8_t spare2_3; | |
305 uint8_t spare2_4; | |
306 | |
307 SDevice DeviceData[2]; | |
308 SVpmRepetitiveData VpmRepetitiveData; | |
309 | |
310 uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - ((2 * sizeof(SDevice)) + sizeof(SVpmRepetitiveData))]; | |
311 SDataExchangeFooter footer; | |
312 uint8_t CRC_feature_by_SPI[4]; | |
313 } SDataExchangeSlaveToMasterDeviceData; | |
314 | |
315 | |
316 typedef struct | |
317 { | |
318 SDataExchangeHeader header; | |
319 | |
320 uint8_t mode; | |
321 uint8_t getDeviceDataNow; | |
322 uint8_t diveModeInfo; | |
323 uint8_t setEndDive; | |
324 | |
325 uint8_t bool4; | |
326 uint8_t setButtonSensitivityNow; | |
327 uint8_t setDateNow; | |
328 uint8_t setTimeNow; | |
329 | |
330 uint8_t calibrateCompassNow; | |
331 uint8_t clearDecoNow; | |
332 uint8_t setBatteryGaugeNow; | |
333 uint8_t bool9; | |
334 | |
335 uint8_t revisionHardware; | |
336 uint8_t revisionCRCx0x7A; | |
337 uint8_t spare1_3; | |
338 uint8_t spare1_4; | |
339 | |
340 uint8_t setAccidentFlag; | |
341 uint8_t spare2_1; | |
342 uint8_t spare2_2; | |
343 uint8_t spare2_3; | |
344 | |
345 SReceiveData data; | |
346 uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - sizeof(SReceiveData)]; | |
347 SDataExchangeFooter footer; | |
348 uint8_t CRC_feature_by_SPI[4]; | |
349 } SDataReceiveFromMaster; | |
350 | |
351 | |
352 /* Size of Transmission buffer */ | |
353 #define EXCHANGE_BUFFERSIZE (sizeof(SDataExchangeSlaveToMaster) - 2) | |
354 #define EXCHANGE_BUFFERSIZE2 (sizeof(SDataReceiveFromMaster) - 2) | |
355 // header: 5 | |
356 // mode+bool: 5 | |
357 // data 552 ( 69 * float/4 * 2 ) | |
358 // footer: 4 | |
359 // ______________ | |
360 // SUM 566 | |
361 // CRC_feature does not count into BUFFERSIZE! | |
362 | |
363 //(COUNTOF(struct SDataExchangeSlaveToMaster) + 1) | |
364 | |
365 /* Exported macro ------------------------------------------------------------*/ | |
366 //#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) | |
367 | |
368 #endif /* DATA_EXCHANGE_H */ | |
369 |