Mercurial > public > hwos_code
annotate src/start.asm @ 521:06e9370c6d75
CHANGE: Apply safety margin parameters to both models (GF and non-GF)
Put B?hlmann constants in code for readability
Fix unused gas warning (Do not warn)
author | heinrichsweikamp |
---|---|
date | Fri, 04 Aug 2017 16:01:28 +0200 |
parents | ad8acade5567 |
children | 7e6df19264b6 |
rev | line source |
---|---|
0 | 1 ;============================================================================= |
2 ; | |
3 ; File start.asm | |
4 ; | |
5 ; Startup subroutines | |
6 ; | |
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
8 ;============================================================================= | |
9 ; HISTORY | |
10 ; 2011-08-06 : [mH] moving from OSTC code | |
11 | |
275 | 12 #include "hwos.inc" ; Mandatory header |
0 | 13 #include "ms5541.inc" |
14 #include "isr.inc" | |
15 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c | |
16 #include "eeprom_rs232.inc" | |
17 #include "math.inc" | |
18 #include "tft.inc" | |
19 #include "surfmode.inc" | |
20 #include "wait.inc" | |
21 #include "rtc.inc" | |
22 #include "external_flash.inc" | |
23 #include "convert.inc" | |
24 #include "strings.inc" | |
25 #include "tft_outputs.inc" | |
113 | 26 #include "adc_lightsensor.inc" |
27 #include "i2c.inc" | |
0 | 28 |
275 | 29 extern init_ostc |
0 | 30 extern option_restore_all |
31 | |
32 ;============================================================================= | |
33 ; Reset vector: What to do on device wake-up and hard reset. | |
34 ; | |
35 reset_v code 0x00000 | |
36 ; goto start | |
37 goto 0x1FF00 ; Bootloader | |
38 | |
39 ORG 0x00004 ; Needed for second-level bootloader | |
40 goto start | |
41 ;============================================================================= | |
42 boot CODE | |
43 global start | |
44 | |
45 start: | |
46 lfsr FSR0,0x000 ; Clear rambank 0-14 | |
47 clear_rambank: | |
48 clrf POSTINC0 | |
49 movlw 0x0F | |
50 cpfseq FSR0H ; Bank 14 done? | |
51 bra clear_rambank ; clear... | |
52 | |
275 | 53 call init_ostc |
0 | 54 |
449 | 55 ; Get button type from Bootloader-Info |
474 | 56 movlw .16 |
57 movff WREG,analog_counter ; init averaging | |
449 | 58 bsf analog_switches |
59 movlw 0x7C | |
60 movwf TBLPTRL | |
61 movlw 0xF7 | |
62 movwf TBLPTRH | |
63 movlw 0x01 | |
64 movwf TBLPTRU | |
65 TBLRD*+ ; Reads 0x07 for analog buttons | |
66 movlw 0x07 | |
67 cpfseq TABLAT | |
68 bcf analog_switches | |
475 | 69 |
70 ; read button polarity | |
71 movlw LOW .897 | |
72 movwf EEADR | |
73 movlw HIGH .897 | |
74 movwf EEADRH | |
75 call read_eeprom ; EEDATA into EEPROM@EEADR | |
76 clrf EEADRH ; Reset EEADRH | |
77 movff EEDATA,button_polarity ; 0xFF (Both normal), 0x00 (Both inverted), 0x01 (Left inverted only), 0x02 (Right inverted only) | |
78 | |
0 | 79 ; Air pressure compensation after reset |
80 call get_calibration_data ; Get calibration data from pressure sensor | |
81 banksel common ; get_calibration_data uses isr_backup | |
82 | |
463 | 83 call TFT_DisplayOff ; display off |
84 bsf LEDr ; Status LED | |
85 bcf pressure_refresh | |
0 | 86 ; First pass will not have valid temperature! |
87 btfss pressure_refresh ; Air pressure compensation | |
88 bra $-2 | |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
89 ; Second pass |
0 | 90 bcf pressure_refresh |
91 btfss pressure_refresh ; Air pressure compensation | |
92 bra $-2 | |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
93 bcf LEDr |
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
94 |
0 | 95 clrf rel_pressure+0 |
96 clrf rel_pressure+1 | |
97 clrf surface_interval+0 | |
98 clrf surface_interval+1 | |
99 | |
100 SAFE_2BYTE_COPY amb_pressure, last_surfpressure | |
101 | |
102 movlw LOW max_surfpressure | |
103 movff WREG,sub_a+0 ; max. "allowed" airpressure in mbar | |
104 movlw HIGH max_surfpressure | |
105 movff WREG,sub_a+1 ; max. "allowed" airpressure in mbar | |
106 movff last_surfpressure+0,sub_b+0 | |
107 movff last_surfpressure+1,sub_b+1 | |
108 call subU16 ; sub_c = sub_a - sub_b | |
109 btfss neg_flag ; Is 1080mbar < amb_pressure ? | |
110 bra start_copy_pressure ; NO: current airpressure is lower then "allowed" airpressure, ok! | |
111 | |
112 ; not ok! Overwrite with max. "allowed" airpressure | |
113 movlw LOW max_surfpressure | |
114 movff WREG,last_surfpressure+0 ; max. "allowed" airpressure in mbar | |
115 movlw HIGH max_surfpressure | |
116 movff WREG,last_surfpressure+1 ; max. "allowed" airpressure in mbar | |
117 | |
118 start_copy_pressure: | |
119 movff last_surfpressure+0,last_surfpressure_15min+0 | |
120 movff last_surfpressure+1,last_surfpressure_15min+1 | |
121 movff last_surfpressure+0,last_surfpressure_30min+0 | |
122 movff last_surfpressure+1,last_surfpressure_30min+1 ; Rests all airpressure registers | |
123 | |
124 ; reset deco data for surface mode | |
125 movlw d'79' | |
126 movff WREG,char_I_N2_ratio ; 79% N2 | |
127 SAFE_2BYTE_COPY amb_pressure,int_I_pres_respiration ; copy for deco routine | |
128 movff int_I_pres_respiration+0,int_I_pres_surface+0 ; copy for desat routine | |
129 movff int_I_pres_respiration+1,int_I_pres_surface+1 | |
130 | |
131 extern deco_reset | |
132 call deco_reset | |
133
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
133 |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
134 call rtc_init ; init clock |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
135 |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
136 movlw HIGH .512 ; =2 |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
137 movwf EEADRH |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
138 read_int_eeprom .0 |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
139 clrf EEADRH |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
140 movlw 0xAA |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
141 cpfseq EEDATA ; =0xAA |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
142 bra no_deco_restore ; No |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
143 |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
144 extern restore_decodata_from_eeprom |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
145 call restore_decodata_from_eeprom ; Reload deco data and date/time from eeprom |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
146 |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
147 no_deco_restore: |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
148 call deco_calc_desaturation_time ; calculate desaturation time |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
149 banksel common |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
150 call deco_calc_wo_deco_step_1_min ; calculate deco in surface mode |
939f1e83c4c2
BUGFIX: Surface interval was not displayed correctly in some cases
heinrichsweikamp
parents:
113
diff
changeset
|
151 banksel common |
0 | 152 bcf menubit ; clear menu flag |
215 | 153 |
0 | 154 ; Check for Power-on reset here |
464
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
155 extern use_old_prior_209 |
215 | 156 ; ***************************************************************************** |
157 ; "new_battery_menu" and "use_old_batteries" 'goto' back to "power_on_return" | |
158 ; ***************************************************************************** | |
0 | 159 |
457 | 160 ; Try to migrate the old battery status from firmware 2.09 or earlier.. |
161 btfsc RCON,POR ; Was this a power-on reset? | |
472
4fdf6886004b
CHANGE: Show warnings either in Customview (If active) _or_ next to warning sign
heinrichsweikamp
parents:
464
diff
changeset
|
162 call use_old_prior_209 ; No |
464
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
163 |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
164 bcf use_old_batt_flag |
416
4389fe9673b2
NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents:
410
diff
changeset
|
165 btfsc RCON,POR ; Was this a power-on reset? |
464
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
166 bsf use_old_batt_flag ; No |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
167 |
215 | 168 call lt2942_get_status ; Check for gauge IC |
449 | 169 btfss battery_gauge_available ; cR or 2 hardware? |
416
4389fe9673b2
NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents:
410
diff
changeset
|
170 bra power_on_return2 ; no |
215 | 171 |
375
a9e35c1327aa
1.88 release, BUGFIX: Start with Sensor use from sleep (cR only), CHANGE: Apply button settings when button menu is closed, NEW: Reset button settings on a magnet reset (cR and OSTC 2)
heinrichsweikamp
parents:
359
diff
changeset
|
172 movlw .30 |
a9e35c1327aa
1.88 release, BUGFIX: Start with Sensor use from sleep (cR only), CHANGE: Apply button settings when button menu is closed, NEW: Reset button settings on a magnet reset (cR and OSTC 2)
heinrichsweikamp
parents:
359
diff
changeset
|
173 movff WREG,opt_cR_button_right |
a9e35c1327aa
1.88 release, BUGFIX: Start with Sensor use from sleep (cR only), CHANGE: Apply button settings when button menu is closed, NEW: Reset button settings on a magnet reset (cR and OSTC 2)
heinrichsweikamp
parents:
359
diff
changeset
|
174 movff WREG,opt_cR_button_left ; Reset on power-on reset |
a9e35c1327aa
1.88 release, BUGFIX: Start with Sensor use from sleep (cR only), CHANGE: Apply button settings when button menu is closed, NEW: Reset button settings on a magnet reset (cR and OSTC 2)
heinrichsweikamp
parents:
359
diff
changeset
|
175 call piezo_config ; Yes, configure buttons |
416
4389fe9673b2
NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents:
410
diff
changeset
|
176 call piezo_config ; Yes, configure buttons (2 times) |
0 | 177 |
416
4389fe9673b2
NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents:
410
diff
changeset
|
178 power_on_return2: |
0 | 179 ; check firmware and reset Custom Functions after an update |
180 movlw d'1' | |
281
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
276
diff
changeset
|
181 movwf EEADR ; =1 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
276
diff
changeset
|
182 movwf EEADRH ; =1 |
0 | 183 call read_eeprom ; read current version x |
184 movff EEDATA,temp1 | |
185 incf EEADR,F ; set to 0x102 | |
186 call read_eeprom ; read current version y | |
187 movff EEDATA,temp2 | |
188 clrf EEADRH ; Reset EEADRH | |
189 | |
443 | 190 movlw softwareversion_x |
191 cpfseq temp1 ; compare version x | |
0 | 192 bra check_firmware_new ; is not equal -> reset CF and store new version in EEPROM |
193 | |
194 movlw softwareversion_y | |
195 cpfseq temp2 ; compare version y | |
196 bra check_firmware_new ; is not equal -> reset CF and store new version in EEPROM | |
197 bra restart ; x and y are equal -> do not reset cf | |
198 | |
199 check_firmware_new: | |
200 call TFT_boot ; Initialize TFT (includes clear screen) | |
201 clrf CCPR1L ; Backlight off | |
202 WIN_TOP .50 | |
203 WIN_LEFT .10 | |
204 movlw LOW 0x1E000 | |
205 movwf TBLPTRL | |
206 movlw HIGH 0x1E000 | |
207 movwf TBLPTRH | |
208 movlw UPPER 0x1E000 | |
209 movwf TBLPTRU | |
210 extern color_image | |
211 call color_image ; Show logo | |
212 call TFT_standard_color | |
213 WIN_SMALL .10,.100 | |
427 | 214 STRCPY_PRINT "Update successful!" ; Hard coded since language switch does not work here |
0 | 215 WIN_SMALL .10,.140 |
427 | 216 STRCPY "New Firmware: " |
0 | 217 movlw softwareversion_x |
218 movwf lo | |
219 bsf leftbind | |
220 output_8 | |
221 PUTC "." | |
222 movlw softwareversion_y | |
223 movwf lo | |
45 | 224 output_99x |
0 | 225 bcf leftbind |
226 STRCAT_PRINT "" ; Print second row | |
227 call TFT_Display_FadeIn ; Display resulting surface screen. | |
228 | |
229 ; place "after-update reset" here... | |
93
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
230 |
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
231 extern oPressureAdjust, option_reset, option_save |
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
232 lfsr FSR0,oPressureAdjust |
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
233 call option_reset ; Reset FSR0 option to factory default. |
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
234 lfsr FSR0,oPressureAdjust |
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
235 call option_save ; Save in EEPROM |
5e1ef9bf32ec
clear pressure sensor compensation upon update
heinrichsweikamp
parents:
52
diff
changeset
|
236 |
281
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
276
diff
changeset
|
237 call fix_180_dives ; fix dives made with the 1.80 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
276
diff
changeset
|
238 |
410
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
239 rcall backup_flash_page ; backup the first 128bytes from flash to EEPROM |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
240 |
0 | 241 movlw d'1' ; store current version in EEPROM |
281
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
276
diff
changeset
|
242 movwf EEADR ; =1 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
276
diff
changeset
|
243 movwf EEADRH ; =1 |
0 | 244 movlw softwareversion_x |
245 movwf EEDATA | |
246 call write_eeprom ; write version x | |
247 incf EEADR,F ; set to 0x102 | |
248 movlw softwareversion_y | |
249 movwf EEDATA | |
250 call write_eeprom ; write version y | |
251 clrf EEADRH ; Reset EEADRH | |
252 | |
253 movlw .7 | |
254 movwf lo | |
255 check_firmware_new2: | |
256 ; Wait 1 second | |
257 bcf onesecupdate | |
258 btfss onesecupdate | |
259 bra $-2 | |
260 decfsz lo,F ; Wait 10 seconds... | |
261 bra check_firmware_new2 | |
262 | |
263 global restart | |
264 restart: | |
265 clrf STKPTR ; Never return from here | |
276
e4cb495aed3d
Increase byte timeout in PC download mode, faster response to "Exit" in main menu
heinrichsweikamp
parents:
275
diff
changeset
|
266 clrf CCP1CON ; stop PWM |
e4cb495aed3d
Increase byte timeout in PC download mode, faster response to "Exit" in main menu
heinrichsweikamp
parents:
275
diff
changeset
|
267 bcf PORTC,2 ; Pull PWM out to GND |
e4cb495aed3d
Increase byte timeout in PC download mode, faster response to "Exit" in main menu
heinrichsweikamp
parents:
275
diff
changeset
|
268 |
21
79b2084fd75a
Reset options to default if they are not within the allowed min/max values
heinrichsweikamp
parents:
16
diff
changeset
|
269 extern option_save_all, option_check_all |
79b2084fd75a
Reset options to default if they are not within the allowed min/max values
heinrichsweikamp
parents:
16
diff
changeset
|
270 |
0 | 271 btfsc menubit ; Return from Menu/COMM mode or timeout? |
272 call option_save_all ; Yes, save all settings into EEPROM | |
273 | |
429 | 274 call option_restore_all ; Restore everything from EEPROM into RAM |
23
e402813343b6
new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents:
21
diff
changeset
|
275 call option_check_all ; Check all options (and reset if not within their min/max boundaries) |
429 | 276 call option_save_all ; Save all settings into EEPROM after they have been checked |
23
e402813343b6
new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents:
21
diff
changeset
|
277 |
429 | 278 clrf flag1 ; clear all flags |
279 clrf flag2 | |
280 clrf flag3 | |
281 clrf flag4 | |
282 clrf flag5 | |
283 clrf flag6 | |
0 | 284 clrf flag7 |
285 clrf flag8 | |
429 | 286 clrf flag9 |
287 clrf flag10 | |
267
f64afa14ef07
BUGFIX: Analog sensors were ignored in 1.76
heinrichsweikamp
parents:
255
diff
changeset
|
288 ; Do not clear flag11 (Sensor calibration and charger status) |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
289 clrf flag12 |
449 | 290 ; ; Do not clear flag13 (Important hardware flags) |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
291 clrf flag14 |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
292 clrf hardware_flag ; hardware descriptor flag |
449 | 293 bsf tft_is_dimming ; TFT is dimming up (soon), ignore ambient sensor! |
23
e402813343b6
new option to switch samplingrate between 10s and 2s
heinrichsweikamp
parents:
21
diff
changeset
|
294 |
236 | 295 ; configure hardware_flag byte |
296 | |
429 | 297 bsf ambient_sensor ; Set flag |
298 bsf optical_input ; Set flag | |
236 | 299 |
113 | 300 call lt2942_get_status ; Check for gauge IC |
449 | 301 btfss battery_gauge_available ; cR/2 hardware? |
236 | 302 bra restart2 ; No |
303 | |
113 | 304 call lt2942_init ; Yes, init battery gauge IC |
429 | 305 bcf optical_input ; Clear flag |
306 | |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
307 banksel 0xF16 |
429 | 308 bcf ANCON0,7 ; AN7 Digital input |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
309 banksel common |
429 | 310 bcf lightsen_power ; Power-down ambient light sensor |
236 | 311 bcf ambient_sensor ; Clear flag |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
312 nop |
429 | 313 btfss PORTF,2 ; Light sensor available? |
314 bsf ambient_sensor ; Yes. | |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
315 banksel 0xF16 |
429 | 316 bsf ANCON0,7 ; AN7 Analog again |
441
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
317 banksel common |
360acdcda0d7
+BUGFIX: Compatibility with "hwOS Config" fixed
heinrichsweikamp
parents:
429
diff
changeset
|
318 bsf lightsen_power ; Power-up ambient light sensor again |
429 | 319 |
243 | 320 restart2: |
321 btfsc vusb_in | |
322 bra restart3 ; USB (and powered on) | |
323 bcf PORTE,0 ; Start comms | |
324 WAITMS d'1' | |
325 btfss vusb_in | |
326 bra restart3 ; USB (and powered off) | |
327 bsf ble_available ; ble available | |
328 restart3: | |
329 bsf PORTE,0 ; Stop comms | |
248
afe73e1a0181
support hardware_flag for all possible hardware combinations
heinrichsweikamp
parents:
243
diff
changeset
|
330 btfsc ble_available ; ble available? |
afe73e1a0181
support hardware_flag for all possible hardware combinations
heinrichsweikamp
parents:
243
diff
changeset
|
331 bra restart4 ; Yes, can't be a cR |
449 | 332 btfss battery_gauge_available ; Rechargeable |
248
afe73e1a0181
support hardware_flag for all possible hardware combinations
heinrichsweikamp
parents:
243
diff
changeset
|
333 bra restart4 ; No, can't be a cR |
afe73e1a0181
support hardware_flag for all possible hardware combinations
heinrichsweikamp
parents:
243
diff
changeset
|
334 bsf analog_o2_input ; Set flag for analog |
249 | 335 restart4: |
336 ; The hardware_flag is now: | |
337 ; 3: 0x0A | |
338 ; cR: 0x05 | |
339 ; 2 with BLE: 0x11 | |
340 ; 3 with BLE: 0x1A | |
429 | 341 ; 2 with ambient: 0x13 |
113 | 342 |
0 | 343 ; Select high altitude (Fly) mode? |
344 movff last_surfpressure_30min+0,sub_b+0 | |
345 movff last_surfpressure_30min+1,sub_b+1 | |
346 movlw HIGH high_altitude_threshold | |
347 movwf sub_a+1 | |
348 movlw LOW high_altitude_threshold ; Hard-wired 880mbar | |
349 movwf sub_a+0 | |
350 call subU16 ; sub_c = sub_a - sub_b | |
351 btfss neg_flag ; Result negative (Ambient>880mbar)? | |
352 bsf high_altitude_mode ; No, Set Flag! | |
353 | |
236 | 354 btfss analog_o2_input |
165 | 355 bsf TRISB,3 |
449 | 356 btfss battery_gauge_available |
165 | 357 bsf TRISG,0 |
0 | 358 call ext_flash_disable_protection ; Disable write protection for external flash |
359 | |
155
5f71e31bd5b3
CHANGE: Re-arranged Settings Menu, add 180? rotate to menu
heinrichsweikamp
parents:
154
diff
changeset
|
360 bsf flip_screen ; Flip 180° |
5f71e31bd5b3
CHANGE: Re-arranged Settings Menu, add 180? rotate to menu
heinrichsweikamp
parents:
154
diff
changeset
|
361 TSTOSS opt_flip_screen ; =1: Flip the screen |
5f71e31bd5b3
CHANGE: Re-arranged Settings Menu, add 180? rotate to menu
heinrichsweikamp
parents:
154
diff
changeset
|
362 bcf flip_screen ; Normal orientation |
151 | 363 |
464
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
364 btfsc use_old_batt_flag ; =1: load old battery information after power-on reset |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
365 goto use_old_batteries ; Returns to "surfloop"! |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
366 |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
367 btfsc RCON,POR ; Was this a power-on reset? |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
368 goto surfloop ; Jump to Surfaceloop! |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
369 bsf RCON,POR ; Set bit for next detection |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
370 ; Things to do after a power-on reset |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
371 extern new_battery_menu,use_old_batteries |
0491a84fd0b8
CHANGE: Easier to understand "New Battery" menu (OSTC model dependent)
heinrichsweikamp
parents:
463
diff
changeset
|
372 goto new_battery_menu ; Returns to "surfloop"! |
0 | 373 |
374 ;============================================================================= | |
375 ; Setup all flags and parameters for divemode and simulator computations. | |
376 ; | |
377 global restart_set_modes_and_flags | |
378 restart_set_modes_and_flags: ; "Call"ed from divemode, as well! | |
379 call option_restore_all ; Restore everything from EEPROM | |
24 | 380 |
381 ; Setup sampling rate | |
382 movlw .2 | |
383 movwf samplingrate | |
384 TSTOSS opt_sampling_rate ; =1: 10s, =0: 2s | |
385 bra restart_set_modes_and_flags1 | |
386 movlw .10 | |
387 movwf samplingrate | |
388 restart_set_modes_and_flags1: | |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
389 movff opt_dive_mode,lo ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR |
0 | 390 |
391 bcf FLAG_apnoe_mode | |
392 bcf FLAG_ccr_mode ; =1: CCR mode (Fixed ppO2 or Sensor) active | |
393 bcf FLAG_gauge_mode ; =1: In Gauge mode | |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
394 bcf FLAG_pscr_mode |
224
5a4801918be9
temporally disable "Copy disable flags from digital input" routine
heinrichsweikamp
parents:
220
diff
changeset
|
395 call disable_ir_s8 ; IR off |
0 | 396 |
397 tstfsz lo | |
398 bra restart_set_modes_and_flags2 | |
399 ; OC Mode | |
400 return | |
401 | |
402 restart_set_modes_and_flags2: | |
403 decfsz lo,F | |
404 bra restart_set_modes_and_flags3 | |
405 ; CC Mode | |
359 | 406 btfsc analog_o2_input ; cR? |
407 bra restart_set_modes_and_flags2b ; Yes, skip mode check | |
408 btfsc optical_input ; 3 | |
409 bra restart_set_modes_and_flags2b ; Yes, skip mode check | |
410 ; Make sure Sensor is not selected | |
411 ; opt_ccr_mode must be <> 1 (=0: Fixed SP, =1: Sensor, =2: Auto SP) | |
412 banksel opt_ccr_mode | |
413 movlw .1 | |
414 cpfseq opt_ccr_mode ; = Sensor? | |
415 bra restart_set_modes_and_flags2b ; No | |
416 clrf opt_ccr_mode ; Yes, reset to Fixed SP | |
417 restart_set_modes_and_flags2b: | |
418 banksel common | |
338
2811932b4e99
NEW: Mode Auto SP: Automatically switches the SP during descent (CC Mode)
heinrichsweikamp
parents:
319
diff
changeset
|
419 bsf FLAG_ccr_mode ; =1: CCR mode (Fixed SP, Auto SP or Sensor) active |
187
669b5d00706d
CHANGE: Longer timeout (4 min) for calibration menu
heinrichsweikamp
parents:
165
diff
changeset
|
420 call enable_ir_s8 ; Enable IR/S8-Port |
0 | 421 return |
422 | |
423 restart_set_modes_and_flags3: | |
424 decfsz lo,F | |
425 bra restart_set_modes_and_flags4 | |
426 ; Gauge Mode | |
427 bsf FLAG_gauge_mode ; =1: In Gauge mode | |
428 return | |
429 | |
430 restart_set_modes_and_flags4: | |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
431 decfsz lo,F |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
432 bra restart_set_modes_and_flags5 |
0 | 433 ; Apnea Mode |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
434 bsf FLAG_apnoe_mode |
0 | 435 return ; start in Surfacemode |
436 | |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
437 restart_set_modes_and_flags5: |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
438 ; PSCR Mode |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
439 bsf FLAG_pscr_mode |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
440 return ; start in Surfacemode |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
441 |
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
475
diff
changeset
|
442 |
410
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
443 backup_flash_page: ; backup the first 128bytes from flash to EEPROM |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
444 ; Start address in internal flash |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
445 movlw 0x00 |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
446 movwf TBLPTRL |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
447 movwf TBLPTRH |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
448 movwf TBLPTRU |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
449 |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
450 movlw .128 |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
451 movwf lo ; Byte counter |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
452 clrf EEADR |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
453 movlw .3 |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
454 movwf EEADRH ; Setup backup address |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
455 |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
456 TBLRD*- ; Dummy read to be in 128 byte block |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
457 backup_flash_loop: |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
458 tblrd+* ; Table Read with Pre-Increment |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
459 movff TABLAT,EEDATA ; put 1 byte |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
460 call write_eeprom ; save it in EEPROM |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
461 incf EEADR,F |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
462 decfsz lo,F ; 128byte done? |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
463 bra backup_flash_loop ; No |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
464 clrf EEADRH ; Reset EEADRH |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
465 return ; Done. |
d3087a8ed7e1
BUGFIX: Fix rare issue after battery change (OSTC3 did not start properly)
heinrichsweikamp
parents:
375
diff
changeset
|
466 |
0 | 467 END |