annotate Discovery/Src/hud.c @ 1082:1aa45000f92c Icon_Integration tip

Added configuration menu for HUD functions: The V1 HUD has 4 functions (holes) which may be realized by one or two LEDs. The functions (like ppo2 monitoring or ascent speed) may be configurated by the diver using the HUD menu. The functions which may be selected depend on the HW configuration (e.g. the connected sensors) and the number of LEDs which are needed to realize the function. The previous HUD test implementation may still be activate usind the compile switch ENABLE_HUD_TESTING
author Ideenmodellierer
date Sun, 15 Mar 2026 21:40:35 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1082
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
1 /**
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
2 ******************************************************************************
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
3 * @file hud.c
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
4 * @author heinrichs weikamp gmbh
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
5 * @version V0.0.1
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
6 * @date 09-Mar-2026
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
7 * @brief Support function for HUD configuration
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
8 *
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
9 @verbatim
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
10 ==============================================================================
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
11 ##### How to use #####
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
12 ==============================================================================
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
13 @endverbatim
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
14 ******************************************************************************
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
15 * @attention
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
16 *
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
17 * COPYRIGHT(c) 2026 heinrichs weikamp
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
18 *
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
19 ******************************************************************************
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
20 */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
21
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
22 #include "hud.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
23 #include "settings.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
24 #include "data_central.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
25 #include "data_exchange.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
26 #include "data_exchange_main.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
27 #include "gfx_colors.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
28 #include "math.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
29 #include "tHome.h"
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
30
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
31 uint8_t hudActive;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
32 static uint8_t hudAddress;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
33 static uint8_t hudVersion;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
34
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
35 static uint8_t hudLEDPerFct[NUM_OF_HUD_FCT]; /* array providing the version depending LED per function mapping */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
36 static uint8_t hudLEDNeedPerFct[HUD_FCT_END+1] = {0, 1, 2, 2, 2, 2, 2, 2, 0}; /* array providing information how many LEDs are needed to provide a function */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
37
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
38 void hud_Init()
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
39 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
40 uint8_t index = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
41 SDiveState * pStateReal = stateRealGetPointerWrite();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
42 SSettings *pSettings = settingsGetPointer();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
43
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
44 memset(pStateReal->lifeData.HUD_led_sequence,0,EXT_INTERFACE_HUD_LED_MAX);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
45 hudActive = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
46 hudAddress = 0xFF;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
47 hudVersion = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
48
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
49 for(index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_SENSOR_CNT; index++)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
50 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
51 if(pSettings->ext_sensor_map[index] == SENSOR_HUD)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
52 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
53 hudActive = 1;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
54 hudAddress = index;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
55 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
56 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
57 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
58 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
59
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
60 uint8_t hud_IsActive()
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
61 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
62 return hudActive;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
63 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
64
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
65 uint8_t hud_GetAddress(void)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
66 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
67 return hudAddress;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
68 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
69
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
70 void hud_GetString(uint8_t id, uint8_t* pText)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
71 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
72 switch(id)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
73 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
74 case HUD_FCT_NONE: sprintf((char*)pText,"%c", TXT_Off);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
75 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
76 case HUD_FCT_WARNING: sprintf((char*)pText,"%c", TXT_Warning);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
77 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
78 case HUD_FCT_PPO2SUM: sprintf((char*)pText,"%c%c (1 - 3)", TXT_2BYTE, TXT2BYTE_O2monitor);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
79 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
80 case HUD_FCT_PPO2_0:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
81 case HUD_FCT_PPO2_1:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
82 case HUD_FCT_PPO2_2: sprintf((char*)pText,"%c%c (%d)", TXT_2BYTE, TXT2BYTE_O2monitor, (id - HUD_FCT_PPO2_0));
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
83 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
84 case HUD_FCT_ASCENT_SPEED: sprintf((char*)pText,"%c%c", TXT_2BYTE, TXT2BYTE_AscentSpeed);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
85 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
86 case HUD_FCT_DECO: sprintf((char*)pText,"%c%c", TXT_2BYTE, TXT2BYTE_WarnDecoMissed);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
87 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
88 default:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
89 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
90 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
91 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
92
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
93 uint8_t hud_NextFct(uint8_t curFct, uint8_t fctId)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
94 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
95 uint8_t done = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
96 uint8_t nextFct = curFct;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
97 SSettings *pSettings = settingsGetPointer();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
98
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
99
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
100 while (done == 0)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
101 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
102 nextFct++;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
103 if(nextFct < HUD_FCT_END)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
104 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
105 if(hudLEDNeedPerFct[nextFct] <= hudLEDPerFct[fctId])
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
106 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
107 switch(nextFct) /* this switch handles conditional function. e.g. monitor2 should be skipped if no sensor2 is connected */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
108 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
109 case HUD_FCT_PPO2_0:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
110 case HUD_FCT_PPO2_1:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
111 case HUD_FCT_PPO2_2: if((pSettings->ext_sensor_map[nextFct - HUD_FCT_PPO2_0] >= SENSOR_ANALOG) && (pSettings->ext_sensor_map[nextFct - HUD_FCT_PPO2_0] < SENSOR_TYPE_O2_END))
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
112 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
113 done = 1;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
114 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
115 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
116 default: done = 1;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
117 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
118 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
119 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
120 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
121 else
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
122 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
123 nextFct = HUD_FCT_NONE;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
124 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
125 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
126 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
127 return nextFct;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
128 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
129
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
130 static void hud_UpdateWarning(uint8_t fctId)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
131 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
132 // SDiveState * pStateReal = stateRealGetPointerWrite();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
133
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
134 if(stateUsed->warnings.numWarnings)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
135 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
136 stateUsedWrite->lifeData.HUD_led_sequence[fctId * 2] = 0x32;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
137 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
138 else
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
139 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
140 stateUsedWrite->lifeData.HUD_led_sequence[fctId * 2] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
141 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
142 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
143
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
144 static void hud_UpdatePPO2Monitor(uint8_t fctId, float ppO2)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
145 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
146 // SDiveState * pStateReal = stateRealGetPointerWrite();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
147
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
148 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
149 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
150
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
151 if(fabs(stateUsed->lifeData.actualGas.setPoint_cbar - ppO2) < 0.06) /* green constant */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
152 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
153 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0x01;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
154 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
155 else if((stateUsed->lifeData.actualGas.setPoint_cbar - ppO2) < 0.2) /* to low => blink green */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
156 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
157 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0x13;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
158 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
159 else if((stateUsed->lifeData.actualGas.setPoint_cbar - ppO2) < 0.2) /* to high => blink red */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
160 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
161 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0x13;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
162 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
163 else /* out of range => red */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
164 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
165 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0x01;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
166 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
167 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
168
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
169 static void hud_UpdateAscentSpeed(uint8_t fctId)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
170 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
171 // SDiveState * pStateReal = stateRealGetPointerWrite();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
172 uint8_t indicatorColor = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
173
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
174 indicatorColor = drawingColor_from_ascentspeed(stateUsed->lifeData.ascent_rate_meter_per_min);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
175 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
176 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
177
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
178 switch(indicatorColor) /* map color to LED operation */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
179 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
180 case CLUT_NiceGreen: stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0x01; /* green constant */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
181 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
182 case CLUT_WarningYellow: stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0x55; /* fast blink red */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
183 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
184 case CLUT_WarningRed: stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0x01; /* red constant */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
185 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
186 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
187 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
188
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
189 static void hud_UpdateDecoIndicator(uint8_t fctId)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
190 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
191 uint16_t nextstopLengthSeconds = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
192 uint8_t nextstopDepthMeter = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
193 const SDecoinfo * pDecoinfo = getDecoInfo();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
194
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
195 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
196 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
197
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
198 if(pDecoinfo->output_time_to_surface_seconds)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
199 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
200 tHome_findNextStop(pDecoinfo->output_stop_length_seconds, &nextstopDepthMeter, &nextstopLengthSeconds);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
201 if(nextstopDepthMeter > 0)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
202 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
203 if(fabs(stateUsed->lifeData.depth_meter - nextstopDepthMeter) < 1.5) /* close to stop */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
204 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
205 if((stateUsed->lifeData.depth_meter + 0.1) >= nextstopDepthMeter)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
206 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
207 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0x01; /* close below deco stop => green constant */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
208 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
209 else
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
210 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
211 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0x55; /* close above deco stop => red fast blink */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
212 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
213 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
214 else if(((stateUsed->lifeData.depth_meter +0.1) > nextstopDepthMeter))
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
215 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
216 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2) + 1] = 0x13; /* Ascent to deco stop => green slow blink */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
217 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
218 else
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
219 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
220 stateUsedWrite->lifeData.HUD_led_sequence[(fctId * 2)] = 0x01; /* Missed deco stop => red constant */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
221 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
222 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
223 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
224 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
225
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
226 void hud_UpdateStatus()
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
227 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
228 static uint32_t updateTick = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
229
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
230 SDiveState * pStateReal = stateRealGetPointerWrite();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
231 SSettings *pSettings = settingsGetPointer();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
232
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
233 uint8_t index = 0;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
234
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
235 if(hudVersion == 0)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
236 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
237 if((pStateReal->lifeData.extIf_sensor_data[hudAddress][HUD_INFO_VERSION_OFFSET] > 0) && (pStateReal->lifeData.extIf_sensor_data[hudAddress][HUD_INFO_VERSION_OFFSET] <= 1))
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
238 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
239 hudVersion = pStateReal->lifeData.extIf_sensor_data[hudAddress][HUD_INFO_VERSION_OFFSET];
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
240 switch(hudVersion)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
241 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
242 case 1:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
243 default: hudLEDPerFct[0] = 2;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
244 hudLEDPerFct[1] = 2;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
245 hudLEDPerFct[2] = 2;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
246 hudLEDPerFct[3] = 1;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
247 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
248 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
249 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
250 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
251 else
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
252 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
253 if(time_elapsed_ms(updateTick, HAL_GetTick()) > 2000)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
254 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
255 if(stateUsed->mode == MODE_DIVE)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
256 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
257 for( index = 0; index < NUM_OF_HUD_FCT; index++)
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
258 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
259 switch(pSettings->hudFunction[index])
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
260 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
261 case HUD_FCT_WARNING: hud_UpdateWarning(index);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
262 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
263 case HUD_FCT_PPO2SUM: hud_UpdatePPO2Monitor(index, stateUsed->lifeData.ppO2);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
264 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
265 case HUD_FCT_PPO2_0:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
266 case HUD_FCT_PPO2_1:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
267 case HUD_FCT_PPO2_2: hud_UpdatePPO2Monitor(index, stateUsed->lifeData.ppO2Sensor_bar[pSettings->hudFunction[index] - HUD_FCT_PPO2_0]);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
268 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
269 case HUD_FCT_ASCENT_SPEED: hud_UpdateAscentSpeed(index);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
270 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
271 case HUD_FCT_DECO: hud_UpdateDecoIndicator(index);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
272 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
273 case HUD_FCT_NONE:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
274 default:
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
275 break;
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
276 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
277 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
278 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
279 else
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
280 {
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
281 #ifndef ENABLE_HUD_TESTING
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
282 memset(pStateReal->lifeData.HUD_led_sequence,0,EXT_INTERFACE_HUD_LED_MAX);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
283 pStateReal->lifeData.HUD_led_sequence[6] = 0x01; /* switch only blue LED on */
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
284 #endif
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
285 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
286 DataEX_setExtInterface_Cmd(EXT_INTERFACE_HUD_UPDATE, hudAddress);
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
287 updateTick = HAL_GetTick();
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
288 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
289 }
1aa45000f92c Added configuration menu for HUD functions:
Ideenmodellierer
parents:
diff changeset
290 }