comparison Discovery/Src/data_exchange_main.c @ 662:1b995079c045 Betatest

PSCR Mode
author heinrichs weikamp
date Tue, 14 Dec 2021 15:36:10 +0100
parents 830de438e0b0
children 52d68cf9994c
comparison
equal deleted inserted replaced
661:87bee7cc77b3 662:1b995079c045
70 #include "tCCR.h" 70 #include "tCCR.h"
71 #include "timer.h" 71 #include "timer.h"
72 #include "buehlmann.h" 72 #include "buehlmann.h"
73 #include "externLogbookFlash.h" 73 #include "externLogbookFlash.h"
74 74
75 //#define TESTBENCH 75 /* #define TESTBENCH */
76 76
77 /* Exported variables --------------------------------------------------------*/ 77 /* Exported variables --------------------------------------------------------*/
78 static uint8_t wasPowerOn = 0; 78 static uint8_t wasPowerOn = 0;
79 static confirmbit8_Type requestNecessary = { .uw = 0 }; 79 static confirmbit8_Type requestNecessary = { .uw = 0 };
80 static uint8_t wasUpdateNotPowerOn = 0; 80 static uint8_t wasUpdateNotPowerOn = 0;
91 static uint8_t data_old__lost_connection_to_slave_counter_temp = 0; 91 static uint8_t data_old__lost_connection_to_slave_counter_temp = 0;
92 static uint8_t data_old__lost_connection_to_slave_counter_retry = 0; 92 static uint8_t data_old__lost_connection_to_slave_counter_retry = 0;
93 static uint32_t data_old__lost_connection_to_slave_counter_total = 0; 93 static uint32_t data_old__lost_connection_to_slave_counter_total = 0;
94 94
95 static uint8_t DeviceDataUpdated = 0; 95 static uint8_t DeviceDataUpdated = 0;
96
97 static uint16_t externalInterface_Cmd = 0;
96 98
97 /* Private types -------------------------------------------------------------*/ 99 /* Private types -------------------------------------------------------------*/
98 #define UNKNOWN_TIME_HOURS 1 100 #define UNKNOWN_TIME_HOURS 1
99 #define UNKNOWN_TIME_MINUTES 0 101 #define UNKNOWN_TIME_MINUTES 0
100 #define UNKNOWN_TIME_SECOND 0 102 #define UNKNOWN_TIME_SECOND 0
179 static uint8_t setEndDiveWasSend = 0; 181 static uint8_t setEndDiveWasSend = 0;
180 182
181 if(getDeviceDataWasSend) 183 if(getDeviceDataWasSend)
182 { 184 {
183 dataOut.getDeviceDataNow = 0; 185 dataOut.getDeviceDataNow = 0;
184 requestNecessary.ub.devicedata = 1;
185 } 186 }
186 getDeviceDataWasSend = 0; 187 getDeviceDataWasSend = 0;
187 if(dataOut.getDeviceDataNow) 188 if(dataOut.getDeviceDataNow)
188 { 189 {
189 getDeviceDataWasSend = 1; 190 getDeviceDataWasSend = 1;
191 requestNecessary.ub.devicedata = 1;
190 } 192 }
191 193
192 if(setEndDiveWasSend) 194 if(setEndDiveWasSend)
193 { 195 {
194 dataOut.setEndDive = 0; 196 dataOut.setEndDive = 0;
201 } 203 }
202 204
203 if(setAccidentFlagWasSend) 205 if(setAccidentFlagWasSend)
204 { 206 {
205 dataOut.setAccidentFlag = 0; 207 dataOut.setAccidentFlag = 0;
206 requestNecessary.ub.accident = 1;
207 } 208 }
208 setAccidentFlagWasSend = 0; 209 setAccidentFlagWasSend = 0;
209 if(dataOut.setAccidentFlag) 210 if(dataOut.setAccidentFlag)
210 { 211 {
211 setAccidentFlagWasSend = 1; 212 setAccidentFlagWasSend = 1;
213 requestNecessary.ub.accident = 1;
212 } 214 }
213 215
214 if(setDateWasSend) 216 if(setDateWasSend)
215 { 217 {
216 dataOut.setDateNow = 0; 218 dataOut.setDateNow = 0;
217 requestNecessary.ub.date = 1;
218 } 219 }
219 setDateWasSend = 0; 220 setDateWasSend = 0;
220 if(dataOut.setDateNow) 221 if(dataOut.setDateNow)
221 { 222 {
222 setDateWasSend = 1; 223 setDateWasSend = 1;
224 requestNecessary.ub.date = 1;
223 } 225 }
224 226
225 if(setTimeWasSend) 227 if(setTimeWasSend)
226 { 228 {
227 dataOut.setTimeNow = 0; 229 dataOut.setTimeNow = 0;
228 requestNecessary.ub.time = 1;
229 } 230 }
230 setTimeWasSend = 0; 231 setTimeWasSend = 0;
231 if(dataOut.setTimeNow) 232 if(dataOut.setTimeNow)
232 { 233 {
233 setTimeWasSend = 1; 234 setTimeWasSend = 1;
235 requestNecessary.ub.time = 1;
234 } 236 }
235 237
236 if(calibrateCompassWasSend) 238 if(calibrateCompassWasSend)
237 { 239 {
238 dataOut.calibrateCompassNow = 0; 240 dataOut.calibrateCompassNow = 0;
239 requestNecessary.ub.compass = 1;
240 } 241 }
241 calibrateCompassWasSend = 0; 242 calibrateCompassWasSend = 0;
242 if(dataOut.calibrateCompassNow) 243 if(dataOut.calibrateCompassNow)
243 { 244 {
244 calibrateCompassWasSend = 1; 245 calibrateCompassWasSend = 1;
245 } 246 }
246 247
247 if(clearDecoWasSend) 248 if(clearDecoWasSend)
248 { 249 {
249 dataOut.clearDecoNow = 0; 250 dataOut.clearDecoNow = 0;
251 requestNecessary.ub.compass = 1;
252 }
253 if(dataOut.clearDecoNow)
254 {
255 clearDecoWasSend = 1;
250 requestNecessary.ub.clearDeco = 1; 256 requestNecessary.ub.clearDeco = 1;
251 } 257 }
252 if(dataOut.clearDecoNow)
253 {
254 clearDecoWasSend = 1;
255 }
256 258
257 if(setButtonSensitivityWasSend) 259 if(setButtonSensitivityWasSend)
258 { 260 {
259 dataOut.setButtonSensitivityNow = 0; 261 dataOut.setButtonSensitivityNow = 0;
260 requestNecessary.ub.button = 1;
261 } 262 }
262 setButtonSensitivityWasSend = 0; 263 setButtonSensitivityWasSend = 0;
263 if(dataOut.setButtonSensitivityNow) 264 if(dataOut.setButtonSensitivityNow)
264 { 265 {
265 setButtonSensitivityWasSend = 1; 266 setButtonSensitivityWasSend = 1;
267 requestNecessary.ub.button = 1;
266 } 268 }
267 } 269 }
268 270
269 271
270 uint8_t DataEX_call(void) 272 uint8_t DataEX_call(void)
386 dataOut.data.divetimeToCreateLogbook = settings->divetimeToCreateLogbook; 388 dataOut.data.divetimeToCreateLogbook = settings->divetimeToCreateLogbook;
387 dataOut.data.timeoutDiveReachedZeroDepth = settings->timeoutDiveReachedZeroDepth; 389 dataOut.data.timeoutDiveReachedZeroDepth = settings->timeoutDiveReachedZeroDepth;
388 390
389 dataOut.data.offsetPressureSensor_mbar = settings->offsetPressure_mbar; 391 dataOut.data.offsetPressureSensor_mbar = settings->offsetPressure_mbar;
390 dataOut.data.offsetTemperatureSensor_centiDegree = settings->offsetTemperature_centigrad; 392 dataOut.data.offsetTemperatureSensor_centiDegree = settings->offsetTemperature_centigrad;
393
394 if(settings->co2_sensor_active)
395 {
396 externalInterface_Cmd |= EXT_INTERFACE_33V_ON;
397 }
398 dataOut.data.externalInterface_Cmd = externalInterface_Cmd;
399 externalInterface_Cmd = 0;
391 400
392 if((hardwareDataGetPointer()->primarySerial <= 32) || (((hardwareDataGetPointer()->primarySerial == 72) && (hardwareDataGetPointer()->secondarySerial == 15)))) 401 if((hardwareDataGetPointer()->primarySerial <= 32) || (((hardwareDataGetPointer()->primarySerial == 72) && (hardwareDataGetPointer()->secondarySerial == 15))))
393 { 402 {
394 dataOut.revisionHardware = 0x00; 403 dataOut.revisionHardware = 0x00;
395 dataOut.revisionCRCx0x7A = 0x7A; 404 dataOut.revisionCRCx0x7A = 0x7A;
771 return temp; 780 return temp;
772 } 781 }
773 782
774 void DataEX_copy_to_LifeData(_Bool *modeChangeFlag) 783 void DataEX_copy_to_LifeData(_Bool *modeChangeFlag)
775 { 784 {
785 static uint16_t getDeviceDataAfterStartOfMainCPU = 20;
786
776 SDiveState *pStateReal = stateRealGetPointerWrite(); 787 SDiveState *pStateReal = stateRealGetPointerWrite();
777 static uint16_t getDeviceDataAfterStartOfMainCPU = 20;
778 uint8_t idx; 788 uint8_t idx;
789 float meter = 0;
790 SSettings *pSettings;
791
792
779 793
780 // wireless - �ltere daten aufr�umen 794 // wireless - �ltere daten aufr�umen
781 #if 0 795 #if 0
782 for(int i=0;i<(2*NUM_GASES+1);i++) 796 for(int i=0;i<(2*NUM_GASES+1);i++)
783 { 797 {
834 dataOut.getDeviceDataNow = 1; 848 dataOut.getDeviceDataNow = 1;
835 getDeviceDataAfterStartOfMainCPU = 10*60*10; /* * 100ms = 60 second => update device data every 10 minutes */ 849 getDeviceDataAfterStartOfMainCPU = 10*60*10; /* * 100ms = 60 second => update device data every 10 minutes */
836 } 850 }
837 } 851 }
838 852
839 /* new 151207 hw */ 853 if((requestNecessary.uw != 0) && (dataIn.confirmRequest.uw != 0))
840 if(requestNecessary.uw != 0)
841 { 854 {
842 if(((dataIn.confirmRequest.uw) & CRBUTTON) != 0) 855 if(((dataIn.confirmRequest.uw) & CRBUTTON) != 0)
843 { 856 {
844 requestNecessary.ub.button = 0; 857 requestNecessary.ub.button = 0;
845 } 858 }
846 859 if(((dataIn.confirmRequest.uw) & CRCLEARDECO) != 0)
847 if(requestNecessary.ub.button == 1) 860 {
861 requestNecessary.ub.clearDeco = 0;
862 }
863 if(((dataIn.confirmRequest.uw) & CRDATE) != 0)
864 {
865 requestNecessary.ub.date = 0;
866 }
867 if(((dataIn.confirmRequest.uw) & CRTIME) != 0)
868 {
869 requestNecessary.ub.time = 0;
870 }
871 if(((dataIn.confirmRequest.uw) & CRCOMPASS) != 0)
872 {
873 requestNecessary.ub.compass = 0;
874 }
875 if(((dataIn.confirmRequest.uw) & CRDEVICEDATA) != 0)
876 {
877 requestNecessary.ub.devicedata = 0;
878 }
879 if(((dataIn.confirmRequest.uw) & CRBATTERY) != 0)
880 {
881 requestNecessary.ub.batterygauge = 0;
882 }
883 if(((dataIn.confirmRequest.uw) & CRACCIDENT) != 0)
884 {
885 requestNecessary.ub.accident = 0;
886 }
887
888 if(requestNecessary.ub.button == 1) /* send button values to RTE */
848 { 889 {
849 setButtonResponsiveness(settingsGetPointer()->ButtonResponsiveness); 890 setButtonResponsiveness(settingsGetPointer()->ButtonResponsiveness);
850 } 891 }
851 } 892 }
852 requestNecessary.uw = 0; // clear all
853
854 float meter = 0;
855 SSettings *pSettings;
856 893
857 /* uint8_t IAmStolenPleaseKillMe; 894 /* uint8_t IAmStolenPleaseKillMe;
858 */ 895 */
859 pSettings = settingsGetPointer(); 896 pSettings = settingsGetPointer();
860 897
907 pStateReal->pressure_uTick_local_new = HAL_GetTick(); 944 pStateReal->pressure_uTick_local_new = HAL_GetTick();
908 945
909 pStateReal->lifeData.dateBinaryFormat = dataIn.data[dataIn.boolTimeData].localtime_rtc_dr; 946 pStateReal->lifeData.dateBinaryFormat = dataIn.data[dataIn.boolTimeData].localtime_rtc_dr;
910 pStateReal->lifeData.timeBinaryFormat = dataIn.data[dataIn.boolTimeData].localtime_rtc_tr; 947 pStateReal->lifeData.timeBinaryFormat = dataIn.data[dataIn.boolTimeData].localtime_rtc_tr;
911 } 948 }
912 dataOut.setAccidentFlag = 0;
913 949
914 if(pStateReal->data_old__lost_connection_to_slave == 0) 950 if(pStateReal->data_old__lost_connection_to_slave == 0)
915 { 951 {
916 //Start of diveMode? 952 //Start of diveMode?
917 if(pStateReal->mode != MODE_DIVE && dataIn.mode == MODE_DIVE) 953 if(pStateReal->mode != MODE_DIVE && dataIn.mode == MODE_DIVE)
969 { 1005 {
970 if(meter > pStateReal->lifeData.max_depth_meter) 1006 if(meter > pStateReal->lifeData.max_depth_meter)
971 pStateReal->lifeData.max_depth_meter = meter; 1007 pStateReal->lifeData.max_depth_meter = meter;
972 } 1008 }
973 1009
974 if(dataIn.accidentFlags & ACCIDENT_DECOSTOP) 1010 if(requestNecessary.ub.clearDeco == 0) /* No "reset deco" is send to RTE ? */
975 pStateReal->decoMissed_at_the_end_of_dive = 1; 1011 {
976 if(dataIn.accidentFlags & ACCIDENT_CNS) 1012 if(dataIn.accidentFlags & ACCIDENT_DECOSTOP)
977 pStateReal->cnsHigh_at_the_end_of_dive = 1; 1013 {
978 1014 pStateReal->decoMissed_at_the_end_of_dive = 1;
1015 }
1016 else
1017 {
1018 pStateReal->decoMissed_at_the_end_of_dive = 0;
1019 }
1020 if(dataIn.accidentFlags & ACCIDENT_CNS)
1021 {
1022 pStateReal->cnsHigh_at_the_end_of_dive = 1;
1023 }
1024 else
1025 {
1026 pStateReal->cnsHigh_at_the_end_of_dive = 0;
1027 }
1028 }
979 pStateReal->lifeData.dive_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].divetime_seconds; 1029 pStateReal->lifeData.dive_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].divetime_seconds;
980 pStateReal->lifeData.dive_time_seconds_without_surface_time = (int32_t)dataIn.data[dataIn.boolTimeData].dive_time_seconds_without_surface_time; 1030 pStateReal->lifeData.dive_time_seconds_without_surface_time = (int32_t)dataIn.data[dataIn.boolTimeData].dive_time_seconds_without_surface_time;
981 pStateReal->lifeData.counterSecondsShallowDepth = dataIn.data[dataIn.boolTimeData].counterSecondsShallowDepth; 1031 pStateReal->lifeData.counterSecondsShallowDepth = dataIn.data[dataIn.boolTimeData].counterSecondsShallowDepth;
982 pStateReal->lifeData.surface_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].surfacetime_seconds; 1032 pStateReal->lifeData.surface_time_seconds = (int32_t)dataIn.data[dataIn.boolTimeData].surfacetime_seconds;
983 1033
1028 } 1078 }
1029 1079
1030 /* sensorErrors 1080 /* sensorErrors
1031 */ 1081 */
1032 pStateReal->sensorErrorsRTE = dataIn.sensorErrors; 1082 pStateReal->sensorErrorsRTE = dataIn.sensorErrors;
1083
1084 /* data from CO2 sensor */
1085 pStateReal->lifeData.CO2_data.CO2_ppm = dataIn.data[0].CO2_ppm;
1086 pStateReal->lifeData.CO2_data.signalStrength = dataIn.data[0].CO2_signalStrength;
1033 } 1087 }
1034 1088
1035 /* apnea specials 1089 /* apnea specials
1036 */ 1090 */
1037 if(pStateReal->diveSettings.diveMode == DIVEMODE_Apnea) 1091 if(pStateReal->diveSettings.diveMode == DIVEMODE_Apnea)
1203 uint8_t retval; 1257 uint8_t retval;
1204 retval = hw_Info.extADC; 1258 retval = hw_Info.extADC;
1205 1259
1206 return retval; 1260 return retval;
1207 } 1261 }
1262
1263 void DataEX_setExtInterface_Cmd(uint16_t Cmd)
1264 {
1265 externalInterface_Cmd = Cmd;
1266 return;
1267 }
1268