Mercurial > public > ostc4
annotate Discovery/Src/tInfoSensor.c @ 1078:082825daccb5 Icon_Integration tip
Added control views for HUD:
The HUD implementation may now be activated by the compile switch ENABLE_HUD_SUPPORT. The HUD will become visible onces detected in the CvOpt overview menu. The first implementation is for testing only => The LEDs may be operated by a number field. Positiv values activate the red, negativ the green LEDs. Depending on the value blink sequences will be scheduled.
At the moment no dive specific data is mapped to the LED operation (like e.g. warnings).
| author | Ideenmodellierer |
|---|---|
| date | Mon, 02 Mar 2026 17:30:38 +0100 |
| parents | ef99fff2d2de |
| children |
| rev | line source |
|---|---|
| 717 | 1 /////////////////////////////////////////////////////////////////////////////// |
| 2 /// -*- coding: UTF-8 -*- | |
| 3 /// | |
| 4 /// \file Discovery/Src/tInfoCompass.c | |
| 5 /// \brief there is only compass_DX_f, compass_DY_f, compass_DZ_f output during this mode | |
| 6 /// \author heinrichs weikamp gmbh | |
| 7 /// \date 23-Feb-2015 | |
| 8 /// | |
| 9 /// \details | |
| 10 /// | |
| 11 /// $Id$ | |
| 12 /////////////////////////////////////////////////////////////////////////////// | |
| 13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh | |
| 14 /// | |
| 15 /// This program is free software: you can redistribute it and/or modify | |
| 16 /// it under the terms of the GNU General Public License as published by | |
| 17 /// the Free Software Foundation, either version 3 of the License, or | |
| 18 /// (at your option) any later version. | |
| 19 /// | |
| 20 /// This program is distributed in the hope that it will be useful, | |
| 21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 23 /// GNU General Public License for more details. | |
| 24 /// | |
| 25 /// You should have received a copy of the GNU General Public License | |
| 26 /// along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| 27 ////////////////////////////////////////////////////////////////////////////// | |
| 28 | |
| 29 /* Includes ------------------------------------------------------------------*/ | |
| 30 | |
| 31 #include "gfx_engine.h" | |
| 32 #include "gfx_fonts.h" | |
| 33 #include "tHome.h" | |
| 34 #include "tInfo.h" | |
| 35 #include "tInfoSensor.h" | |
| 36 #include "tMenuEdit.h" | |
| 827 | 37 #include "data_exchange_main.h" |
| 717 | 38 |
| 39 #include <string.h> | |
| 40 #include <inttypes.h> | |
| 41 | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
42 extern void openEdit_Sensors(uint8_t filter); |
| 717 | 43 |
| 44 /* Private variables ---------------------------------------------------------*/ | |
| 783 | 45 static uint8_t activeSensorId = 0; |
| 46 static uint8_t sensorActive = 0; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
47 static externalInterfaceSensorType sensorType = SENSOR_NONE; |
| 717 | 48 /* Exported functions --------------------------------------------------------*/ |
| 783 | 49 void openInfo_Sensor(uint8_t sensorId) |
| 717 | 50 { |
| 783 | 51 SSettings *pSettings = settingsGetPointer(); |
| 52 activeSensorId = sensorId; | |
| 717 | 53 set_globalState(StISENINFO); |
| 783 | 54 switch (activeSensorId) |
| 55 { | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
56 case 2: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,3); |
| 783 | 57 break; |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
58 case 1: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,2); |
| 783 | 59 break; |
| 60 default: | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
61 case 0: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,1); |
| 783 | 62 break; |
| 63 } | |
| 64 sensorActive = 1; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
65 switch(sensorType) /* type has to be set using the set function before info dialog is used */ |
| 783 | 66 { |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
67 case SENSOR_CO2: |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
68 case SENSOR_CO2M: sensorActive = pSettings->co2_sensor_active; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
69 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
70 case SENSOR_DIGO2: DataEX_setExtInterface_Cmd(EXT_INTERFACE_O2_INDICATE, activeSensorId); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
71 /*no break*/ |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
72 default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
73 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
74 sensorActive = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
75 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
76 break; |
| 783 | 77 } |
| 78 | |
| 79 | |
| 717 | 80 } |
| 81 | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
82 void openInfo_SetSensorType(externalInterfaceSensorType Type) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
83 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
84 sensorType = Type; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
85 } |
| 717 | 86 |
| 87 uint64_t mod64(uint64_t a, uint64_t b) | |
| 88 { | |
| 89 uint64_t div; | |
| 90 div=(a/10); | |
| 91 b=(10*div); | |
| 92 return (a-b); | |
| 93 } | |
| 94 | |
| 95 void uint64ToString(uint64_t value, char* pbuf) | |
| 96 { | |
| 97 char tmpBuf[32]; | |
| 98 uint8_t index = 31; | |
| 99 | |
| 100 tmpBuf[index--] = 0; /* zero termination */ | |
| 101 while((index != 0) && (value != 0)) | |
| 102 { | |
| 103 tmpBuf[index--] = '0' + (value % 10);// mod64(worker64,10); | |
| 104 value /= 10; | |
| 105 } | |
| 106 strcpy(pbuf,&tmpBuf[index+1]); | |
| 107 } | |
| 108 | |
| 783 | 109 |
| 827 | 110 static void refreshInfo_SensorO2(GFX_DrawCfgScreen s) |
| 717 | 111 { |
| 783 | 112 const SDiveState *pStateReal = stateRealGetPointer(); |
| 717 | 113 SSensorDataDiveO2* pDiveO2Data; |
| 114 char text[31]; | |
| 115 uint8_t strIndex = 0; | |
| 783 | 116 char *textPointer = text; |
| 717 | 117 |
|
724
f285424f04d9
Development feature: external pressure sensor
Ideenmodellierer
parents:
717
diff
changeset
|
118 float pressure = 0.0; |
|
f285424f04d9
Development feature: external pressure sensor
Ideenmodellierer
parents:
717
diff
changeset
|
119 |
| 827 | 120 pDiveO2Data = (SSensorDataDiveO2*)pStateReal->lifeData.extIf_sensor_data[activeSensorId]; |
| 121 strIndex = snprintf(text,32,"ID: "); | |
| 122 if(pDiveO2Data->sensorId != 0) | |
| 123 { | |
| 124 uint64ToString(pDiveO2Data->sensorId,&text[strIndex]); | |
| 125 } | |
| 126 tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020); | |
| 127 snprintf(text,32,"%c: %02.1f",TXT_Temperature , (float)pDiveO2Data->temperature / 1000.0); | |
| 128 tInfo_write_content_simple( 30, 770, ME_Y_LINE2, &FontT48, text, CLUT_Font020); | |
| 129 | |
| 130 #ifdef ENABLE_EXTERNAL_PRESSURE | |
| 131 pressure = (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[2]); | |
| 132 #else | |
| 133 pressure = (float)pDiveO2Data->pressure / 1000.0; | |
| 134 #endif | |
| 135 snprintf(text,32,"Druck: %02.1f (%02.1f)", (float)pDiveO2Data->pressure / 1000.0, pressure *1000.0); | |
| 136 | |
| 137 tInfo_write_content_simple( 30, 770, ME_Y_LINE3, &FontT48, text, CLUT_Font020); | |
| 138 snprintf(text,32,"Feuchtigkeit: %02.1f", (float)pDiveO2Data->humidity / 1000.0); | |
| 139 tInfo_write_content_simple( 30, 770, ME_Y_LINE4, &FontT48, text, CLUT_Font020); | |
| 140 snprintf(text,32,"Status: 0x%lx", pDiveO2Data->status); | |
| 141 tInfo_write_content_simple( 30, 770, ME_Y_LINE5, &FontT48, text, CLUT_Font020); | |
| 142 #ifdef ENABLE_EXTERNAL_PRESSURE | |
| 143 snprintf(text,32,"Norm ppO2: %02.3f (%02.1f)", (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0] / (pressure / 1000.0)),(float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0])); | |
| 144 tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020); | |
| 145 #endif | |
| 146 | |
| 147 if(sensorActive) | |
| 148 { | |
| 149 *textPointer++ = '\005'; | |
| 150 } | |
| 151 else | |
| 152 { | |
| 153 *textPointer++ = '\006'; | |
| 154 } | |
| 155 *textPointer++ = ' '; | |
| 156 *textPointer++ = TXT_2BYTE; | |
| 157 *textPointer++ = TXT2BYTE_Sensor; | |
| 158 *textPointer++ = ' '; | |
| 159 *textPointer++ = TXT_2BYTE; | |
| 160 *textPointer++ = TXT2BYTE_O2IFDigital; | |
| 161 *textPointer++ = '1' + activeSensorId; | |
| 162 | |
| 163 snprintf(textPointer, 20,": %01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[activeSensorId], pStateReal->lifeData.sensorVoltage_mV[activeSensorId]); | |
| 164 | |
| 165 tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020); | |
| 166 | |
| 167 tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,0); | |
| 168 } | |
| 169 | |
| 170 static void refreshInfo_SensorCo2(GFX_DrawCfgScreen s) | |
| 171 { | |
| 172 const SDiveState *pStateReal = stateRealGetPointer(); | |
| 173 char text[31]; | |
| 174 char *textPointer = text; | |
| 175 | |
| 176 snprintf(text,32,"CO2: %ld ppm",pStateReal->lifeData.CO2_data.CO2_ppm); | |
| 177 tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020); | |
| 178 | |
| 179 | |
| 180 snprintf(text,32,"Signal: %d",pStateReal->lifeData.CO2_data.signalStrength); | |
| 181 tInfo_write_content_simple( 30, 770, ME_Y_LINE2, &FontT48, text, CLUT_Font020); | |
| 182 | |
| 183 if(sensorActive) | |
| 184 { | |
| 185 *textPointer++ = '\005'; | |
| 186 } | |
| 187 else | |
| 188 { | |
| 189 *textPointer++ = '\006'; | |
| 190 } | |
| 191 *textPointer++ = ' '; | |
| 192 *textPointer++ = TXT_2BYTE; | |
| 193 *textPointer++ = TXT2BYTE_Sensor; | |
| 194 *textPointer++ = ' '; | |
| 195 *textPointer++ = 'C'; | |
| 196 *textPointer++ = 'o'; | |
| 197 *textPointer++ = '1' + activeSensorId; | |
| 198 | |
| 199 snprintf(textPointer, 20,": %ld ppm", pStateReal->lifeData.CO2_data.CO2_ppm); | |
| 200 | |
| 201 tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020); | |
| 202 | |
| 203 tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_O2Calib); | |
| 204 } | |
| 1078 | 205 |
| 206 static void refreshInfo_SensorHUD(GFX_DrawCfgScreen s) | |
| 207 { | |
| 208 const SDiveState *pStateReal = stateRealGetPointer(); | |
| 209 char text[50]; | |
| 210 | |
| 211 snprintf(text,50,"%s",pStateReal->lifeData.extIf_sensor_data[activeSensorId]); | |
| 212 tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020); | |
| 213 | |
| 214 tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,0); | |
| 215 } | |
| 216 | |
| 217 | |
| 218 | |
| 827 | 219 // =============================================================================== |
| 220 void refreshInfo_Sensor(GFX_DrawCfgScreen s) | |
| 221 { | |
| 222 char text[31]; | |
| 223 | |
| 717 | 224 text[0] = '\001'; |
| 225 text[1] = TXT_Sensor; | |
| 226 text[2] = ' '; | |
| 227 text[3] = TXT_Information; | |
| 783 | 228 text[4] = ' '; |
| 786 | 229 text[5] = '1' + activeSensorId; |
| 783 | 230 text[6] = 0; |
|
826
a370741a743b
Bugfix Line order of info screen with flip screen active:
Ideenmodellierer
parents:
786
diff
changeset
|
231 tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware); |
| 717 | 232 |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
233 switch(sensorType) |
| 827 | 234 { |
| 235 default: | |
| 236 case SENSOR_DIGO2M: refreshInfo_SensorO2(s); | |
| 237 break; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
238 case SENSOR_CO2: |
| 1078 | 239 case SENSOR_CO2M: refreshInfo_SensorCo2(s); |
| 240 break; | |
| 241 case SENSOR_HUD: refreshInfo_SensorHUD(s); | |
| 827 | 242 break; |
| 243 } | |
| 717 | 244 } |
| 245 | |
| 246 void sendActionToInfoSensor(uint8_t sendAction) | |
| 247 { | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
248 SSettings *pSettings = settingsGetPointer(); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
249 |
| 717 | 250 switch(sendAction) |
| 251 { | |
| 252 case ACTION_BUTTON_BACK: | |
| 253 exitMenuEdit_to_BackMenu(); | |
| 254 break; | |
| 255 | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
256 case ACTION_BUTTON_ENTER: switch(sensorType) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
257 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
258 case SENSOR_CO2: |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
259 case SENSOR_CO2M: if(pSettings->co2_sensor_active) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
260 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
261 pSettings->co2_sensor_active = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
262 sensorActive = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
263 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
264 else |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
265 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
266 pSettings->co2_sensor_active = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
267 sensorActive = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
268 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
269 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
270 default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
271 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
272 pSettings->ppo2sensors_deactivated &= ~(1 << (activeSensorId)); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
273 sensorActive = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
274 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
275 else |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
276 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
277 pSettings->ppo2sensors_deactivated |= (1 << (activeSensorId)); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
278 sensorActive = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
279 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
280 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
281 } |
| 783 | 282 break; |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
283 case ACTION_BUTTON_NEXT: if((sensorType == SENSOR_CO2M) || (sensorType == SENSOR_CO2)) |
| 827 | 284 { |
|
957
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
845
diff
changeset
|
285 DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB, activeSensorId); |
| 827 | 286 } |
| 287 break; | |
| 717 | 288 case ACTION_TIMEOUT: |
| 289 case ACTION_MODE_CHANGE: | |
| 290 case ACTION_IDLE_TICK: | |
| 291 case ACTION_IDLE_SECOND: | |
| 292 default: | |
| 293 break; | |
| 294 } | |
| 295 } | |
| 296 |
