Mercurial > public > ostc4
annotate Common/Inc/data_exchange.h @ 555:573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
The information if an external ADC is supported and the type of the compass is forwarded to the Firmware software. This is especially needed to enable the menu structure to support calibration of external sensors
author | Ideenmodellierer |
---|---|
date | Thu, 12 Nov 2020 19:48:28 +0100 |
parents | 8f8ea3a32e82 |
children | 84a4e1200726 |
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 | |
34 enum MODE | |
35 { | |
36 MODE_SURFACE = 0, | |
37 MODE_DIVE = 1, | |
38 MODE_CALIB = 2, | |
39 MODE_SLEEP = 3, | |
40 MODE_SHUTDOWN = 4, | |
41 MODE_ENDDIVE = 5, | |
42 MODE_BOOT = 6, | |
43 MODE_CHARGESTART = 7, | |
44 MODE_TEST = 8, | |
45 MODE_POWERUP = 9, | |
46 }; | |
47 | |
48 enum ACCIDENT_BITS | |
49 { | |
50 ACCIDENT_DECOSTOP = 0x01, | |
51 ACCIDENT_CNS = 0x02, | |
52 ACCIDENT_CNSLVL2 = 0x02 + 0x04, | |
53 ACCIDENT_SPARE2 = 0x08, | |
54 ACCIDENT_SPARE3 = 0x10, | |
55 ACCIDENT_SPARE4 = 0x20, | |
56 ACCIDENT_SPARE5 = 0x40, | |
57 ACCIDENT_SPARE6 = 0x80 | |
58 }; | |
59 | |
60 typedef struct{ | |
61 uint8_t button:1; | |
62 uint8_t date:1; | |
63 uint8_t time:1; | |
64 uint8_t clearDeco:1; | |
65 uint8_t compass:1; | |
66 uint8_t devicedata:1; | |
67 uint8_t batterygauge:1; | |
68 uint8_t accident:1; | |
69 } confirmbit8_t; | |
70 | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
71 typedef struct{ |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
72 uint8_t reserve:7; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
73 uint8_t extADC:1; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
74 uint8_t compass:8; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
75 } hw_Info_t; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
76 |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
77 |
38 | 78 #define CRBUTTON (0x01) |
79 #define CRDATE (0x02) | |
80 #define CRTIME (0x04) | |
81 #define CRCLEARDECO (0x08) | |
82 #define CRCOMPASS (0x10) | |
83 #define CRDEVICEDATA (0x20) | |
84 | |
85 typedef union{ | |
86 confirmbit8_t ub; | |
87 uint8_t uw; | |
88 } confirmbit8_Type; | |
89 | |
90 typedef struct | |
91 { | |
92 uint8_t checkCode[4]; | |
93 | |
94 } SDataExchangeHeader; | |
95 | |
96 typedef struct | |
97 { | |
98 uint8_t checkCode[4]; | |
99 | |
100 } SDataExchangeFooter; | |
101 | |
102 typedef struct | |
103 { | |
104 SDataExchangeHeader header; | |
105 SLifeData lifeData; | |
106 } SDataExchangeMasterToSlave; | |
107 | |
108 typedef struct | |
109 { | |
110 //pressure | |
111 float temperature; | |
112 float pressure_mbar; | |
113 float surface_mbar; | |
114 float ascent_rate_meter_per_min; | |
115 //toxic | |
116 float otu; | |
117 float cns; | |
118 uint16_t desaturation_time_minutes; | |
119 uint16_t no_fly_time_minutes; | |
120 //tisssue | |
121 float tissue_nitrogen_bar[16]; | |
122 float tissue_helium_bar[16]; | |
123 //maxcrushingpressure | |
124 float max_crushing_pressure_he[16]; | |
125 float max_crushing_pressure_n2[16]; | |
126 float adjusted_critical_radius_he[16]; | |
127 float adjusted_critical_radius_n2[16]; | |
128 // Compass | |
129 float compass_heading; | |
130 float compass_roll; | |
131 float compass_pitch; | |
132 int16_t compass_DX_f; | |
133 int16_t compass_DY_f; | |
134 int16_t compass_DZ_f; | |
135 //time | |
136 uint16_t counterSecondsShallowDepth; | |
137 uint32_t localtime_rtc_tr; | |
138 uint32_t localtime_rtc_dr; | |
139 uint32_t divetime_seconds; | |
140 uint32_t surfacetime_seconds; | |
141 uint32_t dive_time_seconds_without_surface_time; | |
142 //battery /* take care of uint8_t count to be in multiplies of 4 */ | |
143 float battery_voltage; | |
144 float battery_charge; | |
145 //ambient light | |
146 uint16_t ambient_light_level; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
147 uint16_t SPARE_ALIGN32; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
148 float extADC_voltage[3]; |
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
149 uint8_t SPARE_OldWireless[50]; /* 64 - 12 for extADC */ |
38 | 150 // PIC data |
51
8f8ea3a32e82
Resolved warnings pointing to possible invalid memory access
Ideenmodellierer
parents:
38
diff
changeset
|
151 uint8_t button_setting[4]; /* see dependency to SLiveData->buttonPICdata */ |
38 | 152 uint8_t SPARE1; |
153 //debug | |
154 uint32_t pressure_uTick; | |
155 uint32_t compass_uTick; | |
156 | |
157 } SExchangeData; | |
158 | |
159 typedef struct | |
160 { | |
161 uint8_t VPMconservatism; | |
162 SGas actualGas; | |
163 | |
164 int8_t offsetPressureSensor_mbar; | |
165 int8_t offsetTemperatureSensor_centiDegree; | |
166 | |
167 uint8_t SPARE1; | |
168 uint8_t SPARE2; | |
169 | |
170 float UNUSED1[16-1];//VPM_adjusted_critical_radius_he[16]; | |
171 float UNUSED2[16];//VPM_adjusted_critical_radius_n2[16]; | |
172 float UNUSED3[16];//VPM_adjusted_crushing_pressure_he[16]; | |
173 float UNUSED4[16];//VPM_adjusted_crushing_pressure_n2[16]; | |
174 float UNUSED5[16];//VPM_initial_allowable_gradient_he[16]; | |
175 float UNUSED6[16];//VPM_initial_allowable_gradient_n2[16]; | |
176 float UNUSED7[16];//VPM_max_actual_gradient[16]; | |
177 | |
178 RTC_TimeTypeDef newTime; | |
179 RTC_DateTypeDef newDate; | |
180 | |
181 float ambient_pressure_mbar_ceiling; | |
182 float descend_rate_bar_per_minute; | |
183 float ascend_rate_bar_per_minute; | |
184 | |
185 uint16_t timeoutDiveReachedZeroDepth; | |
186 uint16_t divetimeToCreateLogbook; | |
187 | |
188 uint8_t buttonResponsiveness[4]; | |
189 | |
190 SDevice DeviceData; | |
191 | |
192 float newBatteryGaugePercentageFloat; | |
193 | |
194 } SReceiveData; | |
195 | |
196 | |
197 typedef struct | |
198 { | |
199 SDataExchangeHeader header; | |
200 | |
201 uint8_t mode; | |
202 uint8_t power_on_reset; | |
203 uint8_t RTE_VERSION_high; | |
204 uint8_t RTE_VERSION_low; | |
205 | |
206 uint8_t chargeStatus; | |
207 uint8_t boolPICdata; | |
208 confirmbit8_Type confirmRequest; // confirmbit8_Type | |
209 uint8_t boolWirelessData; | |
210 | |
211 uint8_t boolPressureData; | |
212 uint8_t boolCompassData; | |
213 uint8_t boolTisssueData; | |
214 uint8_t boolCrushingData; | |
215 | |
216 uint8_t boolToxicData; | |
217 uint8_t boolTimeData; | |
218 uint8_t boolBatteryData; | |
219 uint8_t boolAmbientLightData; | |
220 | |
221 uint8_t accidentFlags; | |
222 uint8_t sensorErrors; | |
223 uint8_t spare2; | |
224 uint8_t spare3; | |
225 | |
226 SExchangeData data[2]; | |
227 SDataExchangeFooter footer; | |
228 uint8_t CRC_feature_by_SPI[4]; | |
229 } SDataExchangeSlaveToMaster; | |
230 | |
231 | |
232 typedef struct | |
233 { | |
234 SDataExchangeHeader header; | |
235 | |
236 uint8_t mode; | |
237 uint8_t power_on_reset; | |
238 uint8_t RTE_VERSION_high; | |
239 uint8_t RTE_VERSION_low; | |
240 | |
241 uint8_t chargeStatus; | |
555
573a2bc796c8
Added HW_Info to Discovery <=> RTE data exchange:
Ideenmodellierer
parents:
51
diff
changeset
|
242 hw_Info_t hw_Info; |
38 | 243 uint8_t spare1; |
244 | |
245 uint8_t boolDeviceData; | |
246 uint8_t boolVpmRepetitiveDataValid; | |
247 uint8_t bool3; | |
248 uint8_t bool4; | |
249 | |
250 uint8_t spare1_1; | |
251 uint8_t spare1_2; | |
252 uint8_t spare1_3; | |
253 uint8_t spare1_4; | |
254 | |
255 uint8_t spare2_1; | |
256 uint8_t spare2_2; | |
257 uint8_t spare2_3; | |
258 uint8_t spare2_4; | |
259 | |
260 SDevice DeviceData[2]; | |
261 SVpmRepetitiveData VpmRepetitiveData; | |
262 | |
263 uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - ((2 * sizeof(SDevice)) + sizeof(SVpmRepetitiveData))]; | |
264 SDataExchangeFooter footer; | |
265 uint8_t CRC_feature_by_SPI[4]; | |
266 } SDataExchangeSlaveToMasterDeviceData; | |
267 | |
268 | |
269 typedef struct | |
270 { | |
271 SDataExchangeHeader header; | |
272 | |
273 uint8_t mode; | |
274 uint8_t getDeviceDataNow; | |
275 uint8_t diveModeInfo; | |
276 uint8_t setEndDive; | |
277 | |
278 uint8_t bool4; | |
279 uint8_t setButtonSensitivityNow; | |
280 uint8_t setDateNow; | |
281 uint8_t setTimeNow; | |
282 | |
283 uint8_t calibrateCompassNow; | |
284 uint8_t clearDecoNow; | |
285 uint8_t setBatteryGaugeNow; | |
286 uint8_t bool9; | |
287 | |
288 uint8_t revisionHardware; | |
289 uint8_t revisionCRCx0x7A; | |
290 uint8_t spare1_3; | |
291 uint8_t spare1_4; | |
292 | |
293 uint8_t setAccidentFlag; | |
294 uint8_t spare2_1; | |
295 uint8_t spare2_2; | |
296 uint8_t spare2_3; | |
297 | |
298 SReceiveData data; | |
299 uint8_t arraySizeOfMinimumSExChangeDate[(2 * sizeof(SExchangeData)) - sizeof(SReceiveData)]; | |
300 SDataExchangeFooter footer; | |
301 uint8_t CRC_feature_by_SPI[4]; | |
302 } SDataReceiveFromMaster; | |
303 | |
304 | |
305 /* Size of Transmission buffer */ | |
306 #define EXCHANGE_BUFFERSIZE (sizeof(SDataExchangeSlaveToMaster) - 2) | |
307 #define EXCHANGE_BUFFERSIZE2 (sizeof(SDataReceiveFromMaster) - 2) | |
308 // header: 5 | |
309 // mode+bool: 5 | |
310 // data 552 ( 69 * float/4 * 2 ) | |
311 // footer: 4 | |
312 // ______________ | |
313 // SUM 566 | |
314 // CRC_feature does not count into BUFFERSIZE! | |
315 | |
316 //(COUNTOF(struct SDataExchangeSlaveToMaster) + 1) | |
317 | |
318 /* Exported macro ------------------------------------------------------------*/ | |
319 //#define COUNTOF(__BUFFER__) (sizeof(__BUFFER__) / sizeof(*(__BUFFER__))) | |
320 | |
321 #endif /* DATA_EXCHANGE_H */ | |
322 |