Mercurial > public > ostc4
annotate Discovery/Src/tInfoSensor.c @ 1075:ef99fff2d2de Icon_Integration tip
Unlock button lock if BT is connected:
In the previous version the button lock coluld only be disabled by following the correct button press order. In case a button does not work (e.g. low button sensitifity) the OSTC would be locked. To avoid such a scenario the button lock is now also removed if the OSTC is connected via Bluetooth
| author | ideenmodellierer |
|---|---|
| date | Sun, 22 Feb 2026 20:00:00 +0100 |
| parents | 734f84b72b30 |
| 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 } | |
| 205 // =============================================================================== | |
| 206 void refreshInfo_Sensor(GFX_DrawCfgScreen s) | |
| 207 { | |
| 208 char text[31]; | |
| 209 | |
| 717 | 210 text[0] = '\001'; |
| 211 text[1] = TXT_Sensor; | |
| 212 text[2] = ' '; | |
| 213 text[3] = TXT_Information; | |
| 783 | 214 text[4] = ' '; |
| 786 | 215 text[5] = '1' + activeSensorId; |
| 783 | 216 text[6] = 0; |
|
826
a370741a743b
Bugfix Line order of info screen with flip screen active:
Ideenmodellierer
parents:
786
diff
changeset
|
217 tInfo_write_content_simple( 30, 770, ME_Y_LINE_BASE, &FontT48, text, CLUT_MenuPageHardware); |
| 717 | 218 |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
219 switch(sensorType) |
| 827 | 220 { |
| 221 default: | |
| 222 case SENSOR_DIGO2M: refreshInfo_SensorO2(s); | |
| 223 break; | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
224 case SENSOR_CO2: |
| 827 | 225 case SENSOR_CO2M: refreshInfo_SensorCo2(s); |
| 226 break; | |
| 227 } | |
| 717 | 228 } |
| 229 | |
| 230 void sendActionToInfoSensor(uint8_t sendAction) | |
| 231 { | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
232 SSettings *pSettings = settingsGetPointer(); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
233 |
| 717 | 234 switch(sendAction) |
| 235 { | |
| 236 case ACTION_BUTTON_BACK: | |
| 237 exitMenuEdit_to_BackMenu(); | |
| 238 break; | |
| 239 | |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
240 case ACTION_BUTTON_ENTER: switch(sensorType) |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
241 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
242 case SENSOR_CO2: |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
243 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
|
244 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
245 pSettings->co2_sensor_active = 0; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
246 sensorActive = 0; |
|
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 else |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
249 { |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
250 pSettings->co2_sensor_active = 1; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
251 sensorActive = 1; |
|
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 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
254 default: if(pSettings->ppo2sensors_deactivated & (1 << (activeSensorId))) |
|
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 pSettings->ppo2sensors_deactivated &= ~(1 << (activeSensorId)); |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
257 sensorActive = 1; |
|
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 else |
|
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->ppo2sensors_deactivated |= (1 << (activeSensorId)); |
|
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 break; |
|
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
265 } |
| 783 | 266 break; |
|
1073
734f84b72b30
CV Option Menu added sub menus for O2 and CO2 sensors:
Ideenmodellierer
parents:
957
diff
changeset
|
267 case ACTION_BUTTON_NEXT: if((sensorType == SENSOR_CO2M) || (sensorType == SENSOR_CO2)) |
| 827 | 268 { |
|
957
3420e3ba698d
External sensor commands: Add sensor ID to command:
Ideenmodellierer
parents:
845
diff
changeset
|
269 DataEX_setExtInterface_Cmd(EXT_INTERFACE_CO2_CALIB, activeSensorId); |
| 827 | 270 } |
| 271 break; | |
| 717 | 272 case ACTION_TIMEOUT: |
| 273 case ACTION_MODE_CHANGE: | |
| 274 case ACTION_IDLE_TICK: | |
| 275 case ACTION_IDLE_SECOND: | |
| 276 default: | |
| 277 break; | |
| 278 } | |
| 279 } | |
| 280 |
