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 ; routines for Surface mode
|
|
19 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com
|
|
20 ; written: 10/01/05
|
|
21 ; last updated: 080905
|
|
22 ; known bugs:
|
|
23 ; ToDo:
|
|
24
|
|
25 surfloop:
|
|
26 ; Boot tasks for all modes
|
720
|
27 call DISPLAY_boot
|
|
28 surfloop_no_display_init:
|
|
29 call DISP_ClearScreen
|
482
|
30 bcf s_unlock_after_sleep ; Lock sensor results
|
|
31 call restart_set_modes_and_flags ; Sets decomode flags
|
0
|
32 clrf lo
|
|
33 movff lo,char_I_const_ppO2 ; reset to standard mode, OSTC assumes Air breathing at the surface!
|
720
|
34 call I2CReset
|
681
|
35 call DISP_brightness_full ; max. brightness
|
|
36 call DISP_serial ; Show OSTC serial and firmware version
|
|
37 call DISP_clock ; display time
|
0
|
38 call update_date ; display date
|
495
|
39 call get_battery_voltage ; get battery voltage
|
0
|
40 movff last_surfpressure_30min+0,int_I_pres_respiration+0 ; copy surface air pressure to deco routine
|
|
41 movff last_surfpressure_30min+1,int_I_pres_respiration+1 ; 30min old values
|
|
42 movff last_surfpressure_30min+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine
|
|
43 movff last_surfpressure_30min+1,int_I_pres_surface+1 ; 30min old values
|
|
44
|
626
|
45 ; Reload last customview
|
|
46 read_int_eeprom d'93' ; Read last selected customview surface mode into EEDATA
|
|
47 movff EEDATA,menupos3 ; Copy to menupos3
|
|
48 call surfcustomview_toggle2 ; Show customview
|
156
|
49
|
0
|
50 btfsc gauge_mode ; Ignore in gauge mode
|
|
51 bra surfloop1
|
|
52 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode
|
|
53 bra surfloop1
|
|
54
|
|
55 ; Startup tasks for decompression modes
|
681
|
56 call DISP_display_cns_surface ; Update surface CNS display (If allowed by CF15)
|
|
57 call DISP_desaturation_time ; display desaturation time
|
|
58 call DISP_nofly_time ; display nofly time
|
13
|
59
|
681
|
60 call DISP_active_gas_surfmode ; Show start gas
|
0
|
61
|
|
62 surfloop1:
|
|
63 btfss gauge_mode ; Display only in gauge mode
|
|
64 bra surfloop2
|
|
65 DISPLAYTEXT d'103' ; Gauge mode
|
|
66 surfloop2:
|
|
67 btfss FLAG_apnoe_mode ; Display only in Apnoe mode
|
|
68 bra surfloop3
|
|
69 DISPLAYTEXT d'116' ; Apnoe mode
|
|
70
|
|
71 surfloop3:
|
|
72 ; Startup tasks for all modes
|
|
73 clrf timeout_counter2
|
|
74 clrf timeout_counter3
|
|
75 bcf premenu ; clear premenu flag
|
|
76 bcf menubit ; clear menu flag
|
474
|
77 clrf timer1int_counter2 ; reset state counter
|
482
|
78 bcf pressure_refresh ; Start new sensor run
|
0
|
79 clrf last_pressure+0
|
|
80 clrf last_pressure+1
|
|
81 clrf last_temperature+0
|
|
82 clrf last_temperature+1
|
|
83
|
|
84 movlw d'5'
|
|
85 movwf timeout_counter ; reload counter
|
|
86
|
21
|
87 bcf LED_blue
|
|
88 bcf LED_red
|
0
|
89 bcf simulatormode_active ; Quit simulator mode (if active)
|
|
90 bcf standalone_simulator ; Quit simulator mode (if active)
|
|
91 WIN_TOP .0
|
|
92 WIN_LEFT .0
|
|
93 WIN_FONT FT_SMALL
|
|
94 WIN_INVERT .0 ; Init new Wordprocessor
|
681
|
95 call DISP_standard_color
|
3
|
96
|
0
|
97 bcf switch_left
|
|
98 bcf switch_right
|
681
|
99 call DISP_active_gas_surfmode ; Show start gas / SetPoint
|
|
100 call DISP_custom_text ; Displays custom text
|
100
|
101 clrf cf_checker_counter ; next cf to check
|
0
|
102 ostc_debug 'G' ; Sends debug-information to screen if debugmode active
|
233
|
103
|
|
104 ; Desaturation time needs:
|
|
105 ; int_I_pres_surface
|
|
106 ; char_I_desaturation_multiplier
|
469
|
107 movlw d'0'
|
|
108 movff WREG,char_I_deco_model ; ZH-L16
|
0
|
109 GETCUSTOM8 d'12' ; Desaturation multiplier %
|
233
|
110 movff WREG,char_I_desaturation_multiplier
|
|
111
|
116
|
112 call deco_calc_desaturation_time ; calculate desaturation time
|
0
|
113 movlb b'00000001' ; select ram bank 1
|
|
114 ostc_debug 'H' ; Sends debug-information to screen if debugmode active
|
|
115
|
|
116 call wait_switches ; Waits until switches are released, resets flag if button stays pressed!
|
|
117
|
|
118 surfloop_loop:
|
|
119 btfss onesecupdate ; do every second tasks?
|
|
120 bra surfloop_loop2 ; no, loop
|
|
121
|
|
122 btfss FLAG_const_ppO2_mode ; are we in const. ppO2 mode?
|
|
123 bra surfloop_loop1 ; No
|
|
124 ; One Second tasks for ppO2 modes
|
|
125
|
285
|
126 bra surfloop_loop1 ;
|
0
|
127
|
|
128 surfloop_loop1:
|
|
129 ; One Second tasks for all modes
|
681
|
130 call DISP_clock ; update clock
|
0
|
131 call test_charger ; check if charger IC is active
|
|
132 call timeout_surfmode ; check timeout
|
519
|
133 call update_batt_voltage ; display battery voltage
|
0
|
134 call timeout_premenu ; timeout premenu
|
|
135 call set_leds_surfmode ; Sets Warning and No-Fly LEDs
|
94
|
136 call check_customfunctions ; Checks CF functions and displays warning symbol if something critical is wrong
|
107
|
137 call surfcustomview_second ; Do every-second tasks for the custom view area
|
519
|
138
|
|
139 ; Every 2 seconds, overwrite with GF value (if needed to display)
|
|
140 btfsc secs,1 ; Alternating every 2sec (if needed)
|
681
|
141 call DISP_display_cns_surface ; Display CNS (if > CF15).
|
519
|
142 btfss secs,1
|
681
|
143 call DISP_display_gf_surface ; Display GF (if > CF8).
|
519
|
144
|
|
145 btfsc enter_error_sleep ; Enter Fatal Error Routine?
|
|
146 call fatal_error_sleep ; Yes (In Sleepmode.asm!)
|
|
147 bcf onesecupdate ; every second tasks done
|
0
|
148
|
|
149 surfloop_loop2:
|
|
150 ; Tasks approx. every 50ms for all modes
|
|
151 call test_switches_surfmode ; check switches
|
|
152
|
|
153 ; Sensor tasks for all modes
|
482
|
154 btfss pressure_refresh ; new pressure available?
|
|
155 bra surfloop_loop2a ; no
|
|
156
|
|
157 btfss s_unlock_after_sleep ; sensor results locked?
|
|
158 bra surfloop_loop3 ; Yes, ignore
|
|
159
|
|
160 ; New sensor value available
|
0
|
161 call update_surf_press ; display surface pressure
|
681
|
162 call DISP_temp_surfmode ; Displays temperature
|
0
|
163 call set_dive_modes ; tests if depth>threshold
|
125
|
164 call altimeter_calc
|
|
165 movf menupos3,W ; Get customview status.
|
|
166 bnz surfloop_loop3 ; Already used ?
|
|
167 call altimeter_display
|
482
|
168 call get_battery_voltage ; get battery voltage
|
|
169
|
125
|
170 surfloop_loop3:
|
482
|
171 bsf s_unlock_after_sleep ; unlock sensor results
|
0
|
172 bcf pressure_refresh ; until new pressure is available
|
|
173
|
482
|
174 surfloop_loop2a:
|
0
|
175 ; One minute tasks for all modes
|
|
176 btfsc oneminupdate ; do every minute tasks
|
|
177 call update_surfloop60 ; yes, e.g. update time and date
|
|
178
|
|
179 ; Mode tasks
|
|
180 btfsc menubit ; Menu?
|
|
181 goto menu ; Menu!
|
|
182 btfsc divemode ; Divemode active?
|
|
183 goto diveloop ; Yes, switch into Divemode!
|
|
184 btfsc sleepmode ; Sleepmode active?
|
|
185 goto sleeploop ; Yes, switch into sleepmode!
|
107
|
186
|
|
187 btfsc toggle_customview ; Next view?
|
|
188 call surfcustomview_toggle ; Yes, show next customview (and delete this flag)
|
|
189
|
0
|
190 ; Check for the different UART flags
|
|
191 btfsc dump_external_eeprom ; Start interface (dumps EEPROM BANK 0 + additional data)?
|
|
192 goto menu_interface ; Yes!
|
|
193 btfsc uart_settime ; Sync clock with PC?
|
|
194 goto sync_clock ; Yes!
|
|
195 btfsc internal_eeprom_write ; Access internal EEPROM BANK 0 via UART module
|
|
196 goto internal_eeprom_access_b0 ; Yes!
|
|
197 btfsc internal_eeprom_write2 ; Access internal EEPROM BANK 1 via UART module
|
|
198 goto internal_eeprom_access_b1 ; Yes!
|
578
|
199 btfsc internal_eeprom_write3 ; Access internal EEPROM BANK 2 via UART module
|
|
200 goto internal_eeprom_access_b2 ; Yes!
|
0
|
201 btfsc uart_send_hash ; Send MD2 hash values
|
|
202 goto send_md2_hash ; Yes!
|
|
203 btfsc uart_send_int_eeprom ; Send internal EEPROM BANK 0
|
|
204 goto send_int_eeprom_b0 ; Yes!
|
|
205 btfsc uart_reset_decodata ; Reset Deco Data?
|
|
206 goto reset_decodata ; Yes!
|
|
207 btfsc uart_send_int_eeprom2 ; Send internal EEPROM BANK 1
|
|
208 goto send_int_eeprom_b1 ; Yes!
|
578
|
209 btfsc uart_send_int_eeprom3 ; Send internal EEPROM BANK 2
|
|
210 goto send_int_eeprom_b2 ; Yes!
|
283
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
diff
changeset
|
211 btfsc uart_store_tissue_data ; Store tissue data?
|
0
|
212 goto uart_store_tissues ; Yes!
|
283
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
diff
changeset
|
213 btfsc uart_115200_bootloader ; Look for 115200Baud bootloader?
|
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
diff
changeset
|
214 goto uart_115k_bootloader ; Yes!
|
297
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
diff
changeset
|
215 btfsc uart_reset_battery_stats ; Reset Battery stats?
|
ceedf078b2d8
Gas Setup page 2 reworked, Texts 107, 108, 109,150, 149, 168, 42, 43, 53,54,55, 165 need update in french, spanish and german
Heinrichsweikamp
diff
changeset
|
216 goto reset_battery_stats ; Yes!
|
0
|
217
|
330
|
218 btfsc uart_dump_screen ; Dumps screen contains ?
|
331
|
219 call dump_screen ; Yes!
|
0
|
220
|
|
221 bra surfloop_loop ; loop surfacemode
|
|
222
|
|
223
|
|
224 update_surfloop60:
|
|
225 ; One minute tasks for all modes
|
681
|
226 ; call DISP_active_gas_surfmode ; Show start gas / SetPoint
|
0
|
227 call update_date ; and date in divemode
|
|
228 call calc_deko_surfmode ; calculate desaturation every minute
|
|
229 call check_temp_extrema ; check for new temperature extremas
|
681
|
230 call DISP_custom_text ; Displays custom text
|
107
|
231 call surfcustomview_minute ; Do every-minute tasks for the custom view area
|
0
|
232
|
|
233 btfsc gauge_mode ; Ignore in gauge mode
|
|
234 bra update_surfloop60_2
|
|
235 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode
|
|
236 bra update_surfloop60_2
|
|
237
|
|
238 ; One Minute tasks for deco modes
|
681
|
239 call DISP_nofly_time ; display nofly time
|
|
240 call DISP_desaturation_time ; display desaturation time
|
13
|
241 btfsc premenu ; Not when "Menu?" is displayed!
|
|
242 bra update_surfloop60_2
|
|
243
|
0
|
244 update_surfloop60_2:
|
|
245 bcf oneminupdate
|
|
246 return
|
|
247
|
|
248 set_leds_surfmode:
|
|
249 btfsc nofly_active
|
21
|
250 btg LED_blue
|
0
|
251 return
|
|
252
|
353
|
253 ;=============================================================================
|
|
254
|
0
|
255 calc_deko_surfmode:
|
|
256 ostc_debug 'I' ; Sends debug-information to screen if debugmode active
|
|
257
|
|
258 movff last_surfpressure+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine
|
|
259 movff last_surfpressure+1,int_I_pres_surface+1
|
453
|
260 calc_deko_surfmode2:
|
353
|
261 clrf WREG ; Use as buffer
|
|
262 movff WREG,char_I_He_ratio ; No He at the Surface
|
|
263 movlw d'79' ; 79% N2
|
|
264 movff WREG,char_I_N2_ratio ; Air at the Surface
|
0
|
265
|
341
|
266 SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine
|
0
|
267 GETCUSTOM8 d'11' ; Saturation multiplier %
|
236
|
268 movff WREG,char_I_saturation_multiplier
|
0
|
269 GETCUSTOM8 d'12' ; Desaturation multiplier %
|
236
|
270 movff WREG,char_I_desaturation_multiplier
|
0
|
271
|
116
|
272 call deco_calc_wo_deco_step_1_min ; calculate deco in surface mode
|
0
|
273 movlb b'00000001' ; select ram bank 1
|
521
|
274
|
0
|
275 ostc_debug 'J' ; Sends debug-information to screen if debugmode active
|
|
276 return
|
|
277
|
353
|
278 ;=============================================================================
|
0
|
279
|
|
280 test_charger:
|
|
281 bcf TRISC,1 ; CHRG_OUT output
|
|
282 bsf CHRG_OUT
|
|
283
|
|
284 bcf cc_active ; Constant Current mode active?
|
|
285 btfss CHRG_IN ; If CHRG_IN=0 -> CC active
|
|
286 bsf cc_active ; Constant Current mode Active!
|
|
287
|
|
288 bcf CHRG_OUT
|
|
289 bsf TRISC,1 ; CHRG_OUT high impedance
|
|
290
|
|
291 WAIT10US d'10'
|
|
292
|
|
293 bcf cv_active ; Constant Voltage mode Active?
|
|
294 btfss CHRG_IN ; If CHRG_IN=0 -> CV active
|
|
295 bsf cv_active ; Constant Voltage mode active!
|
|
296
|
|
297 bcf TRISC,1 ; CHRG_OUT output
|
|
298 bcf CHRG_OUT
|
|
299
|
|
300 btfsc cc_active
|
|
301 bra show_cc_active
|
|
302 btfsc cv_active
|
|
303 bra show_cv_active
|
|
304
|
|
305 bsf TRISC,1 ; CHRG_OUT high impedance
|
|
306
|
416
|
307 ; -> Charger inactive or ready
|
|
308
|
|
309 ; Disable when no USB power is attached
|
|
310 btfsc RCSTA,7 ; RS232 already disabled
|
|
311 call disable_rs232 ; No, disable UART module
|
|
312
|
703
|
313 clrf EEADRH
|
0
|
314 btfss charge_done ; charge done?
|
|
315 bra test_charger2 ; No, add incomplete cycle!
|
|
316
|
|
317 ; Yes, store all data for complete cycle
|
|
318 bcf charge_started ; Clear flag
|
|
319 bcf charge_done ; Clear flag
|
583
|
320 ; Store incomplete cycles
|
0
|
321 read_int_eeprom d'50' ; Read byte (stored in EEDATA)
|
|
322 movff EEDATA,temp1 ; Low byte
|
|
323 read_int_eeprom d'51' ; Read byte (stored in EEDATA)
|
|
324 movff EEDATA,temp2 ; high byte
|
|
325 bcf STATUS,C
|
|
326 movlw d'1'
|
|
327 addwf temp1
|
|
328 movlw d'0'
|
|
329 addwfc temp2
|
|
330 movff temp1,EEDATA
|
|
331 write_int_eeprom d'50' ; write byte stored in EEDATA
|
|
332 movff temp2,EEDATA
|
|
333 write_int_eeprom d'51' ; write byte stored in EEDATA
|
|
334
|
|
335 ; Store complete cycles
|
|
336 read_int_eeprom d'52' ; Read byte (stored in EEDATA)
|
|
337 movff EEDATA,temp1 ; Low byte
|
|
338 read_int_eeprom d'53' ; Read byte (stored in EEDATA)
|
|
339 movff EEDATA,temp2 ; high byte
|
|
340 bcf STATUS,C
|
|
341 movlw d'1'
|
|
342 addwf temp1
|
|
343 movlw d'0'
|
|
344 addwfc temp2
|
|
345 movff temp1,EEDATA
|
|
346 write_int_eeprom d'52' ; write byte stored in EEDATA
|
|
347 movff temp2,EEDATA
|
|
348 write_int_eeprom d'53' ; write byte stored in EEDATA
|
|
349 ; Store date of complete cycle
|
|
350 movff month,EEDATA
|
|
351 write_int_eeprom d'47'
|
|
352 movff day,EEDATA
|
|
353 write_int_eeprom d'48'
|
|
354 movff year,EEDATA
|
|
355 write_int_eeprom d'49'
|
|
356
|
583
|
357 ; Reset lowest battery seen
|
|
358 movlw LOW d'4200' ; reset to 4.2V
|
|
359 movwf EEDATA
|
|
360 write_int_eeprom d'40'
|
|
361 movlw HIGH d'4200' ; reset to 4.2V
|
|
362 movwf EEDATA
|
|
363 write_int_eeprom d'41'
|
|
364 movff month,EEDATA
|
|
365 write_int_eeprom d'42'
|
|
366 movff day,EEDATA
|
|
367 write_int_eeprom d'43'
|
|
368 movff year,EEDATA
|
|
369 write_int_eeprom d'44'
|
|
370 ; Reset temperature
|
|
371 SAFE_2BYTE_COPY temperature,lo
|
|
372 movff lo,EEDATA
|
|
373 write_int_eeprom d'45'
|
|
374 movff hi,EEDATA
|
|
375 write_int_eeprom d'46'
|
|
376 ; Reset temperature extremas
|
|
377 SAFE_2BYTE_COPY temperature,lo
|
|
378 movff lo,EEDATA ; Reset mimimum extrema
|
|
379 write_int_eeprom d'54'
|
|
380 movff hi,EEDATA
|
|
381 write_int_eeprom d'55'
|
|
382 movff month,EEDATA
|
|
383 write_int_eeprom d'56'
|
|
384 movff day,EEDATA
|
|
385 write_int_eeprom d'57'
|
|
386 movff year,EEDATA
|
|
387 write_int_eeprom d'58'
|
|
388 movff lo,EEDATA ; Reset maximum extrema
|
|
389 write_int_eeprom d'59'
|
|
390 movff hi,EEDATA
|
|
391 write_int_eeprom d'60'
|
|
392 movff month,EEDATA
|
|
393 write_int_eeprom d'61'
|
|
394 movff day,EEDATA
|
|
395 write_int_eeprom d'62'
|
|
396 movff year,EEDATA
|
|
397 write_int_eeprom d'63'
|
0
|
398 return
|
|
399
|
|
400 test_charger2:
|
|
401 btfss charge_started ; Did the charger ever start?
|
|
402 return ; No, quit!
|
|
403
|
|
404 bcf charge_started ; Clear flag
|
583
|
405 ; Store incomplete cycles
|
0
|
406 read_int_eeprom d'50' ; Read byte (stored in EEDATA)
|
|
407 movff EEDATA,temp1 ; Low byte
|
|
408 read_int_eeprom d'51' ; Read byte (stored in EEDATA)
|
|
409 movff EEDATA,temp2 ; high byte
|
|
410 bcf STATUS,C
|
|
411 movlw d'1'
|
703
|
412 addwf temp1,F
|
0
|
413 movlw d'0'
|
703
|
414 addwfc temp2,F
|
0
|
415 movff temp1,EEDATA
|
|
416 write_int_eeprom d'50' ; write byte stored in EEDATA
|
|
417 movff temp2,EEDATA
|
|
418 write_int_eeprom d'51' ; write byte stored in EEDATA
|
|
419 return
|
|
420
|
|
421 show_cv_active: ; CV mode
|
486
|
422 ; Enable RS232 only when USB power attached
|
416
|
423 btfss RCSTA,7 ; RS232 already enabled?
|
|
424 call enable_rs232 ; No, start UART module
|
21
|
425 bsf LED_red
|
0
|
426 WAITMS d'100'
|
21
|
427 bcf LED_red
|
0
|
428 WAITMS d'100'
|
21
|
429 bsf LED_red
|
0
|
430 bsf charge_done ; Charge cycle finished
|
703
|
431 bsf charge_started ; Charger started in CV mode
|
0
|
432 return
|
|
433
|
|
434 show_cc_active: ; CC mode
|
416
|
435 ; Enable only when USB power attached
|
|
436 btfss RCSTA,7 ; RS232 already enabled?
|
|
437 call enable_rs232 ; No, start UART module
|
21
|
438 bsf LED_red
|
0
|
439 bsf charge_started ; Charger started in CC mode
|
|
440 bcf charge_done ; Charge cycle not finished
|
|
441 return
|
|
442
|
|
443
|
|
444 timeout_premenu:
|
|
445 btfss premenu ; is "Menu?" displayed?
|
|
446 return ; No
|
|
447 incf timeout_counter3,F ; Yes...
|
|
448 GETCUSTOM8 d'4' ; loads premenu_timeout into WREG
|
|
449 cpfsgt timeout_counter3 ; ... longer then premenu_timeout
|
|
450 return ; No!
|
|
451 bcf premenu ; Yes, so clear "Menu?" and clear pre_menu bit
|
|
452
|
681
|
453 call DISP_topline_box_clear ; Clears Bar at the top
|
0
|
454
|
|
455 btfsc gauge_mode
|
|
456 bra timeout_premenu2 ; Skip in Gauge mode
|
|
457 btfsc FLAG_apnoe_mode
|
|
458 bra timeout_premenu2 ; Skip in Apnoe mode
|
13
|
459
|
0
|
460 timeout_premenu2:
|
|
461 call update_surf_press ; rewrite serial number
|
681
|
462 call DISP_serial ; rewrite serial number
|
0
|
463 clrf timeout_counter3 ; Also clear timeout
|
|
464 bcf switch_left ; and debounce switches
|
|
465 bcf switch_right
|
|
466 return
|
|
467
|
|
468 test_switches_surfmode: ; checks switches in surfacemode
|
|
469 btfsc switch_left
|
|
470 bra test_switches_surfmode2
|
|
471 btfsc switch_right
|
|
472 bra test_switches_surfmode3
|
|
473
|
|
474 ; No button press, reset timer0
|
|
475 bcf T0CON,TMR0ON ; Stop Timer 0
|
|
476 bcf INTCON,TMR0IF ; Clear flag
|
|
477 clrf TMR0H
|
|
478 clrf TMR0L
|
|
479 bcf INTCON,INT0IF ; Clear flag
|
|
480 bcf INTCON3,INT1IF ; Clear flag
|
|
481 return
|
|
482
|
|
483 test_switches_surfmode3:
|
|
484 bcf switch_right
|
717
|
485 call DISP_topline_box_clear
|
|
486 call DISP_divemask_color
|
0
|
487 DISPLAYTEXT .4 ;Menu?
|
717
|
488 call DISP_standard_color
|
0
|
489 bsf premenu
|
|
490 clrf timeout_counter2
|
|
491 return
|
|
492
|
|
493 test_switches_surfmode2:
|
576
|
494 call wait_switches ; Waits until switches are released, resets flag if button stays pressed!
|
0
|
495 btfss premenu
|
13
|
496 bra test_switches_surfmode4
|
0
|
497 bsf menubit ; Enter Menu!
|
|
498 return
|
|
499
|
13
|
500 test_switches_surfmode4:
|
107
|
501 bsf toggle_customview ; Toggle customview (Cleared in customview.asm)
|
13
|
502 return
|
0
|
503
|
|
504 timeout_surfmode:
|
|
505 incf timeout_counter2,F ; increase timeout counter
|
|
506 GETCUSTOM8 d'3' ; loads surfloop_timeout into WREG
|
|
507 addlw d'5' ; adds five seconds in case timout=zero!
|
|
508 btfsc STATUS,C ; > 255?
|
|
509 movlw d'255' ; Set to 255...
|
|
510 decf WREG,F ; Limit to 254
|
|
511 cpfsgt timeout_counter2 ; Compare with timeout_counter2
|
|
512 return ; return, no timeout
|
|
513 bsf sleepmode ; Set Flag
|
|
514 return ; Return
|