Mercurial > public > ostc4
annotate Discovery/Src/tInfoSensor.c @ 1074:ad61a2c9095a Icon_Integration
Forward profile sensor settings to RTE:
The profile settings include the sensor map => forward the sensor map matching to the profile to the RTE.
| author | ideenmodellierer |
|---|---|
| date | Sun, 22 Feb 2026 19:56:43 +0100 |
| parents | 734f84b72b30 |
| children | ef99fff2d2de |
| 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 |
