Mercurial > public > hwos_code
annotate src/divemenu_tree.asm @ 624:7bdcc591196c
Support for Compass3 hardware
author | heinrichsweikamp |
---|---|
date | Thu, 13 Jun 2019 10:07:55 +0200 |
parents | c40025d8e750 |
children | 185ba2f91f59 |
rev | line source |
---|---|
0 | 1 ;============================================================================= |
2 ; | |
623 | 3 ; File divemenu_tree.asm combined next generation V3.03.4 |
0 | 4 ; |
275 | 5 ; OSTC dive mode menu |
0 | 6 ; |
623 | 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all rights reserved. |
0 | 8 ;============================================================================= |
9 ; HISTORY | |
10 ; 2013-02-02 : [mH] Made out of menu_tree.asm | |
11 | |
582 | 12 #include "hwos.inc" ; Mandatory header |
13 #include "menu_processor.inc" | |
14 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c | |
15 #include "tft_outputs.inc" | |
16 #include "customview.inc" | |
17 #include "strings.inc" | |
18 #include "calibrate.inc" | |
19 | |
20 extern timeout_divemode_menu2 | |
604 | 21 extern restart_deco_engine_wo_ceiling |
623 | 22 extern diveloop_menu_exit |
0 | 23 |
560 | 24 |
623 | 25 dmenu_tree CODE |
582 | 26 |
0 | 27 ;============================================================================= |
28 ; Main Menu | |
604 | 29 |
30 do_return_main_divemenu: | |
31 call menu_processor_double_pop ; drop exit line and back to last line | |
32 incf selected_item,W ; item numbers start with 0, menu positions with 1 | |
623 | 33 movwf menu_pos_cur ; position cursor where we came from |
604 | 34 bra do_main_divemenu_common |
35 | |
582 | 36 global do_main_divemenu |
0 | 37 do_main_divemenu: |
582 | 38 call menu_processor_reset ; restart from first icon |
39 movlw .1 | |
623 | 40 movwf menu_pos_cur ; set to first option in dive mode menu |
604 | 41 |
42 do_main_divemenu_common: | |
623 | 43 IFDEF _ccr_pscr |
560 | 44 btfsc FLAG_ccr_mode |
45 bra main_divemenu_loop ; goto CCR / pSCR Menu menu | |
46 btfsc FLAG_pscr_mode | |
47 bra main_divemenu_loop ; goto CCR / pSCR Menu menu | |
623 | 48 ENDIF |
560 | 49 |
582 | 50 main_divemenu_OC: |
623 | 51 IFDEF _ccr_pscr |
52 bcf is_diluent_menu ; selecting OC gases ... | |
53 bcf is_bailout_menu ; ... not for bailout reason | |
54 ENDIF | |
582 | 55 |
604 | 56 IFDEF _cave_mode |
623 | 57 btfss cave_mode ; in cave mode? |
604 | 58 bra main_divemenu_OC_no_cave ; NO - do OC menu without turn option |
59 | |
60 MENU_BEGIN tMainMenu, .6 | |
61 MENU_CALL tDivemenu_Gaslist, do_divemode_gaslist | |
62 MENU_CALL tDivemenu_ResetAvg, do_reset_average | |
63 MENU_DYNAMIC do_toggle_gf_label, do_toggle_gf | |
64 MENU_CALL tDivemenu_Marker, do_set_marker | |
65 MENU_DYNAMIC do_turn_dive_label, do_turn_dive | |
66 MENU_CALL tExit, do_exit_divemode_menu | |
67 MENU_END | |
68 ENDIF | |
69 | |
70 main_divemenu_OC_no_cave: | |
582 | 71 MENU_BEGIN tMainMenu, .5 |
604 | 72 MENU_CALL tDivemenu_Gaslist, do_divemode_gaslist |
73 MENU_CALL tDivemenu_ResetAvg, do_reset_average | |
74 MENU_DYNAMIC do_toggle_gf_label, do_toggle_gf | |
75 MENU_CALL tDivemenu_Marker, do_set_marker | |
76 MENU_CALL tExit, do_exit_divemode_menu | |
560 | 77 MENU_END |
0 | 78 |
623 | 79 ;============================================================================= |
80 | |
81 IFDEF _ccr_pscr | |
604 | 82 |
560 | 83 main_divemenu_loop: |
623 | 84 bsf is_diluent_menu ; selecting diluents ... |
85 bcf is_bailout_menu ; ... (definitely) not for bailout reason | |
582 | 86 btfsc FLAG_pscr_mode |
604 | 87 bra main_divemenu_pscr ; pSCR menu |
582 | 88 |
89 MENU_BEGIN tMainMenu, .6 | |
604 | 90 MENU_CALL tDiveBailout, do_divemode_gaslist_bail |
91 MENU_CALL tDivemenu_Setpoint, do_divemode_splist | |
92 MENU_CALL tDivemenu_Diluent, do_divemode_gaslist | |
93 MENU_CALL tDivemenu_Avg_Mkr, do_reset_avg_set_mkr | |
94 MENU_DYNAMIC do_toggle_gf_label, do_toggle_gf | |
95 MENU_CALL tExit, do_exit_divemode_menu | |
582 | 96 MENU_END |
97 | |
623 | 98 |
485 | 99 main_divemenu_pscr: |
623 | 100 |
101 IFDEF _external_sensor | |
604 | 102 btfsc analog_o2_input ; do we have an analog input (OSTC cR)? |
103 bra main_divemenu_pscr_sensors ; YES | |
104 btfsc optical_input ; do we have an optical input (OSTC 3)? | |
105 bra main_divemenu_pscr_sensors ; YES | |
623 | 106 ENDIF |
560 | 107 |
108 main_divemenu_pscr_no_sensors: | |
582 | 109 MENU_BEGIN tMainMenu, .6 |
604 | 110 MENU_CALL tDiveBailout, do_divemode_gaslist_bail |
111 MENU_CALL tDivemenu_Premix, do_divemode_gaslist | |
112 MENU_CALL tBackToLoop, do_switch_sp_calc | |
113 MENU_CALL tDivemenu_Avg_Mkr, do_reset_avg_set_mkr | |
114 MENU_DYNAMIC do_toggle_gf_label, do_toggle_gf | |
115 MENU_CALL tExit, do_exit_divemode_menu | |
582 | 116 MENU_END |
117 | |
623 | 118 |
119 IFDEF _external_sensor | |
582 | 120 main_divemenu_pscr_sensors: |
121 MENU_BEGIN tMainMenu, .6 | |
604 | 122 MENU_CALL tDiveBailout, do_divemode_gaslist_bail |
123 MENU_CALL tCCRSensor, do_divemode_setpoint_pscr | |
124 MENU_CALL tDivemenu_Premix, do_divemode_gaslist | |
125 MENU_CALL tDivemenu_Avg_Mkr, do_reset_avg_set_mkr | |
126 MENU_DYNAMIC do_toggle_gf_label, do_toggle_gf | |
127 MENU_CALL tExit, do_exit_divemode_menu | |
582 | 128 MENU_END |
623 | 129 ENDIF ; _external_sensor |
582 | 130 |
623 | 131 ENDIF ; _ccr_pscr |
132 | |
133 ;============================================================================= | |
0 | 134 |
560 | 135 do_toggle_gf: |
604 | 136 TSTOSS char_I_deco_model ; toggle GF only in GF modes - in GF mode? (0 = ZH-L16, 1 = ZH-L16-GF) |
137 bra do_main_divemenu_common ; NO - do nothing and return | |
582 | 138 TSTOSS opt_enable_aGF ; =1: aGF can be selected underwater |
604 | 139 bra do_main_divemenu_common ; NO - do nothing and return |
140 movlw index_gf_factors-1 ; custom view number one below GF factors | |
623 | 141 movwf active_customview ; set custom view number |
142 bsf request_next_custview ; initiate toggle to desired custom view -> GF factors | |
560 | 143 movlw .1 |
623 | 144 movwf menu_pos_cur ; set to first option in dive mode menu |
582 | 145 |
146 MENU_BEGIN tDivemenu_ToggleGF, .2 | |
604 | 147 MENU_CALL tDivemenu_ToggleGF, do_togglegf |
148 MENU_CALL tBack, do_return_main_divemenu | |
582 | 149 MENU_END |
0 | 150 |
560 | 151 do_togglegf: |
623 | 152 bsf request_toggle_GF ; set request flag |
560 | 153 bra do_exit_divemode_menu ; continue with exiting menu code |
582 | 154 |
155 | |
604 | 156 do_reset_avg_set_mkr: |
157 movlw .1 | |
623 | 158 movwf menu_pos_cur ; set to first option in dive mode menu |
604 | 159 |
160 IFDEF _cave_mode | |
623 | 161 btfss cave_mode ; in cave mode? |
604 | 162 bra do_reset_average_no_cave ; NO - do menu without turn option |
163 | |
164 MENU_BEGIN tDivemenu_Avg_Mkr, .4 | |
165 MENU_CALL tDivemenu_ResetAvg, do_reset_average | |
166 MENU_CALL tDivemenu_Marker, do_set_marker | |
167 MENU_DYNAMIC do_turn_dive_label, do_turn_dive | |
168 MENU_CALL tBack, do_return_main_divemenu | |
169 MENU_END | |
170 ENDIF | |
171 | |
172 do_reset_average_no_cave: | |
173 MENU_BEGIN tDivemenu_Avg_Mkr, .3 | |
174 MENU_CALL tDivemenu_ResetAvg, do_reset_average | |
175 MENU_CALL tDivemenu_Marker, do_set_marker | |
176 MENU_CALL tBack, do_return_main_divemenu | |
177 MENU_END | |
178 | |
179 | |
180 do_reset_average: | |
623 | 181 bsf request_reset_avg ; request reset of resettable average depth and dive time |
182 IFDEF _min_depth_option | |
183 bsf reset_trip_pressure ; request ISR to reset the min and max trip-wise pressures | |
184 ENDIF | |
185 bra do_exit_divemode_menu ; exit | |
186 | |
604 | 187 |
560 | 188 do_set_marker: |
623 | 189 bsf request_set_marker ; set request flag |
190 bra do_exit_divemode_menu ; exit | |
191 | |
582 | 192 |
604 | 193 IFDEF _cave_mode |
194 do_turn_dive: | |
623 | 195 bsf request_turn_dive ; set request flag |
196 bra do_exit_divemode_menu ; exit | |
604 | 197 ENDIF |
0 | 198 |
582 | 199 |
623 | 200 IFDEF _external_sensor |
560 | 201 do_switch_sensor: ; entry point when coming from switch to sensor |
604 | 202 movlw .1 ; switch to sensor |
623 | 203 movff WREG,opt_ccr_mode ; =0: fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP |
582 | 204 bra do_switch_sp_com ; continue with common part |
623 | 205 ENDIF |
206 | |
207 ;============================================================================= | |
208 | |
209 IFDEF _ccr_pscr | |
582 | 210 |
560 | 211 do_switch_sp: ; entry point when coming from manual setpoint selection (CCR) |
623 | 212 decf menu_pos_cur,W ; 1-5 -> 0-4 |
213 lfsr FSR1,opt_setpoint_cbar | |
582 | 214 movff PLUSW1,char_I_const_ppO2 ; setup fixed setpoint |
623 | 215 IFDEF _external_sensor |
582 | 216 call transmit_setpoint ; transmit current setpoint from WREG (in cbar) to external electronics |
623 | 217 ENDIF |
218 bcf sp_fallback ; clear fallback condition (stops fallback warning) | |
604 | 219 clrf WREG ; switch to fixed SP |
560 | 220 movff WREG,opt_ccr_mode ; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP |
221 bra do_switch_sp_com | |
0 | 222 |
623 | 223 |
560 | 224 do_switch_sp_calc: ; entry point when coming from switch to calculated ppO2 (pSCR) |
623 | 225 bcf sp_fallback ; clear fallback condition (stops fallback warning) |
226 clrf WREG ; switch to fixed SP | |
582 | 227 movff WREG,opt_ccr_mode ; =0: Fixed SP (CCR) / calculated (pSCR), =1: Sensor, =2: Auto SP |
560 | 228 movff WREG,char_I_const_ppO2 ; set setpoint to 0, this forces deco engine to take the computed ppO2 |
623 | 229 ;bra do_switch_sp_com |
97
53a99a2dc6a1
CHANGE: Always compute bailout plan based on all active gases
heinrichsweikamp
parents:
53
diff
changeset
|
230 |
623 | 231 |
232 do_switch_sp_com: ; common part | |
233 bsf event_occured ; set global event byte | |
234 bsf event_SP_change ; set setpoint event flag | |
582 | 235 |
236 ; Clear some flags in case we were in bailout before... | |
623 | 237 bcf bailout_mode ; end bailout mode |
604 | 238 bcf better_gas_available ; =1: a better gas is available and a gas change is advised in dive mode |
239 bcf better_dil_available ; =1: a better diluent is available and a gas change is advised in dive mode | |
623 | 240 bcf better_gas_blinking ; clear blinking flag |
241 bcf better_dil_blinking ; clear blinking flag | |
242 call dive_customview_mask ; redraw custom view mask to (eventually) rewrite "ppO2(Dil)" to "ppO2" or SAC label | |
0 | 243 |
623 | 244 bsf request_back_to_loop ; indicate that it is a switchback from OC bailout to CCR/pSCR loop |
245 bsf request_gaschange ; initiate reconfiguration to loop mode on last diluent | |
582 | 246 |
247 bra do_exit_divemode_menu ; continue with exiting menu code | |
248 | |
0 | 249 |
560 | 250 do_divemode_gaslist_bail: ; entry point from CCR/pSCR to bailout to OC gases |
623 | 251 bcf is_diluent_menu ; select OC gases |
582 | 252 bsf is_bailout_menu ; flag it is a bailout action |
623 | 253 ;bra do_divemode_gaslist |
254 | |
255 ENDIF ; _ccr_pscr | |
256 | |
257 ;============================================================================= | |
258 | |
560 | 259 do_divemode_gaslist: ; entry point for switching: OC -> gases, loop -> diluents |
623 | 260 IFDEF _ccr_pscr |
261 btfsc bailout_mode ; in bailout mode? | |
262 bcf is_diluent_menu ; YES - for safety reasons, redirect to selecting OC (bailout) gases | |
263 ENDIF | |
264 bsf short_gas_descriptions ; do not show "Gas x" etc. | |
604 | 265 bsf better_gas_hint ; mark the gas which is the best gas/diluent |
266 movf best_gas_number,W ; load number of best gas (1-5)into WREG | |
623 | 267 IFDEF _ccr_pscr |
268 btfsc is_diluent_menu ; in diluent selection? | |
604 | 269 movf best_dil_number,W ; YES - overwrite with best diluent (1-5) |
623 | 270 ENDIF |
604 | 271 bnz do_divemode_gaslist_1 ; best gas/dil number = 0 (none available) ? |
272 movlw .1 ; YES - default to first gas/dil | |
273 btfsc WREG,7 ; best gas/dil number >= 128 (not computed yet) ? | |
274 movlw .1 ; YES - default to first gas/dil | |
275 do_divemode_gaslist_1: | |
623 | 276 movwf menu_pos_cur ; position cursor to best gas/dil (or first option if none avail) |
582 | 277 MENU_BEGIN tGaslist, .6 |
604 | 278 MENU_DYNAMIC gaslist_strcat_gas_cd, do_switch_gas |
279 MENU_DYNAMIC gaslist_strcat_gas_cd, do_switch_gas | |
280 MENU_DYNAMIC gaslist_strcat_gas_cd, do_switch_gas | |
281 MENU_DYNAMIC gaslist_strcat_gas_cd, do_switch_gas | |
282 MENU_DYNAMIC gaslist_strcat_gas_cd, do_switch_gas | |
582 | 283 MENU_CALL tMore, do_divemode_gaslist_more |
284 MENU_END | |
285 | |
0 | 286 |
287 do_divemode_gaslist_more: | |
560 | 288 movlw .1 |
623 | 289 movwf menu_pos_cur ; set to first option in dive mode menu |
582 | 290 |
560 | 291 movff char_I_O2_ratio,gas6_O2_ratio ; initialize gas6 with currently breathed gas - O2 ratio |
623 | 292 IFDEF _helium |
560 | 293 movff char_I_He_ratio,gas6_He_ratio ; initialize gas6 with currently breathed gas - He ratio |
623 | 294 ENDIF |
582 | 295 |
296 do_divemode_gaslist_more_common: | |
623 | 297 IFDEF _helium |
582 | 298 MENU_BEGIN tGaslist, .6 |
299 MENU_CALL tO2Plus, do_dive_pO2 | |
300 MENU_CALL tO2Minus, do_dive_mO2 | |
301 MENU_CALL tHePlus, do_dive_pHe | |
302 MENU_CALL tHeMinus, do_dive_mHe | |
303 MENU_DYNAMIC gaslist_strcat_gas6, do_switch_gas6 | |
304 MENU_CALL tDivemenu_LostGas, do_lost_gas | |
305 MENU_END | |
623 | 306 ELSE |
307 MENU_BEGIN tGaslist, .4 | |
308 MENU_CALL tO2Plus, do_dive_pO2 | |
309 MENU_CALL tO2Minus, do_dive_mO2 | |
310 MENU_DYNAMIC gaslist_strcat_gas6, do_switch_gas6 | |
311 MENU_CALL tDivemenu_LostGas, do_lost_gas | |
312 MENU_CALL tExit, do_exit_divemode_menu | |
313 MENU_END | |
314 ENDIF | |
582 | 315 |
403
6e60012bb3fc
NEW: "Lost Gas" feature allows disabling gases during the dive
heinrichsweikamp
parents:
401
diff
changeset
|
316 |
6e60012bb3fc
NEW: "Lost Gas" feature allows disabling gases during the dive
heinrichsweikamp
parents:
401
diff
changeset
|
317 do_lost_gas: |
560 | 318 movlw .1 |
623 | 319 movwf menu_pos_cur ; set to first option in dive mode menu |
582 | 320 do_lost_gas_common: |
623 | 321 bsf short_gas_descriptions ; do not show "Gas x" etc. |
604 | 322 bcf better_gas_hint ; do not mark the best gas/diluent |
582 | 323 MENU_BEGIN tDivemenu_LostGas, .6 |
604 | 324 MENU_DYNAMIC gaslist_strcat_gas_cd, do_toggle_active ; toggle the gas (in)active |
325 MENU_DYNAMIC gaslist_strcat_gas_cd, do_toggle_active ; toggle the gas (in)active | |
326 MENU_DYNAMIC gaslist_strcat_gas_cd, do_toggle_active ; toggle the gas (in)active | |
327 MENU_DYNAMIC gaslist_strcat_gas_cd, do_toggle_active ; toggle the gas (in)active | |
328 MENU_DYNAMIC gaslist_strcat_gas_cd, do_toggle_active ; toggle the gas (in)active | |
582 | 329 MENU_CALL tExit, do_exit_divemode_menu |
330 MENU_END | |
0 | 331 |
560 | 332 |
333 do_switch_gas6: | |
582 | 334 movlw .6 ; gas 6 |
623 | 335 movwf menu_pos_cur ; transfer register for selected gas towards gas_switched_common |
336 bsf event_gas_change_gas6 ; set flag for profile recording | |
560 | 337 ;bra do_switch_gas ; continue with common gas-switched code |
338 | |
623 | 339 |
560 | 340 do_switch_gas: |
623 | 341 bsf request_gaschange ; initiate gas change, will also trigger restart of deco_engine |
604 | 342 btfss is_bailout_menu ; doing a bailout? |
343 bra do_switch_gas_1 ; NO | |
623 | 344 bsf bailout_mode ; YES - begin bailout mode |
604 | 345 IFDEF _cave_mode |
623 | 346 btfsc cave_mode ; - in cave mode? |
347 bsf dive_turned ; YES - set dive as turned | |
604 | 348 ENDIF |
349 do_switch_gas_1: | |
623 | 350 bcf sp_fallback ; eventually terminate fallback mode and get rid of its warning |
351 call dive_customview_mask ; redraw custom view mask to (eventually) rewrite "ppO2(Dil)" to "ppO2" or SAC label | |
560 | 352 ;bra do_exit_divemode_menu ; continue with exiting menu code |
582 | 353 |
623 | 354 |
560 | 355 do_exit_divemode_menu: |
356 call timeout_divemode_menu2 | |
357 clrf STKPTR | |
623 | 358 goto diveloop_menu_exit |
560 | 359 |
360 | |
403
6e60012bb3fc
NEW: "Lost Gas" feature allows disabling gases during the dive
heinrichsweikamp
parents:
401
diff
changeset
|
361 do_toggle_active: |
582 | 362 movlw .5 |
623 | 363 IFDEF _ccr_pscr |
364 btfsc is_diluent_menu ; operating on diluents? | |
365 addwf menu_pos_cur,F ; YES - add offset of 5 to shift 1-5 -> 6-10 | |
366 ENDIF | |
367 decf menu_pos_cur,W ; 1-10 -> 0-4 for gases / 5-9 for diluents | |
604 | 368 lfsr FSR1,opt_gas_type ; load base address of gas types |
369 movff PLUSW1,lo ; get gas/dil type | |
370 tstfsz lo ; already disabled? | |
371 bra do_toggle_active_disable ; NO - disable now | |
372 do_toggle_active_enable ; YES - re-enable now | |
373 lfsr FSR1,opt_gas_type_backup ; load base address of backed-up gas types | |
374 movff PLUSW1,lo ; get backed-up gas/dil type | |
375 lfsr FSR1,opt_gas_type ; load base address of gas types | |
376 movff lo,PLUSW1 ; restore gas type | |
377 bra do_toggle_active_common | |
378 do_toggle_active_disable: ; disable gas / diluent | |
379 ;lfsr FSR1,opt_gas_type ; (still set) | |
380 clrf PLUSW1 ; set type to disabled (0=disabled, 1=first, 2=travel/normal, 3=deco/-) | |
381 do_toggle_active_common: | |
582 | 382 movlw .5 |
623 | 383 IFDEF _ccr_pscr |
384 btfsc is_diluent_menu ; operating on diluents? | |
385 subwf menu_pos_cur,F ; YES - back to 1-5 | |
386 bcf better_dil_blinking ; clear blinking flag for diluents to avoid "leftovers" | |
387 ENDIF | |
388 bcf better_gas_blinking ; clear blinking flag for gases to avoid "leftovers" | |
604 | 389 call restart_deco_engine_wo_ceiling ; invalidate deco data (but not the ceiling) and restart deco engine |
390 bra do_lost_gas_common | |
0 | 391 |
623 | 392 |
0 | 393 do_dive_pO2: |
560 | 394 incf gas6_O2_ratio,F ; O2++ |
623 | 395 IFDEF _helium |
560 | 396 movf gas6_He_ratio,W |
397 addwf gas6_O2_ratio,W | |
623 | 398 ELSE |
399 movf gas6_O2_ratio,W | |
400 ENDIF | |
401 movwf lo | |
560 | 402 movlw .101 |
623 | 403 cpfslt lo ; O2 + He < 101 ? |
582 | 404 decf gas6_O2_ratio,F ; O2-- (unchanged) |
405 bra do_divemode_gaslist_more_common | |
406 | |
623 | 407 |
0 | 408 do_dive_mO2: |
582 | 409 decf gas6_O2_ratio,F ; O2-- |
410 movlw gaslist_min_o2 | |
623 | 411 cpfslt gas6_O2_ratio ; O2 < minimum allowed %O2 ? |
582 | 412 bra do_dive_mO2_done ; NO |
413 movlw gaslist_min_o2 ; YES - restore minimum | |
414 movwf gas6_O2_ratio | |
560 | 415 do_dive_mO2_done: |
582 | 416 bra do_divemode_gaslist_more_common |
0 | 417 |
623 | 418 ;============================================================================= |
419 | |
420 IFDEF _helium | |
421 | |
0 | 422 do_dive_pHe: |
582 | 423 incf gas6_He_ratio,F ; He++ |
424 movf gas6_He_ratio,W | |
425 addwf gas6_O2_ratio,W | |
426 movwf lo | |
427 movlw .101 | |
428 cpfslt lo ; O2 + He < 101 ? | |
623 | 429 decf gas6_He_ratio,F ; YES - He-- (unchanged) |
582 | 430 bra do_divemode_gaslist_more_common |
0 | 431 |
432 do_dive_mHe: | |
582 | 433 decf gas6_He_ratio,F ; He-- |
623 | 434 bnn do_dive_mHe_done ; H2 < 0 ? |
582 | 435 clrf gas6_He_ratio ; YES - reset to 0 |
560 | 436 do_dive_mHe_done: |
582 | 437 bra do_divemode_gaslist_more_common |
438 | |
623 | 439 ENDIF |
440 | |
441 ;============================================================================= | |
442 | |
443 IFDEF _ccr_pscr | |
0 | 444 |
445 do_divemode_splist: | |
623 | 446 bsf short_gas_descriptions ; do not show "SP" etc. |
447 movlw .1 ; default to first menu item | |
448 movff opt_ccr_mode,lo ; get CCR mode (0: Fixed SP, 1: Sensor, 2: Auto SP) | |
449 dcfsnz lo,F ; mode = sensor ? | |
450 movlw .6 ; YES - load menu item number for 'sensor' | |
451 btfsc sp_fallback ; in fallback condition? | |
452 movlw .1 ; YES - revert to first menu item | |
453 movwf menu_pos_cur ; set cursor position | |
560 | 454 |
582 | 455 do_divemode_splist_common: |
623 | 456 |
457 IFDEF _external_sensor | |
458 btfsc analog_o2_input ; do we have an analog or S8 digital input (OSTC cR)? | |
582 | 459 bra do_divemode_splist_sensor ; YES |
604 | 460 btfsc optical_input ; do we have an optical input (OSTC 3)? |
582 | 461 bra do_divemode_splist_sensor ; YES |
623 | 462 ENDIF |
0 | 463 |
560 | 464 do_divemode_splist_no_sensor: |
582 | 465 MENU_BEGIN tGaslist, .5 |
466 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
467 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
468 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
469 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
470 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
471 MENU_END | |
472 | |
623 | 473 |
474 IFDEF _external_sensor | |
475 | |
582 | 476 do_divemode_splist_sensor: |
477 MENU_BEGIN tGaslist, .6 | |
478 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
479 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
480 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
481 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
482 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp | |
483 MENU_CALL tCCRSensor, do_divemode_sensor | |
484 MENU_END | |
249 | 485 |
486 | |
0 | 487 do_divemode_sensor: |
604 | 488 movlw index_ppo2_sensors-1 ; custom view number one below ppO2 sensors |
623 | 489 movwf active_customview ; set custom view number |
490 bsf request_next_custview ; initiate toggle to desired custom view -> ppO2 sensors | |
582 | 491 movlw .1 |
623 | 492 movwf menu_pos_cur ; set to 1st option: use sensors |
582 | 493 |
494 do_return_divemode_sensor: | |
495 MENU_BEGIN tGaslist, .6 | |
496 MENU_CALL tDivemenu_UseSensor, do_switch_sensor | |
560 | 497 MENU_CALL tBack, do_divemode_splist |
582 | 498 MENU_CALL tExit, do_exit_divemode_menu |
560 | 499 MENU_CALL tDiveHudMask1, do_toggle_sensor |
500 MENU_CALL tDiveHudMask2, do_toggle_sensor | |
501 MENU_CALL tDiveHudMask3, do_toggle_sensor | |
582 | 502 MENU_END |
0 | 503 |
623 | 504 |
560 | 505 do_divemode_setpoint_pscr: |
582 | 506 movlw .1 |
623 | 507 movwf menu_pos_cur ; set to 1st option: use calculated ppO2 |
582 | 508 MENU_BEGIN tGaslist, .6 |
560 | 509 MENU_CALL tCalculated, do_switch_sp_calc |
582 | 510 MENU_CALL tDivemenu_UseSensor, do_switch_sensor |
511 MENU_CALL tExit, do_exit_divemode_menu | |
560 | 512 MENU_CALL tDiveHudMask1, do_toggle_sensor |
513 MENU_CALL tDiveHudMask2, do_toggle_sensor | |
514 MENU_CALL tDiveHudMask3, do_toggle_sensor | |
582 | 515 MENU_END |
516 | |
0 | 517 |
560 | 518 do_toggle_sensor: |
623 | 519 movff menu_pos_cur,lo ; backup position |
520 decf menu_pos_cur,f ; 4, 5, 6 -> 3, 4, 5 | |
521 decf menu_pos_cur,f ; 3, 4, 5 -> 2, 3, 4 | |
522 decf menu_pos_cur,f ; 2, 3, 4 -> 1, 2, 3 | |
523 dcfsnz menu_pos_cur ; 1, 2, 3 -> 0, 1, 2 | |
582 | 524 btg use_O2_sensor1 ; = |
623 | 525 dcfsnz menu_pos_cur ; 0, 1, 2 -> -1, 0, 1 |
582 | 526 btg use_O2_sensor2 ; = |
623 | 527 dcfsnz menu_pos_cur ; -1,0, 1 -> -2,-1, 0 |
582 | 528 btg use_O2_sensor3 ; = |
623 | 529 movff lo,menu_pos_cur ; restore position |
582 | 530 bra do_return_divemode_sensor |
560 | 531 |
623 | 532 ENDIF ; _external_sensor |
533 ENDIF ; _ccr_pscr | |
534 | |
535 ;============================================================================= | |
536 | |
537 END |