Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/divemode_menu.asm @ 118:a5eacfafd37f
add p2_deco.o
author | heinrichsweikamp |
---|---|
date | Sun, 26 Dec 2010 17:02:59 +0100 |
parents | 50a06adabc67 |
children | f24137eb85de |
rev | line source |
---|---|
0 | 1 ; OSTC - diving computer code |
2 ; Copyright (C) 2008 HeinrichsWeikamp GbR | |
3 | |
4 ; This program is free software: you can redistribute it and/or modify | |
5 ; it under the terms of the GNU General Public License as published by | |
6 ; the Free Software Foundation, either version 3 of the License, or | |
7 ; (at your option) any later version. | |
8 | |
9 ; This program is distributed in the hope that it will be useful, | |
10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 ; GNU General Public License for more details. | |
13 | |
14 ; You should have received a copy of the GNU General Public License | |
15 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | |
17 | |
18 ; Underwater Menu (Set Gas, Decoplan, etc.) | |
19 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
20 ; written: 11/11/05 | |
21 ; last updated: 090305 | |
22 ; known bugs: | |
23 ; ToDo: | |
24 | |
25 | |
112 | 26 test_switches_divemode: ; checks switches in divemode |
0 | 27 btfsc switch_left |
28 bra test_switches_divemode2 | |
29 | |
30 btfss switch_right | |
31 return | |
32 | |
33 bcf switch_left ; Left button pressed! | |
34 bcf switch_right | |
35 | |
36 bcf select_bailoutgas ; Clear Flag for Bailout list | |
37 bsf premenu ; Set Flag for premenu | |
38 bcf menubit | |
39 clrf timeout_counter3 ; timeout_divemenu | |
40 | |
41 btfsc FLAG_apnoe_mode ; In Apnoe mode? | |
42 bra test_switches_divemode1 ; Yes! | |
43 | |
44 test_switches_divemode0: | |
45 WIN_INVERT .1 | |
46 DISPLAYTEXT .4 ;Menu? | |
47 WIN_INVERT .0 | |
48 return | |
49 | |
50 test_switches_divemode1: | |
51 DISPLAYTEXT .141 ;Quit? | |
52 return | |
53 | |
54 test_switches_divemode2: | |
55 bcf switch_left ; Also reactivate left button if there was a right press without prior left press | |
56 bcf switch_right ; enable right button again | |
57 | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
58 btfsc premenu |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
59 bra test_switches_divemode2_2 |
109
6e635bf5b7a7
fixed double-effect of ENTER button in divemode
heinrichsweikamp
parents:
107
diff
changeset
|
60 btfsc menubit |
6e635bf5b7a7
fixed double-effect of ENTER button in divemode
heinrichsweikamp
parents:
107
diff
changeset
|
61 bra test_switches_divemode2_2 ; Not in Premenu or Menu... |
0 | 62 |
112 | 63 bsf toggle_customview ; Toggle customview (Cleared in customview.asm) |
64 | |
65 btfsc standalone_simulator ; Standalone Simualtor active? | |
66 bra divemode_menu_simulator ; Yes, Show simulator menu! | |
67 return | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
68 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
69 test_switches_divemode2_2: |
0 | 70 btfss FLAG_apnoe_mode ; In Apnoe mode? |
71 bra test_switches_divemode2a; No! | |
72 | |
73 ; Yes, so quit Apnoe mode at once... | |
74 bcf divemode ; Clear Divemode flag... | |
75 bcf premenu ; clear premenu flag | |
76 return | |
77 | |
78 test_switches_divemode2a: | |
79 bsf menubit ; Enter Divemode-Menu! | |
80 bcf premenu ; clear premenu flag | |
81 call PLED_clear_divemode_menu ; Clear dive mode menu area | |
82 call PLED_divemode_menu_mask_first ; Write Divemode menu1 mask | |
83 bcf display_set_simulator ; Clear Simulator-Menu flag | |
84 movlw d'1' | |
85 movwf menupos ; reset cursor in divemode menu | |
86 call PLED_divemenu_cursor ; show cursor | |
87 bcf switch_right | |
88 bcf switch_left ; Left button pressed! | |
89 return | |
90 | |
91 test_switches_divemode_menu: | |
92 btfsc switch_left | |
93 bra test_switches_divemode_menu3 | |
94 btfss switch_right | |
95 return | |
96 | |
97 btfsc display_see_deco ; Is the Decoplan displayed? | |
98 bra divemenu_see_decoplan2 ; Yes, exit menu on left button press | |
99 | |
100 bcf switch_right ; Left button pressed | |
101 clrf timeout_counter3 ; timout_divemenu! | |
102 incf menupos,F | |
103 | |
104 ; Following routine configures the number of menu entries for the different modes | |
105 movlw d'6' ; number of available gases+1, ; number of menu options+1 | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
106 btfsc display_set_gas ; Are we in the "Gaslist" menu? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
107 movlw d'7' ; Yes, Number of entries for this menu+1 = 7 |
0 | 108 btfsc display_set_setpoint ; In SetPoint Menu? |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
109 movlw d'5' ; Number of entries for this menu+1 = 5 |
0 | 110 cpfseq menupos ; =limit? |
111 bra test_switches_divemode_menu1; No! | |
112 movlw d'1' ; Yes, reset to position 1! | |
113 movwf menupos | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
114 |
0 | 115 test_switches_divemode_menu1: |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
116 ; Finally, check if menuposition 3 should be skipped (No customview with function displayed) |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
117 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
118 btfsc display_set_gas ; Are we in the "Gaslist" or "SetPoint" menu? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
119 bra test_switches_divemode_menu1a ; Skip test for sub menus |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
120 btfsc display_set_xgas ; Are we in the "Gaslist" or "SetPoint" menu? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
121 bra test_switches_divemode_menu1a ; Skip test for sub menus |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
122 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
123 movlw d'3' |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
124 cpfseq menupos ; At position 3? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
125 bra test_switches_divemode_menu1a; No |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
126 btfss menu3_active ; Menu position 3 has functionality? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
127 incf menupos,F ; No, +1, skip to menuos=4 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
128 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
129 test_switches_divemode_menu1a: |
0 | 130 call PLED_divemenu_cursor ; update cursor |
131 return | |
132 | |
133 test_switches_divemode_menu3: | |
134 bcf switch_left | |
135 bcf switch_right | |
136 bsf menubit ; Enter Divemode-Menu! | |
137 bcf premenu ; clear premenu flag | |
138 clrf timeout_counter3 | |
139 | |
140 btfsc display_set_gas ; Are we in the "Gaslist" or "SetPoint" menu? | |
141 bra divemenu_set_gas2 ; Yes, so set gas and exit menu | |
142 | |
143 btfsc display_see_deco ; Is the Decoplan displayed? | |
144 bra divemenu_see_decoplan2 ; Yes, exit menu on right button press | |
145 | |
146 btfsc display_set_xgas ; Are we in the "Set Gas" menu? | |
147 bra divemenu_set_xgas2 ; Yes, so configure gas or set menu and exit menu | |
148 | |
149 btfsc display_set_simulator ; Are we in the Divemode Simulator menu? | |
150 goto divemode_menu_simulator2 ; Yes, so adjust depth or set and exit | |
151 | |
152 ; Options for Menu 1 | |
153 dcfsnz menupos,F | |
73
2227459e8ef2
Exchanged Decoplan and Gaslist in dive mode menu
heinrichsweikamp
parents:
71
diff
changeset
|
154 bra divemenu_set_gas ; Set gas sub-menu |
2227459e8ef2
Exchanged Decoplan and Gaslist in dive mode menu
heinrichsweikamp
parents:
71
diff
changeset
|
155 dcfsnz menupos,F |
0 | 156 bra divemenu_see_decoplan ; display the full decoplan |
157 dcfsnz menupos,F | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
158 bra divemode_menu3 ; Customview-function |
0 | 159 dcfsnz menupos,F |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
160 bra divemode_toggle_brightness ; Toggle OLED-Brightness |
0 | 161 dcfsnz menupos,F |
162 bra timeout_divemenu2 ; Quit divemode menu | |
163 return | |
164 | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
165 divemode_menu3: |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
166 movff menupos3,temp1 ; copy |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
167 dcfsnz temp1,F |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
168 bra toggle_stopwatch ; Toggle Stopwatch/Average register |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
169 dcfsnz temp1,F |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
170 bra set_marker ; Set Marker |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
171 dcfsnz temp1,F |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
172 bra divemode_menu3_nothing ; clock... |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
173 dcfsnz temp1,F |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
174 bra divemode_menu3_nothing ; leading tissue... |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
175 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
176 divemode_menu3_nothing: |
0 | 177 bra timeout_divemenu2 ; Quit divemode menu |
178 return | |
179 | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
180 set_marker: |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
181 movlw d'6' ; Type of Alarm (Manual Marker) |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
182 movwf AlarmType ; Copy to Alarm Register |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
183 bsf event_occured ; Set Event Flag |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
184 bra timeout_divemenu2 ; quit menu! |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
185 |
0 | 186 toggle_stopwatch: |
111 | 187 bsf reset_average_depth ; Average Depth will be resetted in divemode.asm |
0 | 188 bra timeout_divemenu2 ; quit menu! |
189 | |
190 divemode_toggle_brightness: | |
191 read_int_eeprom d'90' ; Brightness offset? (Dim>0, Normal = 0) | |
192 tstfsz EEDATA ; Was dimmed? | |
193 bra divemode_toggle_brightness1 ; Yes... | |
194 | |
195 call PLED_brightness_low | |
196 movlw d'1' | |
197 movwf EEDATA ; Copy to EEDATA | |
198 write_int_eeprom d'90' ; Brightness offset? (Dim=1, Normal = 0) | |
199 bra divemode_toggle_brightness3 | |
200 | |
201 divemode_toggle_brightness1: | |
202 call PLED_brightness_full | |
203 movlw d'0' | |
204 movwf EEDATA ; Copy to EEDATA | |
205 write_int_eeprom d'90' ; Brightness offset? (Dim=1, Normal = 0) | |
206 | |
207 divemode_toggle_brightness3: | |
208 ; Now, redraw all outputs (All modes) | |
209 call PLED_active_gas_divemode ; Display gas, if required | |
210 call PLED_temp_divemode ; Displays temperature | |
211 call PLED_depth ; Displays new depth... | |
212 call PLED_max_pressure ; ...and max. depth | |
213 | |
214 bra timeout_divemenu2 ; quit menu! | |
215 | |
216 divemode_set_xgas: ; Set the extra gas... | |
217 bsf display_set_xgas ; Set Flag | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
218 bcf display_set_gas ; Clear Flag |
0 | 219 call PLED_clear_divemode_menu ; Clear Menu |
220 | |
221 movff char_I_O2_ratio, EEDATA ; Reset Gas6 to current gas | |
222 write_int_eeprom d'24' | |
223 movff char_I_He_ratio, EEDATA | |
224 write_int_eeprom d'25' | |
225 | |
226 call PLED_divemode_set_xgas ; Show mask | |
227 | |
228 movlw d'1' | |
229 movwf menupos ; reset cursor | |
230 call PLED_divemenu_cursor ; update cursor | |
231 return | |
232 | |
233 divemode_menu_simulator: | |
234 bsf menubit ; Enter Divemode-Menu! | |
235 bcf premenu ; clear premenu flag | |
236 bcf switch_right | |
237 bcf switch_left ; Left button pressed! | |
104 | 238 bsf display_set_simulator ; Set Flag |
239 bsf menu3_active ; So "+1" is accessible at all times | |
0 | 240 call PLED_clear_divemode_menu ; Clear Menu |
241 call PLED_divemode_simulator_mask; Show mask | |
242 movlw d'1' | |
243 movwf menupos ; reset cursor | |
244 call PLED_divemenu_cursor ; update cursor | |
245 return | |
246 | |
247 divemode_menu_simulator2: | |
248 dcfsnz menupos,F | |
249 bra timeout_divemenu2 ; quit underwater menu! | |
250 dcfsnz menupos,F | |
251 bra divemode_menu_simulator_p1 ; Adjust +1m | |
252 dcfsnz menupos,F | |
253 bra divemode_menu_simulator_m1 ; Adjust -1m | |
254 dcfsnz menupos,F | |
255 bra divemode_menu_simulator_p10 ; Adjust +10m | |
256 dcfsnz menupos,F | |
257 bra divemode_menu_simulator_m10 ; Adjust -10m | |
258 bra timeout_divemenu2 ; quit underwater menu! | |
259 | |
260 divemode_menu_simulator_common: | |
261 call PLED_divemode_simulator_mask ; Redraw Simualtor mask | |
262 | |
263 ; Check limits (140m and 0m) | |
264 movlw LOW d'15000' | |
265 movwf sub_a+0 | |
266 movlw HIGH d'15000' | |
267 movwf sub_a+1 | |
268 movff sim_pressure+0,sub_b+0 | |
269 movff sim_pressure+1,sub_b+1 | |
270 call sub16 ; sub_c = sub_a - sub_b | |
271 btfss neg_flag | |
272 bra divemode_menu_simulator_common2 | |
273 ; Too deep, limit to 140m | |
274 movlw LOW d'15000' | |
275 movwf sim_pressure+0 | |
276 movlw HIGH d'15000' | |
277 movwf sim_pressure+1 | |
278 return | |
279 | |
280 divemode_menu_simulator_common2: | |
281 movlw LOW d'1000' | |
282 movwf sub_a+0 | |
283 movlw HIGH d'1000' | |
284 movwf sub_a+1 | |
285 movff sim_pressure+0,sub_b+0 | |
286 movff sim_pressure+1,sub_b+1 | |
287 call sub16 ; sub_c = sub_a - sub_b | |
288 btfsc neg_flag | |
289 return | |
290 ; Too shallow, limit to 1m | |
291 movlw LOW d'1000' | |
292 movwf sim_pressure+0 | |
293 movlw HIGH d'1000' | |
294 movwf sim_pressure+1 | |
295 return | |
296 | |
297 divemode_menu_simulator_m10: | |
298 movlw LOW d'1000' | |
299 subwf sim_pressure+0,F | |
300 movlw HIGH d'1000' | |
301 subwfb sim_pressure+1,F | |
302 movlw d'5' | |
303 movwf menupos ; reset cursor | |
304 bra divemode_menu_simulator_common | |
305 | |
306 divemode_menu_simulator_p10: | |
307 movlw LOW d'1000' | |
308 addwf sim_pressure+0,F | |
309 movlw HIGH d'1000' | |
310 addwfc sim_pressure+1,F | |
311 movlw d'4' | |
312 movwf menupos ; reset cursor | |
313 bra divemode_menu_simulator_common | |
314 | |
315 divemode_menu_simulator_p1: | |
316 movlw d'100' | |
317 addwf sim_pressure+0,F | |
318 movlw d'0' | |
319 addwfc sim_pressure+1,F | |
320 movlw d'2' | |
321 movwf menupos ; reset cursor | |
322 bra divemode_menu_simulator_common | |
323 | |
324 divemode_menu_simulator_m1: | |
325 movlw d'100' | |
326 subwf sim_pressure+0,F | |
327 movlw d'0' | |
328 subwfb sim_pressure+1,F | |
329 movlw d'3' | |
330 movwf menupos ; reset cursor | |
331 bra divemode_menu_simulator_common | |
332 | |
333 divemenu_see_decoplan: | |
334 bsf display_see_deco ; set flag | |
64 | 335 call PLED_clear_divemode_menu ; Clear Menu |
0 | 336 |
337 read_int_eeprom d'34' | |
338 movlw d'3' | |
339 cpfsgt EEDATA ; in multi-gf mode? Z16 GF OC=4 and Z16 GF CC=5 | |
68 | 340 bra divemenu_see_decoplan1 ; No, standard ZH-L16 |
0 | 341 |
342 bsf multi_gf_display ; Yes, display the multi-gf table screen | |
64 | 343 bcf last_ceiling_gf_shown ; Clear flag |
0 | 344 |
64 | 345 call PLED_decoplan_gf_page1 ; Display the new screen |
0 | 346 return |
347 | |
348 divemenu_see_decoplan1: | |
349 | |
350 movff char_O_deco_status,deco_status ; | |
351 tstfsz deco_status ; deco_status=0 if decompression calculation done | |
352 return ; calculation not yet finished! | |
353 | |
354 call PLED_decoplan ; display the Decoplan | |
355 return | |
356 | |
357 divemenu_see_decoplan2: | |
64 | 358 btfsc multi_gf_display ; Next Page in Multi-GF Screen? |
359 bra divemenu_see_decoplan2_nextgf ; Yes! | |
360 ; No, remove outputs! | |
361 divemenu_see_decoplan2_0: | |
0 | 362 bcf display_see_deco ; clear flag |
363 bra timeout_divemenu2 ; quit menu! | |
364 | |
64 | 365 divemenu_see_decoplan2_nextgf: |
366 incf temp8,F | |
367 btfsc last_ceiling_gf_shown ; last ceiling shown? | |
368 bra divemenu_see_decoplan2_0 ; All done, clear and return | |
369 | |
370 clrf timeout_counter3 ; Clear timeout Divemode menu | |
68 | 371 bra timeout_divemenu3x ; Display next page |
64 | 372 |
0 | 373 divemenu_set_xgas2: |
374 dcfsnz menupos,F | |
375 bra divemenu_set_xgas2_exit ; Use the gas6 configured and exit | |
376 dcfsnz menupos,F | |
377 bra divemenu_set_xgas2_o2plus ; Adjust O2+ | |
378 dcfsnz menupos,F | |
379 bra divemenu_set_xgas2_o2minus ; Adjust O2- | |
380 dcfsnz menupos,F | |
381 bra divemenu_set_xgas2_heplus ; Adjust He+ | |
382 dcfsnz menupos,F | |
383 bra divemenu_set_xgas2_heminus ; Adjust He- | |
384 return | |
385 | |
386 divemenu_set_xgas2_heminus: | |
387 read_int_eeprom d'25' ; He value | |
388 movff EEDATA,lo | |
389 decf lo,F ; decrease He | |
390 movlw d'255' | |
391 cpfseq lo | |
392 bra divemenu_set_xgas2_heminus2 | |
393 incf lo,F ; limit to min=0 | |
394 divemenu_set_xgas2_heminus2: | |
395 movff lo, EEDATA | |
396 write_int_eeprom d'25' ; He Value | |
397 | |
398 call PLED_divemode_set_xgas ; Redraw menu | |
399 movlw d'5' | |
400 movwf menupos ; reset cursor | |
401 return | |
402 | |
403 divemenu_set_xgas2_heplus: | |
404 read_int_eeprom d'25' ; He value | |
405 movff EEDATA,lo | |
406 incf lo,F ; increase He | |
407 movlw d'101' | |
408 cpfseq lo | |
409 bra divemenu_set_xgas2_heplus2 | |
410 movlw d'4' ; O2 Limit | |
411 movwf lo | |
412 divemenu_set_xgas2_heplus2: ; test if O2+He>100... | |
413 read_int_eeprom d'24' ; O2 value | |
414 movf EEDATA,W | |
415 addwf lo,W ; add He value | |
416 movwf hi ; store in temp | |
417 movlw d'101' | |
418 cpfseq hi ; O2 and He > 100? | |
419 bra divemenu_set_xgas2_heplus3 ; No! | |
420 decf lo,F ; reduce He again = unchanged after operation | |
421 divemenu_set_xgas2_heplus3: ; save current value | |
422 movff lo, EEDATA | |
423 write_int_eeprom d'25' ; He Value | |
424 | |
425 call PLED_divemode_set_xgas ; Redraw menu | |
426 movlw d'4' | |
427 movwf menupos ; reset cursor | |
428 return | |
429 | |
430 divemenu_set_xgas2_o2minus: | |
431 read_int_eeprom d'24' ; O2 value | |
432 movff EEDATA,lo | |
433 decf lo,F ; decrease O2 | |
434 movlw d'3' ; Limit-1 | |
435 cpfseq lo | |
436 bra divemenu_set_xgas2_o2minus2 | |
437 incf lo,F ; limit to min=9 | |
438 divemenu_set_xgas2_o2minus2: | |
439 movff lo, EEDATA | |
440 write_int_eeprom d'24' ; O2 Value | |
441 | |
442 call PLED_divemode_set_xgas ; Redraw menu | |
443 movlw d'3' | |
444 movwf menupos ; reset cursor | |
445 return | |
446 | |
447 divemenu_set_xgas2_o2plus: | |
448 read_int_eeprom d'24' ; O2 value | |
449 movff EEDATA,lo | |
450 incf lo,F ; increase O2 | |
451 movlw d'101' | |
452 cpfseq lo | |
453 bra divemenu_set_xgas2_o2plus2 | |
454 movlw d'5' ; O2 limit | |
455 movwf lo | |
456 divemenu_set_xgas2_o2plus2: ; test if O2+He>100... | |
457 read_int_eeprom d'25' ; He value | |
458 movf EEDATA,W | |
459 addwf lo,W ; add O2 value | |
460 movwf hi ; store in temp | |
461 movlw d'101' | |
462 cpfseq hi ; O2 and He > 100? | |
463 bra divemenu_set_xgas2_o2plus3 ; No! | |
464 decf lo,F ; reduce O2 again = unchanged after operation | |
465 divemenu_set_xgas2_o2plus3: ; save current value | |
466 movff lo, EEDATA | |
467 write_int_eeprom d'24' ; O2 Value | |
468 | |
469 call PLED_divemode_set_xgas ; Redraw menu | |
470 movlw d'2' | |
471 movwf menupos ; reset cursor | |
472 return | |
473 | |
474 divemenu_set_xgas2_exit: | |
475 read_int_eeprom d'25' ; Read He ratio | |
476 movff EEDATA,char_I_He_ratio ; And copy into hold register | |
477 | |
478 read_int_eeprom d'24' ; Read O2 ratio | |
479 movff EEDATA, char_I_O2_ratio ; O2 ratio | |
480 movff char_I_He_ratio, wait_temp ; copy into bank1 register | |
481 bsf STATUS,C ; | |
482 movlw d'100' ; 100% | |
483 subfwb wait_temp,W ; minus He | |
484 subfwb EEDATA,F ; minus O2 | |
485 movff EEDATA, char_I_N2_ratio ; = N2! | |
486 bsf manual_gas_changed ; set event flag | |
487 bsf event_occured ; set global event flag | |
99 | 488 bsf is_bailout ;=1: CC mode, but bailout active! |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
489 clrf lo ; clear Setpoint, PLED_const_ppO2_value now displayes "Bail" |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
490 movff lo,char_I_const_ppO2 |
0 | 491 bra timeout_divemenu2 ; quit underwater menu! |
492 | |
493 divemenu_set_gas: | |
494 btfsc FLAG_const_ppO2_mode ; in ppO2 mode? | |
17 | 495 bra divemenu_set_setpoint ; Yes, display SetPoint list |
0 | 496 |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
497 divemenu_set_gas_2: |
0 | 498 bsf display_set_gas ; set flag |
499 call PLED_clear_divemode_menu ; Clear Menu | |
500 call PLED_gas_list ; Display all 5 gases | |
501 movlw d'1' | |
502 movwf menupos ; reset cursor | |
503 call PLED_divemenu_cursor ; update cursor | |
504 return | |
505 | |
506 divemenu_set_setpoint: | |
507 bsf display_set_setpoint ; set flag | |
508 bsf display_set_gas ; set flag | |
509 | |
510 call PLED_clear_divemode_menu ; Clear Menu | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
511 call PLED_splist_start ; Display SetPoints |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
512 DISPLAYTEXT d'137' ; Bailout (as a sub-menu) |
0 | 513 movlw d'1' |
514 movwf menupos ; reset cursor | |
515 call PLED_divemenu_cursor ; update cursor | |
516 return | |
517 | |
518 | |
519 divemenu_set_gas2: | |
520 btfsc select_bailoutgas ; Are we in the Bailout list? | |
521 bra divemenu_set_gas2a ; Yes, choose gas | |
522 | |
523 btfss FLAG_const_ppO2_mode ; are we in ppO2 mode? | |
524 bra divemenu_set_gas2a ; no, choose gas | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
525 ; Yes, so select SP 1-3 |
3 | 526 bcf is_bailout ;=1: CC mode, but bailout active! |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
527 call PLED_show_ppO2_clear ; Clear ppO2 value |
3 | 528 |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
529 divemenu_set_gas1: |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
530 movlw d'4' |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
531 cpfseq menupos ; At the "Bailout" position? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
532 bra divemenu_set_gas1b ; No, select SetPoint 1-3 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
533 bsf select_bailoutgas ; Set Flag |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
534 bcf display_set_setpoint ; Clear Flag |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
535 bra divemenu_set_gas_2 ; Configure the extra gas / Select Bailout |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
536 |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
537 divemenu_set_gas1b: |
0 | 538 movlw d'35' ; offset in memory |
539 addwf menupos,W ; add SP number 0-2 | |
540 movwf EEADR | |
541 call read_eeprom ; Read SetPoint | |
542 movff EEDATA, char_I_const_ppO2 ; Use SetPoint | |
4 | 543 movff EEDATA, ppO2_setpoint_store ; Store also in this byte... |
0 | 544 |
545 divemenu_set_gas1a: | |
546 bcf display_set_setpoint ; Clear Display Flag | |
547 bsf stored_gas_changed ; set event flag | |
548 bsf event_occured ; set global event flag | |
549 bra timeout_divemenu2 ; quit menu! | |
550 | |
551 divemenu_set_gas2a: | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
552 movlw d'6' |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
553 cpfseq menupos ; At the "Gas 6.." position? |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
554 bra divemenu_set_gas2b ; No, select Gas1-5 (Stored in Menupos) |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
555 bra divemode_set_xgas ; Configure the extra gas |
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
556 divemenu_set_gas2b: |
3 | 557 bsf is_bailout ;=1: CC mode, but bailout active! |
0 | 558 clrf lo ; clear Setpoint, PLED_const_ppO2_value now displayes "Bail" |
559 movff lo,char_I_const_ppO2 | |
560 | |
561 bcf display_set_gas ; clear flag | |
562 movff menupos,active_gas ; copy into active gas register | |
563 decf menupos,W ; # of selected gas (0-4) | |
564 mullw d'4' ; times 4... | |
565 movf PRODL,W ; | |
566 addlw d'7' ; +7 = address for He ratio | |
567 movwf EEADR | |
568 call read_eeprom ; Read He ratio | |
569 movff EEDATA,char_I_He_ratio ; And copy into hold register | |
570 | |
571 decf menupos,W ; # of selected gas (0-4) | |
572 mullw d'4' ; times 4... | |
573 movf PRODL,W ; | |
574 addlw d'6' ; +6 = address for O2 ratio | |
575 movwf EEADR | |
576 call read_eeprom ; Read O2 ratio | |
577 movff EEDATA, char_I_O2_ratio ; O2 ratio | |
578 movff char_I_He_ratio, wait_temp ; copy into bank1 register | |
579 bsf STATUS,C ; | |
580 movlw d'100' ; 100% | |
581 subfwb wait_temp,W ; minus He | |
582 subfwb EEDATA,F ; minus O2 | |
583 movff EEDATA, char_I_N2_ratio ; = N2! | |
584 bsf stored_gas_changed ; set event flag | |
585 bsf event_occured ; set global event flag | |
586 bra timeout_divemenu2 ; quit menu! | |
587 | |
588 timeout_divemenu: | |
589 btfss menubit ; is the Dive mode menu displayed? | |
590 return ; No | |
591 | |
592 | |
593 btfsc display_set_simulator ; Is the Simulator Mask active? | |
594 bra timeout_divemenu6 ; Yes, update Simulator mask | |
595 | |
596 btfss display_see_deco ; Is the decoplan active? | |
597 bra timeout_divemenu1 ; No, skip updating the decoplan | |
598 | |
599 btfsc multi_gf_display ; display the multi-gf table screen? | |
600 bra timeout_divemenu3 ; Yes... | |
601 | |
602 movff char_O_deco_status,deco_status ; | |
66 | 603 tstfsz deco_status ; deco_status=0 if decompression calculation done |
604 bra timeout_divemenu1 ; No, skip updating the decoplan | |
0 | 605 |
66 | 606 call PLED_decoplan ; update the Decoplan |
0 | 607 |
608 timeout_divemenu1: | |
609 incf timeout_counter3,F ; increase timeout_counter3 | |
610 GETCUSTOM8 d'10' ; loads timeout_divemenu into WREG | |
611 cpfsgt timeout_counter3 ; ... longer then timeout_divemenu | |
612 return ; No! | |
613 timeout_divemenu2: ; quit divemode menu | |
115 | 614 ; btfss multi_gf_display ; Was the Multi-GF Table displayed? |
615 ; bra timeout_divemenu2a ; No, normal OLED rebuild | |
0 | 616 |
617 ; Restore some outputs | |
66 | 618 clrf temp8 ; Page 0-1 of deco list |
115 | 619 |
620 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
621 bra timeout_divemenu2a ; skip! | |
622 btfsc gauge_mode ; Ignore in Gauge mode | |
623 bra timeout_divemenu2a ; skip! | |
624 | |
0 | 625 btfsc dekostop_active |
66 | 626 call PLED_display_deko_mask ; clear nostop time, display decodata |
0 | 627 btfss dekostop_active |
66 | 628 call PLED_display_ndl_mask ; Clear deco data, display nostop time |
0 | 629 |
630 timeout_divemenu2a: | |
66 | 631 bcf multi_gf_display ; Do not display the multi-gf table screen |
0 | 632 bcf menubit |
633 bcf premenu ; Yes, clear flags and menu, display dive time and mask again | |
66 | 634 call PLED_active_gas_divemode; Display gas, if required |
0 | 635 call PLED_clear_divemode_menu; Clear dive mode menu |
636 call PLED_divemode_mask ; Display mask | |
637 call PLED_divemins ; Display (new) divetime! | |
98
6f8e3a08011e
1.73beta rc1 (Added new customview for divemode)
heinrichsweikamp
parents:
87
diff
changeset
|
638 call customview_mask ; Redraw current customview mask |
0 | 639 clrf timeout_counter3 ; Also clear timeout |
640 bcf display_see_deco ; clear all display flags | |
641 bcf display_set_gas | |
642 bcf display_set_xgas | |
643 bcf display_set_setpoint | |
644 bcf display_set_simulator | |
645 bcf switch_left ; and debounce switches | |
646 bcf switch_right | |
647 return | |
648 | |
649 timeout_divemenu3: | |
64 | 650 movff char_O_deco_status,deco_status ; |
651 tstfsz deco_status ; deco_status=0 if decompression calculation done | |
0 | 652 bra timeout_divemenu1 ; No, skip updating the decoplan |
68 | 653 timeout_divemenu3x: |
64 | 654 call PLED_decoplan_gf_page_current ; Re-Draw Current page of GF Decoplan |
0 | 655 bra timeout_divemenu1 ; Check timeout |
656 | |
657 timeout_divemenu6: | |
658 ; Update Simulator Mask | |
659 call PLED_divemode_simulator_mask; Show mask | |
660 call PLED_divemenu_cursor ; update cursor | |
661 bra timeout_divemenu1 ; Check timeout |