Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/surfmode.asm @ 533:a2019f310176
2.09 beta release
author | heinrichsweikamp |
---|---|
date | Sat, 17 Dec 2011 11:14:01 +0100 |
parents | 33abbc08f01e |
children | ab2686087bce |
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 ; 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 | |
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
27 bcf s_unlock_after_sleep ; Lock sensor results |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
28 call restart_set_modes_and_flags ; Sets decomode flags |
0 | 29 clrf lo |
30 movff lo,char_I_const_ppO2 ; reset to standard mode, OSTC assumes Air breathing at the surface! | |
31 | |
499
2ac77db9c150
Added OLED brightness setting, texts 280, 312 and 313 need update
heinrichsweikamp
parents:
497
diff
changeset
|
32 call PLED_brightness_full ; max. brightness |
0 | 33 |
34 call I2CReset | |
35 call PLED_boot | |
36 call PLED_serial ; Show OSTC serial and firmware version | |
37 call PLED_clock ; display time | |
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 | |
156 | 45 clrf menupos3 ; Reset Custom views (Default: No custom view) |
46 | |
0 | 47 btfsc gauge_mode ; Ignore in gauge mode |
48 bra surfloop1 | |
49 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
50 bra surfloop1 | |
51 | |
52 ; Startup tasks for decompression modes | |
43 | 53 call PLED_display_cns_surface ; Update surface CNS display (If allowed by CF15) |
0 | 54 call PLED_desaturation_time ; display desaturation time |
55 call PLED_nofly_time ; display nofly time | |
13 | 56 |
0 | 57 call PLED_active_gas_surfmode ; Show start gas |
58 call PLED_display_decotype_surface ; Show deco mode (ZH-L16, const. ppO2 or Multi-GF) | |
59 | |
60 surfloop1: | |
61 btfss gauge_mode ; Display only in gauge mode | |
62 bra surfloop2 | |
63 DISPLAYTEXT d'103' ; Gauge mode | |
64 surfloop2: | |
65 btfss FLAG_apnoe_mode ; Display only in Apnoe mode | |
66 bra surfloop3 | |
67 DISPLAYTEXT d'116' ; Apnoe mode | |
68 | |
69 surfloop3: | |
70 ; Startup tasks for all modes | |
71 clrf timeout_counter2 | |
72 clrf timeout_counter3 | |
73 bcf premenu ; clear premenu flag | |
74 bcf menubit ; clear menu flag | |
474 | 75 clrf timer1int_counter2 ; reset state counter |
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
76 bcf pressure_refresh ; Start new sensor run |
0 | 77 clrf last_pressure+0 |
78 clrf last_pressure+1 | |
79 clrf last_temperature+0 | |
80 clrf last_temperature+1 | |
81 | |
82 movlw d'5' | |
83 movwf timeout_counter ; reload counter | |
84 | |
21 | 85 bcf LED_blue |
86 bcf LED_red | |
0 | 87 bcf simulatormode_active ; Quit simulator mode (if active) |
88 bcf standalone_simulator ; Quit simulator mode (if active) | |
89 WIN_TOP .0 | |
90 WIN_LEFT .0 | |
91 WIN_FONT FT_SMALL | |
92 WIN_INVERT .0 ; Init new Wordprocessor | |
3 | 93 call PLED_standard_color |
94 | |
0 | 95 bcf switch_left |
96 bcf switch_right | |
4 | 97 call PLED_active_gas_surfmode ; Show start gas / SetPoint |
0 | 98 call PLED_custom_text ; Displays custom text |
100 | 99 clrf cf_checker_counter ; next cf to check |
0 | 100 ostc_debug 'G' ; Sends debug-information to screen if debugmode active |
233 | 101 |
102 ; Desaturation time needs: | |
103 ; int_I_pres_surface | |
104 ; char_I_desaturation_multiplier | |
469 | 105 movlw d'0' |
106 movff WREG,char_I_deco_model ; ZH-L16 | |
0 | 107 GETCUSTOM8 d'12' ; Desaturation multiplier % |
233 | 108 movff WREG,char_I_desaturation_multiplier |
109 | |
116 | 110 call deco_calc_desaturation_time ; calculate desaturation time |
0 | 111 movlb b'00000001' ; select ram bank 1 |
112 ostc_debug 'H' ; Sends debug-information to screen if debugmode active | |
113 | |
114 call wait_switches ; Waits until switches are released, resets flag if button stays pressed! | |
115 | |
116 surfloop_loop: | |
117 btfss onesecupdate ; do every second tasks? | |
118 bra surfloop_loop2 ; no, loop | |
119 | |
120 btfss FLAG_const_ppO2_mode ; are we in const. ppO2 mode? | |
121 bra surfloop_loop1 ; No | |
122 ; One Second tasks for ppO2 modes | |
123 | |
285 | 124 bra surfloop_loop1 ; |
0 | 125 |
126 surfloop_loop1: | |
127 ; One Second tasks for all modes | |
128 call PLED_clock ; update clock | |
129 call test_charger ; check if charger IC is active | |
130 call timeout_surfmode ; check timeout | |
519 | 131 call update_batt_voltage ; display battery voltage |
0 | 132 call timeout_premenu ; timeout premenu |
133 call set_leds_surfmode ; Sets Warning and No-Fly LEDs | |
94 | 134 call check_customfunctions ; Checks CF functions and displays warning symbol if something critical is wrong |
0 | 135 call PLED_display_decotype_surface ; Show deco mode |
107 | 136 call surfcustomview_second ; Do every-second tasks for the custom view area |
110 | 137 call dive_type_icons ; Draw Air/Nitrox/Trimix color icon. |
519 | 138 |
139 ; Every 2 seconds, overwrite with GF value (if needed to display) | |
140 btfsc secs,1 ; Alternating every 2sec (if needed) | |
141 call PLED_display_cns_surface ; Display CNS (if > CF15). | |
142 btfss secs,1 | |
143 call PLED_display_gf_surface ; Display GF (if > CF8). | |
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
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
154 btfss pressure_refresh ; new pressure available? |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
155 bra surfloop_loop2a ; no |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
156 |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
157 btfss s_unlock_after_sleep ; sensor results locked? |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
158 bra surfloop_loop3 ; Yes, ignore |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
159 |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
160 ; New sensor value available |
0 | 161 call update_surf_press ; display surface pressure |
162 call PLED_temp_surfmode ; Displays temperature | |
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
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
168 call get_battery_voltage ; get battery voltage |
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
169 |
125 | 170 surfloop_loop3: |
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
171 bsf s_unlock_after_sleep ; unlock sensor results |
0 | 172 bcf pressure_refresh ; until new pressure is available |
173 | |
482
8e1fb9cdd62a
lock sensor for surfacemode until value is stable
heinrichsweikamp
parents:
474
diff
changeset
|
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! | |
199 btfsc uart_send_hash ; Send MD2 hash values | |
200 goto send_md2_hash ; Yes! | |
201 btfsc uart_send_int_eeprom ; Send internal EEPROM BANK 0 | |
202 goto send_int_eeprom_b0 ; Yes! | |
203 btfsc uart_reset_decodata ; Reset Deco Data? | |
204 goto reset_decodata ; Yes! | |
205 btfsc uart_send_int_eeprom2 ; Send internal EEPROM BANK 1 | |
206 goto send_int_eeprom_b1 ; Yes! | |
283
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents:
257
diff
changeset
|
207 btfsc uart_store_tissue_data ; Store tissue data? |
0 | 208 goto uart_store_tissues ; Yes! |
283
4ec488f046f4
Battery sign color coded, work on new uart-started 115200Baud bootloader (Do NOT use yet!)
heinrichsweikamp
parents:
257
diff
changeset
|
209 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
parents:
257
diff
changeset
|
210 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
parents:
285
diff
changeset
|
211 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
parents:
285
diff
changeset
|
212 goto reset_battery_stats ; Yes! |
0 | 213 |
330 | 214 btfsc uart_dump_screen ; Dumps screen contains ? |
331 | 215 call dump_screen ; Yes! |
0 | 216 |
217 bra surfloop_loop ; loop surfacemode | |
218 | |
219 | |
220 update_surfloop60: | |
221 ; One minute tasks for all modes | |
4 | 222 ; call PLED_active_gas_surfmode ; Show start gas / SetPoint |
0 | 223 call update_date ; and date in divemode |
224 call calc_deko_surfmode ; calculate desaturation every minute | |
225 call check_temp_extrema ; check for new temperature extremas | |
226 call PLED_custom_text ; Displays custom text | |
107 | 227 call surfcustomview_minute ; Do every-minute tasks for the custom view area |
0 | 228 |
229 btfsc gauge_mode ; Ignore in gauge mode | |
230 bra update_surfloop60_2 | |
231 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
232 bra update_surfloop60_2 | |
233 | |
234 ; One Minute tasks for deco modes | |
235 call PLED_nofly_time ; display nofly time | |
236 call PLED_desaturation_time ; display desaturation time | |
13 | 237 btfsc premenu ; Not when "Menu?" is displayed! |
238 bra update_surfloop60_2 | |
239 | |
0 | 240 update_surfloop60_2: |
241 bcf oneminupdate | |
242 return | |
243 | |
244 set_leds_surfmode: | |
245 btfsc nofly_active | |
21 | 246 btg LED_blue |
0 | 247 return |
248 | |
353
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
249 ;============================================================================= |
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
250 |
0 | 251 calc_deko_surfmode: |
252 ostc_debug 'I' ; Sends debug-information to screen if debugmode active | |
253 | |
254 movff last_surfpressure+0,int_I_pres_surface+0 ; copy surface air pressure to deco routine | |
255 movff last_surfpressure+1,int_I_pres_surface+1 | |
453
38b38b105782
compute desat based on 30min old surface pressure
heinrichsweikamp
parents:
416
diff
changeset
|
256 calc_deko_surfmode2: |
353
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
257 clrf WREG ; Use as buffer |
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
258 movff WREG,char_I_He_ratio ; No He at the Surface |
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
259 movlw d'79' ; 79% N2 |
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
260 movff WREG,char_I_N2_ratio ; Air at the Surface |
0 | 261 |
341
2144f19fa1eb
BUGFIX protect against ISR changing pressure/temperature while reading it.
JeanDo
parents:
297
diff
changeset
|
262 SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy surface air pressure to deco routine |
0 | 263 GETCUSTOM8 d'11' ; Saturation multiplier % |
236 | 264 movff WREG,char_I_saturation_multiplier |
0 | 265 GETCUSTOM8 d'12' ; Desaturation multiplier % |
236 | 266 movff WREG,char_I_desaturation_multiplier |
0 | 267 |
116 | 268 call deco_calc_wo_deco_step_1_min ; calculate deco in surface mode |
0 | 269 movlb b'00000001' ; select ram bank 1 |
521 | 270 |
0 | 271 ostc_debug 'J' ; Sends debug-information to screen if debugmode active |
272 return | |
273 | |
353
b5b030c1ae7e
Avoid spurious switch-depth stops with 3 or more gas.
JeanDo
parents:
344
diff
changeset
|
274 ;============================================================================= |
0 | 275 |
276 test_charger: | |
277 bcf TRISC,1 ; CHRG_OUT output | |
278 bsf CHRG_OUT | |
279 | |
280 bcf cc_active ; Constant Current mode active? | |
281 btfss CHRG_IN ; If CHRG_IN=0 -> CC active | |
282 bsf cc_active ; Constant Current mode Active! | |
283 | |
284 bcf CHRG_OUT | |
285 bsf TRISC,1 ; CHRG_OUT high impedance | |
286 | |
287 WAIT10US d'10' | |
288 | |
289 bcf cv_active ; Constant Voltage mode Active? | |
290 btfss CHRG_IN ; If CHRG_IN=0 -> CV active | |
291 bsf cv_active ; Constant Voltage mode active! | |
292 | |
293 bcf TRISC,1 ; CHRG_OUT output | |
294 bcf CHRG_OUT | |
295 | |
296 btfsc cc_active | |
297 bra show_cc_active | |
298 btfsc cv_active | |
299 bra show_cv_active | |
300 | |
301 bsf TRISC,1 ; CHRG_OUT high impedance | |
302 | |
416
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
303 ; -> Charger inactive or ready |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
304 |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
305 ; Disable when no USB power is attached |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
306 btfsc RCSTA,7 ; RS232 already disabled |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
307 call disable_rs232 ; No, disable UART module |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
308 |
0 | 309 btfss charge_done ; charge done? |
310 bra test_charger2 ; No, add incomplete cycle! | |
311 | |
312 ; Yes, store all data for complete cycle | |
313 bcf charge_started ; Clear flag | |
314 bcf charge_done ; Clear flag | |
315 ; Store incomplete/total cycles | |
316 read_int_eeprom d'50' ; Read byte (stored in EEDATA) | |
317 movff EEDATA,temp1 ; Low byte | |
318 read_int_eeprom d'51' ; Read byte (stored in EEDATA) | |
319 movff EEDATA,temp2 ; high byte | |
320 bcf STATUS,C | |
321 movlw d'1' | |
322 addwf temp1 | |
323 movlw d'0' | |
324 addwfc temp2 | |
325 movff temp1,EEDATA | |
326 write_int_eeprom d'50' ; write byte stored in EEDATA | |
327 movff temp2,EEDATA | |
328 write_int_eeprom d'51' ; write byte stored in EEDATA | |
329 | |
330 ; Store complete cycles | |
331 read_int_eeprom d'52' ; Read byte (stored in EEDATA) | |
332 movff EEDATA,temp1 ; Low byte | |
333 read_int_eeprom d'53' ; Read byte (stored in EEDATA) | |
334 movff EEDATA,temp2 ; high byte | |
335 bcf STATUS,C | |
336 movlw d'1' | |
337 addwf temp1 | |
338 movlw d'0' | |
339 addwfc temp2 | |
340 movff temp1,EEDATA | |
341 write_int_eeprom d'52' ; write byte stored in EEDATA | |
342 movff temp2,EEDATA | |
343 write_int_eeprom d'53' ; write byte stored in EEDATA | |
344 ; Store date of complete cycle | |
345 movff month,EEDATA | |
346 write_int_eeprom d'47' | |
347 movff day,EEDATA | |
348 write_int_eeprom d'48' | |
349 movff year,EEDATA | |
350 write_int_eeprom d'49' | |
351 | |
352 return | |
353 | |
354 test_charger2: | |
355 btfss charge_started ; Did the charger ever start? | |
356 return ; No, quit! | |
357 | |
358 bcf charge_started ; Clear flag | |
359 ; Store incomplete/total cycles | |
360 read_int_eeprom d'50' ; Read byte (stored in EEDATA) | |
361 movff EEDATA,temp1 ; Low byte | |
362 read_int_eeprom d'51' ; Read byte (stored in EEDATA) | |
363 movff EEDATA,temp2 ; high byte | |
364 bcf STATUS,C | |
365 movlw d'1' | |
366 addwf temp1 | |
367 movlw d'0' | |
368 addwfc temp2 | |
369 movff temp1,EEDATA | |
370 write_int_eeprom d'50' ; write byte stored in EEDATA | |
371 movff temp2,EEDATA | |
372 write_int_eeprom d'51' ; write byte stored in EEDATA | |
373 return | |
374 | |
375 show_cv_active: ; CV mode | |
486
c7b663939737
making waitms speed-independent, desat-time fix
heinrichsweikamp
parents:
482
diff
changeset
|
376 ; Enable RS232 only when USB power attached |
416
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
377 btfss RCSTA,7 ; RS232 already enabled? |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
378 call enable_rs232 ; No, start UART module |
21 | 379 bsf LED_red |
0 | 380 WAITMS d'100' |
21 | 381 bcf LED_red |
0 | 382 WAITMS d'100' |
21 | 383 bsf LED_red |
0 | 384 bsf charge_done ; Charge cycle finished |
385 return | |
386 | |
387 show_cc_active: ; CC mode | |
416
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
388 ; Enable only when USB power attached |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
389 btfss RCSTA,7 ; RS232 already enabled? |
3abf9d7dafae
diabling uart module when no USB is attached
heinrichsweikamp
parents:
397
diff
changeset
|
390 call enable_rs232 ; No, start UART module |
21 | 391 bsf LED_red |
0 | 392 bsf charge_started ; Charger started in CC mode |
393 bcf charge_done ; Charge cycle not finished | |
394 return | |
395 | |
396 | |
397 timeout_premenu: | |
398 btfss premenu ; is "Menu?" displayed? | |
399 return ; No | |
400 incf timeout_counter3,F ; Yes... | |
401 GETCUSTOM8 d'4' ; loads premenu_timeout into WREG | |
402 cpfsgt timeout_counter3 ; ... longer then premenu_timeout | |
403 return ; No! | |
404 bcf premenu ; Yes, so clear "Menu?" and clear pre_menu bit | |
405 | |
406 call PLED_topline_box_clear ; Clears Bar at the top | |
407 | |
408 btfsc gauge_mode | |
409 bra timeout_premenu2 ; Skip in Gauge mode | |
410 btfsc FLAG_apnoe_mode | |
411 bra timeout_premenu2 ; Skip in Apnoe mode | |
13 | 412 |
0 | 413 timeout_premenu2: |
414 call update_surf_press ; rewrite serial number | |
415 call PLED_serial ; rewrite serial number | |
416 clrf timeout_counter3 ; Also clear timeout | |
417 bcf switch_left ; and debounce switches | |
418 bcf switch_right | |
419 return | |
420 | |
421 test_switches_surfmode: ; checks switches in surfacemode | |
422 btfsc switch_left | |
423 bra test_switches_surfmode2 | |
424 btfsc switch_right | |
425 bra test_switches_surfmode3 | |
426 | |
427 ; No button press, reset timer0 | |
428 bcf T0CON,TMR0ON ; Stop Timer 0 | |
429 bcf INTCON,TMR0IF ; Clear flag | |
430 clrf TMR0H | |
431 clrf TMR0L | |
432 bcf INTCON,INT0IF ; Clear flag | |
433 bcf INTCON3,INT1IF ; Clear flag | |
434 return | |
435 | |
436 test_switches_surfmode3: | |
437 bcf switch_right | |
438 call PLED_topline_box ; Write a filled bar at the top | |
439 WIN_INVERT .1 ; Init new Wordprocessor | |
440 DISPLAYTEXT .4 ;Menu? | |
441 WIN_INVERT .0 ; Init new Wordprocessor | |
442 bsf premenu | |
443 clrf timeout_counter2 | |
444 return | |
445 | |
446 test_switches_surfmode2: | |
447 bcf switch_left | |
448 btfss premenu | |
13 | 449 bra test_switches_surfmode4 |
0 | 450 bsf menubit ; Enter Menu! |
451 return | |
452 | |
13 | 453 test_switches_surfmode4: |
107 | 454 bsf toggle_customview ; Toggle customview (Cleared in customview.asm) |
13 | 455 return |
0 | 456 |
457 timeout_surfmode: | |
458 incf timeout_counter2,F ; increase timeout counter | |
459 GETCUSTOM8 d'3' ; loads surfloop_timeout into WREG | |
460 addlw d'5' ; adds five seconds in case timout=zero! | |
461 btfsc STATUS,C ; > 255? | |
462 movlw d'255' ; Set to 255... | |
463 decf WREG,F ; Limit to 254 | |
464 cpfsgt timeout_counter2 ; Compare with timeout_counter2 | |
465 return ; return, no timeout | |
466 bsf sleepmode ; Set Flag | |
467 return ; Return |