Mercurial > public > ostc4
annotate Common/Inc/data_exchange.h @ 787:aeb72882f30a
Dev Bugfx Empty buffer indication and stability improvments:
The mux prototype used ASCII coding for channel selection while the current realization used real number (0...4) for addressing the mux. The UART read function uses the '0' to indicate an empty buffer element. The mux now loops back '0' used by channel selection causing the read function to process the data. As result data interrups are visible at the display. To avoid this another character has been defined indicate empty buffer locations.
Beside this the functionality has been improved with regard to access speed and better recovery in case of transition failure.
author | Ideenmodellierer |
---|---|
date | Sun, 04 Jun 2023 21:59:26 +0200 |
parents | aa6006975e76 |
children | 061174d88af9 |
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 |
756 | 57 #define CO2_WARNING_LEVEL_PPM (2000u) /* Early warning to indicate unexpected high co2 concentration (yellow) */ |
58 #define CO2_ALARM_LEVEL_PPM (5000u) /* starting by this level CO2 has a negative impact on health (long exposure) */ | |
59 | |
38 | 60 enum MODE |
61 { | |
62 MODE_SURFACE = 0, | |
63 MODE_DIVE = 1, | |
64 MODE_CALIB = 2, | |
65 MODE_SLEEP = 3, | |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
66 MODE_SHUTDOWN = 4, |
38 | 67 MODE_ENDDIVE = 5, |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
68 MODE_BOOT = 6, |
38 | 69 MODE_CHARGESTART = 7, |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
70 MODE_TEST = 8, |
38 | 71 MODE_POWERUP = 9, |
72 }; | |
73 | |
74 enum ACCIDENT_BITS | |
75 { | |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
76 ACCIDENT_DECOSTOP = 0x01, |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
77 ACCIDENT_CNS = 0x02, |
38 | 78 ACCIDENT_CNSLVL2 = 0x02 + 0x04, |
79 ACCIDENT_SPARE2 = 0x08, | |
80 ACCIDENT_SPARE3 = 0x10, | |
81 ACCIDENT_SPARE4 = 0x20, | |
82 ACCIDENT_SPARE5 = 0x40, | |
83 ACCIDENT_SPARE6 = 0x80 | |
84 }; | |
85 | |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
86 |
38 | 87 typedef struct{ |
88 uint8_t button:1; | |
89 uint8_t date:1; | |
90 uint8_t time:1; | |
91 uint8_t clearDeco:1; | |
92 uint8_t compass:1; | |
93 uint8_t devicedata:1; | |
94 uint8_t batterygauge:1; | |
95 uint8_t accident:1; | |
96 } confirmbit8_t; | |
97 | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
98 typedef struct{ |
559 | 99 uint8_t checkCompass:1; |
100 uint8_t checkADC:1; | |
101 uint8_t reserve:5; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
102 uint8_t extADC:1; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
103 uint8_t compass:8; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
104 } hw_Info_t; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
105 |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
106 |
38 | 107 #define CRBUTTON (0x01) |
108 #define CRDATE (0x02) | |
109 #define CRTIME (0x04) | |
662 | 110 #define CRCLEARDECO (0x08) |
111 #define CRCOMPASS (0x10) | |
112 #define CRDEVICEDATA (0x20) | |
113 #define CRBATTERY (0x40) | |
114 #define CRACCIDENT (0x80) | |
38 | 115 |
116 typedef union{ | |
117 confirmbit8_t ub; | |
118 uint8_t uw; | |
119 } confirmbit8_Type; | |
120 | |
121 typedef struct | |
122 { | |
123 uint8_t checkCode[4]; | |
124 | |
125 } SDataExchangeHeader; | |
126 | |
127 typedef struct | |
128 { | |
129 uint8_t checkCode[4]; | |
130 | |
131 } SDataExchangeFooter; | |
132 | |
133 typedef struct | |
134 { | |
135 SDataExchangeHeader header; | |
136 SLifeData lifeData; | |
137 } SDataExchangeMasterToSlave; | |
138 | |
139 typedef struct | |
140 { | |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
141 int32_t temperature; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
142 uint32_t status; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
143 uint64_t sensorId; |
723 | 144 int32_t intensity; |
145 int32_t ambient; | |
146 int32_t pressure; | |
147 int32_t humidity; | |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
148 } SSensorDataDiveO2; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
149 |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
150 typedef struct |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
151 { |
38 | 152 //pressure |
153 float temperature; | |
154 float pressure_mbar; | |
155 float surface_mbar; | |
156 float ascent_rate_meter_per_min; | |
157 //toxic | |
158 float otu; | |
159 float cns; | |
160 uint16_t desaturation_time_minutes; | |
161 uint16_t no_fly_time_minutes; | |
162 //tisssue | |
163 float tissue_nitrogen_bar[16]; | |
164 float tissue_helium_bar[16]; | |
165 //maxcrushingpressure | |
166 float max_crushing_pressure_he[16]; | |
167 float max_crushing_pressure_n2[16]; | |
168 float adjusted_critical_radius_he[16]; | |
169 float adjusted_critical_radius_n2[16]; | |
170 // Compass | |
171 float compass_heading; | |
172 float compass_roll; | |
173 float compass_pitch; | |
174 int16_t compass_DX_f; | |
175 int16_t compass_DY_f; | |
176 int16_t compass_DZ_f; | |
177 //time | |
178 uint16_t counterSecondsShallowDepth; | |
179 uint32_t localtime_rtc_tr; | |
180 uint32_t localtime_rtc_dr; | |
181 uint32_t divetime_seconds; | |
182 uint32_t surfacetime_seconds; | |
183 uint32_t dive_time_seconds_without_surface_time; | |
184 //battery /* take care of uint8_t count to be in multiplies of 4 */ | |
185 float battery_voltage; | |
186 float battery_charge; | |
187 //ambient light | |
188 uint16_t ambient_light_level; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
189 uint16_t SPARE_ALIGN32; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
190 float extADC_voltage[3]; |
662 | 191 uint16_t CO2_ppm; |
192 uint16_t CO2_signalStrength; | |
193 uint16_t externalInterface_CmdAnswer; | |
714
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
194 uint8_t alignmentdummy; |
045ff7800501
Added customizable data area for specific sensor data:
Ideenmodellierer
parents:
702
diff
changeset
|
195 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
|
196 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
|
197 uint8_t sensor_map[EXT_INTERFACE_SENSOR_CNT]; |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
198 uint8_t SPARE_OldWireless[5]; /* 64 - 12 for extADC - 6 for CO2 - 34 for sensor (+dummmy) - sensor map*/ |
38 | 199 // PIC data |
763
aa6006975e76
increase HAL_Delay to 10ms for cold-start-button reset
heinrichsweikamp
parents:
756
diff
changeset
|
200 uint8_t button_setting[4]; /* see dependency to SlaveData->buttonPICdata */ |
38 | 201 uint8_t SPARE1; |
202 //debug | |
203 uint32_t pressure_uTick; | |
204 uint32_t compass_uTick; | |
205 | |
206 } SExchangeData; | |
207 | |
208 typedef struct | |
209 { | |
210 uint8_t VPMconservatism; | |
211 SGas actualGas; | |
212 | |
213 int8_t offsetPressureSensor_mbar; | |
214 int8_t offsetTemperatureSensor_centiDegree; | |
215 | |
662 | 216 uint16_t externalInterface_Cmd; |
38 | 217 |
728
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
218 uint8_t externalInterface_SensorMap[EXT_INTERFACE_SENSOR_CNT]; |
5143e927219f
Added sensor map to Firmware <=> RTE inferface:
Ideenmodellierer
parents:
723
diff
changeset
|
219 |
38 | 220 float UNUSED1[16-1];//VPM_adjusted_critical_radius_he[16]; |
221 float UNUSED2[16];//VPM_adjusted_critical_radius_n2[16]; | |
222 float UNUSED3[16];//VPM_adjusted_crushing_pressure_he[16]; | |
223 float UNUSED4[16];//VPM_adjusted_crushing_pressure_n2[16]; | |
224 float UNUSED5[16];//VPM_initial_allowable_gradient_he[16]; | |
225 float UNUSED6[16];//VPM_initial_allowable_gradient_n2[16]; | |
226 float UNUSED7[16];//VPM_max_actual_gradient[16]; | |
227 | |
228 RTC_TimeTypeDef newTime; | |
229 RTC_DateTypeDef newDate; | |
230 | |
231 float ambient_pressure_mbar_ceiling; | |
232 float descend_rate_bar_per_minute; | |
233 float ascend_rate_bar_per_minute; | |
234 | |
235 uint16_t timeoutDiveReachedZeroDepth; | |
236 uint16_t divetimeToCreateLogbook; | |
237 | |
238 uint8_t buttonResponsiveness[4]; | |
239 | |
240 SDevice DeviceData; | |
241 | |
242 float newBatteryGaugePercentageFloat; | |
243 | |
244 } SReceiveData; | |
245 | |
246 | |
247 typedef struct | |
248 { | |
249 SDataExchangeHeader header; | |
250 | |
251 uint8_t mode; | |
252 uint8_t power_on_reset; | |
253 uint8_t RTE_VERSION_high; | |
254 uint8_t RTE_VERSION_low; | |
255 | |
256 uint8_t chargeStatus; | |
257 uint8_t boolPICdata; | |
258 confirmbit8_Type confirmRequest; // confirmbit8_Type | |
691 | 259 uint8_t boolADCO2Data; |
38 | 260 |
261 uint8_t boolPressureData; | |
262 uint8_t boolCompassData; | |
263 uint8_t boolTisssueData; | |
264 uint8_t boolCrushingData; | |
265 | |
266 uint8_t boolToxicData; | |
267 uint8_t boolTimeData; | |
268 uint8_t boolBatteryData; | |
269 uint8_t boolAmbientLightData; | |
270 | |
271 uint8_t accidentFlags; | |
272 uint8_t sensorErrors; | |
273 uint8_t spare2; | |
274 uint8_t spare3; | |
275 | |
276 SExchangeData data[2]; | |
277 SDataExchangeFooter footer; | |
278 uint8_t CRC_feature_by_SPI[4]; | |
279 } SDataExchangeSlaveToMaster; | |
280 | |
281 | |
282 typedef struct | |
283 { | |
284 SDataExchangeHeader header; | |
285 | |
286 uint8_t mode; | |
287 uint8_t power_on_reset; | |
288 uint8_t RTE_VERSION_high; | |
289 uint8_t RTE_VERSION_low; | |
290 | |
291 uint8_t chargeStatus; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
292 hw_Info_t hw_Info; |
38 | 293 uint8_t spare1; |
294 | |
295 uint8_t boolDeviceData; | |
296 uint8_t boolVpmRepetitiveDataValid; | |
297 uint8_t bool3; | |
298 uint8_t bool4; | |
299 | |
300 uint8_t spare1_1; | |
301 uint8_t spare1_2; | |
302 uint8_t spare1_3; | |
303 uint8_t spare1_4; | |
304 | |
305 uint8_t spare2_1; | |
306 uint8_t spare2_2; | |
307 uint8_t spare2_3; | |
308 uint8_t spare2_4; | |
309 | |
310 SDevice DeviceData[2]; | |
311 SVpmRepetitiveData VpmRepetitiveData; | |
312 | |
313 uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - ((2 * sizeof(SDevice)) + sizeof(SVpmRepetitiveData))]; | |
314 SDataExchangeFooter footer; | |
315 uint8_t CRC_feature_by_SPI[4]; | |
316 } SDataExchangeSlaveToMasterDeviceData; | |
317 | |
318 | |
319 typedef struct | |
320 { | |
321 SDataExchangeHeader header; | |
322 | |
323 uint8_t mode; | |
324 uint8_t getDeviceDataNow; | |
325 uint8_t diveModeInfo; | |
326 uint8_t setEndDive; | |
327 | |
328 uint8_t bool4; | |
329 uint8_t setButtonSensitivityNow; | |
330 uint8_t setDateNow; | |
331 uint8_t setTimeNow; | |
332 | |
333 uint8_t calibrateCompassNow; | |
334 uint8_t clearDecoNow; | |
335 uint8_t setBatteryGaugeNow; | |
336 uint8_t bool9; | |
337 | |
338 uint8_t revisionHardware; | |
339 uint8_t revisionCRCx0x7A; | |
340 uint8_t spare1_3; | |
341 uint8_t spare1_4; | |
342 | |
343 uint8_t setAccidentFlag; | |
344 uint8_t spare2_1; | |
345 uint8_t spare2_2; | |
346 uint8_t spare2_3; | |
347 | |
348 SReceiveData data; | |
349 uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - sizeof(SReceiveData)]; | |
350 SDataExchangeFooter footer; | |
351 uint8_t CRC_feature_by_SPI[4]; | |
352 } SDataReceiveFromMaster; | |
353 | |
354 | |
355 /* Size of Transmission buffer */ | |
356 #define EXCHANGE_BUFFERSIZE (sizeof(SDataExchangeSlaveToMaster) - 2) | |
357 #define EXCHANGE_BUFFERSIZE2 (sizeof(SDataReceiveFromMaster) - 2) | |
358 // header: 5 | |
359 // mode+bool: 5 | |
360 // data 552 ( 69 * float/4 * 2 ) | |
361 // footer: 4 | |
362 // ______________ | |
363 // SUM 566 | |
364 // CRC_feature does not count into BUFFERSIZE! | |
365 | |
366 //(COUNTOF(struct SDataExchangeSlaveToMaster) + 1) | |
367 | |
368 /* Exported macro ------------------------------------------------------------*/ | |
369 //#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) | |
370 | |
371 #endif /* DATA_EXCHANGE_H */ | |
372 |