Mercurial > public > ostc4
annotate Discovery/Src/logbook_miniLive.c @ 322:31e471d60797 O2_SensorSync
Added start of frame detection for HUD data
In the previous impmenentation the reception and evaluation of 15 byte were used without start detection. As a result sensor data could be stuck in case the frame sequence does not match the structure (e.g. cause by an framing error).
To resolve this in case of an invalid checksumme in combination with a data lost detection a byte based reception is startet to detect the start of a frame using the break between two transmissions.
In addition a babbling idiot protecting has been added because a faulty hardware could have an impact on the OSTC operation (high interrupt load)
author | ideenmodellierer |
---|---|
date | Sun, 30 Jun 2019 21:25:58 +0200 |
parents | 5ca177d2df5d |
children | 0a3836643173 |
rev | line source |
---|---|
38 | 1 /** |
2 ****************************************************************************** | |
3 * @copyright heinrichs weikamp | |
4 * @file logbook_miniLive.c | |
5 * @author heinrichs weikamp gmbh | |
6 * @date 13-March-2015 | |
7 * @version V0.0.1 | |
8 * @since 13-March-2015 | |
9 * @brief little logbook for during the dive | |
10 * @bug | |
11 * @warning | |
12 ****************************************************************************** | |
13 * @attention | |
14 * | |
15 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> | |
16 * | |
17 ****************************************************************************** | |
18 */ | |
19 | |
20 /* Includes ------------------------------------------------------------------*/ | |
21 #include "logbook_miniLive.h" | |
22 #include "data_exchange.h" | |
23 | |
24 /* | |
25 ****************************************************************************** | |
26 * @brief t7_updateMiniLiveLogbook. / Create depth samples for view during dive | |
27 * @author heinrichs weikamp gmbh | |
28 * @version V0.0.1 | |
29 * @date 13-March-2015 | |
30 ****************************************************************************** | |
31 * | |
32 */ | |
33 | |
34 #define MLLsize (296) | |
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
35 static uint16_t MLLdataDepth[MLLsize]; |
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
36 static uint16_t MLLpointer = 0; |
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
37 static uint8_t MLLtickIntervallSeconds = 2; |
38 | 38 |
39 | |
40 uint16_t *getMiniLiveLogbookPointerToData(void) | |
41 { | |
42 return MLLdataDepth; | |
43 } | |
44 | |
45 | |
46 uint16_t getMiniLiveLogbookActualDataLength(void) | |
47 { | |
48 return MLLpointer; | |
49 } | |
50 | |
51 | |
52 | |
53 void updateMiniLiveLogbook( _Bool checkOncePerSecond) | |
54 { | |
55 static uint8_t bDiveMode = 0; | |
56 static uint32_t last_second = 0; | |
57 static uint8_t secondsCount = 0; | |
58 | |
59 if(checkOncePerSecond) | |
60 { | |
61 uint32_t now = current_second(); | |
62 if( last_second == now) | |
63 return; | |
64 last_second = now; | |
65 } | |
66 secondsCount++; | |
67 | |
68 if(!bDiveMode) | |
69 { | |
70 if((stateUsed->mode == MODE_DIVE) && (stateUsed->lifeData.dive_time_seconds >= 5)) | |
71 { | |
72 secondsCount = 0; | |
73 MLLtickIntervallSeconds = 2; | |
74 bDiveMode = 1; | |
75 MLLpointer = 1; | |
76 for(int i=0;i<MLLsize;i++) | |
77 MLLdataDepth[i] = 0; | |
78 } | |
79 } | |
80 else if(stateUsed->mode == MODE_DIVE) | |
81 { | |
82 bDiveMode = 3; | |
83 // | |
84 if(secondsCount >= MLLtickIntervallSeconds) | |
85 { | |
86 secondsCount = 0; | |
87 if((MLLpointer >= MLLsize) && (MLLtickIntervallSeconds < 127)) | |
88 { | |
89 MLLpointer = 0; | |
90 MLLtickIntervallSeconds *= 2; | |
91 for(int i=0;i<MLLsize/2;i++) | |
92 { | |
93 MLLdataDepth[i] = MLLdataDepth[MLLpointer++]; | |
94 MLLdataDepth[i] += MLLdataDepth[MLLpointer++]; | |
95 MLLdataDepth[i] /= 2; | |
96 } | |
97 MLLpointer = MLLsize/2; | |
98 for(int i=MLLsize/2;i<MLLsize;i++) | |
99 MLLdataDepth[i] = 0; | |
100 } | |
101 if(MLLpointer < MLLsize) | |
102 MLLdataDepth[MLLpointer++] = (int)(stateUsed->lifeData.depth_meter * 10); | |
103 } | |
104 } | |
105 else if(bDiveMode == 3) | |
106 { | |
107 //End of Dive | |
108 for(int i=0;i<MLLsize;i++) | |
109 MLLdataDepth[i] = 0; | |
110 bDiveMode = 0; | |
111 } | |
112 } | |
113 | |
114 | |
115 | |
116 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |