0
|
1 ;=============================================================================
|
|
2 ;
|
|
3 ; File divemenu_tree.asm
|
|
4 ;
|
275
|
5 ; OSTC dive mode menu
|
0
|
6 ;
|
|
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
|
|
8 ;=============================================================================
|
|
9 ; HISTORY
|
|
10 ; 2013-02-02 : [mH] Made out of menu_tree.asm
|
|
11
|
275
|
12 #include "hwos.inc" ; Mandatory header
|
0
|
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"
|
195
|
18 #include "calibrate.inc"
|
0
|
19
|
|
20 divegui CODE
|
|
21 ;=============================================================================
|
|
22 ; Main Menu
|
|
23 global do_main_divemenu
|
|
24 do_main_divemenu:
|
|
25 call menu_processor_reset ; restart from first icon.
|
|
26
|
|
27 do_continue_main_divemenu:
|
|
28 call menu_processor_pop ; drop exit line.
|
|
29 call menu_processor_pop ; drop exit line.
|
|
30
|
|
31 btfsc FLAG_ccr_mode
|
|
32 bra main_divemenu_ccr ; CCR Menu
|
485
|
33
|
|
34 btfsc FLAG_pscr_mode
|
|
35 bra main_divemenu_ccr ; Proceeds to PSCR menu then...
|
|
36
|
|
37 bcf ccr_diluent_setup ; For OC gases
|
0
|
38 bcf is_bailout_menu
|
|
39 movlw .1
|
|
40 movwf menupos ; Set to first option in divemode menu
|
401
|
41 MENU_BEGIN tMainMenu, .5
|
0
|
42 MENU_CALL tDivemenu_Gaslist, do_divemode_gaslist
|
437
|
43 MENU_CALL tDivemenu_ResetAvg, do_divemode_resetavg
|
0
|
44 MENU_CALL tDivemenu_ToggleGF, do_divemode_togglegf
|
401
|
45 MENU_CALL tDivemenu_Marker, do_set_marker
|
0
|
46 MENU_CALL tExit, do_exit_divemode_menu
|
|
47 MENU_END
|
|
48
|
401
|
49 do_set_marker:
|
|
50 movlw d'6' ; Type of Alarm (Manual Marker)
|
|
51 movwf AlarmType ; Copy to Alarm Register
|
|
52 bsf event_occured ; Set Event Flag
|
|
53 bra do_exit_divemode_menu ; And exit
|
|
54
|
0
|
55 main_divemenu_ccr:
|
|
56 bsf ccr_diluent_setup ; For diluents
|
|
57 movlw .1
|
|
58 movwf menupos ; Set to first option in divemode menu
|
485
|
59
|
|
60 btfsc FLAG_pscr_mode
|
|
61 bra main_divemenu_pscr ; PSCR Menu
|
|
62
|
0
|
63 MENU_BEGIN tMainMenu, .6
|
|
64 MENU_CALL tDiveBailout, do_divemode_gaslist_bail
|
|
65 MENU_CALL tDivemenu_Setpoint, do_divemode_splist
|
|
66 MENU_CALL tDivemenu_Gaslist, do_divemode_gaslist
|
437
|
67 MENU_CALL tDivemenu_ResetAvg, do_divemode_resetavg
|
0
|
68 MENU_CALL tDivemenu_ToggleGF, do_divemode_togglegf
|
|
69 MENU_CALL tExit, do_exit_divemode_menu
|
|
70 MENU_END
|
485
|
71
|
|
72 main_divemenu_pscr:
|
|
73 MENU_BEGIN tMainMenu, .6
|
|
74 MENU_CALL tDiveBailout, do_divemode_gaslist_bail
|
|
75 MENU_CALL tDivemenu_Gaslist, do_divemode_gaslist_pscr ; quit bailout and always use diluents here
|
|
76 MENU_CALL tDivemenu_ResetAvg, do_divemode_resetavg
|
|
77 MENU_CALL tDivemenu_ToggleGF, do_divemode_togglegf
|
|
78 MENU_CALL tDivemenu_Marker, do_set_marker
|
|
79 MENU_CALL tExit, do_exit_divemode_menu
|
|
80 MENU_END
|
|
81
|
0
|
82 do_togglegf:
|
|
83 TSTOSS opt_enable_aGF ; =1: aGF can be selected underwater
|
|
84 bra do_exit_divemode_menu ; exit
|
|
85 bsf toggle_gf ; Set flag...
|
|
86 bra do_exit_divemode_menu ; ...and exit
|
|
87
|
|
88 do_switch_to_sensor:
|
|
89 movlw .1 ; Switch to Sensor
|
426
|
90 movff WREG,opt_ccr_mode ; =0: Fixed SP, =1: Sensor, =2: Auto SP
|
192
|
91 bsf voting_logic_sensor1
|
|
92 bsf voting_logic_sensor2
|
|
93 bsf voting_logic_sensor3
|
193
|
94 extern divemode_setup_sensor_values
|
|
95 call divemode_setup_sensor_values ; Setup sensor values
|
195
|
96 call check_sensors ; Check O2 sensor thresholds for fallback
|
0
|
97 bra do_switch_sp2
|
|
98
|
437
|
99 do_divemode_resetavg:
|
0
|
100 bsf reset_average_depth ; Set Flag
|
|
101 bra do_exit_divemode_menu ; And exit
|
|
102
|
53
|
103
|
|
104 do_switch_gas6:
|
|
105 movlw .6
|
|
106 movwf active_gas ; Gas6 selected
|
377
|
107 movff WREG,char_I_current_gas ; for p2_deco.c
|
53
|
108 bra do_switch_gasX
|
0
|
109 extern diveloop_loop4
|
|
110 extern timeout_divemode_menu2
|
|
111 do_switch_gas:
|
|
112 bsf divemode_gaschange ; Set flag
|
|
113 do_switch_gasX:
|
|
114 btfsc is_bailout_menu ; Bailout confirmed?
|
|
115 bsf is_bailout ; =1: Bailout
|
|
116 do_exit_divemode_menu:
|
|
117 call timeout_divemode_menu2
|
|
118 clrf STKPTR
|
|
119 goto diveloop_loop4
|
|
120
|
|
121 do_switch_sp:
|
|
122 decf menupos,W ; 1-5 -> 0-4
|
|
123 lfsr FSR1,char_I_setpoint_cbar
|
|
124 movff PLUSW1,char_I_const_ppO2; Setup fixed Setpoint
|
352
|
125 movff char_I_const_ppO2,WREG
|
|
126 call transmit_setpoint ; Transmit current setpoint from WREG (in cbar) to external electronics
|
0
|
127 bsf setpoint_changed ; Set flag (For profile)
|
99
|
128 bsf event_occured ; Set global event byte
|
0
|
129
|
97
|
130 ; Reconfigure last diluent
|
|
131 extern setup_dil_registers
|
|
132 bcf is_bailout ; =1: Bailout
|
|
133 movff active_diluent,WREG ; As a backup when switching back from Bailout to CCR
|
|
134 decf WREG ; 0-4
|
|
135 call setup_dil_registers ; With WREG=Gas 0-4
|
|
136
|
0
|
137 clrf WREG ; Switch to fixed SP
|
426
|
138 movff WREG,opt_ccr_mode ; =0: Fixed SP, =1: Sensor, =2: Auto SP
|
0
|
139 clrf WREG
|
|
140 movff WREG,char_O_deco_status ; Restart decoplan computation
|
|
141
|
|
142 do_switch_sp2:
|
|
143 ; Clear some flags in case we were in bailout before...
|
|
144 bcf is_bailout ; =1: Bailout
|
|
145 bcf is_bailout_menu ;
|
485
|
146 bcf better_gas_available ;=1: A better gas is available and a gas change is advised in divemode
|
0
|
147 bcf blinking_better_gas ; Clear blinking flag
|
|
148 bra do_exit_divemode_menu ; And exit
|
|
149
|
485
|
150 do_divemode_gaslist_pscr:
|
502
|
151 bsf ccr_diluent_setup ; For Diluents
|
485
|
152 bcf is_bailout ; =1: Bailout
|
|
153 bcf is_bailout_menu ;
|
|
154 bra do_divemode_gaslist_pscr2
|
|
155
|
0
|
156 do_divemode_gaslist_bail:
|
|
157 bcf ccr_diluent_setup ; For OC gases
|
|
158 bsf is_bailout_menu ; =1: Bailout
|
|
159 do_divemode_gaslist:
|
|
160 btfsc is_bailout ; In Bailout case?
|
|
161 bcf ccr_diluent_setup ; Yes, use OC gases
|
485
|
162 do_divemode_gaslist_pscr2:
|
0
|
163 bsf short_gas_decriptions
|
|
164 movlw .1
|
|
165 movwf menupos ; Set to first option in divemode menu
|
|
166 MENU_BEGIN tGaslist, .6
|
|
167 MENU_DYNAMIC gaslist_strcat_gas_mod, do_switch_gas
|
|
168 MENU_DYNAMIC gaslist_strcat_gas_mod, do_switch_gas
|
|
169 MENU_DYNAMIC gaslist_strcat_gas_mod, do_switch_gas
|
|
170 MENU_DYNAMIC gaslist_strcat_gas_mod, do_switch_gas
|
|
171 MENU_DYNAMIC gaslist_strcat_gas_mod, do_switch_gas
|
|
172 MENU_CALL tMore, do_divemode_gaslist_more0
|
|
173 MENU_END
|
|
174
|
|
175 do_divemode_gaslist_more0:
|
|
176 movlw .1
|
|
177 movwf menupos ; Set to first option in divemode menu
|
|
178 do_divemode_gaslist_more:
|
|
179 MENU_BEGIN tGaslist, .6
|
|
180 MENU_CALL tO2Plus, do_dive_pO2
|
|
181 MENU_CALL tO2Minus, do_dive_mO2
|
|
182 MENU_CALL tHePlus, do_dive_pHe
|
|
183 MENU_CALL tHeMinus, do_dive_mHe
|
403
|
184 MENU_DYNAMIC gaslist_strcat_gasx, do_switch_gas6
|
|
185 MENU_CALL tDivemenu_LostGas, do_lost_gas
|
|
186 MENU_END
|
|
187
|
|
188 do_lost_gas:
|
|
189 movlw .1
|
|
190 movwf menupos ; Set to first option in divemode menu
|
|
191 do_lost_gas0:
|
511
|
192 ; bcf ccr_diluent_setup ; use OC gases
|
|
193 ; bsf is_bailout_menu ; =1: Bailout
|
403
|
194 bsf short_gas_decriptions
|
|
195 MENU_BEGIN tDivemenu_LostGas, .6
|
|
196 MENU_DYNAMIC gaslist_strcat_gas_mod, do_toggle_active ; Toggle the gas (in)active
|
|
197 MENU_DYNAMIC gaslist_strcat_gas_mod, do_toggle_active ; Toggle the gas (in)active
|
|
198 MENU_DYNAMIC gaslist_strcat_gas_mod, do_toggle_active ; Toggle the gas (in)active
|
|
199 MENU_DYNAMIC gaslist_strcat_gas_mod, do_toggle_active ; Toggle the gas (in)active
|
|
200 MENU_DYNAMIC gaslist_strcat_gas_mod, do_toggle_active ; Toggle the gas (in)active
|
|
201 MENU_CALL tExit, do_exit_divemode_menu
|
0
|
202 MENU_END
|
|
203
|
403
|
204 do_toggle_active:
|
511
|
205 movlw .5
|
|
206 btfsc ccr_diluent_setup ; use OC gases
|
|
207 addwf menupos,F ; -> 6-10 for Diluents
|
|
208
|
403
|
209 decf menupos,W ; 1-5 -> 0-4
|
|
210 lfsr FSR1,opt_gas_type+0
|
|
211 movff PLUSW1,lo
|
|
212 tstfsz lo ; Already disabled?
|
|
213 bra do_toggle_active2 ; No, disable now!
|
|
214
|
|
215 ; Copy opt_gas_type_backup+W back to opt_gas_type+W
|
|
216 decf menupos,W ; 1-5 -> 0-4
|
|
217 lfsr FSR1,opt_gas_type_backup+0
|
|
218 movff PLUSW1,lo
|
|
219 decf menupos,W ; 1-5 -> 0-4
|
|
220 lfsr FSR1,opt_gas_type+0
|
|
221 movff lo,PLUSW1
|
|
222
|
|
223 ; Copy opt_OC_bail_gas_change_backup+W back to opt_OC_bail_gas_change+W
|
|
224 decf menupos,W ; 1-5 -> 0-4
|
|
225 lfsr FSR1,opt_OC_bail_gas_change_backup+0
|
|
226 movff PLUSW1,lo
|
|
227 decf menupos,W ; 1-5 -> 0-4
|
|
228 lfsr FSR1,opt_OC_bail_gas_change+0
|
|
229 movff lo,PLUSW1
|
|
230
|
511
|
231 movlw .5
|
|
232 btfsc ccr_diluent_setup ; use OC gases?
|
|
233 subwf menupos,F ; Back to 1-5
|
|
234
|
403
|
235 bra do_lost_gas0 ; Return to list and show updated result
|
|
236
|
|
237 do_toggle_active2:
|
|
238 clrf PLUSW1 ; 0=Disabled, 1=First, 2=Travel, 3=Deco
|
|
239
|
|
240 ; Also delete change depth here to have the menu updated immediately
|
|
241 lfsr FSR1,opt_OC_bail_gas_change+0
|
|
242 clrf PLUSW1
|
|
243
|
511
|
244 movlw .5
|
|
245 btfsc ccr_diluent_setup ; use OC gases?
|
|
246 subwf menupos,F ; Back to 1-5
|
|
247
|
403
|
248 bra do_lost_gas0 ; Return to list and show updated result
|
0
|
249
|
|
250 do_dive_pO2:
|
|
251 banksel char_I_O2_ratio
|
|
252 incf char_I_O2_ratio,F ; O2++
|
|
253 movf char_I_He_ratio,W
|
|
254 addwf char_I_O2_ratio,W
|
|
255 movwf temp_bankx400
|
|
256 movlw .101
|
|
257 cpfslt temp_bankx400 ; O2+He<101?
|
|
258 decf char_I_O2_ratio,F ; O2-- (Unchanged)
|
|
259 ; bra do_divemode_gaslist_more_common
|
|
260 do_divemode_gaslist_more_common:
|
181
|
261 movf char_I_O2_ratio,W ; Add O2...
|
|
262 addwf char_I_He_ratio,W ; ...and He...
|
|
263 sublw .100 ; ...subtract both from 100
|
|
264 movwf char_I_N2_ratio ; -> N2!
|
0
|
265 banksel common
|
|
266 bsf gas6_changed ; Set flag
|
|
267 bra do_divemode_gaslist_more
|
|
268
|
|
269 do_dive_mO2:
|
|
270 banksel char_I_O2_ratio
|
|
271 decf char_I_O2_ratio,F ; O2--
|
|
272 movlw gaslist_min_o2
|
|
273 cpfslt char_I_O2_ratio
|
|
274 bra do_divemode_gaslist_more_common
|
|
275 movlw gaslist_min_o2
|
|
276 movwf char_I_O2_ratio
|
|
277 bra do_divemode_gaslist_more_common
|
|
278
|
|
279
|
|
280 do_dive_pHe:
|
|
281 banksel char_I_O2_ratio
|
|
282 incf char_I_He_ratio,F ; He++
|
|
283 movf char_I_He_ratio,W
|
|
284 addwf char_I_O2_ratio,W
|
|
285 movwf lo
|
|
286 movlw .101
|
|
287 cpfslt lo ; O2+He<101?
|
|
288 decf char_I_He_ratio,F ; Yes, He-- (Unchanged)
|
|
289 bra do_divemode_gaslist_more_common
|
|
290
|
|
291 do_dive_mHe:
|
|
292 banksel char_I_O2_ratio
|
|
293 decf char_I_He_ratio,F ; He--
|
|
294 bnn do_divemode_gaslist_more_common
|
|
295 clrf char_I_He_ratio
|
|
296 bra do_divemode_gaslist_more_common
|
|
297
|
|
298 do_divemode_splist:
|
|
299 bsf short_gas_decriptions
|
|
300 movlw .1
|
|
301 movwf menupos ; Set to first option in divemode menu
|
249
|
302 movf hardware_flag,W
|
|
303 sublw 0x11 ; 2 with BLE
|
|
304 btfsc STATUS,Z
|
|
305 bra do_divemode_splist2
|
0
|
306 MENU_BEGIN tGaslist, .6
|
|
307 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
308 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
309 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
310 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
311 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
312 MENU_CALL tCCRSensor, do_divemode_sensor
|
|
313 MENU_END
|
|
314
|
249
|
315 do_divemode_splist2:
|
|
316 MENU_BEGIN tGaslist, .5
|
|
317 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
318 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
319 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
320 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
321 MENU_DYNAMIC gaslist_strcat_setpoint, do_switch_sp
|
|
322 MENU_END
|
|
323
|
|
324
|
0
|
325 do_divemode_sensor:
|
|
326 ; Set customview to 1 (HUD Data)
|
|
327 clrf menupos3 ; customview to come-1
|
|
328 bsf toggle_customview ; Set flag, the customview will be toggled very soon now...
|
|
329 movlw .1
|
|
330 movwf menupos ; Set to first option in divemode menu
|
|
331 MENU_BEGIN tGaslist, .2
|
|
332 MENU_CALL tDivemenu_UseSensor, do_switch_to_sensor
|
|
333 MENU_CALL tExit, do_continue_main_divemenu
|
|
334 MENU_END
|
|
335
|
|
336 do_divemode_togglegf:
|
528
4921aa796691
BUGFIX: Ignore "Toggle GF" Menu entry (in divemode) when using the non-GF deco mode
heinrichsweikamp
diff
changeset
|
337 movff char_I_deco_model,WREG ; 0 = ZH-L16, 1 = ZH-L16-GF
|
4921aa796691
BUGFIX: Ignore "Toggle GF" Menu entry (in divemode) when using the non-GF deco mode
heinrichsweikamp
diff
changeset
|
338 decfsz WREG,W ; Was 1?
|
4921aa796691
BUGFIX: Ignore "Toggle GF" Menu entry (in divemode) when using the non-GF deco mode
heinrichsweikamp
diff
changeset
|
339 bra do_continue_main_divemenu ; No, do nothing and return
|
4921aa796691
BUGFIX: Ignore "Toggle GF" Menu entry (in divemode) when using the non-GF deco mode
heinrichsweikamp
diff
changeset
|
340
|
4921aa796691
BUGFIX: Ignore "Toggle GF" Menu entry (in divemode) when using the non-GF deco mode
heinrichsweikamp
diff
changeset
|
341 ; Toggle GF only in GF modes
|
0
|
342 ; Set customview to 5 (GF informations)
|
|
343 movlw .4
|
|
344 movwf menupos3 ; Customview to come-1
|
|
345 bsf toggle_customview ; Set flag, the customview will be toggled very soon now...
|
|
346 movlw .1
|
|
347 movwf menupos ; Set to first option in divemode menu
|
|
348 MENU_BEGIN tDivemenu_ToggleGF, .2
|
|
349 MENU_CALL tDivemenu_ToggleGF, do_togglegf
|
|
350 MENU_CALL tExit, do_continue_main_divemenu
|
|
351 MENU_END
|
|
352
|
|
353 END |