Mercurial > public > ostc4
annotate Discovery/Src/tInfoSensor.c @ 1073:734f84b72b30 Icon_Integration tip
CV Option Menu added sub menus for O2 and CO2 sensors:
In the previous implementation by the external sensor menu the problem exists that only three sensor could be displayed. If three o2 sensors were active then the CO2 sensor was not accessible. With the new dynamic view the CO2 sensor is a standalone menu element. The three sensor view was reused from the external sensor menu by introducing a filter (sensor type) functionality. O" and CO2 sensors may now be calibrated using the cv option sub menus.
| author | Ideenmodellierer |
|---|---|
| date | Fri, 20 Feb 2026 17:26:46 +0100 |
| parents | 3420e3ba698d |
| 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); |
| 783 | 43 uint8_t OnAction_Sensor (uint32_t editId, uint8_t blockNumber, uint8_t digitNumber, uint8_t digitContent, uint8_t action); |
| 717 | 44 |
| 45 /* Private variables ---------------------------------------------------------*/ | |
| 783 | 46 static uint8_t activeSensorId = 0; |
| 47 static uint8_t sensorActive = 0; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
48 static externalInterfaceSensorType sensorType = SENSOR_NONE; |
| 717 | 49 /* Exported functions --------------------------------------------------------*/ |
| 783 | 50 void openInfo_Sensor(uint8_t sensorId) |
| 717 | 51 { |
| 783 | 52 SSettings *pSettings = settingsGetPointer(); |
| 53 activeSensorId = sensorId; | |
| 717 | 54 set_globalState(StISENINFO); |
| 783 | 55 switch (activeSensorId) |
| 56 { | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
57 case 2: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,3); |
| 783 | 58 break; |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
59 case 1: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,2); |
| 783 | 60 break; |
| 61 default: | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
62 case 0: setBackMenu((uint32_t)openEdit_Sensors,SENSOR_END,1); |
| 783 | 63 break; |
| 64 } | |
| 65 sensorActive = 1; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
66 switch(sensorType) /* type has to be set using the set function before info dialog is used */ |
| 783 | 67 { |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
68 case SENSOR_CO2: |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
69 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
|
70 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
71 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
|
72 /*no break*/ |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
73 default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
74 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
75 sensorActive = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
76 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
77 break; |
| 783 | 78 } |
| 79 | |
| 80 | |
| 717 | 81 } |
| 82 | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
83 void openInfo_SetSensorType(externalInterfaceSensorType Type) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
84 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
85 sensorType = Type; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
86 } |
| 717 | 87 |
| 88 uint64_t mod64(uint64_t a, uint64_t b) | |
| 89 { | |
| 90 uint64_t div; | |
| 91 div=(a/10); | |
| 92 b=(10*div); | |
| 93 return (a-b); | |
| 94 } | |
| 95 | |
| 96 void uint64ToString(uint64_t value, char* pbuf) | |
| 97 { | |
| 98 char tmpBuf[32]; | |
| 99 uint8_t index = 31; | |
| 100 | |
| 101 tmpBuf[index--] = 0; /* zero termination */ | |
| 102 while((index != 0) && (value != 0)) | |
| 103 { | |
| 104 tmpBuf[index--] = '0' + (value % 10);// mod64(worker64,10); | |
| 105 value /= 10; | |
| 106 } | |
| 107 strcpy(pbuf,&tmpBuf[index+1]); | |
| 108 } | |
| 109 | |
| 783 | 110 |
| 827 | 111 static void refreshInfo_SensorO2(GFX_DrawCfgScreen s) |
| 717 | 112 { |
| 783 | 113 const SDiveState *pStateReal = stateRealGetPointer(); |
| 717 | 114 SSensorDataDiveO2* pDiveO2Data; |
| 115 char text[31]; | |
| 116 uint8_t strIndex = 0; | |
| 783 | 117 char *textPointer = text; |
| 717 | 118 |
|
724
f285424f04d9
Development feature: external pressure sensor
Ideenmodellierer
parents:
717
diff
changeset
|
119 float pressure = 0.0; |
|
f285424f04d9
Development feature: external pressure sensor
Ideenmodellierer
parents:
717
diff
changeset
|
120 |
| 827 | 121 pDiveO2Data = (SSensorDataDiveO2*)pStateReal->lifeData.extIf_sensor_data[activeSensorId]; |
| 122 strIndex = snprintf(text,32,"ID: "); | |
| 123 if(pDiveO2Data->sensorId != 0) | |
| 124 { | |
| 125 uint64ToString(pDiveO2Data->sensorId,&text[strIndex]); | |
| 126 } | |
| 127 tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020); | |
| 128 snprintf(text,32,"%c: %02.1f",TXT_Temperature , (float)pDiveO2Data->temperature / 1000.0); | |
| 129 tInfo_write_content_simple( 30, 770, ME_Y_LINE2, &FontT48, text, CLUT_Font020); | |
| 130 | |
| 131 #ifdef ENABLE_EXTERNAL_PRESSURE | |
| 132 pressure = (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[2]); | |
| 133 #else | |
| 134 pressure = (float)pDiveO2Data->pressure / 1000.0; | |
| 135 #endif | |
| 136 snprintf(text,32,"Druck: %02.1f (%02.1f)", (float)pDiveO2Data->pressure / 1000.0, pressure *1000.0); | |
| 137 | |
| 138 tInfo_write_content_simple( 30, 770, ME_Y_LINE3, &FontT48, text, CLUT_Font020); | |
| 139 snprintf(text,32,"Feuchtigkeit: %02.1f", (float)pDiveO2Data->humidity / 1000.0); | |
| 140 tInfo_write_content_simple( 30, 770, ME_Y_LINE4, &FontT48, text, CLUT_Font020); | |
| 141 snprintf(text,32,"Status: 0x%lx", pDiveO2Data->status); | |
| 142 tInfo_write_content_simple( 30, 770, ME_Y_LINE5, &FontT48, text, CLUT_Font020); | |
| 143 #ifdef ENABLE_EXTERNAL_PRESSURE | |
| 144 snprintf(text,32,"Norm ppO2: %02.3f (%02.1f)", (float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0] / (pressure / 1000.0)),(float)(stateRealGetPointer()->lifeData.ppO2Sensor_bar[0])); | |
| 145 tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020); | |
| 146 #endif | |
| 147 | |
| 148 if(sensorActive) | |
| 149 { | |
| 150 *textPointer++ = '\005'; | |
| 151 } | |
| 152 else | |
| 153 { | |
| 154 *textPointer++ = '\006'; | |
| 155 } | |
| 156 *textPointer++ = ' '; | |
| 157 *textPointer++ = TXT_2BYTE; | |
| 158 *textPointer++ = TXT2BYTE_Sensor; | |
| 159 *textPointer++ = ' '; | |
| 160 *textPointer++ = TXT_2BYTE; | |
| 161 *textPointer++ = TXT2BYTE_O2IFDigital; | |
| 162 *textPointer++ = '1' + activeSensorId; | |
| 163 | |
| 164 snprintf(textPointer, 20,": %01.2f, %01.1f mV", pStateReal->lifeData.ppO2Sensor_bar[activeSensorId], pStateReal->lifeData.sensorVoltage_mV[activeSensorId]); | |
| 165 | |
| 166 tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020); | |
| 167 | |
| 168 tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,0); | |
| 169 } | |
| 170 | |
| 171 static void refreshInfo_SensorCo2(GFX_DrawCfgScreen s) | |
| 172 { | |
| 173 const SDiveState *pStateReal = stateRealGetPointer(); | |
| 174 char text[31]; | |
| 175 char *textPointer = text; | |
| 176 | |
| 177 snprintf(text,32,"CO2: %ld ppm",pStateReal->lifeData.CO2_data.CO2_ppm); | |
| 178 tInfo_write_content_simple( 30, 770, ME_Y_LINE1, &FontT48, text, CLUT_Font020); | |
| 179 | |
| 180 | |
| 181 snprintf(text,32,"Signal: %d",pStateReal->lifeData.CO2_data.signalStrength); | |
| 182 tInfo_write_content_simple( 30, 770, ME_Y_LINE2, &FontT48, text, CLUT_Font020); | |
| 183 | |
| 184 if(sensorActive) | |
| 185 { | |
| 186 *textPointer++ = '\005'; | |
| 187 } | |
| 188 else | |
| 189 { | |
| 190 *textPointer++ = '\006'; | |
| 191 } | |
| 192 *textPointer++ = ' '; | |
| 193 *textPointer++ = TXT_2BYTE; | |
| 194 *textPointer++ = TXT2BYTE_Sensor; | |
| 195 *textPointer++ = ' '; | |
| 196 *textPointer++ = 'C'; | |
| 197 *textPointer++ = 'o'; | |
| 198 *textPointer++ = '1' + activeSensorId; | |
| 199 | |
| 200 snprintf(textPointer, 20,": %ld ppm", pStateReal->lifeData.CO2_data.CO2_ppm); | |
| 201 | |
| 202 tInfo_write_content_simple( 30, 770, ME_Y_LINE6, &FontT48, text, CLUT_Font020); | |
| 203 | |
| 204 tInfo_write_buttonTextline_simple(TXT2BYTE_ButtonBack,TXT2BYTE_ButtonEnter,TXT2BYTE_O2Calib); | |
| 205 } | |
| 206 // =============================================================================== | |
| 207 void refreshInfo_Sensor(GFX_DrawCfgScreen s) | |
| 208 { | |
| 209 const SDiveState *pStateReal = stateRealGetPointer(); | |
| 210 | |
| 211 char text[31]; | |
| 212 | |
| 717 | 213 text[0] = '\001'; |
| 214 text[1] = TXT_Sensor; | |
| 215 text[2] = ' '; | |
| 216 text[3] = TXT_Information; | |
| 783 | 217 text[4] = ' '; |
| 786 | 218 text[5] = '1' + activeSensorId; |
| 783 | 219 text[6] = 0; |
|
826
a370741a743b
Bugfix Line order of info screen with flip screen active:
Ideenmodellierer
parents:
786
diff
changeset
|
220 tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware); |
| 717 | 221 |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
222 switch(sensorType) |
| 827 | 223 { |
| 224 default: | |
| 225 case SENSOR_DIGO2M: refreshInfo_SensorO2(s); | |
| 226 break; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
227 case SENSOR_CO2: |
| 827 | 228 case SENSOR_CO2M: refreshInfo_SensorCo2(s); |
| 229 break; | |
| 230 } | |
| 717 | 231 } |
| 232 | |
| 233 void sendActionToInfoSensor(uint8_t sendAction) | |
| 234 { | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
235 SSettings *pSettings = settingsGetPointer(); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
236 |
| 717 | 237 switch(sendAction) |
| 238 { | |
| 239 case ACTION_BUTTON_BACK: | |
| 240 exitMenuEdit_to_BackMenu(); | |
| 241 break; | |
| 242 | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
243 case ACTION_BUTTON_ENTER: switch(sensorType) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
244 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
245 case SENSOR_CO2: |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
246 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
|
247 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
248 pSettings->co2_sensor_active = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
249 sensorActive = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
250 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
251 else |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
252 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
253 pSettings->co2_sensor_active = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
254 sensorActive = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
255 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
256 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
257 default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
258 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
259 pSettings->ppo2sensors_deactivated &= ~(1 << (activeSensorId)); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
260 sensorActive = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
261 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
262 else |
|
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 pSettings->ppo2sensors_deactivated |= (1 << (activeSensorId)); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
265 sensorActive = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
266 } |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
267 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
268 } |
| 783 | 269 break; |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
270 case ACTION_BUTTON_NEXT: if((sensorType == SENSOR_CO2M) || (sensorType == SENSOR_CO2)) |
| 827 | 271 { |
|
957
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
845
diff
changeset
|
272 DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB, activeSensorId); |
| 827 | 273 } |
| 274 break; | |
| 717 | 275 case ACTION_TIMEOUT: |
| 276 case ACTION_MODE_CHANGE: | |
| 277 case ACTION_IDLE_TICK: | |
| 278 case ACTION_IDLE_SECOND: | |
| 279 default: | |
| 280 break; | |
| 281 } | |
| 282 } | |
| 283 |
