comparison code_part1/OSTC_code_asm_part1/menu.asm @ 0:96a35aeda5f2

Initial setup
author heinrichsweikamp
date Tue, 12 Jan 2010 15:05:59 +0100
parents
children 588a969a0cae
comparison
equal deleted inserted replaced
-1:000000000000 0:96a35aeda5f2
1
2 ; OSTC - diving computer code
3 ; Copyright (C) 2008 HeinrichsWeikamp GbR
4
5 ; This program is free software: you can redistribute it and/or modify
6 ; it under the terms of the GNU General Public License as published by
7 ; the Free Software Foundation, either version 3 of the License, or
8 ; (at your option) any later version.
9
10 ; This program is distributed in the hope that it will be useful,
11 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ; GNU General Public License for more details.
14
15 ; You should have received a copy of the GNU General Public License
16 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18
19 ; Main Menu and Setup menu
20 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com
21 ; written: 11/1/05
22 ; last updated: 05/15/80
23 ; known bugs:
24 ; ToDo:
25
26 wait_switches:
27 ; bsf LEDg
28 movlw d'40'
29 btfss button_delay_done ; Start counting?
30 movlw d'200'
31 movwf switch_timeout
32
33 wait_switches1:
34 WAITMS d'5'
35 btfsc SWITCH2
36 bra wait_switches2 ; Check other switch
37
38 decfsz switch_timeout,F
39 bra wait_switches1
40
41 btfsc SWITCH2
42 bra wait_switches3
43
44 bsf button_delay_done ; Start counting
45 bsf switch_left ; Set button flag
46 bcf switch_right ; only for the other button
47 ; bcf LEDg
48 return
49
50 wait_switches2:
51 btfss SWITCH1
52 bra wait_switches1 ; Wait
53
54 ; Yes, both switches released before timeout...
55 wait_switches3:
56 bcf switch_left
57 bcf switch_right
58 bcf button_delay_done
59 call clear_LEDg
60 return
61
62 menu:
63 bcf deco_mode_changed ; Clear flag (Description is only showed once)
64 movlw d'1'
65 movwf menupos
66 menu2:
67
68 bcf leftbind
69 call PLED_ClearScreen
70 clrf timeout_counter2
71 bcf sleepmode
72 bcf menubit2
73 bcf menubit3
74 bsf menubit
75 bsf cursor
76 call PLED_menu_mask
77 call PLED_menu_cursor
78 bcf switch_left
79 bcf switch_right
80
81 menu_loop:
82 call check_switches_menu
83
84 btfsc menubit2
85 bra do_menu ; call submenu
86
87 btfss menubit
88 goto restart ; exit menu, restart
89
90 btfsc onesecupdate
91 call timeout_surfmode
92
93 btfsc onesecupdate
94 call set_dive_modes
95
96 btfsc onesecupdate
97 call test_charger ; check if charger IC is active
98
99 btfsc onesecupdate
100 call get_battery_voltage ; get battery voltage
101
102 bcf onesecupdate ; End of one second tasks
103
104 btfsc sleepmode
105 goto restart
106
107 btfsc divemode
108 goto restart ; exit menu, restart and enter divemode
109
110 bra menu_loop
111
112 check_switches_menu: ; checks switches
113 btfss switch_right
114 bra check_switches_menu2
115 bsf menubit3
116 incf menupos,F
117 movlw d'6'
118 cpfsgt menupos
119 bra refresh_cursor
120 movlw d'1'
121 movwf menupos
122 bra refresh_cursor
123 check_switches_menu2:
124 btfsc switch_left
125 bsf menubit2 ; Enter!
126 return
127
128
129 do_menu: ; calls submenu
130 dcfsnz menupos,F
131 goto menu_logbook
132 dcfsnz menupos,F
133 goto menu_gassetup
134 dcfsnz menupos,F
135 goto menu_reset
136 dcfsnz menupos,F
137 goto setup_menu
138 dcfsnz menupos,F
139 goto more_menu
140 dcfsnz menupos,F
141 goto restart ; exit...
142
143 refresh_cursor:
144 clrf timeout_counter2
145 btfsc cursor
146 call PLED_menu_cursor
147 bcf switch_right
148 return
149
150 more_menu:
151 movlw d'1'
152 movwf menupos
153 more_menu2:
154 bcf leftbind
155 call PLED_ClearScreen
156 more_menu3:
157 clrf timeout_counter2
158 bcf sleepmode
159 bcf menubit2
160 bcf menubit3
161 bsf menubit
162 bsf cursor
163 call PLED_more_menu_mask
164 call PLED_menu_cursor
165 bcf switch_left
166 bcf switch_right
167 more_menu_loop:
168 call check_switches_menu
169
170 movlw d'5' ; 5 items in "More Menu"
171 cpfseq menupos
172 bra more_menu_loop2
173 movlw d'6'
174 movwf menupos
175 call PLED_menu_cursor
176
177 more_menu_loop2:
178 btfsc menubit2
179 bra do_more_menu ; call submenu
180
181 btfss menubit
182 bra menu ; exit setup menu and return to main menu
183
184 btfsc onesecupdate
185 call timeout_surfmode
186
187 btfsc onesecupdate
188 call set_dive_modes
189
190 btfsc onesecupdate
191 call test_charger ; check if charger IC is active
192
193 btfsc onesecupdate
194 call get_battery_voltage ; get battery voltage
195
196 bcf onesecupdate ; End of one second tasks
197
198 btfsc sleepmode
199 bra menu
200
201 btfsc divemode
202 goto restart ; exit menu, restart and enter divemode
203
204 bra more_menu_loop
205
206 do_more_menu: ; calls submenu
207 dcfsnz menupos,F
208 goto menu_settime
209 dcfsnz menupos,F
210 goto menu_const_ppO2
211 dcfsnz menupos,F
212 goto menu_battery_state
213 dcfsnz menupos,F
214 goto menu_simulator
215 dcfsnz menupos,F
216 goto menu_simulator
217 movlw d'5'
218 movwf menupos
219 bra menu2 ; exit...
220
221 setup_menu:
222 bcf deco_mode_changed ; Clear flag
223 movlw d'1'
224 movwf menupos
225 setup_menu2:
226 bcf leftbind
227 call PLED_ClearScreen
228 call PLED_setup_menu_mask
229 setup_menu3a:
230 clrf timeout_counter2
231 bcf sleepmode
232 bcf menubit2
233 bcf menubit3
234 bsf menubit
235 bsf cursor
236 call show_decotype
237 call show_salinity_value
238 call PLED_menu_cursor
239 bcf switch_left
240 bcf switch_right
241
242 setup_menu_loop:
243 call check_switches_menu
244
245 btfsc menubit2
246 bra do_setup_menu ; call submenu
247
248 btfss menubit
249 goto restart ; exit menu, restart and enter surfmode
250 btfsc onesecupdate
251 call timeout_surfmode
252 btfsc onesecupdate
253 call set_dive_modes
254 btfsc onesecupdate
255 call test_charger ; check if charger IC is active
256 btfsc onesecupdate
257 call get_battery_voltage ; get battery voltage
258
259 bcf onesecupdate ; End of one second tasks
260
261 btfsc sleepmode
262 goto restart ; exit menu, restart and enter surfmode
263
264 btfsc divemode
265 goto restart ; exit menu, restart and enter divemode
266
267 bra setup_menu_loop
268
269
270 do_setup_menu: ; calls submenu
271 dcfsnz menupos,F
272 goto menu_custom_functions
273 dcfsnz menupos,F
274 goto menu_custom_functions_page2
275 dcfsnz menupos,F
276 bra toggle_salinity
277 dcfsnz menupos,F
278 bra toggle_decotype
279 dcfsnz menupos,F
280 bra more_setup_menu
281 bra exit_setup_menu ; exit...
282
283 toggle_decotype:
284 bsf deco_mode_changed ; Set flag
285 read_int_eeprom d'34' ; Read deco data
286 incf EEDATA,F
287
288 toggle_decotype0:
289 movlw d'6' ; number of different modes
290 cpfseq EEDATA
291 bra toggle_decotype1
292 clrf EEDATA
293
294 toggle_decotype1:
295 call write_eeprom ; save new mode
296 movlw d'4'
297 movwf menupos
298 bcf switch_right
299 bra setup_menu3a ; return to manu loop
300
301 show_decotype:
302 read_int_eeprom d'34' ; Read deco data
303 tstfsz EEDATA
304 bra show_decotype2
305 DISPLAYTEXT .101 ; ZH-L16 OC =0
306 return
307 show_decotype2:
308 decfsz EEDATA,F
309 bra show_decotype3
310 DISPLAYTEXT .102 ; Gauge =1
311 return
312 show_decotype3:
313 decfsz EEDATA,F
314 bra show_decotype4
315 DISPLAYTEXT .104 ; ZH-L16 CC =2
316 return
317 show_decotype4:
318 decfsz EEDATA,F
319 bra show_decotype5
320 DISPLAYTEXT .138 ; Apnoe =3
321 return
322 show_decotype5:
323 decfsz EEDATA,F
324 bra show_decotype6
325 DISPLAYTEXT .152 ; L16-GF OC =4
326 return
327 show_decotype6:
328 decfsz EEDATA,F
329 return
330 DISPLAYTEXT .236 ; L16-GF CC =5
331 return
332
333 exit_setup_menu:
334 btfss deco_mode_changed ; Was the decomode changed in Setup menu?
335 goto restart ; No, restart to surfacemode
336
337 call PLED_ClearScreen
338
339 deco_info_screen1:
340 call PLED_topline_box
341 WIN_INVERT .1 ; Init new Wordprocessor
342 DISPLAYTEXT .235 ;Decomode changed!
343 WIN_INVERT .0 ; Init new Wordprocessor
344
345 read_int_eeprom d'34' ; Read deco data
346
347 movlw d'7' ; length of description text
348 mulwf EEDATA ; Multiply with Decomode 0-5 (5=Spare)
349
350 movf PRODL,W
351 addlw d'193' ; Description text offset
352 movwf menupos ; Used as loop counter temp
353
354 movlw d'7'
355 movwf temp1 ; Loop 7 times
356
357 menu0:
358 movf menupos,W
359 call displaytext1 ; Display text!
360 incf menupos,F
361
362 decfsz temp1,F
363 bra menu0 ; loop 7 times
364
365 movlw d'30'
366 call startup_screen3a
367 goto restart ; Restart to surfacemode
368
369 more_setup_menu:
370 movlw d'1'
371 movwf menupos
372 more_setup_menu2:
373 bcf leftbind
374 call PLED_ClearScreen
375 call PLED_more_setup_menu_mask
376 more_setup_menu3a:
377 clrf timeout_counter2
378 bcf sleepmode
379 bcf menubit2
380 bcf menubit3
381 bsf menubit
382 bsf cursor
383 call show_debugstate
384 call show_dateformat
385 call PLED_menu_cursor
386 bcf switch_left
387 bcf switch_right
388
389 more_setup_menu_loop:
390 call check_switches_menu
391
392 movlw d'3' ; x-1 menu entries
393 cpfseq menupos
394 bra more_setup_menu_loop2
395 movlw d'6'
396 movwf menupos
397 call PLED_menu_cursor
398 more_setup_menu_loop2:
399
400 btfsc menubit2
401 bra do_more_setup_menu ; call submenu
402
403 btfss menubit
404 goto restart ; exit menu, restart and enter surfmode
405
406 btfsc onesecupdate
407 call timeout_surfmode
408 btfsc onesecupdate
409 call set_dive_modes
410 btfsc onesecupdate
411 call test_charger ; check if charger IC is active
412 btfsc onesecupdate
413 call get_battery_voltage ; get battery voltage
414
415 bcf onesecupdate ; End of one second tasks
416
417 btfsc sleepmode
418 goto setup_menu ; exit menu
419
420 btfsc divemode
421 goto restart ; exit menu, restart and enter divemode
422
423 bra more_setup_menu_loop
424
425 do_more_setup_menu: ; calls submenu
426 dcfsnz menupos,F
427 bra toggle_datemode
428 dcfsnz menupos,F
429 bra toggle_debugmode
430 dcfsnz menupos,F
431 bra setup_menu ; spare
432 dcfsnz menupos,F
433 bra setup_menu ; spare
434 dcfsnz menupos,F
435 bra setup_menu ; spare
436 movlw d'5' ; set cursor to "More again"
437 movwf menupos
438 bra setup_menu2 ; exit...
439
440 toggle_salinity:
441 ; Toggles between 1.00 and 1.04
442 read_int_eeprom d'26' ; Read Salinity from EEPROM
443 incf EEDATA,F ; Increase value
444
445 movlw d'99' ; 99% ?
446 cpfsgt EEDATA ; Salinity lower limit
447 bra toggle_salinity_reset ; Out of limit, reset value to 1.00
448 movlw d'105' ; 105% ?
449 cpfslt EEDATA ; Salinity higher limit
450 bra toggle_salinity_reset ; Out of limit, reset value to 1.00
451
452 toggle_salinity2:
453 write_int_eeprom d'26' ; Store salinity
454 movlw d'3'
455 movwf menupos
456 bcf switch_right
457 bra setup_menu3a ; return to manu loop
458
459 toggle_salinity_reset:
460 movlw d'100'
461 movwf EEDATA
462 bra toggle_salinity2 ; back
463
464 show_salinity_value:
465 read_int_eeprom d'26' ; Read Salinity from EEPROM
466 movlw d'99' ; 99% ?
467 cpfsgt EEDATA ; Salinity lower limit
468 rcall toggle_salinity_reset2 ; Reset before display!
469 movlw d'105' ; 105% ?
470 cpfslt EEDATA ; Salinity higher limit
471 rcall toggle_salinity_reset2 ; Reset before display!
472 WIN_TOP .95
473 WIN_LEFT .83
474 WIN_FONT FT_SMALL
475 lfsr FSR2,letter
476 movff EEDATA,lo
477 clrf hi
478 bsf leftbind
479 output_16dp d'3'
480 bcf leftbind
481 movlw 'k'
482 movwf POSTINC2
483 movlw 'g'
484 movwf POSTINC2
485 movlw '/'
486 movwf POSTINC2
487 movlw 'l'
488 movwf POSTINC2
489 call word_processor
490 return
491
492 toggle_salinity_reset2:
493 movlw d'100'
494 movwf EEDATA
495 write_int_eeprom d'26' ; Store salinity
496 return
497
498 toggle_datemode:
499 ; Toggles setting for
500 ; MM/DD/YY =0, Default
501 ; DD/MM/YY =1
502 ; YY/MM/DD =2
503 read_int_eeprom d'91' ; Read date format
504 incf EEDATA,F
505 movlw d'2'
506 cpfsgt EEDATA
507 bra toggle_datemode1
508 clrf EEDATA
509 toggle_datemode1:
510 write_int_eeprom d'91' ; Store date format
511 movlw d'1'
512 movwf menupos
513 bcf switch_right
514 bra more_setup_menu3a ; return to manu loop
515
516 show_dateformat:
517 read_int_eeprom d'91' ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD)
518 tstfsz EEDATA
519 bra show_dateformat2
520 DISPLAYTEXTH .259 ; MM/DD/YY = 0
521 return
522 show_dateformat2:
523 decfsz EEDATA,F
524 bra show_dateformat3
525 DISPLAYTEXTH .260 ; DD/MM/YY = 1
526 return
527 show_dateformat3:
528 DISPLAYTEXTH .261 ; YY/MM/DD = 2
529 return
530
531 toggle_debugmode:
532 read_int_eeprom d'39' ; Read status
533 incf EEDATA,F
534 movlw d'1'
535 cpfsgt EEDATA
536 bra toggle_debugmode1
537 clrf EEDATA
538 toggle_debugmode1:
539 write_int_eeprom d'39' ; Store status
540 bsf debug_mode ; set flag
541 movlw d'1'
542 cpfseq EEDATA
543 bcf debug_mode ; clear flag
544 movlw d'2'
545 movwf menupos
546 bcf switch_right
547 bra more_setup_menu3a ; return to manu loop
548
549 show_debugstate:
550 read_int_eeprom d'39'
551 tstfsz EEDATA
552 bra show_debugstate2
553 DISPLAYTEXT .131 ; OFF
554 show_debugstate2:
555 decf EEDATA,F
556 tstfsz EEDATA
557 bra show_decotype3
558 DISPLAYTEXT .130 ; ON
559 return