Mercurial > public > hwos_code
comparison src/divemode.asm @ 634:4050675965ea
3.10 stable release
| author | heinrichsweikamp |
|---|---|
| date | Tue, 28 Apr 2020 17:34:31 +0200 |
| parents | 185ba2f91f59 |
| children | 9a64914a8fca |
comparison
equal
deleted
inserted
replaced
| 633:690c48db7b5b | 634:4050675965ea |
|---|---|
| 1 ;============================================================================= | 1 ;============================================================================= |
| 2 ; | 2 ; |
| 3 ; File divemode.asm combined next generation V3.08.8 | 3 ; File divemode.asm * combined next generation V3.09.5 |
| 4 ; | 4 ; |
| 5 ; Dive Mode | 5 ; Dive Mode |
| 6 ; | 6 ; |
| 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. |
| 8 ;============================================================================= | 8 ;============================================================================= |
| 29 | 29 |
| 30 | 30 |
| 31 extern do_line_menu | 31 extern do_line_menu |
| 32 extern do_main_divemenu | 32 extern do_main_divemenu |
| 33 extern menu_draw_lines_divemode | 33 extern menu_draw_lines_divemode |
| 34 extern menu_draw_cursor_dive | |
| 34 extern init_recording_params | 35 extern init_recording_params |
| 35 extern option_check_and_store_all | 36 extern option_check_and_store_all |
| 36 | 37 |
| 37 IFDEF _compass | 38 IFDEF _compass |
| 38 extern TFT_dive_compass_heading | 39 extern TFT_dive_compass_heading |
| 39 ENDIF | 40 ENDIF |
| 40 | 41 |
| 41 IFDEF _cave_mode | 42 IFDEF _cave_mode |
| 42 extern do_main_cavemenu | 43 extern do_main_cavemenu |
| 43 ENDIF | 44 ENDIF |
| 45 | |
| 44 | 46 |
| 45 ;---- Private local Variables ------------------------------------------------- | 47 ;---- Private local Variables ------------------------------------------------- |
| 46 | 48 |
| 47 CBLOCK local1 ; max size is 16 Byte !!! | 49 CBLOCK local1 ; max size is 16 Byte !!! |
| 48 sensor_setpoint ; sensor ppo2 in 0.01bar for deco routine | 50 sensor_setpoint ; sensor ppo2 in 0.01bar for deco routine |
| 61 ENDC ; used: 14 byte, remaining: 2 byte | 63 ENDC ; used: 14 byte, remaining: 2 byte |
| 62 | 64 |
| 63 CBLOCK local2 ; max size is 16 Byte !!! | 65 CBLOCK local2 ; max size is 16 Byte !!! |
| 64 pressure_rel_accu_trip:4 ; pressure accumulator for calculating the resettable average depth | 66 pressure_rel_accu_trip:4 ; pressure accumulator for calculating the resettable average depth |
| 65 pressure_rel_accu_total:4 ; pressure accumulator for calculating the total dive average depth | 67 pressure_rel_accu_total:4 ; pressure accumulator for calculating the total dive average depth |
| 66 xmitter_flags_stat ; pressure transmitter flags for status | |
| 67 xmitter_flags_mesg ; pressure transmitter flags for messages | |
| 68 ppO2_min:2 ; used in search for best gas/dil: minimum ppO2 required | 68 ppO2_min:2 ; used in search for best gas/dil: minimum ppO2 required |
| 69 ppO2_max_default:2 ; used in search for best gas/dil: default maximum ppO2 | 69 ppO2_max_default:2 ; used in search for best gas/dil: default maximum ppO2 |
| 70 ppO2_max_deco:2 ; used in search for best gas/dil: deco maximum ppO2 | 70 ppO2_max_deco:2 ; used in search for best gas/dil: deco maximum ppO2 |
| 71 ENDC ; used: 16 byte, remaining: 0 byte ==> FULL | 71 ENDC ; used: 14 byte, remaining: 2 byte |
| 72 | 72 |
| 73 | 73 |
| 74 ;---- Private local Flags ---------------------------------------------------- | 74 ;---- Private local Flags ---------------------------------------------------- |
| 75 | 75 |
| 76 ; TFT_output_flags_1 - phase 1: every second - before deco calculations, all modes | 76 ; TFT_output_flags_1 - phase 1: every second - before deco calculations, all modes |
| 112 #DEFINE FLAG_TFT_velocity_show TFT_output_flags_4,5 ; =1: show vertical velocity | 112 #DEFINE FLAG_TFT_velocity_show TFT_output_flags_4,5 ; =1: show vertical velocity |
| 113 #DEFINE FLAG_TFT_velocity_clear TFT_output_flags_4,6 ; =1: clear vertical velocity | 113 #DEFINE FLAG_TFT_velocity_clear TFT_output_flags_4,6 ; =1: clear vertical velocity |
| 114 ; TFT_output_flags_4,7 ; --- unused | 114 ; TFT_output_flags_4,7 ; --- unused |
| 115 | 115 |
| 116 | 116 |
| 117 ; Pressure Transmitter Status | |
| 118 #DEFINE transmitter1_lost xmitter_flags_stat,0 ; =1: transmitter 1 lost is an old message | |
| 119 #DEFINE transmitter1_battery xmitter_flags_stat,1 ; =1: transmitter 1 battery low is an old message | |
| 120 #DEFINE transmitter1_pres_warn xmitter_flags_stat,2 ; =1: transmitter 1 pressure warning is an old message | |
| 121 #DEFINE transmitter1_pres_att xmitter_flags_stat,3 ; =1: transmitter 1 pressure attention is an old message | |
| 122 #DEFINE transmitter2_lost xmitter_flags_stat,4 ; =1: transmitter 2 lost is an old message | |
| 123 #DEFINE transmitter2_battery xmitter_flags_stat,5 ; =1: transmitter 2 battery low is an old message | |
| 124 #DEFINE transmitter2_pres_warn xmitter_flags_stat,6 ; =1: transmitter 2 pressure warning is an old message | |
| 125 #DEFINE transmitter2_pres_att xmitter_flags_stat,7 ; =1: transmitter 2 pressure attention is an old message | |
| 126 | |
| 127 ; Pressure Transmitter Messages | |
| 128 #DEFINE pres_customview_shown xmitter_flags_mesg,0 ; =1: pressure readings custom view has been shown before | |
| 129 #DEFINE show_transmitter_attention xmitter_flags_mesg,1 ; =1: show transmitter attention | |
| 130 #DEFINE show_pres_warning xmitter_flags_mesg,2 ; =1: show transmitter pressure warning | |
| 131 #DEFINE show_pres_attention xmitter_flags_mesg,3 ; =1: show transmitter pressure attention | |
| 132 ; xmitter_flags_mesg,4 ; --- unused | |
| 133 ; xmitter_flags_mesg,5 ; --- unused | |
| 134 ; xmitter_flags_mesg,6 ; --- unused | |
| 135 ; xmitter_flags_mesg,7 ; --- unused | |
| 136 | |
| 137 ; various Flags | 117 ; various Flags |
| 138 #DEFINE new_deco_data_avail DM_flags_local,0 ; =1: new NDL or deco data available | 118 #DEFINE new_deco_data_avail DM_flags_local,0 ; =1: new NDL or deco data available |
| 139 #DEFINE o2_sensors_agree DM_flags_local,1 ; =1: the ppO2 of all sensors are within the threshold range | 119 #DEFINE update_menu DM_flags_local,1 ; =1: redraw the dive menu |
| 140 #DEFINE update_menu DM_flags_local,2 ; =1: redraw the dive menu | 120 #DEFINE FLAG_SP2_used DM_flags_local,2 ; =1: setpoint 2 has been auto-selected already |
| 141 #DEFINE FLAG_SP2_used DM_flags_local,3 ; =1: setpoint 2 has been auto-selected already | 121 #DEFINE FLAG_SP3_used DM_flags_local,3 ; =1: setpoint 3 has been auto-selected already |
| 142 #DEFINE FLAG_SP3_used DM_flags_local,4 ; =1: setpoint 3 has been auto-selected already | 122 #DEFINE FLAG_SP4_used DM_flags_local,4 ; =1: setpoint 4 has been auto-selected already |
| 143 #DEFINE FLAG_SP4_used DM_flags_local,5 ; =1: setpoint 4 has been auto-selected already | 123 #DEFINE FLAG_SP5_used DM_flags_local,5 ; =1: setpoint 5 has been auto-selected already |
| 144 #DEFINE FLAG_SP5_used DM_flags_local,6 ; =1: setpoint 5 has been auto-selected already | 124 ; DM_flags_local,6 ; --- unused |
| 145 ; DM_flags_local,7 ; --- unused | 125 ; DM_flags_local,7 ; --- unused |
| 146 | 126 |
| 147 | 127 |
| 148 dmode CODE | |
| 149 | |
| 150 ;============================================================================= | 128 ;============================================================================= |
| 151 | 129 dmode1 CODE |
| 130 ;============================================================================= | |
| 131 | |
| 132 | |
| 133 ;----------------------------------------------------------------------------- | |
| 134 ; Entry Point for Dive Mode | |
| 135 ; | |
| 152 global diveloop | 136 global diveloop |
| 153 diveloop: | 137 diveloop: |
| 154 clrf STKPTR ; clear return addresses stack | 138 clrf STKPTR ; clear return addresses stack |
| 155 | 139 |
| 156 ; start with a clean time base | 140 ; start with a clean time base |
| 168 clrf DM_flags_layout2 ; clear all flags for display control / layout (2) | 152 clrf DM_flags_layout2 ; clear all flags for display control / layout (2) |
| 169 clrf DM_flags_layout3 ; clear all flags for display control / layout (3) | 153 clrf DM_flags_layout3 ; clear all flags for display control / layout (3) |
| 170 clrf DM_flags_message ; clear all flags for display control / messages | 154 clrf DM_flags_message ; clear all flags for display control / messages |
| 171 clrf DM_flags_gas_dil ; clear all flags for display control / gases, diluents, depth | 155 clrf DM_flags_gas_dil ; clear all flags for display control / gases, diluents, depth |
| 172 | 156 |
| 173 bcf dive_main_menu ; clear dive main menu flag | 157 clrf DM_flags_advc_det ; clear all flags for advices detection |
| 174 bcf dive_options_menu ; clear dive options menu flag | 158 clrf DM_flags_advc_ack ; clear all flags for advices acknowledged |
| 159 | |
| 160 clrf DM_flags_att1_det ; clear all flags for attentions detection | |
| 161 clrf DM_flags_att2_det ; ... | |
| 162 clrf DM_flags_att3_det ; ... | |
| 163 | |
| 164 clrf DM_flags_att1_ack ; clear all flags for attentions acknowledged | |
| 165 clrf DM_flags_att2_ack ; ... | |
| 166 clrf DM_flags_att3_ack ; ... | |
| 167 | |
| 168 clrf DM_flags_war1_det ; clear all flags for warnings detection | |
| 169 clrf DM_flags_war2_det ; ... | |
| 170 | |
| 171 clrf DM_flags_war1_ack ; clear all flags for warnings acknowledged | |
| 172 clrf DM_flags_war2_ack ; ... | |
| 173 | |
| 174 clrf DM_flags_shown1 ; arm auto show-up of custom views | |
| 175 clrf DM_flags_shown2 ; ... | |
| 176 clrf DM_flags_shown3 ; ... | |
| 177 | |
| 178 bcf dive_main_menu ; clear dive main menu flag | |
| 179 bcf dive_pre_menu ; clear dive pre-menu flag | |
| 175 | 180 |
| 176 ; reset local flags | 181 ; reset local flags |
| 177 clrf TFT_output_flags_1 ; clear all flags for TFT output phase 1 | 182 clrf TFT_output_flags_1 ; clear all flags for TFT output phase 1 |
| 178 clrf TFT_output_flags_2 ; clear all flags for TFT output phase 2 | 183 clrf TFT_output_flags_2 ; clear all flags for TFT output phase 2 |
| 179 clrf TFT_output_flags_3 ; clear all flags for TFT output phase 3 | 184 clrf TFT_output_flags_3 ; clear all flags for TFT output phase 3 |
| 180 clrf TFT_output_flags_4 ; clear all flags for TFT output phase 4 | 185 clrf TFT_output_flags_4 ; clear all flags for TFT output phase 4 |
| 181 clrf xmitter_flags_stat ; clear all pressure transmitter status flags | |
| 182 clrf xmitter_flags_mesg ; clear all pressure transmitter message flags | |
| 183 clrf DM_flags_local ; clear all the various other flags, too | 186 clrf DM_flags_local ; clear all the various other flags, too |
| 184 | 187 |
| 185 ; configure screen layout (all flags were cleared above) | |
| 186 TSTOSC opt_layout ; alternative layout enabled? | |
| 187 bsf alt_layout_active ; YES - start with alternative layout | |
| 188 | |
| 189 ; configure tissue graphics (all flags were cleared above) | |
| 190 TSTOSS opt_tissue_graphics ; shall show: 0= pres+sat, 1= N2+He | |
| 191 bsf tissue_graphic_layout ; YES - show press+sat | |
| 192 | |
| 193 TSTOSC char_I_model ; GF factors enabled? | |
| 194 bsf tissue_graphic_gf ; YES - show GF lines | |
| 195 | |
| 196 | |
| 197 ; boot tasks for all modes | 188 ; boot tasks for all modes |
| 198 call diveloop_boot | 189 call diveloop_boot ; initialize dive mode |
| 199 | 190 |
| 200 ; startup tasks for all modes | 191 ; startup tasks for all modes |
| 201 ; clrf CCP1CON ; stop PWM | |
| 202 ; bcf PORTC,2 ; pull PWM output to GND | |
| 203 ; clrf CCPR1L ; backlight off | |
| 204 call TFT_boot ; initialize TFT (includes clear screen) | 192 call TFT_boot ; initialize TFT (includes clear screen) |
| 193 call TFT_load_dive_color_pallet ; load dive color pallet | |
| 205 call TFT_show_divemode_mask ; display static dive mode mask | 194 call TFT_show_divemode_mask ; display static dive mode mask |
| 206 call TFT_Display_FadeIn ; dim up the display | 195 call TFT_Display_FadeIn ; dim up the display |
| 207 | 196 |
| 208 ; reload and redraw last custom view | 197 ; arm dive start timer |
| 209 movff customview_divemode,active_customview | |
| 210 bsf FLAG_TFT_customview_callup | |
| 211 | |
| 212 bcf divetime_longer_1min ; the dive has just begun | 198 bcf divetime_longer_1min ; the dive has just begun |
| 213 btfsc FLAG_apnoe_mode ; in apnea mode? | 199 btfsc FLAG_apnoe_mode ; in apnea mode? |
| 214 bsf divetime_longer_1min ; YES - force dive to have lasted for longer than 1 minute already | 200 bsf divetime_longer_1min ; YES - force dive to have lasted for longer than 1 minute already |
| 215 btfsc sensor_override_active ; in simulator mode? | 201 btfsc sensor_override_active ; in simulator mode? |
| 216 bsf divetime_longer_1min ; YES - force dive to have lasted for longer than 1 minute already | 202 bsf divetime_longer_1min ; YES - force dive to have lasted for longer than 1 minute already |
| 217 | 203 |
| 204 ; initiate initial display outputs | |
| 218 bsf trigger_pres_cur_changed ; flag that the pressures have changed to have all data... | 205 bsf trigger_pres_cur_changed ; flag that the pressures have changed to have all data... |
| 219 bsf trigger_pres_max_changed ; ... written to the display on the first output round | 206 bsf trigger_pres_max_changed ; ... written to the display on the first output round |
| 220 | |
| 221 bsf trigger_temp_changed ; flag that the temperature has changed to have the temperature ... | 207 bsf trigger_temp_changed ; flag that the temperature has changed to have the temperature ... |
| 222 ; ... written to the display on the first output round | 208 ; ... written to the display on the first output round |
| 223 | |
| 224 bsf new_deco_data_avail ; flag that new deco engine results are available to have the initial data ... | 209 bsf new_deco_data_avail ; flag that new deco engine results are available to have the initial data ... |
| 225 ; ... written to the display on the first output round | 210 ; ... written to the display on the first output round |
| 226 | 211 |
| 227 ; clear the resettable average depth | 212 ; initialize the resettable average depth |
| 228 call clear_resettable_average_depth | 213 call resettable_average_depth_init |
| 229 | 214 |
| 230 ; ; initial caching of new absolute and relative pressure, ISR-safe 2 byte copies | 215 ; reload and redraw last custom view |
| 231 ; SMOVII pressure_abs, pressure_abs_cached | 216 movff customview_divemode,active_customview |
| 232 ; SMOVII pressure_rel_cur,pressure_rel_cur_cached | 217 bsf FLAG_TFT_customview_callup |
| 233 | |
| 234 ; ; initial transfer of absolute pressure to deco engine | |
| 235 ; MOVII pressure_abs_cached,int_I_pres_respiration | |
| 236 | 218 |
| 237 btfsc FLAG_apnoe_mode ; in apnoe mode? | 219 btfsc FLAG_apnoe_mode ; in apnoe mode? |
| 238 bra diveloop_1 ; YES - done with initialization | 220 bra diveloop_1 ; YES - done with initialization |
| 239 btfsc FLAG_gauge_mode ; NO - in gauge mode? | 221 btfsc FLAG_gauge_mode ; NO - in gauge mode? |
| 240 bra diveloop_1 ; YES - done with initialization | 222 bra diveloop_1 ; YES - done with initialization |
| 241 bsf FLAG_TFT_display_ndl_mask ; NO - in deco mode then, display NDL mask | 223 bsf FLAG_TFT_display_ndl_mask ; NO - request initial display of NDL mask |
| 242 bsf FLAG_TFT_active_gas_divemode; - request initial display of gas and setpoint | 224 bsf FLAG_TFT_active_gas_divemode; - request initial display of gas and setpoint |
| 243 | 225 |
| 244 diveloop_1: | 226 diveloop_1: |
| 245 btfsc reset_timebase ; has the ISR confirmed reset of the timebase meanwhile? | 227 btfsc reset_timebase ; has the ISR confirmed reset of the timebase meanwhile? |
| 246 bra $-2 ; NO - not yet, loop waiting for confirmation before entering the dive loop | 228 bra $-2 ; NO - not yet, loop waiting for confirmation before entering the dive loop |
| 247 | 229 ;bra diveloop_loop ; YES - enter the dive loop |
| 230 | |
| 231 | |
| 232 ;----------------------------------------------------------------------------- | |
| 233 ; Dive Mode Mail Loop | |
| 234 ; | |
| 248 diveloop_loop: | 235 diveloop_loop: |
| 249 ; ### the dive loop starts here ### | |
| 250 btfsc trigger_full_second ; new 1/1 second? | 236 btfsc trigger_full_second ; new 1/1 second? |
| 251 bra diveloop_loop_2 ; YES - continue with tasks every 1/1 second | 237 bra diveloop_loop_2 ; YES - continue with tasks every 1/1 second |
| 252 btfsc trigger_half_second ; NO - new 1/2 second? | 238 btfsc trigger_half_second ; NO - new 1/2 second? |
| 253 bra diveloop_loop_1 ; YES - continue with tasks every 1/2 second | 239 bra diveloop_loop_1 ; YES - continue with tasks every 1/2 second |
| 254 | 240 |
| 341 diveloop_loop_4: | 327 diveloop_loop_4: |
| 342 ; continue tasks every 1/1 second | 328 ; continue tasks every 1/1 second |
| 343 | 329 |
| 344 IFDEF _external_sensor | 330 IFDEF _external_sensor |
| 345 btfsc FLAG_ccr_mode ; in CCR mode? | 331 btfsc FLAG_ccr_mode ; in CCR mode? |
| 346 rcall calc_deko_divemode_sensor ; YES - do sensor data acquisition if applicable | 332 rcall calc_deko_divemode_sensor ; YES - process sensor readings |
| 347 btfsc FLAG_pscr_mode ; in pSCR mode? | 333 btfsc FLAG_pscr_mode ; in pSCR mode? |
| 348 rcall calc_deko_divemode_sensor ; YES - do sensor data acquisition if applicable | 334 rcall calc_deko_divemode_sensor ; YES - process sensor readings |
| 349 ENDIF | 335 ENDIF |
| 350 | 336 |
| 351 IFDEF _cave_mode | 337 IFDEF _cave_mode |
| 352 btfss cave_mode ; cave mode switched on? | 338 btfss cave_mode ; cave mode switched on? |
| 353 bra diveloop_loop_4a ; NO - no backtracking depth recording | 339 bra diveloop_loop_4a ; NO - no backtracking depth recording |
| 405 bra diveloop_loop_7 ; YES - skip deco calculations | 391 bra diveloop_loop_7 ; YES - skip deco calculations |
| 406 | 392 |
| 407 call callup_deco_engine ; ##### manage and invoke the deco calculation engine ##### | 393 call callup_deco_engine ; ##### manage and invoke the deco calculation engine ##### |
| 408 | 394 |
| 409 btfsc new_deco_data_avail ; new NDL or deco data available? | 395 btfsc new_deco_data_avail ; new NDL or deco data available? |
| 410 call show_new_deco_data ; YES - update the display and update the decostop_active flag | 396 call show_new_deco_data ; YES - set-up display update requests |
| 411 | 397 |
| 412 btfsc decostop_active ; in deco mode? | 398 btfsc decostop_active ; in deco mode? |
| 413 bsf FLAG_TFT_display_deco ; YES - update deco stop depth & time every second because of depth-dependent color-coding | 399 bsf FLAG_TFT_display_deco ; YES - update deco stop depth & time every second because of depth-dependent color-coding |
| 414 | 400 |
| 415 bsf FLAG_TFT_depth_current ; set flag to display depth (in next round, needed in deco modes irrespectively of a pressure change for color-coding and blinking effects) | 401 bsf FLAG_TFT_depth_current ; set flag to display depth (in next round, needed in deco modes irrespectively of a pressure change for color-coding and blinking effects) |
| 433 rcall check_deco_states ; check and lock if in deco and in the deco stops region | 419 rcall check_deco_states ; check and lock if in deco and in the deco stops region |
| 434 rcall TFT_output_3 ; do display updates | 420 rcall TFT_output_3 ; do display updates |
| 435 | 421 |
| 436 diveloop_loop_10: | 422 diveloop_loop_10: |
| 437 ; common tasks every 1/1 second | 423 ; common tasks every 1/1 second |
| 438 rcall timeout_divemode ; check for timeout condition | 424 rcall timeout_divemode ; check for timeout conditions |
| 439 call check_dive_modes ; test if depth still deeper than threshold | 425 call check_dive_modes_dive ; test if depth still deeper than threshold |
| 440 | 426 |
| 441 btfsc trigger_full_minute ; has next minute begun? | 427 btfsc trigger_full_minute ; has next minute begun? |
| 442 rcall update_divemode60 ; YES - update clock, etc. | 428 rcall update_divemode60 ; YES - update clock, etc. |
| 443 | 429 |
| 444 btfss FLAG_oc_mode ; are we in OC mode? | 430 btfss FLAG_oc_mode ; are we in OC mode? |
| 449 | 435 |
| 450 rcall TFT_output_4 ; do display updates | 436 rcall TFT_output_4 ; do display updates |
| 451 | 437 |
| 452 ; tasks every round, every mode | 438 ; tasks every round, every mode |
| 453 diveloop_loop_11: | 439 diveloop_loop_11: |
| 454 call test_switches_divemode ; check switches in dive mode | 440 call test_switches_divemode ; check switches, in case branch into menu processor |
| 455 bra diveloop_loop_12 | 441 bra diveloop_loop_12 ; continue the dive loop |
| 456 | 442 |
| 443 | |
| 444 ; **** jump-in when returning from menu processor **** | |
| 445 ; | |
| 446 global divemode_option_divemenu_return | |
| 447 divemode_option_divemenu_return: | |
| 448 clrf STKPTR ; reset the stack | |
| 449 call menu_draw_cursor_dive ; show the cursor | |
| 450 bsf dive_main_menu ; set main menu is shown now | |
| 451 clrf active_premenu ; set pre-menu is not shown any more | |
| 452 bcf safety_stop_active ; set safety stop is not shown any more | |
| 453 movlw divemode_timeout_mainmenu ; get timeout for main menu | |
| 454 call restart_timeout_time ; restart the timeout | |
| 455 bra diveloop_loop_12 ; continue the dive loop | |
| 456 | |
| 457 | |
| 458 ; **** jump-in when returning from dive mode menu **** | |
| 459 ; | |
| 457 global diveloop_menu_exit | 460 global diveloop_menu_exit |
| 458 diveloop_menu_exit: ; jump-in from menu exit | 461 diveloop_menu_exit: |
| 459 bsf FLAG_TFT_temperature ; restore temperature display or resettable dive time (was overwritten by menu) | 462 clrf STKPTR ; reset the stack |
| 463 call divemenu_cleanup ; clean up menu area and restore dive data | |
| 464 ;bra diveloop_loop_12 ; continue the dive loop | |
| 465 | |
| 460 | 466 |
| 461 diveloop_loop_12: | 467 diveloop_loop_12: |
| 462 bsf FLAG_TFT_active_gas_divemode; redraw gas and setpoint (eventually needed to restore the "Bailout" text) | 468 bsf FLAG_TFT_active_gas_divemode; redraw gas and setpoint (eventually needed to restore the "Bailout" text) |
| 463 | 469 |
| 464 btfsc request_next_custview ; shall show next custom view? | 470 btfsc request_next_custview ; shall show next custom view? |
| 465 call dive_customview_toggle ; YES - show next custom view (and delete this flag) | 471 call dive_customview_toggle ; YES - show next custom view |
| 466 | 472 |
| 467 btfsc request_gas_change ; shall change gas? | 473 btfsc request_gas_change ; shall change gas? |
| 468 call gas_switch_common ; YES | 474 call gas_switch_common ; YES |
| 469 | 475 |
| 470 btfsc request_gas_update ; shall update the gases? | 476 btfsc request_gas_update ; shall update the gases? |
| 471 call gas_update_common ; YES | 477 call gas_update_common ; YES |
| 472 | 478 |
| 473 btfsc request_toggle_GF ; shall toggle GF/aGF? | 479 btfsc request_toggle_GF ; shall toggle GF/aGF? |
| 474 rcall divemodemode_togglegf ; YES | 480 call divemodemode_togglegf ; YES |
| 475 | 481 |
| 476 IFDEF _cave_mode | 482 IFDEF _cave_mode |
| 477 btfsc request_cave_off_turned ; shall switch cave mode off and set the dive as turned? | 483 btfsc request_cave_off_turned ; shall switch cave mode off and set the dive as turned? |
| 478 rcall cavemode_switch_off_turned ; YES | 484 rcall cavemode_switch_off_turned ; YES |
| 479 | 485 |
| 508 IFDEF _screendump | 514 IFDEF _screendump |
| 509 btfsc screen_dump_avail ; screen dump function enabled? | 515 btfsc screen_dump_avail ; screen dump function enabled? |
| 510 call TFT_dump_screen_check ; YES - check if requested and do it | 516 call TFT_dump_screen_check ; YES - check if requested and do it |
| 511 ENDIF | 517 ENDIF |
| 512 | 518 |
| 513 bra diveloop_loop ; loop in dive mode | 519 bra diveloop_loop ; do next loop in dive mode |
| 514 | 520 |
| 515 ;-------------------------------------------------------------------------------------------------------- | 521 |
| 516 | 522 ;----------------------------------------------------------------------------- |
| 523 ; Dive Mode Tasks every 1/1 Minute | |
| 524 ; | |
| 525 update_divemode60: | |
| 526 bcf trigger_full_minute ; clear flag | |
| 527 | |
| 528 call get_battery_voltage ; get battery voltage | |
| 529 btfss battery_low_condition ; battery low condition detected? | |
| 530 bra update_divemode60_1 ; NO - skip next | |
| 531 movlw d'7' ; YES - set type of alarm = battery low | |
| 532 movwf alarm_type ; - copy to alarm register | |
| 533 bsf event_occured ; - set event flag | |
| 534 movlw .0 ; - coding of brightness level ECO | |
| 535 movff WREG,opt_brightness ; - set brightness to ECO | |
| 536 | |
| 537 update_divemode60_1: | |
| 538 ; max allowed runtime in simulator is 254 minutes in | |
| 539 ; order for the tissue calculation catch-up to work! | |
| 540 | |
| 541 btfss sensor_override_active ; in simulator mode? | |
| 542 return ; NO - done | |
| 543 movlw simulator_timeout_normal ; YES - set simulation timeout | |
| 544 IFDEF _cave_mode | |
| 545 TSTOSC opt_cave_mode ; - cave mode switched on? | |
| 546 movlw simulator_timeout_cave ; YES - replace with cave mode simulation timeout | |
| 547 ENDIF | |
| 548 cpfsgt counted_divetime_mins+0 ; - timeout? | |
| 549 return ; NO - done | |
| 550 IFDEF _DEBUG | |
| 551 return ; YES - but we do not care in debug mode... | |
| 552 ELSE | |
| 553 goto divemode_option_sim_quit ; YES - set depth to 0 m and return | |
| 554 ENDIF | |
| 555 | |
| 556 | |
| 557 ;----------------------------------------------------------------------------- | |
| 558 ; Helper Function - set-up Display Update Requests | |
| 559 ; | |
| 560 show_new_deco_data: | |
| 561 bcf new_deco_data_avail ; reset flag for new NDL or deco data available | |
| 562 movff char_O_deco_info,WREG ; get the deco info vector | |
| 563 btfsc WREG,deco_stops_norm ; deco stops found? | |
| 564 bra show_new_deco_data_deco ; YES - in deco | |
| 565 ;bra show_new_deco_data_ndl ; NO - within NDL | |
| 566 | |
| 567 show_new_deco_data_ndl: ; within NDL | |
| 568 btfsc decostop_active ; been in deco mode before? | |
| 569 bsf FLAG_TFT_clear_deco_data ; YES - clear old deco data | |
| 570 btfsc decostop_active ; been in deco mode before? | |
| 571 bsf FLAG_TFT_display_ndl_mask ; YES - display NDL data mask | |
| 572 bcf decostop_active ; clear flag for been in deco mode before | |
| 573 bsf FLAG_TFT_display_ndl ; display NDL time | |
| 574 return ; done | |
| 575 | |
| 576 show_new_deco_data_deco: ; in deco | |
| 577 btfss decostop_active ; been in deco mode before? | |
| 578 bsf FLAG_TFT_clear_deco_data ; NO - clear old NDL data | |
| 579 btfss decostop_active ; been in deco mode before? | |
| 580 bsf FLAG_TFT_display_deco_mask ; NO - display deco data mask | |
| 581 bsf decostop_active ; set flag for being in deco mode | |
| 582 bsf FLAG_TFT_display_tts ; display TTS time (display of stop data is managed separately) | |
| 583 return ; done | |
| 584 | |
| 585 | |
| 586 ;----------------------------------------------------------------------------- | |
| 587 ; Helper Function - do all Phase 1 Display Outputs | |
| 588 ; | |
| 517 TFT_output_1: ; every second - before deco calculations, all mode | 589 TFT_output_1: ; every second - before deco calculations, all mode |
| 518 btfsc FLAG_TFT_clear_apnoe_surface ; shall clear apnoe mode surface data from screen? | 590 btfsc FLAG_TFT_clear_apnoe_surface ; shall clear apnoe mode surface data from screen? |
| 519 call TFT_clear_apnoe_surface ; YES - clear apnoe mode surface data from screen | 591 call TFT_clear_apnoe_surface ; YES - clear apnoe mode surface data from screen |
| 520 | 592 |
| 521 btfsc FLAG_TFT_depth_current ; shall show depth? | 593 btfsc FLAG_TFT_depth_current ; shall show depth? |
| 535 call TFT_show_apnoe_times ; YES - show apnoe dive time? | 607 call TFT_show_apnoe_times ; YES - show apnoe dive time? |
| 536 | 608 |
| 537 clrf TFT_output_flags_1 ; mark all TFT updates done | 609 clrf TFT_output_flags_1 ; mark all TFT updates done |
| 538 return ; done | 610 return ; done |
| 539 | 611 |
| 612 | |
| 613 ;----------------------------------------------------------------------------- | |
| 614 ; Helper Function - do all Phase 2 Display Outputs | |
| 615 ; | |
| 540 TFT_output_2: ; every second - before deco calculations, deco modes only | 616 TFT_output_2: ; every second - before deco calculations, deco modes only |
| 541 btfsc FLAG_TFT_divemode_mask ; shall re-draw mask? | 617 btfsc FLAG_TFT_divemode_mask ; shall re-draw mask? |
| 542 call TFT_show_divemode_mask ; YES - re-draw mask | 618 call TFT_show_divemode_mask ; YES - re-draw mask |
| 543 btfsc FLAG_TFT_divetime ; shall show dive time? | 619 btfsc FLAG_TFT_divetime ; shall show dive time? |
| 544 call TFT_show_divetime ; YES - show dive time | 620 call TFT_show_divetime ; YES - show dive time |
| 547 btfsc FLAG_TFT_safety_stop_clear ; shall clear safety stop? | 623 btfsc FLAG_TFT_safety_stop_clear ; shall clear safety stop? |
| 548 call TFT_safety_stop_clear ; YES - clear safety stop | 624 call TFT_safety_stop_clear ; YES - clear safety stop |
| 549 clrf TFT_output_flags_2 ; mark all TFT updates done | 625 clrf TFT_output_flags_2 ; mark all TFT updates done |
| 550 goto dive_customview_second ; do every-second tasks for the custom view area (in sync with the dive time) and return | 626 goto dive_customview_second ; do every-second tasks for the custom view area (in sync with the dive time) and return |
| 551 | 627 |
| 628 | |
| 629 ;----------------------------------------------------------------------------- | |
| 630 ; Helper Function - do all Phase 3 Display Outputs | |
| 631 ; | |
| 552 TFT_output_3: ; every second - after deco calculations, deco modes only | 632 TFT_output_3: ; every second - after deco calculations, deco modes only |
| 553 btfsc FLAG_TFT_clear_deco_data ; shall clear deco data (NDL or stop & TTS)? | 633 btfsc FLAG_TFT_clear_deco_data ; shall clear deco data (NDL or stop & TTS)? |
| 554 call TFT_clear_deco_data ; YES - clear deco data (NDL or stop & TTS) | 634 call TFT_clear_deco_data ; YES - clear deco data (NDL or stop & TTS) |
| 555 btfsc FLAG_TFT_display_ndl_mask ; shall show NDL mask? | 635 btfsc FLAG_TFT_display_ndl_mask ; shall show NDL mask? |
| 556 call TFT_show_ndl_mask ; YES - show NDL mask | 636 call TFT_show_ndl_mask ; YES - show NDL mask |
| 563 btfsc FLAG_TFT_display_tts ; shall show deco TTS? | 643 btfsc FLAG_TFT_display_tts ; shall show deco TTS? |
| 564 call TFT_show_tts ; YES - show deco TTS | 644 call TFT_show_tts ; YES - show deco TTS |
| 565 clrf TFT_output_flags_3 ; mark all TFT updates done | 645 clrf TFT_output_flags_3 ; mark all TFT updates done |
| 566 return ; done | 646 return ; done |
| 567 | 647 |
| 648 | |
| 649 ;----------------------------------------------------------------------------- | |
| 650 ; Helper Function - do all Phase 4 Display Outputs | |
| 651 ; | |
| 568 TFT_output_4: ; every second - after deco calculations, all modes | 652 TFT_output_4: ; every second - after deco calculations, all modes |
| 569 btfsc FLAG_TFT_customview_callup ; shall show a custom view? | 653 btfsc FLAG_TFT_customview_callup ; shall show a custom view? |
| 570 call dive_customview_callup ; YES - show a custom view | 654 call dive_customview_callup ; YES - show a custom view |
| 571 btfsc FLAG_TFT_velocity_show ; shall show vertical velocity? | 655 btfsc FLAG_TFT_velocity_show ; shall show vertical velocity? |
| 572 call TFT_velocity_show ; YES - show vertical velocity | 656 call TFT_velocity_show ; YES - show vertical velocity |
| 581 btfsc FLAG_TFT_message_clear_2nd ; shall clear 2nd row of message area? | 665 btfsc FLAG_TFT_message_clear_2nd ; shall clear 2nd row of message area? |
| 582 call TFT_clear_message_window_row2 ; YES - clear 2nd row of message area | 666 call TFT_clear_message_window_row2 ; YES - clear 2nd row of message area |
| 583 clrf TFT_output_flags_4 ; mark all TFT updates done | 667 clrf TFT_output_flags_4 ; mark all TFT updates done |
| 584 return ; done | 668 return ; done |
| 585 | 669 |
| 586 ;-------------------------------------------------------------------------------------------------------- | 670 |
| 587 | 671 ;----------------------------------------------------------------------------- |
| 672 ; Apnoe Mode Tasks | |
| 673 ; | |
| 588 divemode_apnoe_tasks: ; 1 sec. apnoe tasks | 674 divemode_apnoe_tasks: ; 1 sec. apnoe tasks |
| 589 bsf FLAG_TFT_apnoe_divetime ; show apnoe dive times (current/last dive and total) | 675 bsf FLAG_TFT_apnoe_divetime ; show apnoe dive times (current/last dive and total) |
| 590 btfsc apnoe_at_surface ; at the surface? | 676 btfsc apnoe_at_surface ; at the surface? |
| 591 bra divemode_apnoe_tasks_surf ; YES - at the surface | 677 bra divemode_apnoe_tasks_surf ; YES - at the surface |
| 592 ;bra divemode_apnoe_tasks_dive ; NO - in dive phase | 678 ;bra divemode_apnoe_tasks_dive ; NO - in dive phase |
| 604 bsf FLAG_TFT_depth_maximum_apnoe ; show max. depth of last dive | 690 bsf FLAG_TFT_depth_maximum_apnoe ; show max. depth of last dive |
| 605 bsf FLAG_TFT_depth_maximum ; show max. depth of all dives | 691 bsf FLAG_TFT_depth_maximum ; show max. depth of all dives |
| 606 ;bra apnoe_calc_maxdepth ; calculate overall max. depth and return | 692 ;bra apnoe_calc_maxdepth ; calculate overall max. depth and return |
| 607 | 693 |
| 608 | 694 |
| 695 ;----------------------------------------------------------------------------- | |
| 696 ; Helper Function - calculate Apnoe Mode overall maximum Depth | |
| 697 ; | |
| 609 global apnoe_calc_maxdepth | 698 global apnoe_calc_maxdepth |
| 610 apnoe_calc_maxdepth: | 699 apnoe_calc_maxdepth: |
| 611 MOVII apnoe_max_pressure, sub_a ; get max depth from all dives to far | 700 MOVII apnoe_max_pressure, sub_a ; get max depth from all dives to far |
| 612 MOVII pressure_rel_max_cached,sub_b ; get max depth of last dive | 701 MOVII pressure_rel_max_cached,sub_b ; get max depth of last dive |
| 613 call cmpU16 ; sub_a - sub_b = apnoe_max_pressure - pressure_rel_max_cached | 702 call cmpU16 ; sub_a - sub_b = apnoe_max_pressure - pressure_rel_max_cached |
| 614 btfss neg_flag ; last dive deeper than all the others before? | 703 btfss neg_flag ; last dive deeper than all the others before? |
| 615 return ; NO - done | 704 return ; NO - done |
| 616 MOVII pressure_rel_max_cached,apnoe_max_pressure ; YES - store new overall max depth | 705 MOVII pressure_rel_max_cached,apnoe_max_pressure ; YES - store new overall max depth |
| 617 return ; - done | 706 return ; - done |
| 618 | 707 |
| 619 ; -------------------------------------------------------------------------------------- | 708 |
| 620 | 709 ;----------------------------------------------------------------------------- |
| 621 ; Manage and invoke the Deco Calculation Engine | 710 ; Manage and invoke the Deco Calculation Engine |
| 622 ; ============================================= | 711 ; |
| 712 callup_deco_engine: | |
| 713 | |
| 623 ; Any reconfiguration done here only affects the deco calculation (prediction), not the | 714 ; Any reconfiguration done here only affects the deco calculation (prediction), not the |
| 624 ; settings for the calculations done on the real tissues. The later ones are only altered | 715 ; settings for the calculations done on the real tissues. The later ones are only altered |
| 625 ; in case of a gas change, in case of a real bailout, or in case a switchback to setpoint | 716 ; in case of a gas change, in case of a real bailout, or in case a switchback to setpoint |
| 626 ; or sensor is done. | 717 ; or sensor is done. |
| 627 ; On event of a gas change, a diluent change, a real bailout, or a switchback, the settings | 718 ; On event of a gas change, a diluent change, a real bailout, or a switchback, the settings |
| 629 ; real tissues. This is all done in the function 'gas_switch_common' which is triggered by | 720 ; real tissues. This is all done in the function 'gas_switch_common' which is triggered by |
| 630 ; the flag 'request_gas_change'. | 721 ; the flag 'request_gas_change'. |
| 631 | 722 |
| 632 ; Deco Engine Calculation Schedules: | 723 ; Deco Engine Calculation Schedules: |
| 633 ; | 724 ; |
| 634 ; Schedule Dive Mode Bailout fTTS Gas Needs Plan Deco Mode Planning Modes | 725 ; Schedule Dive Mode Bailout fTTS Gas Needs Plan Deco Mode calculated Functions |
| 635 ; --------------------------------------------------------------------------------------------- | 726 ; ----------------------------------------------------------------------------------------------------- |
| 636 ; | 727 ; |
| 637 ; 1a) OC no no (yes) norm OC (gas needs) | 728 ; 1a) OC no no (yes) norm OC TTS, CNS, deco plan, (gas needs) |
| 638 ; alt -- -- | 729 ; no alt plan |
| 639 ; | 730 ; |
| 640 ; 1b) OC no YES (yes) norm OC -- | 731 ; 1b) OC no YES (yes) norm OC TTS, CNS, deco plan |
| 641 ; alt OC fTTS, (gas needs) | 732 ; alt OC fTTS, fCNS, (gas needs) |
| 642 ; | 733 ; |
| 643 ; 2a) Loop no no no norm Loop -- | 734 ; 2a) Loop no no no norm Loop TTS, CNS, deco plan |
| 644 ; alt -- -- | 735 ; no alt plan |
| 645 ; | 736 ; |
| 646 ; 2b) Loop no yes no norm Loop -- | 737 ; 2b) Loop no yes no norm Loop TTS, CNS, deco plan |
| 647 ; alt Loop fTTS | 738 ; alt Loop fTTS, fCNS |
| 648 ; | 739 ; |
| 649 ; 2c) Loop no (yes) YES norm Loop -- | 740 ; 2c) Loop no (yes) YES norm Loop TTS, CNS, deco plan |
| 650 ; alt OC gas needs, (fTTS*) | 741 ; alt OC fTTS*, fCNS*, gas needs <- "what if" BAILOUT |
| 651 ; | 742 ; |
| 652 ; 3) Loop YES n/a (yes) norm OC bailout, (gas needs) | 743 ; 3) Loop YES n/a (yes) norm OC TTS, deco plan, (gas needs) <- real BAILOUT |
| 653 ; alt -- -- | 744 ; no alt plan |
| 654 ; _____________________________________________________________________________________________ | 745 ; _____________________________________________________________________________________________________ |
| 655 ; norm: normal plan, alt: alternative plan, -- none, (): optional, n/a: not applicable | 746 ; norm: normal plan, alt: alternative plan, (): optional, n/a: not applicable |
| 656 ; * suppressed when in cave mode and dive is turned | 747 ; * the fTTS time is set to zero when in cave mode and the dive is in turned state |
| 657 | 748 |
| 658 | |
| 659 callup_deco_engine: | |
| 660 | 749 |
| 661 ; get working copies of char_O_main_status and char_O_deco_status | 750 ; get working copies of char_O_main_status and char_O_deco_status |
| 662 movff char_O_main_status,hi ; get char_O_main_status into hi | 751 movff char_O_main_status,hi ; get char_O_main_status into hi |
| 663 movff char_O_deco_status,lo ; get char_O_deco_status into lo | 752 movff char_O_deco_status,lo ; get char_O_deco_status into lo |
| 664 | 753 |
| 674 calc_deco_engine_restart: | 763 calc_deco_engine_restart: |
| 675 bcf request_restart_engine ; clear request flag | 764 bcf request_restart_engine ; clear request flag |
| 676 bcf lo,DECO_COMPLETED_NORM ; clear completion flag from normal plan if applicable | 765 bcf lo,DECO_COMPLETED_NORM ; clear completion flag from normal plan if applicable |
| 677 ;bra calc_deco_engine_norm ; continue with calculating a normal plan | 766 ;bra calc_deco_engine_norm ; continue with calculating a normal plan |
| 678 | 767 |
| 768 | |
| 679 ; ---- normal plans ---- | 769 ; ---- normal plans ---- |
| 680 | 770 ; |
| 681 calc_deco_engine_norm: | 771 calc_deco_engine_norm: |
| 682 bcf lo,DECO_COMPLETED_ALT ; clear completion flag from alternative plan | 772 bcf lo,DECO_COMPLETED_ALT ; clear completion flag from alternative plan |
| 683 IFDEF _ccr_pscr | 773 IFDEF _ccr_pscr |
| 684 btfsc bailout_mode ; in real bailout? | 774 btfsc bailout_mode ; in real bailout? |
| 685 bra calc_deco_engine_norm_3 ; YES - configure real bailout schedule | 775 bra calc_deco_engine_norm_3 ; YES - configure real bailout schedule |
| 747 | 837 |
| 748 calc_deco_engine_norm_start: | 838 calc_deco_engine_norm_start: |
| 749 bsf lo,DECO_START_NORM ; calculate a normal plan | 839 bsf lo,DECO_START_NORM ; calculate a normal plan |
| 750 bra calc_deco_engine_start ; start deco engine | 840 bra calc_deco_engine_start ; start deco engine |
| 751 | 841 |
| 842 | |
| 752 ; ---- alternative plans ---- | 843 ; ---- alternative plans ---- |
| 753 | 844 ; |
| 754 calc_deco_engine_alt: | 845 calc_deco_engine_alt: |
| 755 bcf lo,DECO_COMPLETED_NORM ; clear completion flag from normal plan | 846 bcf lo,DECO_COMPLETED_NORM ; clear completion flag from normal plan |
| 756 IFDEF _ccr_pscr | 847 IFDEF _ccr_pscr |
| 757 btfsc bailout_mode ; in real bailout? | 848 btfsc bailout_mode ; in real bailout? |
| 758 bra calc_deco_engine_norm_3 ; YES - schedule 3 has no alternative plan | 849 bra calc_deco_engine_norm_3 ; YES - schedule 3 has no alternative plan |
| 820 | 911 |
| 821 calc_deco_engine_alt_start: | 912 calc_deco_engine_alt_start: |
| 822 bsf lo,DECO_START_ALT ; calculate an alternative plan | 913 bsf lo,DECO_START_ALT ; calculate an alternative plan |
| 823 ;bra calc_deco_engine_start ; start deco engine | 914 ;bra calc_deco_engine_start ; start deco engine |
| 824 | 915 |
| 916 | |
| 825 ; ---- start deco engine ---- | 917 ; ---- start deco engine ---- |
| 826 | 918 ; |
| 827 calc_deco_engine_start: | 919 calc_deco_engine_start: |
| 828 IFDEF _cave_mode | 920 IFDEF _cave_mode |
| 829 bcf hi,DECO_CAVE_MODE ; deactivate cave mode by default | 921 bcf hi,DECO_CAVE_MODE ; deactivate cave mode by default |
| 830 btfss cave_mode ; cave mode switched on? | 922 btfss cave_mode ; cave mode switched on? |
| 831 bra calc_deco_engine_start_1 ; NO - keep deactivated, no backtracking depth recording | 923 bra calc_deco_engine_start_1 ; NO - keep deactivated, no backtracking depth recording |
| 837 movff hi,char_O_main_status ; write-back char_O_main_status to deco engine interface | 929 movff hi,char_O_main_status ; write-back char_O_main_status to deco engine interface |
| 838 movff lo,char_O_deco_status ; write-back char_O_deco_status to deco engine interface | 930 movff lo,char_O_deco_status ; write-back char_O_deco_status to deco engine interface |
| 839 | 931 |
| 840 calc_deco_engine_exec: | 932 calc_deco_engine_exec: |
| 841 ; +++++++++++++++++++++++++++++++++++++ | 933 ; +++++++++++++++++++++++++++++++++++++ |
| 934 bsf tmr5_preemtion_allowed ; grant preemption allowance for timer 5 (deco engine) | |
| 842 call deco_calc_hauptroutine ; invoke the deco engine (C-code) | 935 call deco_calc_hauptroutine ; invoke the deco engine (C-code) |
| 843 banksel common ; back to bank common | 936 banksel common ; back to bank common |
| 937 bcf tmr5_preemtion_allowed ; revoke preemption allowance | |
| 844 ; +++++++++++++++++++++++++++++++++++++ | 938 ; +++++++++++++++++++++++++++++++++++++ |
| 845 | 939 |
| 846 ifdef _debug_output | 940 ifdef _debug_output |
| 847 call TFT_debug_output ; debug output of scheduling performance data | 941 call TFT_debug_output ; debug output of scheduling performance data |
| 848 endif | 942 endif |
| 850 ; check if new calculation results for normal plan mode are available | 944 ; check if new calculation results for normal plan mode are available |
| 851 movff char_O_deco_status,WREG ; get deco status of deco engine | 945 movff char_O_deco_status,WREG ; get deco status of deco engine |
| 852 btfsc WREG,DECO_COMPLETED_NORM ; new calculation results for normal plan available? | 946 btfsc WREG,DECO_COMPLETED_NORM ; new calculation results for normal plan available? |
| 853 bsf new_deco_data_avail ; YES - set flag for new NDL or deco data available | 947 bsf new_deco_data_avail ; YES - set flag for new NDL or deco data available |
| 854 | 948 |
| 855 ; done | 949 return ; done |
| 856 return | 950 |
| 857 | |
| 858 ; ------------------------------------------------------------------------------------------------- | |
| 859 | |
| 860 show_new_deco_data: | |
| 861 bcf new_deco_data_avail ; reset flag for new NDL or deco data available | |
| 862 movff char_O_deco_info,WREG ; get the deco info vector | |
| 863 btfsc WREG,deco_stops_norm ; deco stops found? | |
| 864 bra show_new_deco_data_deco ; YES - in deco | |
| 865 ;bra show_new_deco_data_ndl ; NO - within NDL | |
| 866 | |
| 867 show_new_deco_data_ndl: ; within NDL | |
| 868 btfsc decostop_active ; been in deco mode before? | |
| 869 bsf FLAG_TFT_clear_deco_data ; YES - clear old deco data | |
| 870 btfsc decostop_active ; been in deco mode before? | |
| 871 bsf FLAG_TFT_display_ndl_mask ; YES - display NDL data mask | |
| 872 bcf decostop_active ; clear flag for been in deco mode before | |
| 873 bsf FLAG_TFT_display_ndl ; display NDL time | |
| 874 return | |
| 875 | |
| 876 show_new_deco_data_deco: ; in deco | |
| 877 btfss decostop_active ; been in deco mode before? | |
| 878 bsf FLAG_TFT_clear_deco_data ; NO - clear old deco data | |
| 879 btfss decostop_active ; been in deco mode before? | |
| 880 bsf FLAG_TFT_display_deco_mask ; NO - display deco data mask | |
| 881 bsf decostop_active ; set flag for being in deco mode | |
| 882 bsf FLAG_TFT_display_tts ; display TTS time (display or stop data is managed somewhere else) | |
| 883 return | |
| 884 | |
| 885 ;============================================================================= | |
| 886 | 951 |
| 887 IFDEF _ccr_pscr | 952 IFDEF _ccr_pscr |
| 888 IFDEF _external_sensor | 953 IFDEF _external_sensor |
| 889 | 954 |
| 955 ;----------------------------------------------------------------------------- | |
| 956 ; Process Sensor Readings | |
| 957 ; | |
| 890 global calc_deko_divemode_sensor | 958 global calc_deko_divemode_sensor |
| 891 calc_deko_divemode_sensor: | 959 calc_deko_divemode_sensor: |
| 892 ; sensor acquisition code | 960 btfsc ext_input_optical ; do we have an optical interface? |
| 893 btfss s8_digital_avail ; do we have a digital S8 interface? | 961 bra calc_deko_divemode_sensor_opt ; YES - process received data |
| 894 bra calc_deko_divemode_sensor_analog ; NO - check if we have an analog interface | 962 btfss ext_input_s8_ana ; NO - do we have a S8/analog interface? |
| 895 btfss trigger_S8_data_update ; YES - check if a new data frame was received | 963 return ; NO - nothing to do, done |
| 896 bra calc_deko_divemode_sensor_common ; NO - use old values | 964 TSTOSS opt_s8_mode ; YES - shall use S8 interface? |
| 897 bcf trigger_S8_data_update ; YES - clear update flag | 965 bra calc_deko_divemode_sensor_ana ; - NO - use analog interface |
| 898 call compute_mvolts_for_all_sensors ; - compute mV values from digital data | 966 ;bra calc_deko_divemode_sensor_s8 ; YES - use S8 interface |
| 899 bra calc_deko_divemode_sensor_common | 967 |
| 900 calc_deko_divemode_sensor_analog: | 968 calc_deko_divemode_sensor_s8: |
| 901 btfss analog_o2_input ; do we have an analog input? | 969 btfss trigger_S8_data_update ; new data frame available? |
| 902 bra calc_deko_divemode_sensor_opt ; NO - check if we have an optical interface | 970 bra calc_deko_divemode_sensor_common; NO - use old values |
| 903 call get_analog_inputs ; YES - get the analog voltages and continue with the common part | 971 bcf trigger_S8_data_update ; YES - clear update flag |
| 904 bra calc_deko_divemode_sensor_common | 972 call compute_mvolts_from_rawdata ; - compute mV values from digital data |
| 973 bra calc_deko_divemode_sensor_common; - continue with common part | |
| 974 | |
| 905 calc_deko_divemode_sensor_opt: | 975 calc_deko_divemode_sensor_opt: |
| 906 btfss optical_input ; do we have an optical input? | 976 ; sensor1_ppO2, sensor2_ppO2 and sensor3_ppO2 are already filled in ISR |
| 907 return ; NO - return (we have no sensors at all: not analog, not S8 and not optical) | 977 btfss sensor1_active ; check HUD status data and eventually clear use_O2_sensorX |
| 908 btfss sensor1_active ; YES - sensor1_ppO2, sensor2_ppO2 and sensor3_ppO2 are already filled in ISR | 978 bcf use_O2_sensor1 ; ... |
| 909 bcf use_O2_sensor1 ; check HUD status data and eventually clear use_O2_sensorX | 979 btfss sensor2_active ; ... |
| 910 btfss sensor2_active | 980 bcf use_O2_sensor2 ; ... |
| 911 bcf use_O2_sensor2 | 981 btfss sensor3_active ; ... |
| 912 btfss sensor3_active | 982 bcf use_O2_sensor3 ; ... |
| 913 bcf use_O2_sensor3 | 983 bra check_sensor_avg ; continue with calculating sensor average |
| 914 bra calc_deko_divemode_sensor_A ; continue with calculating sensor average | 984 |
| 985 calc_deko_divemode_sensor_ana: | |
| 986 call get_analog_inputs ; get the analog voltages and continue with the common part | |
| 987 ;bra calc_deko_divemode_sensor_common; continue with common part | |
| 915 | 988 |
| 916 calc_deko_divemode_sensor_common: | 989 calc_deko_divemode_sensor_common: |
| 990 | |
| 917 ; Check each sensor if it is calibrated and if its mV value is within min_mv and max_mv limits. | 991 ; Check each sensor if it is calibrated and if its mV value is within min_mv and max_mv limits. |
| 918 ; If ok: compute o2_ppo2_sensorX = o2_mv_sensorX * opt_x_sX / 1000 | 992 ; If ok: compute o2_ppo2_sensorX = o2_mv_sensorX * opt_x_sX / 1000 |
| 919 ; If not ok: reset o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before | 993 ; If not ok: reset o2_ppo2_sensorX, reset use_O2_sensorX and show the customview 1 in case the sensor was ok before |
| 920 | 994 |
| 921 ; check sensor 1 | 995 ; check sensor 1 |
| 922 btfss sensor1_calibrated_ok ; check if sensor is usable at all | 996 btfss sensor1_calibrated_ok ; check if sensor is usable at all |
| 923 bra check_sensor_1_fail ; NO - handle it as failed | 997 bra check_sensor_1_fail ; NO - handle it as failed |
| 998 SMOVII sensor1_mv,sub_a ; YES - load sensor mV value | |
| 999 | |
| 924 ; check min threshold | 1000 ; check min threshold |
| 925 SMOVII sensor1_mv,sub_a ; load sensor mV value | 1001 rcall check_min_threshold ; check if sensor mV is outside minimum |
| 926 rcall check_min_threshold | |
| 927 btfsc neg_flag ; check if result is negative, i.e. sensor_mv < min_mv | 1002 btfsc neg_flag ; check if result is negative, i.e. sensor_mv < min_mv |
| 928 bra check_sensor_1_fail ; YES - declare sensor as failed | 1003 bra check_sensor_1_fail ; YES - declare sensor as failed |
| 1004 | |
| 929 ; check max_threshold | 1005 ; check max_threshold |
| 930 rcall check_max_threshold | 1006 rcall check_max_threshold ; check if sensor mV is outside maximum |
| 931 btfss neg_flag ; check if result is negative, i.e. sensor_mv < max_mv | 1007 btfss neg_flag ; check if result is negative, i.e. sensor_mv < max_mv |
| 932 bra check_sensor_1_fail ; NO - declare sensor as failed | 1008 bra check_sensor_1_fail ; NO - declare sensor as failed |
| 1009 | |
| 933 ; check HUD data, if available | 1010 ; check HUD data, if available |
| 934 btfss hud_connection_ok ; check if there is a HUD connected | 1011 btfss hud_connection_ok ; check if there is a HUD connected |
| 935 bra check_sensor_1_ok ; NO - all checks done then and positive | 1012 bra check_sensor_1_ok ; NO - all checks done then and positive |
| 936 btfss sensor1_active ; YES - HUD status ok? | 1013 btfss sensor1_active ; YES - HUD status ok? |
| 937 bra check_sensor_1_fail ; NO - HUD reports a fail | 1014 bra check_sensor_1_fail ; NO - HUD reports a fail |
| 1015 | |
| 938 check_sensor_1_ok: | 1016 check_sensor_1_ok: |
| 939 ; sensor1_ppO2 = sensor1_mv:2 * opt_x_s1:2 / 1000 | 1017 ; sensor1_ppO2 = sensor1_mv:2 * opt_x_s1:2 / 1000 |
| 940 SMOVII sensor1_mv,xA | 1018 SMOVII sensor1_mv,xA ; get sensor mV into xA |
| 941 MOVII opt_x_s1, xB | 1019 MOVII opt_x_s1, xB ; get calibration factor into xB |
| 942 rcall compute_ppo2_helper | 1020 rcall compute_ppo2_helper ; compute ppO2 |
| 943 movff xC+0,sensor1_ppO2 ; result in 0.01 bar | 1021 movff xC+0,sensor1_ppO2 ; result in 0.01 bar |
| 1022 bcf attn_det_sensor1_lost ; clear attention | |
| 1023 bcf shown_sensor1_fail ; re-arm custom-view show-up | |
| 944 bra check_sensor_2 ; continue with next sensor | 1024 bra check_sensor_2 ; continue with next sensor |
| 1025 | |
| 945 check_sensor_1_fail: | 1026 check_sensor_1_fail: |
| 946 clrf WREG | 1027 clrf WREG ; set ppO2 reading to zero |
| 947 movff WREG,sensor1_ppO2 ; set ppO2 reading to zero | 1028 movff WREG,sensor1_ppO2 ; ... |
| 948 btfss use_O2_sensor1 ; check if sensor was in use before | 1029 btfsc use_O2_sensor1 ; check if sensor is in use |
| 949 bra check_sensor_1_fail_1 ; NO - no new news then | 1030 bsf attn_det_sensor1_lost ; YES - set an attention |
| 950 call check_sensor_custview_helper; YES - show sensors custom view on further conditions met | |
| 951 check_sensor_1_fail_1: | |
| 952 bcf use_O2_sensor1 ; revoke sensor from usage | 1031 bcf use_O2_sensor1 ; revoke sensor from usage |
| 953 | 1032 |
| 954 check_sensor_2: ; check min_mv of sensor 2 | 1033 check_sensor_2: |
| 1034 ; check sensor 2 | |
| 955 btfss sensor2_calibrated_ok ; check if sensor is usable at all | 1035 btfss sensor2_calibrated_ok ; check if sensor is usable at all |
| 956 bra check_sensor_2_fail ; NO - handle it as failed | 1036 bra check_sensor_2_fail ; NO - handle it as failed |
| 1037 SMOVII sensor2_mv,sub_a ; YES - load sensor mV value | |
| 1038 | |
| 957 ; check min threshold | 1039 ; check min threshold |
| 958 SMOVII sensor2_mv,sub_a ; load sensor mV value | 1040 rcall check_min_threshold ; check if sensor mV is outside minimum |
| 959 rcall check_min_threshold | |
| 960 btfsc neg_flag ; check if result is negative, i.e. sensor_mv < min_mv | 1041 btfsc neg_flag ; check if result is negative, i.e. sensor_mv < min_mv |
| 961 bra check_sensor_2_fail ; YES - declare sensor as failed | 1042 bra check_sensor_2_fail ; YES - declare sensor as failed |
| 1043 | |
| 962 ; check max_threshold | 1044 ; check max_threshold |
| 963 rcall check_max_threshold | 1045 rcall check_max_threshold ; check if sensor mV is outside maximum |
| 964 btfss neg_flag ; check if result is nagative, i.e. sensor_mv < max_mv | 1046 btfss neg_flag ; check if result is nagative, i.e. sensor_mv < max_mv |
| 965 bra check_sensor_2_fail ; NO - declare sensor as failed | 1047 bra check_sensor_2_fail ; NO - declare sensor as failed |
| 1048 | |
| 966 ; check HUD data, if available | 1049 ; check HUD data, if available |
| 967 btfss hud_connection_ok ; check if there is a HUD connected | 1050 btfss hud_connection_ok ; check if there is a HUD connected |
| 968 bra check_sensor_2_ok ; NO - all checks done then and positive | 1051 bra check_sensor_2_ok ; NO - all checks done then and positive |
| 969 btfss sensor2_active ; YES - HUD status ok? | 1052 btfss sensor2_active ; YES - HUD status ok? |
| 970 bra check_sensor_2_fail ; NO - HUD reports a fail | 1053 bra check_sensor_2_fail ; NO - HUD reports a fail |
| 1054 | |
| 971 check_sensor_2_ok: | 1055 check_sensor_2_ok: |
| 972 ; sensor2_ppO2 = sensor2_mv:2 * opt_x_s2:2 / 1000 | 1056 ; sensor2_ppO2 = sensor2_mv:2 * opt_x_s2:2 / 1000 |
| 973 SMOVII sensor2_mv,xA | 1057 SMOVII sensor2_mv,xA ; get sensor mV into xA |
| 974 MOVII opt_x_s2, xB | 1058 MOVII opt_x_s2, xB ; get calibration factor into xB |
| 975 rcall compute_ppo2_helper | 1059 rcall compute_ppo2_helper ; compute ppO2 |
| 976 movff xC+0,sensor2_ppO2 ; result in 0.01 bar | 1060 movff xC+0,sensor2_ppO2 ; result in 0.01 bar |
| 1061 bcf attn_det_sensor2_lost ; clear attention | |
| 1062 bcf shown_sensor2_fail ; re-arm custom-view show-up | |
| 977 bra check_sensor_3 ; continue with next sensor | 1063 bra check_sensor_3 ; continue with next sensor |
| 1064 | |
| 978 check_sensor_2_fail: | 1065 check_sensor_2_fail: |
| 979 clrf WREG | 1066 clrf WREG ; set ppO2 reading to zero |
| 980 movff WREG,sensor2_ppO2 ; set ppO2 reading to zero | 1067 movff WREG,sensor2_ppO2 ; ... |
| 981 btfss use_O2_sensor2 ; check if sensor was in use before | 1068 btfsc use_O2_sensor2 ; check if sensor is in use |
| 982 bra check_sensor_2_fail_1 ; NO - no new news then | 1069 bsf attn_det_sensor2_lost ; YES - set an attention |
| 983 call check_sensor_custview_helper; YES - show sensors custom view on further conditions met | |
| 984 check_sensor_2_fail_1: | |
| 985 bcf use_O2_sensor2 ; revoke sensor from usage | 1070 bcf use_O2_sensor2 ; revoke sensor from usage |
| 986 | 1071 |
| 987 check_sensor_3: ; check min_mv of sensor 2 | 1072 check_sensor_3: |
| 1073 ; check sensor 3 | |
| 988 btfss sensor3_calibrated_ok ; check if sensor is usable at all | 1074 btfss sensor3_calibrated_ok ; check if sensor is usable at all |
| 989 bra check_sensor_3_fail ; NO - handle it as failed | 1075 bra check_sensor_3_fail ; NO - handle it as failed |
| 1076 SMOVII sensor3_mv,sub_a ; YES - load sensor mV value | |
| 1077 | |
| 990 ; check min threshold | 1078 ; check min threshold |
| 991 SMOVII sensor3_mv,sub_a ; load sensor mV value | 1079 rcall check_min_threshold ; check if sensor mV is outside minimum |
| 992 rcall check_min_threshold | |
| 993 btfsc neg_flag ; check if result is negative, i.e. sensor_mv < min_mv | 1080 btfsc neg_flag ; check if result is negative, i.e. sensor_mv < min_mv |
| 994 bra check_sensor_3_fail ; YES - declare sensor as failed | 1081 bra check_sensor_3_fail ; YES - declare sensor as failed |
| 1082 | |
| 995 ; check max threshold | 1083 ; check max threshold |
| 996 rcall check_max_threshold | 1084 rcall check_max_threshold ; check if sensor mV is outside maximum |
| 997 btfss neg_flag ; check if result is negative, i.e. sensor_mv < max_mv | 1085 btfss neg_flag ; check if result is negative, i.e. sensor_mv < max_mv |
| 998 bra check_sensor_3_fail ; NO - declare sensor as failed | 1086 bra check_sensor_3_fail ; NO - declare sensor as failed |
| 1087 | |
| 999 ; check HUD data, if available | 1088 ; check HUD data, if available |
| 1000 btfss hud_connection_ok ; check if there is a HUD connected | 1089 btfss hud_connection_ok ; check if there is a HUD connected |
| 1001 bra check_sensor_3_ok ; NO - all checks done then and positive | 1090 bra check_sensor_3_ok ; NO - all checks done then and positive |
| 1002 btfss sensor3_active ; YES - HUD status ok? | 1091 btfss sensor3_active ; YES - HUD status ok? |
| 1003 bra check_sensor_3_fail ; NO - HUD reports a fail | 1092 bra check_sensor_3_fail ; NO - HUD reports a fail |
| 1093 | |
| 1004 check_sensor_3_ok: | 1094 check_sensor_3_ok: |
| 1005 ; sensor3_ppO2 = sensor3_mv:2 * opt_x_s1:2 / 1000 | 1095 ; sensor3_ppO2 = sensor3_mv:2 * opt_x_s1:2 / 1000 |
| 1006 SMOVII sensor3_mv,xA | 1096 SMOVII sensor3_mv,xA ; get sensor mV into xA |
| 1007 MOVII opt_x_s3, xB | 1097 MOVII opt_x_s3, xB ; get calibration factor into xB |
| 1008 rcall compute_ppo2_helper | 1098 rcall compute_ppo2_helper ; compute ppO2 |
| 1009 movff xC+0,sensor3_ppO2 ; result in 0.01 bar | 1099 movff xC+0,sensor3_ppO2 ; result in 0.01 bar |
| 1010 bra calc_deko_divemode_sensor_A ; continue with calculating sensor average | 1100 bcf attn_det_sensor3_lost ; clear attention |
| 1101 bcf shown_sensor3_fail ; re-arm custom-view show-up | |
| 1102 bra check_sensor_avg ; continue with calculating sensor average | |
| 1103 | |
| 1011 check_sensor_3_fail: | 1104 check_sensor_3_fail: |
| 1012 clrf WREG | 1105 clrf WREG ; set ppO2 reading to zero |
| 1013 movff WREG,sensor3_ppO2 ; set ppO2 reading to zero | 1106 movff WREG,sensor3_ppO2 ; ... |
| 1014 btfss use_O2_sensor3 ; check if sensor was in use before | 1107 btfsc use_O2_sensor3 ; check if sensor is in use |
| 1015 bra check_sensor_3_fail_1 ; NO - no new news then | 1108 bsf attn_det_sensor3_lost ; YES - set an attention |
| 1016 call check_sensor_custview_helper; YES - show sensors custom view on further conditions met | |
| 1017 check_sensor_3_fail_1: | |
| 1018 bcf use_O2_sensor3 ; revoke sensor from usage | 1109 bcf use_O2_sensor3 ; revoke sensor from usage |
| 1019 | 1110 |
| 1020 calc_deko_divemode_sensor_A: ; calculate sensor average | 1111 check_sensor_avg: |
| 1112 ; calculate sensor average | |
| 1021 btfss divemode ; in dive mode? | 1113 btfss divemode ; in dive mode? |
| 1022 return ; NO - done here if not in dive mode | 1114 return ; NO - done here if not in dive mode |
| 1023 | 1115 |
| 1024 ; compute sensor_setpoint = average of all o2_ppo2_sensorX of those sensors that have use_O2_sensorX == true | 1116 ; compute sensor_setpoint = average of all o2_ppo2_sensorX of |
| 1025 ; sum up sensor values (in xA:2) and active sensors in (xB:2) | 1117 ; those sensors that have use_O2_sensorX == true |
| 1026 CLRI xA | 1118 |
| 1027 CLRI xB | 1119 CLRI xA ; clear sum of sensor values |
| 1028 divemode_setup_sensor_1_value: | 1120 CLRI xB ; clear number of active sensors found |
| 1029 btfss use_O2_sensor1 ; sensor 1 active? | 1121 |
| 1030 bra divemode_setup_sensor_2_value ; NO | 1122 check_sensor_avg_1: |
| 1031 movff sensor1_ppO2,WREG | 1123 btfss use_O2_sensor1 ; sensor 1 active? |
| 1032 addwf xA+0,F | 1124 bra check_sensor_avg_2 ; NO |
| 1033 movlw .0 | 1125 movff sensor1_ppO2,WREG ; YES - get ppO2 |
| 1034 addwfc xA+1,F ; add into xA:2 | 1126 addwf xA+0,F ; - add into xA:2 |
| 1035 incf xB+0,F ; add a sensor | 1127 movlw .0 ; - ... |
| 1036 divemode_setup_sensor_2_value: | 1128 addwfc xA+1,F ; - ... |
| 1037 btfss use_O2_sensor2 ; sensor 2 active? | 1129 incf xB+0,F ; - add a sensor |
| 1038 bra divemode_setup_sensor_3_value ; NO | 1130 |
| 1039 movff sensor2_ppO2,WREG | 1131 check_sensor_avg_2: |
| 1040 addwf xA+0,F | 1132 btfss use_O2_sensor2 ; sensor 2 active? |
| 1041 movlw .0 | 1133 bra check_sensor_avg_3 ; NO |
| 1042 addwfc xA+1,F ; add into xA:2 | 1134 movff sensor2_ppO2,WREG ; YES - get ppO2 |
| 1043 incf xB+0,F ; add a sensor | 1135 addwf xA+0,F ; - add into xA:2 |
| 1044 divemode_setup_sensor_3_value: | 1136 movlw .0 ; - ... |
| 1045 btfss use_O2_sensor3 ; sensor 3 active? | 1137 addwfc xA+1,F ; - ... |
| 1046 bra divemode_setup_sensor_mean ; NO | 1138 incf xB+0,F ; - add a sensor |
| 1047 movff sensor3_ppO2,WREG | 1139 |
| 1048 addwf xA+0,F | 1140 check_sensor_avg_3: |
| 1049 movlw .0 | 1141 btfss use_O2_sensor3 ; sensor 3 active? |
| 1050 addwfc xA+1,F ; add into xA:2 | 1142 bra check_sensor_avg_compute ; NO |
| 1051 incf xB+0,F ; add a sensor | 1143 movff sensor3_ppO2,WREG ; YES - get ppO2 |
| 1052 | 1144 addwf xA+0,F ; - add into xA:2 |
| 1145 movlw .0 ; - ... | |
| 1146 addwfc xA+1,F ; - ... | |
| 1147 incf xB+0,F ; add a sensor | |
| 1148 | |
| 1149 check_sensor_avg_compute: | |
| 1053 ; divide sum of sensor values by number of active sensors found | 1150 ; divide sum of sensor values by number of active sensors found |
| 1054 divemode_setup_sensor_mean: | 1151 clrf xC+0 ; set zero as default result |
| 1055 clrf xC+0 ; set zero as default result | 1152 tstfsz xB+0 ; pending div/0 ? |
| 1056 tstfsz xB+0 ; pending div/0 ? | 1153 call div16x16 ; NO - execute xC = xA / xB = summed ppO2 / number of sensors |
| 1057 call div16x16 ; NO - execute xC = xA / xB = summed ppO2 / number of sensors | 1154 movff xC+0,sensor_setpoint ; copy result (or its default) |
| 1058 movff xC+0,sensor_setpoint ; copy result (or its default) | |
| 1059 | 1155 |
| 1060 ; set default value for pSCR mode: 0 => let p2_deco.c compute the ppO2 based on current dil gas and depth | 1156 ; set default value for pSCR mode: 0 => let p2_deco.c compute the ppO2 based on current dil gas and depth |
| 1061 ; will be overwritten later in case we are in sensor mode and have at least one usable sensor | 1157 ; will be overwritten later in case we are in sensor mode and have at least one usable sensor |
| 1062 clrf WREG ; pre-load a zero | 1158 clrf WREG ; pre-load a zero |
| 1063 btfsc FLAG_pscr_mode ; check if we are in pSCR mode | 1159 btfsc FLAG_pscr_mode ; check if we are in pSCR mode |
| 1064 movff WREG,char_I_const_ppO2 ; YES - write 0 to char_I_const_ppo2, | 1160 movff WREG,char_I_const_ppO2 ; YES - write 0 to char_I_const_ppo2, |
| 1065 ; it will be overwritten if we have a usable sensor reading | 1161 ; it will be overwritten if we have a usable sensor reading |
| 1066 btfsc bailout_mode ; check if we are in bailout | 1162 btfsc bailout_mode ; check if we are in bailout |
| 1067 bra calc_deko_divemode_sensor_V ; YES - no sensor data transfer to char_I_const_ppO2 in this case | 1163 bra check_sensor_vote ; YES - no sensor data transfer to char_I_const_ppO2 in this case |
| 1068 movff opt_ccr_mode,WREG ; NO - get mode (0: Fixed SP, 1: Sensor, 2: Auto SP) | 1164 movff opt_ccr_mode,WREG ; NO - get mode (0: Fixed SP, 1: Sensor, 2: Auto SP) |
| 1069 sublw .1 ; - in sensor mode? | 1165 sublw .1 ; - in sensor mode? |
| 1070 bnz calc_deko_divemode_sensor_V ; NO - not in sensor mode - no transfer of sensor data to char_I_const_ppO2 | 1166 bnz check_sensor_vote ; NO - not in sensor mode - no transfer of sensor data to char_I_const_ppO2 |
| 1071 tstfsz xB+0 ; YES - check if we have found at least one usable sensor | 1167 tstfsz xB+0 ; YES - check if we have found at least one usable sensor |
| 1072 bra divemode_setup_sensor_mean1 ; YES - we have at least one usable sensor | 1168 bra check_sensor_avg_use ; YES - we have at least one usable sensor |
| 1073 bsf sp_fallback ; NO - we have NO usable sensors -> initiate fallback | 1169 bsf warn_det_sensors_lost ; NO - we have NO usable sensors |
| 1074 btfss FLAG_ccr_mode ; - check if we are in CCR mode | 1170 btfsc FLAG_ccr_mode ; - check if we are in CCR mode |
| 1075 bra calc_deko_divemode_sensor_V ; NO - continue with voting logic flags | 1171 movff opt_setpoint_cbar+0,char_I_const_ppO2 ; YES - select fixed setpoint no. 1 for fallback |
| 1076 movff opt_setpoint_cbar+0,char_I_const_ppO2 ; YES - select fixed setpoint no. 1 for fallback | 1172 bra check_sensor_vote ; - continue with voting logic flags |
| 1077 bra calc_deko_divemode_sensor_V ; - continue with voting logic flags | 1173 |
| 1174 check_sensor_avg_use: | |
| 1078 ; we have at least one usable sensor with a ppO2 value > 0 | 1175 ; we have at least one usable sensor with a ppO2 value > 0 |
| 1079 divemode_setup_sensor_mean1: | 1176 bcf warn_det_sensors_lost ; clear warning |
| 1080 bcf sp_fallback ; clear fallback condition | 1177 bcf shown_sensors_lost ; re-arm custom view show-up |
| 1081 movff sensor_setpoint,char_I_const_ppO2 ; transfer average sensor value to p2_deco.c code | 1178 movff sensor_setpoint,char_I_const_ppO2 ; transfer average sensor value to p2_deco.c code |
| 1082 ; vote sensors | 1179 |
| 1083 calc_deko_divemode_sensor_V: | 1180 check_sensor_vote: |
| 1084 bsf voting_logic_sensor1 | 1181 ; check if individual sensors agree with their average |
| 1085 movff sensor1_ppO2,lo | 1182 bsf voting_logic_sensor1 ; default sensor to be within voting |
| 1086 rcall check_sensor_voting_helper | 1183 movff sensor1_ppO2,WREG ; get sensor's ppO2 |
| 1184 rcall check_sensor_voting_helper ; check if sensor is within +/- range around setpoint | |
| 1087 tstfsz WREG ; sensor within range (WREG = 0)? | 1185 tstfsz WREG ; sensor within range (WREG = 0)? |
| 1088 bcf voting_logic_sensor1 ; NO - vote out this sensor | 1186 bcf voting_logic_sensor1 ; NO - vote out this sensor |
| 1089 | 1187 |
| 1090 bsf voting_logic_sensor2 | 1188 bsf voting_logic_sensor2 ; default sensor to be within voting |
| 1091 movff sensor2_ppO2,lo | 1189 movff sensor2_ppO2,WREG ; get sensor's ppO2 |
| 1092 rcall check_sensor_voting_helper | 1190 rcall check_sensor_voting_helper ; check if sensor is within +/- range around setpoint |
| 1093 tstfsz WREG ; sensor within range (WREG = 0)? | 1191 tstfsz WREG ; sensor within range (WREG = 0)? |
| 1094 bcf voting_logic_sensor2 ; NO - vote out this sensor | 1192 bcf voting_logic_sensor2 ; NO - vote out this sensor |
| 1095 | 1193 |
| 1096 bsf voting_logic_sensor3 | 1194 bsf voting_logic_sensor3 ; default sensor to be within voting |
| 1097 movff sensor3_ppO2,lo | 1195 movff sensor3_ppO2,WREG ; get sensor's ppO2 |
| 1098 rcall check_sensor_voting_helper | 1196 rcall check_sensor_voting_helper ; check if sensor is within +/- range around setpoint |
| 1099 tstfsz WREG ; sensor within range (WREG = 0)? | 1197 tstfsz WREG ; sensor within range (WREG = 0)? |
| 1100 bcf voting_logic_sensor3 ; NO - vote out this sensor | 1198 bcf voting_logic_sensor3 ; NO - vote out this sensor |
| 1101 | 1199 |
| 1102 ; check if a warning shall be issued on sensor disagreement | 1200 ; check if a warning shall be issued on sensor disagreement |
| 1103 btfsc FLAG_ccr_mode ; check if we are in CCR mode | 1201 btfsc FLAG_ccr_mode ; check if we are in CCR mode |
| 1104 bra check_warn_sensor_0 ; YES - continue with further checks | 1202 bra check_warn_sensor_0 ; YES - continue with further checks |
| 1105 btfsc FLAG_pscr_mode ; check if we are in pSCR mode | 1203 btfsc FLAG_pscr_mode ; check if we are in pSCR mode |
| 1106 bra check_warn_sensor_0 ; YES - continue with further checks | 1204 bra check_warn_sensor_0 ; YES - continue with further checks |
| 1107 bra check_warn_sensor_done ; not in CCR and not in pSCR, so no warning | 1205 bra check_warn_sensor_done ; not in CCR and not in pSCR, so no warning |
| 1206 | |
| 1108 check_warn_sensor_0: ; we are in CCR or pSCR mode | 1207 check_warn_sensor_0: ; we are in CCR or pSCR mode |
| 1109 btfsc bailout_mode ; check if we are in bailout | 1208 btfsc bailout_mode ; check if we are in bailout |
| 1110 bra check_warn_sensor_done ; YES - no warning in this case | 1209 bra check_warn_sensor_done ; YES - no warning in this case |
| 1111 movff opt_ccr_mode,WREG ; get mode (0: Fixed SP, 1: Sensor, 2: Auto SP) | 1210 movff opt_ccr_mode,WREG ; get mode (0: Fixed SP, 1: Sensor, 2: Auto SP) |
| 1112 sublw .1 ; in sensor mode? | 1211 sublw .1 ; in sensor mode? |
| 1113 bnz check_warn_sensor_done ; NO - not in sensor mode - no warning in this case | 1212 bnz check_warn_sensor_done ; NO - not in sensor mode - no warning in this case |
| 1114 ; check sensor 1 | 1213 |
| 1115 check_warn_sensor_1: | 1214 check_warn_sensor_1: |
| 1116 btfss sensor1_calibrated_ok ; check if sensor has a valid calibration | 1215 btfss sensor1_calibrated_ok ; check if sensor has a valid calibration |
| 1117 bra check_warn_sensor_2 ; NO - sensor can not cause a warning then | 1216 bra check_warn_sensor_2 ; NO - sensor can not cause a warning then |
| 1118 btfss use_O2_sensor1 ; YES - check if sensor is in use | 1217 btfss use_O2_sensor1 ; YES - check if sensor is in use |
| 1119 bra check_warn_sensor_2 ; NO - sensor can not cause a warning then | 1218 bra check_warn_sensor_2 ; NO - sensor can not cause a warning then |
| 1120 btfsc voting_logic_sensor1 ; YES - check if sensor value is within agreement range | 1219 btfsc voting_logic_sensor1 ; YES - check if sensor value is within agreement range |
| 1121 bra check_warn_sensor_2 ; YES - continue with next sensor | 1220 bra check_warn_sensor_2 ; YES - continue with next sensor |
| 1122 bcf o2_sensors_agree ; NO - issue a warning | 1221 bsf warn_det_sensors_div ; NO - sensors divergence |
| 1123 return | 1222 return ; - done |
| 1124 ; check sensor 2 | 1223 |
| 1125 check_warn_sensor_2: | 1224 check_warn_sensor_2: |
| 1126 btfss sensor2_calibrated_ok ; check if sensor has a valid calibration | 1225 btfss sensor2_calibrated_ok ; check if sensor has a valid calibration |
| 1127 bra check_warn_sensor_3 ; NO - sensor can not cause a warning then | 1226 bra check_warn_sensor_3 ; NO - sensor can not cause a warning then |
| 1128 btfss use_O2_sensor2 ; YES - check if sensor is in use | 1227 btfss use_O2_sensor2 ; YES - check if sensor is in use |
| 1129 bra check_warn_sensor_3 ; NO - sensor can not cause a warning then | 1228 bra check_warn_sensor_3 ; NO - sensor can not cause a warning then |
| 1130 btfsc voting_logic_sensor2 ; YES - check if sensor value is within agreement range | 1229 btfsc voting_logic_sensor2 ; YES - check if sensor value is within agreement range |
| 1131 bra check_warn_sensor_3 ; YES - continue with next sensor | 1230 bra check_warn_sensor_3 ; YES - continue with next sensor |
| 1132 bcf o2_sensors_agree ; NO - issue a warning | 1231 bsf warn_det_sensors_div ; NO - sensors divergence |
| 1133 return | 1232 return ; - done |
| 1134 ; check sensor 3 | 1233 |
| 1135 check_warn_sensor_3: | 1234 check_warn_sensor_3: |
| 1136 btfss sensor3_calibrated_ok ; check if sensor has a valid calibration | 1235 btfss sensor3_calibrated_ok ; check if sensor has a valid calibration |
| 1137 bra check_warn_sensor_agree ; NO - sensor can not cause a warning then | 1236 bra check_warn_sensor_agree ; NO - sensor can not cause a warning then |
| 1138 btfss use_O2_sensor3 ; YES - check if sensor is in use | 1237 btfss use_O2_sensor3 ; YES - check if sensor is in use |
| 1139 bra check_warn_sensor_agree ; NO - sensor can not cause a warning then | 1238 bra check_warn_sensor_agree ; NO - sensor can not cause a warning then |
| 1140 btfsc voting_logic_sensor3 ; YES - check if sensor value is within agreement range | 1239 btfsc voting_logic_sensor3 ; YES - check if sensor value is within agreement range |
| 1141 bra check_warn_sensor_agree ; YES - continue with next sensor | 1240 bra check_warn_sensor_agree ; YES - continue with next sensor |
| 1142 bcf o2_sensors_agree ; NO - issue a warning | 1241 bsf warn_det_sensors_div ; NO - set warning |
| 1143 return | 1242 return ; - done |
| 1144 ; no need for a warning | 1243 |
| 1145 check_warn_sensor_done: | 1244 check_warn_sensor_done: |
| 1146 check_warn_sensor_agree: | 1245 check_warn_sensor_agree: |
| 1147 bsf o2_sensors_agree | 1246 bcf warn_det_sensors_div ; clear warning |
| 1148 return | 1247 bcf shown_sensors_diverg ; re-arm custom view show-up |
| 1149 | 1248 return ; done |
| 1249 | |
| 1250 | |
| 1251 ;----------------------------------------------------------------------------- | |
| 1252 ; Helper Function - check if sensor mV is outside minimum | |
| 1253 ; | |
| 1150 check_min_threshold: | 1254 check_min_threshold: |
| 1151 MOVLI min_mv,sub_b ; load minimum mV value | 1255 MOVLI min_mv,sub_b ; load minimum mV value |
| 1152 goto sub16 ; sub_c = sensor_mv - min_mv (and return) | 1256 goto sub16 ; sub_c = sensor_mv - min_mv (and return) |
| 1153 | 1257 |
| 1258 | |
| 1259 ;----------------------------------------------------------------------------- | |
| 1260 ; Helper Function - check if sensor mV is outside maximum | |
| 1261 ; | |
| 1154 check_max_threshold: | 1262 check_max_threshold: |
| 1155 MOVLI max_mv,sub_b ; load maximum mV value | 1263 MOVLI max_mv,sub_b ; load maximum mV value |
| 1156 goto sub16 ; sub_c = sensor_mv - max_mv (and return) | 1264 goto sub16 ; sub_c = sensor_mv - max_mv (and return) |
| 1157 | 1265 |
| 1266 | |
| 1267 ;----------------------------------------------------------------------------- | |
| 1268 ; Helper Function - compute ppO2 from sensor mV and calibration factor | |
| 1269 ; | |
| 1158 compute_ppo2_helper: | 1270 compute_ppo2_helper: |
| 1159 call mult16x16 ; xC:4 = xA:2 * xB:2 | 1271 call mult16x16 ; xC:4 = xA:2 * xB:2 |
| 1160 MOVLI .1000,xB | 1272 MOVLI .1000,xB ; load scaling factor |
| 1161 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder | 1273 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder |
| 1162 tstfsz xC+1 ; is the ppO2 higher than 2.55 bar? | 1274 tstfsz xC+1 ; is the ppO2 higher than 2.55 bar? |
| 1163 setf xC+0 ; YES - set result to 255 aka 2.55 bar | 1275 setf xC+0 ; YES - set result to 255 aka 2.55 bar |
| 1164 return | 1276 return ; done |
| 1165 | 1277 |
| 1166 check_sensor_custview_helper: | 1278 |
| 1167 btfss divemode ; check if we are in dive mode | 1279 ;----------------------------------------------------------------------------- |
| 1168 return ; NO - not in dive mode, return | 1280 ; Helper Function - check if sensor is within +/- range around setpoint |
| 1169 movff opt_ccr_mode,WREG ; YES - =0: Fixed SP, =1: Sensor, =2: Auto SP | 1281 ; |
| 1170 decfsz WREG,W ; - opt_ccr_mode = 1 (sensors)? | |
| 1171 return ; NO - not using the sensors in the moment | |
| 1172 show_sensors_custview: | |
| 1173 btfsc custom_view_locked ; YES - custom view locked? | |
| 1174 return ; YES - done | |
| 1175 movlw index_ppo2_sensors ; NO - get custom view number of ppO2 sensors | |
| 1176 goto dive_customview_show ; - draw custom view and return | |
| 1177 | |
| 1178 check_sensor_voting_helper: | 1282 check_sensor_voting_helper: |
| 1179 movf lo,W | 1283 subwf sensor_setpoint,W ; deviation = setpoint - sensor ppO2 |
| 1180 cpfsgt sensor_setpoint | 1284 btfsc STATUS,N ; result negative? |
| 1181 bra check_sensor_voting_helper2 ; lo < sensor_setpoint | 1285 negf WREG,W ; YES - negate deviation |
| 1182 ; lo > sensor_setpoint | 1286 sublw sensor_voting_logic_threshold ; WREG = threshold - deviation |
| 1183 movf lo,W | 1287 btfss STATUS,N ; result negative? |
| 1184 subwf sensor_setpoint,W | 1288 retlw .0 ; NO - within range |
| 1185 movwf lo | 1289 retlw .1 ; YES - out of range |
| 1186 check_sensor_voting_helper1: | 1290 |
| 1187 movlw sensor_voting_logic_threshold ; threshold in 0.01 bar | 1291 ; cpfsgt sensor_setpoint ; sensor ppO2 > setpoint? |
| 1188 cpfsgt lo | 1292 ; bra check_sensor_voting_helper_2 ; NO |
| 1189 retlw .0 ; within range | 1293 ; ;bra check_sensor_voting_helper_1 ; YES |
| 1190 retlw .1 ; out of range | 1294 ; |
| 1191 check_sensor_voting_helper2: | 1295 ;check_sensor_voting_helper_1: |
| 1192 ; lo < sensor_setpoint | 1296 ; subwf sensor_setpoint,W ; WREG = setpoint - sensor ppO2 |
| 1193 movf sensor_setpoint,W | 1297 ; bra check_sensor_voting_helper_com ; continue with common part |
| 1194 subwf lo,F | 1298 ; |
| 1195 bra check_sensor_voting_helper1 | 1299 ;check_sensor_voting_helper_2: |
| 1300 ; movwf lo ; copy sensor ppO2 to lo | |
| 1301 ; movf sensor_setpoint,W ; copy setpoint to WREG | |
| 1302 ; subwf lo,W ; WREG = sensor ppO2 - setpoint | |
| 1303 ; ;bra check_sensor_voting_helper_com ; continue with common part | |
| 1304 ; | |
| 1305 ;check_sensor_voting_helper_com: | |
| 1306 ; movwf lo ; copy deviation to lo | |
| 1307 ; movlw sensor_voting_logic_threshold ; load threshold in 0.01 bar | |
| 1308 ; cpfsgt lo ; deviation > threshold ? | |
| 1309 ; retlw .0 ; NO - within range | |
| 1310 ; retlw .1 ; YES - out of range | |
| 1196 | 1311 |
| 1197 ENDIF ; _external_sensor | 1312 ENDIF ; _external_sensor |
| 1198 ENDIF ; _ccr_pscr | 1313 ENDIF ; _ccr_pscr |
| 1199 | 1314 |
| 1200 ;============================================================================= | |
| 1201 | |
| 1202 divemodemode_togglegf: | |
| 1203 bcf request_toggle_GF ; clear request flag | |
| 1204 goto restart_deco_engine ; restart the deco engine and return | |
| 1205 | |
| 1206 ;============================================================================= | |
| 1207 | 1315 |
| 1208 IFDEF _cave_mode | 1316 IFDEF _cave_mode |
| 1209 | 1317 |
| 1318 ;----------------------------------------------------------------------------- | |
| 1319 ; Cave Mode - on/off Switching | |
| 1320 ; | |
| 1210 cavemode_toggle_onoff: | 1321 cavemode_toggle_onoff: |
| 1211 bcf request_cave_toggle ; clear request flag | 1322 bcf request_cave_toggle ; clear request flag |
| 1212 btg cave_mode ; toggle the on/off state | 1323 btg cave_mode ; toggle the on/off state |
| 1213 return ; done | 1324 return ; done |
| 1214 | 1325 |
| 1326 | |
| 1327 ;----------------------------------------------------------------------------- | |
| 1328 ; Cave Mode - switch off and set Dive as turned | |
| 1329 ; | |
| 1215 cavemode_switch_off_turned: | 1330 cavemode_switch_off_turned: |
| 1216 bcf request_cave_off_turned ; clear request flag | 1331 bcf request_cave_off_turned ; clear request flag |
| 1217 bcf cave_mode ; switch cave mode off | 1332 bcf cave_mode ; switch cave mode off |
| 1218 bra cavemode_turndive_turn_exec ; set dive as turned (and return) | 1333 bra cavemode_turndive_turn_exec ; set dive as turned (and return) |
| 1219 | 1334 |
| 1220 | 1335 |
| 1336 ;----------------------------------------------------------------------------- | |
| 1337 ; Cave Mode - check if 'turn dive' is allowed | |
| 1338 ; | |
| 1221 global cavemode_turndive_check | 1339 global cavemode_turndive_check |
| 1222 cavemode_turndive_check: | 1340 cavemode_turndive_check: |
| 1223 btfss cave_mode ; cave mode switched on? | 1341 btfss cave_mode ; cave mode switched on? |
| 1224 retlw 1 ; NO - signal not allowed | 1342 retlw 1 ; NO - signal not allowed |
| 1225 btfss dive_turned ; YES - is the dive currently turned? | 1343 btfss dive_turned ; YES - is the dive currently turned? |
| 1227 movf backtrack_waypoint_turn,W ; YES - copy turn point number to WREG | 1345 movf backtrack_waypoint_turn,W ; YES - copy turn point number to WREG |
| 1228 cpfslt backtrack_waypoint_num ; - current waypoint number < turn point number ? | 1346 cpfslt backtrack_waypoint_num ; - current waypoint number < turn point number ? |
| 1229 retlw 1 ; NO - signal not allowed | 1347 retlw 1 ; NO - signal not allowed |
| 1230 retlw 0 ; YES - command is allowed | 1348 retlw 0 ; YES - command is allowed |
| 1231 | 1349 |
| 1350 | |
| 1351 ;----------------------------------------------------------------------------- | |
| 1352 ; Cave Mode - execute 'turn dive' toggle | |
| 1353 ; | |
| 1232 cavemode_turndive_toggle: | 1354 cavemode_turndive_toggle: |
| 1233 bcf request_turn_toggle ; clear request flag | 1355 bcf request_turn_toggle ; clear request flag |
| 1234 rcall cavemode_turndive_check ; check if command is allowed | 1356 rcall cavemode_turndive_check ; check if command is allowed |
| 1235 tstfsz WREG ; command allowed? | 1357 tstfsz WREG ; command allowed? |
| 1236 return ; NO - abort | 1358 return ; NO - abort |
| 1237 btfss dive_turned ; YES - is the dive currently turned? | 1359 btfss dive_turned ; YES - is the dive currently turned? |
| 1238 bra cavemode_turndive_turn_exec ; NO - turn the dive | 1360 bra cavemode_turndive_turn_exec ; NO - turn the dive |
| 1239 bra request_turndive_cont_exec ; YES - continue the dive | 1361 bcf dive_turned ; YES - set dive as not turned any more |
| 1240 | 1362 bcf backtrack_shutdown ; - set backtracking as not shut down any more |
| 1363 call set_logbook_marker ; - set a logbook marker | |
| 1364 goto resume_backtrack_recording ; - append further logging after current waypoint and return | |
| 1365 | |
| 1366 | |
| 1367 ;----------------------------------------------------------------------------- | |
| 1368 ; Cave Mode - set the dive as turned | |
| 1369 ; | |
| 1241 cavemode_turndive_turn: | 1370 cavemode_turndive_turn: |
| 1242 bcf request_turn_turn ; clear request flag | 1371 bcf request_turn_turn ; clear request flag |
| 1243 btfss cave_mode ; cave mode switched on? | 1372 btfss cave_mode ; cave mode switched on? |
| 1244 return ; NO - abort | 1373 return ; NO - abort |
| 1245 btfsc dive_turned ; YES - is the dive already turned? | 1374 btfsc dive_turned ; YES - is the dive already turned? |
| 1246 return ; YES - nothing to do any more | 1375 return ; YES - nothing to do any more |
| 1247 ;bra cavemode_turndive_turn_exec ; NO - turn the dive | |
| 1248 | |
| 1249 cavemode_turndive_turn_exec: | 1376 cavemode_turndive_turn_exec: |
| 1250 bsf dive_turned ; set dive as turned | 1377 bsf dive_turned ; NO - set dive as turned |
| 1251 call set_logbook_marker ; set a logbook marker | 1378 call set_logbook_marker ; - set a logbook marker |
| 1252 goto write_backtrack_turnpoint ; write a turn-point waypoint (and return) | 1379 goto write_backtrack_turnpoint ; - write a turn-point waypoint and return |
| 1253 | 1380 |
| 1254 request_turndive_cont_exec: | 1381 |
| 1255 bcf dive_turned ; set dive as not turned any more | 1382 ;----------------------------------------------------------------------------- |
| 1256 bcf backtrack_shutdown ; set backtracking as not shut down any more | 1383 ; Cave Mode - check if setting a Waypoint is allowed |
| 1257 call set_logbook_marker ; set a logbook marker | 1384 ; |
| 1258 goto resume_backtrack_recording ; append further logging after current waypoint (and return) | |
| 1259 | |
| 1260 | |
| 1261 global cavemode_waypoint_set_check | 1385 global cavemode_waypoint_set_check |
| 1262 cavemode_waypoint_set_check: | 1386 cavemode_waypoint_set_check: |
| 1263 btfss cave_mode ; cave mode switched on? | 1387 btfss cave_mode ; cave mode switched on? |
| 1264 retlw 1 ; NO - command not allowed | 1388 retlw 1 ; NO - command not allowed |
| 1265 btfsc dive_turned ; YES - is the dive turned? | 1389 btfsc dive_turned ; YES - is the dive turned? |
| 1269 movlw backtrack_waypoint_max ; NO - get highest allowed waypoint number | 1393 movlw backtrack_waypoint_max ; NO - get highest allowed waypoint number |
| 1270 cpfslt backtrack_waypoint_num ; - current waypoint number < max allowed number? | 1394 cpfslt backtrack_waypoint_num ; - current waypoint number < max allowed number? |
| 1271 retlw 1 ; NO - command not allowed | 1395 retlw 1 ; NO - command not allowed |
| 1272 retlw 0 ; YES - command is allowed | 1396 retlw 0 ; YES - command is allowed |
| 1273 | 1397 |
| 1398 | |
| 1399 ;----------------------------------------------------------------------------- | |
| 1400 ; Cave Mode - set a Waypoint | |
| 1401 ; | |
| 1274 cavemode_waypoint_set: | 1402 cavemode_waypoint_set: |
| 1275 bcf request_waypoint_set ; clear request flag | 1403 bcf request_waypoint_set ; clear request flag |
| 1276 rcall cavemode_waypoint_set_check ; check if command is allowed to execute | 1404 rcall cavemode_waypoint_set_check ; check if command is allowed to execute |
| 1277 tstfsz WREG ; command allowed? | 1405 tstfsz WREG ; command allowed? |
| 1278 return ; NO - no waypoint setting possible, abort | 1406 return ; NO - no waypoint setting possible, abort |
| 1279 call set_logbook_marker ; YES - set a logbook marker | 1407 call set_logbook_marker ; YES - set a logbook marker |
| 1280 goto write_backtrack_waypoint ; - execute command (and return) | 1408 goto write_backtrack_waypoint ; - execute command (and return) |
| 1281 | 1409 |
| 1282 | 1410 |
| 1411 ;----------------------------------------------------------------------------- | |
| 1412 ; Cave Mode - check if stepping one Waypoint outwards is allowed | |
| 1413 ; | |
| 1283 global cavemode_waypoint_out_check | 1414 global cavemode_waypoint_out_check |
| 1284 cavemode_waypoint_out_check: | 1415 cavemode_waypoint_out_check: |
| 1285 btfss cave_mode ; cave mode switched on? | 1416 btfss cave_mode ; cave mode switched on? |
| 1286 retlw 1 ; NO - command not allowed | 1417 retlw 1 ; NO - command not allowed |
| 1287 btfss dive_turned ; YES - is the dive turned? | 1418 btfss dive_turned ; YES - is the dive turned? |
| 1288 retlw 1 ; NO - no stepping back on way in, command not allowed | 1419 retlw 1 ; NO - no stepping back on way in, command not allowed |
| 1289 btfsc waypoint_reached_first ; YES - already at first waypoint? | 1420 btfsc waypoint_reached_first ; YES - already at first waypoint? |
| 1290 retlw 1 ; YES - command not allowed | 1421 retlw 1 ; YES - command not allowed |
| 1291 retlw 0 ; NO - command is allowed | 1422 retlw 0 ; NO - command is allowed |
| 1292 | 1423 |
| 1424 | |
| 1425 ;----------------------------------------------------------------------------- | |
| 1426 ; Cave Mode - step one Waypoint outwards | |
| 1427 ; | |
| 1293 cavemode_waypoint_out: | 1428 cavemode_waypoint_out: |
| 1294 bcf request_waypoint_out ; clear request flag | 1429 bcf request_waypoint_out ; clear request flag |
| 1295 rcall cavemode_waypoint_out_check ; check if command is allowed to execute | 1430 rcall cavemode_waypoint_out_check ; check if command is allowed to execute |
| 1296 tstfsz WREG ; command allowed? | 1431 tstfsz WREG ; command allowed? |
| 1297 return ; NO - no further out possible, abort | 1432 return ; NO - no further out possible, abort |
| 1298 goto backtrack_waypoint_go_out ; YES - execute the command (and return) | 1433 goto backtrack_waypoint_go_out ; YES - execute the command (and return) |
| 1299 | 1434 |
| 1300 | 1435 |
| 1436 ;----------------------------------------------------------------------------- | |
| 1437 ; Cave Mode - check if stepping one Waypoint inwards is allowed | |
| 1438 ; | |
| 1301 global cavemode_waypoint_in_check | 1439 global cavemode_waypoint_in_check |
| 1302 cavemode_waypoint_in_check: | 1440 cavemode_waypoint_in_check: |
| 1303 btfss cave_mode ; cave mode switched on? | 1441 btfss cave_mode ; cave mode switched on? |
| 1304 retlw 1 ; NO - command not allowed | 1442 retlw 1 ; NO - command not allowed |
| 1305 btfss dive_turned ; YES - is the dive turned? | 1443 btfss dive_turned ; YES - is the dive turned? |
| 1306 retlw 1 ; NO - no stepping forward on way in, command not allowed | 1444 retlw 1 ; NO - no stepping forward on way in, command not allowed |
| 1307 btfsc waypoint_reached_last ; YES - already at last waypoint? | 1445 btfsc waypoint_reached_last ; YES - already at last waypoint? |
| 1308 retlw 1 ; YES - command not allowed | 1446 retlw 1 ; YES - command not allowed |
| 1309 retlw 0 ; NO - command is allowed | 1447 retlw 0 ; NO - command is allowed |
| 1310 | 1448 |
| 1449 | |
| 1450 ;----------------------------------------------------------------------------- | |
| 1451 ; Cave Mode - step one Waypoint inwards | |
| 1452 ; | |
| 1311 cavemode_waypoint_in: | 1453 cavemode_waypoint_in: |
| 1312 bcf request_waypoint_in ; clear request flag | 1454 bcf request_waypoint_in ; clear request flag |
| 1313 rcall cavemode_waypoint_in_check ; check if command is allowed to execute | 1455 rcall cavemode_waypoint_in_check ; check if command is allowed to execute |
| 1314 tstfsz WREG ; command allowed? | 1456 tstfsz WREG ; command allowed? |
| 1315 return ; NO - no further in possible, abort | 1457 return ; NO - no further in possible, abort |
| 1316 goto backtrack_waypoint_go_in ; YES - execute command (and return) | 1458 goto backtrack_waypoint_go_in ; YES - execute command (and return) |
| 1317 | 1459 |
| 1318 ENDIF | 1460 |
| 1319 | 1461 ;----------------------------------------------------------------------------- |
| 1320 ;============================================================================= | 1462 ; Cave Mode - store current Delta Time |
| 1321 | 1463 ; |
| 1322 calc_velocity: ; called every two seconds | |
| 1323 btfsc velocity_active_num ; was velocity shown in last cycle? | |
| 1324 bra calc_velocity_1 ; YES - always update if shown before | |
| 1325 btfss count_divetime ; NO - is the dive time counted, i.e. deeper than dive threshold? | |
| 1326 return ; NO - display velocity only if deeper than 1m, | |
| 1327 ; i.e. not at the surface after the dive | |
| 1328 calc_velocity_1: | |
| 1329 ; calculate pressure difference | |
| 1330 MOVII pressure_abs_cached, sub_a; current pressure | |
| 1331 MOVII last_pressure_velocity,sub_b; last pressure | |
| 1332 call subU16 ; do an unsigned subtraction | |
| 1333 | |
| 1334 ; decide if ascending or descending | |
| 1335 bcf neg_flag_velocity ; set to ascending by default | |
| 1336 btfsc neg_flag ; pressure differential negative? | |
| 1337 bsf neg_flag_velocity ; YES - descending | |
| 1338 | |
| 1339 ; store current pressure as last pressure for next round | |
| 1340 MOVII pressure_abs_cached,last_pressure_velocity | |
| 1341 | |
| 1342 ; calculate velocity in m/min | |
| 1343 MOVII sub_c,xA ; copy pressure differential to xA | |
| 1344 MOVLI .39,xB ; put scale coefficient into xB (use 77 when called every second) | |
| 1345 call mult16x16 ; compute differential pressure in mbar * scale coefficient | |
| 1346 MOVII xC,divA ; copy result to divA | |
| 1347 ADDLI .64,divA ; add some round-up | |
| 1348 movlw .7 ; divide by 2^7 | |
| 1349 call div16 ; divA = divA / 2^WREG, yields velocity in m/min | |
| 1350 | |
| 1351 movlw .99 ; load a 99 | |
| 1352 cpfslt divA+0 ; velocity < 99 m/min ? | |
| 1353 movwf divA+0 ; NO - limit to 99 m/min | |
| 1354 | |
| 1355 bcf STATUS,C ; clear carry flag | |
| 1356 movlw velocity_display_threshold ; get threshold for displaying vertical velocity | |
| 1357 subwf divA+0,W ; subtract threshold from velocity | |
| 1358 btfss STATUS,C ; above threshold? | |
| 1359 bsf FLAG_TFT_velocity_clear ; NO - don't show / request to clear | |
| 1360 btfsc STATUS,C ; above threshold? | |
| 1361 bsf FLAG_TFT_velocity_show ; YES - request to show | |
| 1362 return ; done | |
| 1363 | |
| 1364 | |
| 1365 ;============================================================================= | |
| 1366 | |
| 1367 check_deco_states: | |
| 1368 btfsc deco_region ; been within the deco stops region before? | |
| 1369 return ; YES - been in deco then before too, done | |
| 1370 movff char_O_deco_info,WREG ; NO - get deco info vector | |
| 1371 btfss WREG,deco_stops_norm ; do we have a deco obligation right now? | |
| 1372 return ; NO - done | |
| 1373 bsf deco_locked ; YES - memorize dive was in deco | |
| 1374 movff char_O_deco_depth+0,WREG ; - get depth of first stop in meters into WREG | |
| 1375 addlw deco_region_distance+.1 ; - add deco region start distance + 1 meter for the negative test to work | |
| 1376 subwf depth_meter,W ; - compute current depth - (first stop depth + deco region distance) | |
| 1377 btfss STATUS,C ; - result negative? | |
| 1378 bsf deco_region ; YES - memorize to have entered the deco stops region | |
| 1379 return ; - done | |
| 1380 | |
| 1381 ;============================================================================= | |
| 1382 | |
| 1383 safety_stop_control: | |
| 1384 TSTOSS opt_safetystop ; safety stop enabled? (=1: show safety stop) | |
| 1385 return ; NO - done | |
| 1386 | |
| 1387 btfsc FLAG_gauge_mode ; in gauge mode? | |
| 1388 return ; YES - omit (well, else fix collision of safety stop output with avg depth label) | |
| 1389 | |
| 1390 ; setup | |
| 1391 bcf safety_stop_enabled ; disable safety stop by default | |
| 1392 | |
| 1393 ; check for deco | |
| 1394 btfsc decostop_active ; in deco mode? | |
| 1395 bra safety_stop_finish ; YES - shut down safety stop | |
| 1396 | |
| 1397 ; below "opt_safety_stop_reset"? | |
| 1398 MOVII pressure_rel_cur_cached,mpr ; get current pressure into MPR | |
| 1399 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] | |
| 1400 MOVII mpr,sub_a ; move depth in [cm] to sub_a | |
| 1401 movff opt_safety_stop_reset,WREG ; load safety stop reset threshold [dm] | |
| 1402 mullw .10 ; convert threshold from [dm] to [cm] | |
| 1403 MOVII PROD,sub_b ; move threshold in [cm] to sub_b | |
| 1404 call cmpU16 ; sub_a - sub_b | |
| 1405 btfss neg_flag ; below threshold depth? | |
| 1406 bra safety_stop_reset ; YES - arm safety stop and delete it from display if still shown | |
| 1407 ;bra safety_stop_control_1 ; NO - check if above end threshold | |
| 1408 | |
| 1409 safety_stop_control_1: | |
| 1410 ; above "opt_safety_stop_end"? | |
| 1411 movff opt_safety_stop_end,WREG ; load safety stop end threshold [dm] | |
| 1412 mullw .10 ; convert threshold from [dm] to [cm] | |
| 1413 MOVII PROD,sub_b ; move threshold in [cm] to sub_b | |
| 1414 call cmpU16 ; sub_a - sub_b | |
| 1415 btfsc neg_flag ; above or at threshold depth? | |
| 1416 bra safety_stop_finish ; YES - finish with safety stop | |
| 1417 ;bra safety_stop_control_2 ; NO - check if above start threshold | |
| 1418 | |
| 1419 safety_stop_control_2: | |
| 1420 ; above "opt_safety_stop_start"? | |
| 1421 movff opt_safety_stop_start,WREG ; load safety stop start threshold [dm] | |
| 1422 mullw .10 ; convert threshold from [dm] to [cm] | |
| 1423 MOVII PROD,sub_b ; move threshold in [cm] to sub_b | |
| 1424 call cmpU16 ; sub_a - sub_b | |
| 1425 btfss neg_flag ; above or at threshold depth? | |
| 1426 return ; NO - pause safety stop | |
| 1427 tstfsz safety_stop_countdown ; YES - safety stop armed? | |
| 1428 bsf safety_stop_enabled ; YES - enable safety stop | |
| 1429 return ; NO - done | |
| 1430 | |
| 1431 | |
| 1432 safety_stop_show: | |
| 1433 btfss safety_stop_enabled ; safety stop enabled? | |
| 1434 return ; NO - done | |
| 1435 dcfsnz safety_stop_countdown,F ; YES - decrement remaining stop time, reached zero? | |
| 1436 bra safety_stop_finish ; YES - finished with safety stop | |
| 1437 bsf FLAG_TFT_safety_stop_show ; NO - request to show safety stop | |
| 1438 return ; - done | |
| 1439 | |
| 1440 safety_stop_finish: | |
| 1441 clrf safety_stop_countdown ; disarm safety stop | |
| 1442 bcf safety_stop_enabled ; disable safety stop | |
| 1443 bsf FLAG_TFT_safety_stop_clear ; request to clear safety stop | |
| 1444 return ; done | |
| 1445 | |
| 1446 safety_stop_reset: | |
| 1447 movff opt_safety_stop_length,safety_stop_countdown ; arm safety stop (load timer) | |
| 1448 incf safety_stop_countdown,F ; +1 because safety_stop_show does decrement first | |
| 1449 bsf FLAG_TFT_safety_stop_clear ; request to clear safety stop | |
| 1450 return ; done | |
| 1451 | |
| 1452 | |
| 1453 ;============================================================================= | |
| 1454 | |
| 1455 timeout_menuview: | |
| 1456 btfss trigger_timeout ; timeout occurred? | |
| 1457 return ; NO - done | |
| 1458 goto menuview_toggle_reset ; YES - terminate the pre-menu and return | |
| 1459 | |
| 1460 timeout_divemode_menu: | |
| 1461 btfss trigger_timeout ; timeout occurred? | |
| 1462 return ; NO - done | |
| 1463 ;bra timeout_divemode_menu2 ; YES - clean up main menu and restore dive data | |
| 1464 | |
| 1465 global timeout_divemode_menu2 | |
| 1466 timeout_divemode_menu2: ; jump-in point from divemenu_tree.asm | |
| 1467 bcf dive_main_menu ; clear flag for dive mode menu shown | |
| 1468 call TFT_clear_divemode_menu ; clear menu area | |
| 1469 | |
| 1470 btfss custom_view_locked ; was the custom view locked by the menu system? | |
| 1471 bra timeout_divemode_menu3 ; NO - continue with redrawing the lower display | |
| 1472 bcf custom_view_locked ; YES - clear flag for custom view locked by menu | |
| 1473 movf backup_customview,W ; - get previous custom view into WREG | |
| 1474 cpfseq active_customview ; - compare with current custom view, equal? | |
| 1475 call dive_customview_recall ; NO - redraw previous custom view | |
| 1476 | |
| 1477 timeout_divemode_menu3: | |
| 1478 bsf FLAG_TFT_active_gas_divemode; redraw gas/setpoint/diluent | |
| 1479 bsf FLAG_TFT_temperature ; display temperature (or resettable dive time when in compass view) | |
| 1480 bcf better_gas_blinking ; stop better gas cue | |
| 1481 bcf better_dil_blinking ; stop better dil cue | |
| 1482 | |
| 1483 request_redraw_NDL_deco_data: | |
| 1484 btfsc FLAG_gauge_mode ; in gauge mode? | |
| 1485 return ; YES - done | |
| 1486 btfss decostop_active ; NO - in deco mode? | |
| 1487 bra timeout_divemode_menu_ndl ; NO - show NDL again | |
| 1488 ;bra timeout_divemode_menu_deco ; YES - show deco again | |
| 1489 | |
| 1490 timeout_divemode_menu_deco: | |
| 1491 bsf FLAG_TFT_display_deco_mask ; show deco mask | |
| 1492 bsf FLAG_TFT_display_deco ; show deco stop | |
| 1493 bsf FLAG_TFT_display_tts ; show TTS time | |
| 1494 return ; done | |
| 1495 | |
| 1496 timeout_divemode_menu_ndl: | |
| 1497 bsf FLAG_TFT_display_ndl_mask ; show NDL mask | |
| 1498 bsf FLAG_TFT_display_ndl ; show NDL time | |
| 1499 return ; done | |
| 1500 | |
| 1501 timeout_divemode: | |
| 1502 btfsc dive_main_menu ; main dive menu shown? | |
| 1503 rcall timeout_divemode_menu ; YES - check the timeout for it | |
| 1504 | |
| 1505 btfsc dive_options_menu ; pre-menu shown? | |
| 1506 rcall timeout_menuview ; YES - check the timeout for it | |
| 1507 | |
| 1508 btfss divetime_longer_1min ; does dive already last for longer than one minute? | |
| 1509 return ; NO - suspend timeout | |
| 1510 | |
| 1511 btfsc FLAG_apnoe_mode ; in apnoe mode? | |
| 1512 bra timeout_divemode_apnoe ; YES - use apnoe timeout | |
| 1513 | |
| 1514 IFNDEF _DEBUG | |
| 1515 btfsc sensor_override_active ; in simulator mode? | |
| 1516 bra timeout_divemode_sim ; YES - use simulator timeout | |
| 1517 ;bra timeout_divemode_dive ; NO - use normal dive timeout | |
| 1518 ENDIF | |
| 1519 | |
| 1520 timeout_divemode_dive: | |
| 1521 movff opt_diveTimeout,WREG ; get dive timeout in minutes into WREG | |
| 1522 ;bra timeout_divemode_com_min | |
| 1523 | |
| 1524 timeout_divemode_com_min: | |
| 1525 mullw .60 ; multiply with 60 to convert minutes in WREG to seconds | |
| 1526 MOVII PRODL,sub_a ; copy resulting seconds to sub_a | |
| 1527 timeout_divemode_com_sec: | |
| 1528 MOVII dive_timeout_timer,sub_b ; copy current timeout timer value to sub_b | |
| 1529 INCI dive_timeout_timer ; increment timeout timer | |
| 1530 call cmpU16 ; check sub_a - sub_b | |
| 1531 btfsc neg_flag ; result negative, i.e. timeout? | |
| 1532 bcf divemode ; YES - terminate dive mode | |
| 1533 return ; done | |
| 1534 | |
| 1535 timeout_divemode_apnoe: | |
| 1536 movlw apnoe_timeout ; get apnoe timeout in minutes into WREG | |
| 1537 bra timeout_divemode_com_min ; continue with common part for minutes | |
| 1538 | |
| 1539 timeout_divemode_sim: | |
| 1540 MOVLI simulator_timeout,sub_a ; get simulator timeout in seconds directly into sub_a | |
| 1541 bra timeout_divemode_com_sec ; continue with common part for seconds | |
| 1542 | |
| 1543 | |
| 1544 update_divemode60: ; tasks every full minute | |
| 1545 bcf trigger_full_minute ; clear flag | |
| 1546 | |
| 1547 call get_battery_voltage ; get battery voltage | |
| 1548 btfsc battery_low_condition ; battery low condition detected? | |
| 1549 rcall set_powersafe ; YES - record an alarm and reduce display brightness | |
| 1550 | |
| 1551 ; max allowed runtime in simulator is 254 minutes in | |
| 1552 ; order for the tissue calculation catch-up to work! | |
| 1553 | |
| 1554 btfss sensor_override_active ; in simulator mode? | |
| 1555 return ; NO - done | |
| 1556 movlw simulator_timeout_normal ; YES - set simulation timeout | |
| 1557 IFDEF _cave_mode | |
| 1558 TSTOSC opt_cave_mode ; - cave mode switched on? | |
| 1559 movlw simulator_timeout_cave ; YES - update simulation timeout | |
| 1560 ENDIF | |
| 1561 cpfsgt counted_divetime_mins+0 ; - timeout? | |
| 1562 return ; NO - done | |
| 1563 IFDEF _DEBUG | |
| 1564 return ; YES - but we do not care in debug mode... | |
| 1565 ELSE | |
| 1566 bra divemode_option_sim_quit ; YES - set depth to 0 m and return | |
| 1567 ENDIF | |
| 1568 | |
| 1569 ;============================================================================= | |
| 1570 | |
| 1571 IFDEF _cave_mode | |
| 1572 | |
| 1573 ; ** jump-in functions ** | |
| 1574 | |
| 1575 write_backtrack_deltatime: | 1464 write_backtrack_deltatime: |
| 1576 rcall setup_backtrack_index ; setup writing position | 1465 rcall setup_backtrack_index ; setup writing position |
| 1577 bra write_backtrack_datum_deltatime ; store the current delta time (and return) | 1466 bra write_backtrack_datum_deltatime ; store the current delta time (and return) |
| 1578 | 1467 |
| 1468 | |
| 1469 ;----------------------------------------------------------------------------- | |
| 1470 ; Cave Mode - store a Backtracking Depth Data Set | |
| 1471 ; | |
| 1579 write_backtrack_1min_depth: | 1472 write_backtrack_1min_depth: |
| 1580 rcall setup_backtrack_index ; setup writing position | 1473 rcall setup_backtrack_index ; setup writing position |
| 1581 rcall write_backtrack_datum_depth ; store depth | 1474 rcall write_backtrack_datum_depth ; store depth |
| 1582 rcall write_backtrack_datum_zerotime ; reset the time elapsed since last depth recording and store it | 1475 rcall write_backtrack_datum_zerotime ; reset the time elapsed since last depth recording and store it |
| 1583 bra write_backtrack_datum_check ; store new writing position, check remaining storage capacity ()and return) | 1476 bra write_backtrack_datum_check ; store new writing position, check remaining storage capacity ()and return) |
| 1584 | 1477 |
| 1478 | |
| 1479 ;----------------------------------------------------------------------------- | |
| 1480 ; Cave Mode - store a Waypoint | |
| 1481 ; | |
| 1585 write_backtrack_waypoint: | 1482 write_backtrack_waypoint: |
| 1586 rcall setup_backtrack_index ; setup writing position | 1483 rcall setup_backtrack_index ; setup writing position |
| 1587 rcall write_backtrack_datum_deltatime ; store the time elapsed since last depth recording | 1484 rcall write_backtrack_datum_deltatime ; store the time elapsed since last depth recording |
| 1588 movf POSTINC1,W ; dummy read to increment the writing position index | 1485 movf POSTINC1,W ; dummy read to increment the writing position index |
| 1589 rcall write_backtrack_datum_depth ; store depth | 1486 rcall write_backtrack_datum_depth ; store depth |
| 1590 rcall write_backtrack_datum_gas ; store gas availability vector | 1487 rcall write_backtrack_datum_gas ; store gas availability vector |
| 1591 rcall write_backtrack_datum_waypoint ; store waypoint number | 1488 rcall write_backtrack_datum_waypoint ; store waypoint number |
| 1592 rcall write_backtrack_datum_zerotime ; reset the time elapsed since last depth recording and store it | 1489 rcall write_backtrack_datum_zerotime ; reset the time elapsed since last depth recording and store it |
| 1593 bra write_backtrack_datum_check ; store new writing position, check remaining storage capacity (and return) | 1490 bra write_backtrack_datum_check ; store new writing position, check remaining storage capacity (and return) |
| 1594 | 1491 |
| 1492 | |
| 1493 ;----------------------------------------------------------------------------- | |
| 1494 ; Cave Mode - store a Turn Point | |
| 1595 write_backtrack_turnpoint: | 1495 write_backtrack_turnpoint: |
| 1596 rcall write_backtrack_waypoint ; write a waypoint (see above) | 1496 rcall write_backtrack_waypoint ; write a waypoint (see above) |
| 1597 movf POSTDEC1,W ; dummy read to decrement the position index to the waypoint number datum | 1497 movf POSTDEC1,W ; dummy read to decrement the position index to the waypoint number datum |
| 1598 movff FSR1L,char_I_backtrack_index ; store updated writing position | 1498 movff FSR1L,char_I_backtrack_index ; store updated writing position |
| 1599 movff backtrack_waypoint_num,backtrack_waypoint_turn; memorize this waypoint as turn point | 1499 movff backtrack_waypoint_num,backtrack_waypoint_turn; memorize this waypoint as turn point |
| 1600 return ; done | 1500 return ; done |
| 1601 | 1501 |
| 1502 | |
| 1503 ;----------------------------------------------------------------------------- | |
| 1504 ; Cave Mode - append further Logging after current Waypoint | |
| 1505 ; | |
| 1602 resume_backtrack_recording: | 1506 resume_backtrack_recording: |
| 1603 clrf backtrack_waypoint_turn ; clear turn point reference | 1507 clrf backtrack_waypoint_turn ; clear turn point reference |
| 1604 bsf waypoint_reached_last ; declare to be at last waypoint now | 1508 bsf waypoint_reached_last ; declare to be at last waypoint now |
| 1605 rcall setup_backtrack_index ; setup index position | 1509 rcall setup_backtrack_index ; setup index position |
| 1606 movf POSTINC1,W ; dummy read to increment the position index to the delta time datum | 1510 movf POSTINC1,W ; dummy read to increment the position index to the delta time datum |
| 1607 rcall write_backtrack_datum_zerotime ; reset the time elapsed since last depth recording and store it | 1511 rcall write_backtrack_datum_zerotime ; reset the time elapsed since last depth recording and store it |
| 1608 bra write_backtrack_datum_check ; store new writing position, check remaining storage capacity (and return) | 1512 bra write_backtrack_datum_check ; store new writing position, check remaining storage capacity (and return) |
| 1609 | 1513 |
| 1514 | |
| 1515 ;----------------------------------------------------------------------------- | |
| 1516 ; Cave Mode - execute stepping one Waypoint outwards | |
| 1517 ; | |
| 1610 backtrack_waypoint_go_out: | 1518 backtrack_waypoint_go_out: |
| 1611 bcf waypoint_reached_last ; not at last waypoint (or turn point) any more | 1519 bcf waypoint_reached_last ; not at last waypoint (or turn point) any more |
| 1612 rcall setup_backtrack_index ; setup index position | 1520 rcall setup_backtrack_index ; setup index position |
| 1613 movlw b'11100000'-.1 ; a waypoint datum has bits 5-7 set, -1 because of cpfsgt | 1521 movlw b'11100000'-.1 ; a waypoint datum has bits 5-7 set, -1 because of cpfsgt |
| 1614 backtrack_waypoint_go_out_loop: | 1522 backtrack_waypoint_go_out_loop: |
| 1622 movlw .1 ; number of first waypoint | 1530 movlw .1 ; number of first waypoint |
| 1623 cpfsgt backtrack_waypoint_num ; current waypoint number > number of first waypoint ? | 1531 cpfsgt backtrack_waypoint_num ; current waypoint number > number of first waypoint ? |
| 1624 bsf waypoint_reached_first ; NO - reached first waypoint | 1532 bsf waypoint_reached_first ; NO - reached first waypoint |
| 1625 goto restart_deco_engine_wo_norm ; invalidate all alternative plan data and restart deco engine | 1533 goto restart_deco_engine_wo_norm ; invalidate all alternative plan data and restart deco engine |
| 1626 | 1534 |
| 1535 | |
| 1536 ;----------------------------------------------------------------------------- | |
| 1537 ; Cave Mode - execute stepping one Waypoint inwards | |
| 1538 ; | |
| 1627 backtrack_waypoint_go_in: | 1539 backtrack_waypoint_go_in: |
| 1628 bcf waypoint_reached_first ; not at first waypoint any more | 1540 bcf waypoint_reached_first ; not at first waypoint any more |
| 1629 rcall setup_backtrack_index ; setup index position | 1541 rcall setup_backtrack_index ; setup index position |
| 1630 movlw b'11100000'-.1 ; a waypoint datum has bits 5-7 set, -1 because of cpfsgt | 1542 movlw b'11100000'-.1 ; a waypoint datum has bits 5-7 set, -1 because of cpfsgt |
| 1631 backtrack_waypoint_go_in_loop: | 1543 backtrack_waypoint_go_in_loop: |
| 1639 cpfslt backtrack_waypoint_num ; new waypoint number < number of turn point ? | 1551 cpfslt backtrack_waypoint_num ; new waypoint number < number of turn point ? |
| 1640 bsf waypoint_reached_last ; NO - reached last waypoint | 1552 bsf waypoint_reached_last ; NO - reached last waypoint |
| 1641 goto restart_deco_engine_wo_norm ; invalidate all alternative plan data and restart deco engine | 1553 goto restart_deco_engine_wo_norm ; invalidate all alternative plan data and restart deco engine |
| 1642 | 1554 |
| 1643 | 1555 |
| 1644 ; ** helper functions ** | 1556 ;----------------------------------------------------------------------------- |
| 1645 | 1557 ; Cave Mode Helper Function - set up Index Position |
| 1558 ; | |
| 1646 setup_backtrack_index: | 1559 setup_backtrack_index: |
| 1647 lfsr FSR1,char_I_backtrack_storage ; load FSR1 with base address of the backtracking storage | 1560 lfsr FSR1,char_I_backtrack_storage ; load FSR1 with base address of the backtracking storage |
| 1648 movff char_I_backtrack_index,FSR1L ; adjust FSR1 to the current index position | 1561 movff char_I_backtrack_index,FSR1L ; adjust FSR1 to the current index position |
| 1649 return | 1562 return |
| 1650 | 1563 |
| 1564 | |
| 1565 ;----------------------------------------------------------------------------- | |
| 1566 ; Cave Mode Helper Function - reset Time since last Depth Recording and store it | |
| 1567 ; | |
| 1651 write_backtrack_datum_zerotime: | 1568 write_backtrack_datum_zerotime: |
| 1652 clrf backtrack_deltatime ; reset the time elapsed since last depth recording | 1569 clrf backtrack_deltatime ; reset the time elapsed since last depth recording |
| 1570 ;bra write_backtrack_datum_deltatime ; store the time | |
| 1571 | |
| 1572 | |
| 1573 ;----------------------------------------------------------------------------- | |
| 1574 ; Cave Mode Helper Function - store Time elapsed since last Depth Recording | |
| 1575 ; | |
| 1653 write_backtrack_datum_deltatime: | 1576 write_backtrack_datum_deltatime: |
| 1654 movf backtrack_deltatime,W ; get the time elapsed since last depth recording | 1577 movf backtrack_deltatime,W ; get the time elapsed since last depth recording |
| 1655 bsf WREG,7 ; add the time marker (bit 7 set) to the time stored in WREG | 1578 bsf WREG,7 ; add the time marker (bit 7 set) to the time stored in WREG |
| 1656 movwf INDF1 ; write the time and keep the writing position index pointing on it | 1579 movwf INDF1 ; write the time and keep the writing position index pointing on it |
| 1657 return ; done | 1580 return ; done |
| 1658 | 1581 |
| 1582 | |
| 1583 ;----------------------------------------------------------------------------- | |
| 1584 ; Cave Mode Helper Function - store Depth | |
| 1585 ; | |
| 1659 write_backtrack_datum_depth: | 1586 write_backtrack_datum_depth: |
| 1660 movf depth_meter,W ; get current depth in meters into WREG | 1587 movf depth_meter,W ; get current depth in meters into WREG |
| 1661 btfsc WREG,7 ; current depth < 128 m ? | 1588 btfsc WREG,7 ; current depth < 128 m ? |
| 1662 movlw .127 ; NO - clip depth to 127 meters | 1589 movlw .127 ; NO - clip depth to 127 meters (protect time marker bit) |
| 1663 movwf POSTINC1 ; write the depth entry and increment the writing position index | 1590 movwf POSTINC1 ; write the depth entry and increment the writing position index |
| 1664 return ; done | 1591 return ; done |
| 1665 | 1592 |
| 1593 | |
| 1594 ;----------------------------------------------------------------------------- | |
| 1595 ; Cave Mode Helper Function - store Gas Availability Vector | |
| 1596 ; | |
| 1666 write_backtrack_datum_gas: | 1597 write_backtrack_datum_gas: |
| 1667 ; Cave mode is currently only available with gas needs calculation enabled, | 1598 ; Cave mode is currently only available with gas needs calculation enabled, |
| 1668 ; so deco mode is either OC anyhow or CCR/pSCR in bailout mode. Hence it is | 1599 ; so deco mode is either OC anyhow or CCR/pSCR in bailout mode. Hence it is |
| 1669 ; always the OC (bailout) gases whose staging status needs to be stored. | 1600 ; always the OC (bailout) gases whose staging status needs to be stored. |
| 1670 lfsr FSR2,opt_gas_type ; load base address of the OC/bailout gas types | 1601 lfsr FSR2,opt_gas_type ; load base address of the OC/bailout gas types |
| 1681 decfsz lo,F ; decrement loop counter, did it became zero? | 1612 decfsz lo,F ; decrement loop counter, did it became zero? |
| 1682 bra write_backtrack_datum_gas_loop ; NO - loop | 1613 bra write_backtrack_datum_gas_loop ; NO - loop |
| 1683 movwf POSTINC1 ; YES - write the gas staging status entry and increment the writing position index | 1614 movwf POSTINC1 ; YES - write the gas staging status entry and increment the writing position index |
| 1684 return ; - done | 1615 return ; - done |
| 1685 | 1616 |
| 1617 | |
| 1618 ;----------------------------------------------------------------------------- | |
| 1619 ; Cave Mode Helper Function - store a Waypoint Number | |
| 1620 ; | |
| 1686 write_backtrack_datum_waypoint: | 1621 write_backtrack_datum_waypoint: |
| 1687 incf backtrack_waypoint_num,F ; increment the waypoint number | 1622 incf backtrack_waypoint_num,F ; increment the waypoint number |
| 1688 movf backtrack_waypoint_num,W ; copy waypoint number to WREG | 1623 movf backtrack_waypoint_num,W ; copy waypoint number to WREG |
| 1689 iorlw b'11100000' ; add the waypoint marker (bit 7-5 set) to the number stored in WREG | 1624 iorlw b'11100000' ; add the waypoint marker (bit 7-5 set) to the number stored in WREG |
| 1690 movwf POSTINC1 ; write the waypoint datum and increment the writing position index | 1625 movwf POSTINC1 ; write the waypoint datum and increment the writing position index |
| 1691 movlw .2 ; load a 2 into WREG | 1626 movlw .2 ; load a 2 into WREG |
| 1692 cpfslt backtrack_waypoint_num ; new waypoint number >= 2 ? | 1627 cpfslt backtrack_waypoint_num ; new waypoint number >= 2 ? |
| 1693 bcf waypoint_reached_first ; YES - not at first waypoint any more | 1628 bcf waypoint_reached_first ; YES - not at first waypoint any more |
| 1694 return ; done | 1629 return ; done |
| 1695 | 1630 |
| 1631 | |
| 1632 ;----------------------------------------------------------------------------- | |
| 1633 ; Cave Mode Helper Function - store new writing position and check remaining storage capacity | |
| 1634 ; | |
| 1696 write_backtrack_datum_check: | 1635 write_backtrack_datum_check: |
| 1697 movff FSR1L,char_I_backtrack_index ; store new index position | 1636 movff FSR1L,char_I_backtrack_index ; store new index position |
| 1698 movlw backtrack_almost_full_threshold ; load threshold for backtracking storage almost full | 1637 movlw backtrack_almost_full_threshold ; load threshold for backtracking storage almost full |
| 1699 bcf backtrack_almost_full ; clear almost full state | 1638 bcf backtrack_almost_full ; clear almost full state |
| 1700 cpfslt FSR1L ; index < threshold ? | 1639 cpfslt FSR1L ; index < threshold ? |
| 1705 bsf backtrack_entire_full ; NO - flag backtracking storage is entirely full | 1644 bsf backtrack_entire_full ; NO - flag backtracking storage is entirely full |
| 1706 return ; done | 1645 return ; done |
| 1707 | 1646 |
| 1708 ENDIF ; _cave_mode | 1647 ENDIF ; _cave_mode |
| 1709 | 1648 |
| 1710 ;============================================================================= | 1649 |
| 1711 | 1650 ;----------------------------------------------------------------------------- |
| 1712 global set_dive_modes | 1651 ; Calculate vertical Velocity |
| 1713 set_dive_modes: | 1652 ; |
| 1714 SMOVII pressure_rel_cur,sub_a ; ISR-safe 2 byte copy of current relative pressure to sub_a | 1653 calc_velocity: ; called every two seconds |
| 1715 bra set_dive_modes_1 | 1654 btfsc velocity_active_num ; was velocity shown in last cycle? |
| 1655 bra calc_velocity_1 ; YES - always update if shown before | |
| 1656 btfss count_divetime ; NO - is the dive time counted, i.e. deeper than dive threshold? | |
| 1657 return ; NO - display velocity only if deeper than 1m, | |
| 1658 ; i.e. not at the surface after the dive | |
| 1659 calc_velocity_1: | |
| 1660 ; calculate pressure difference | |
| 1661 MOVII pressure_abs_cached, sub_a; current pressure | |
| 1662 MOVII last_pressure_velocity,sub_b; last pressure | |
| 1663 call subU16 ; do an unsigned subtraction | |
| 1664 | |
| 1665 ; decide if ascending or descending | |
| 1666 bcf neg_flag_velocity ; set to ascending by default | |
| 1667 btfsc neg_flag ; pressure differential negative? | |
| 1668 bsf neg_flag_velocity ; YES - descending | |
| 1669 | |
| 1670 ; store current pressure as last pressure for next round | |
| 1671 MOVII pressure_abs_cached,last_pressure_velocity | |
| 1672 | |
| 1673 ; calculate velocity in m/min | |
| 1674 MOVII sub_c,xA ; copy pressure differential to xA | |
| 1675 MOVLI .39,xB ; put scale coefficient into xB (use 77 when called every second) | |
| 1676 call mult16x16 ; compute differential pressure in mbar * scale coefficient | |
| 1677 MOVII xC,divA ; copy result to divA | |
| 1678 ADDLI .64,divA ; add some round-up | |
| 1679 movlw .7 ; divide by 2^7 | |
| 1680 call div16 ; divA = divA / 2^WREG, yields velocity in m/min | |
| 1681 | |
| 1682 movlw .99 ; load a 99 | |
| 1683 cpfslt divA+0 ; velocity < 99 m/min ? | |
| 1684 movwf divA+0 ; NO - limit to 99 m/min | |
| 1685 | |
| 1686 bcf STATUS,C ; clear carry flag | |
| 1687 movlw velocity_display_threshold ; get threshold for displaying vertical velocity | |
| 1688 subwf divA+0,W ; subtract threshold from velocity | |
| 1689 btfss STATUS,C ; above threshold? | |
| 1690 bsf FLAG_TFT_velocity_clear ; NO - don't show / request to clear | |
| 1691 btfsc STATUS,C ; above threshold? | |
| 1692 bsf FLAG_TFT_velocity_show ; YES - request to show | |
| 1693 return ; done | |
| 1694 | |
| 1695 | |
| 1696 ;----------------------------------------------------------------------------- | |
| 1697 ; Check and Memorize if Dive went into Deco & Deco Region | |
| 1698 ; | |
| 1699 check_deco_states: | |
| 1700 btfsc deco_region ; been within the deco stops region before? | |
| 1701 return ; YES - been in deco then before too, done | |
| 1702 movff char_O_deco_info,WREG ; NO - get deco info vector | |
| 1703 btfss WREG,deco_stops_norm ; do we have a deco obligation right now? | |
| 1704 return ; NO - done | |
| 1705 bsf deco_locked ; YES - memorize dive was in deco | |
| 1706 movff char_O_deco_depth+0,WREG ; - get depth of first stop in meters into WREG | |
| 1707 addlw deco_region_distance+.1 ; - add deco region start distance + 1 meter for the negative test to work | |
| 1708 subwf depth_meter,W ; - compute current depth - (first stop depth + deco region distance) | |
| 1709 btfss STATUS,C ; - result negative? | |
| 1710 bsf deco_region ; YES - memorize to have entered the deco stops region | |
| 1711 return ; - done | |
| 1712 | |
| 1713 | |
| 1714 ;----------------------------------------------------------------------------- | |
| 1715 ; Exercise Safety Stop Control | |
| 1716 ; | |
| 1717 safety_stop_control: | |
| 1718 TSTOSS opt_safetystop ; safety stop enabled? (=1: show safety stop) | |
| 1719 return ; NO - done | |
| 1720 | |
| 1721 btfsc FLAG_gauge_mode ; in gauge mode? | |
| 1722 return ; YES - omit (well, else fix collision of safety stop output with avg depth label) | |
| 1723 | |
| 1724 ; setup | |
| 1725 bcf safety_stop_enabled ; disable safety stop by default | |
| 1726 | |
| 1727 ; check for deco | |
| 1728 btfsc decostop_active ; in deco mode? | |
| 1729 bra safety_stop_finish ; YES - shut down safety stop | |
| 1730 | |
| 1731 ; below "opt_safety_stop_reset"? | |
| 1732 MOVII pressure_rel_cur_cached,mpr ; get current pressure into MPR | |
| 1733 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] | |
| 1734 MOVII mpr,sub_a ; move depth in [cm] to sub_a | |
| 1735 movff opt_safety_stop_reset,WREG ; load safety stop reset threshold [dm] | |
| 1736 mullw .10 ; convert threshold from [dm] to [cm] | |
| 1737 MOVII PROD,sub_b ; move threshold in [cm] to sub_b | |
| 1738 call cmpU16 ; sub_a - sub_b | |
| 1739 btfsc neg_flag ; below threshold depth? | |
| 1740 bra safety_stop_control_chk ; NO - check if above end threshold | |
| 1741 ;bra safety_stop_reset ; YES - reset safety stop | |
| 1742 | |
| 1743 safety_stop_reset: | |
| 1744 movff opt_safety_stop_length,safety_stop_countdown ; rearm safety stop (load timer) | |
| 1745 incf safety_stop_countdown,F ; +1 because safety_stop_show decrements first | |
| 1746 bsf FLAG_TFT_safety_stop_clear ; request to clear safety stop | |
| 1747 return ; done | |
| 1748 | |
| 1749 safety_stop_control_chk: | |
| 1750 ; above "opt_safety_stop_end"? | |
| 1751 movff opt_safety_stop_end,WREG ; load safety stop end threshold [dm] | |
| 1752 mullw .10 ; convert threshold from [dm] to [cm] | |
| 1753 MOVII PROD,sub_b ; move threshold in [cm] to sub_b | |
| 1754 call cmpU16 ; sub_a - sub_b | |
| 1755 btfsc neg_flag ; above or at threshold depth? | |
| 1756 bra safety_stop_finish ; YES - finish with safety stop and return | |
| 1757 | |
| 1758 ; above "opt_safety_stop_start"? | |
| 1759 movff opt_safety_stop_start,WREG ; load safety stop start threshold [dm] | |
| 1760 mullw .10 ; convert threshold from [dm] to [cm] | |
| 1761 MOVII PROD,sub_b ; move threshold in [cm] to sub_b | |
| 1762 call cmpU16 ; sub_a - sub_b | |
| 1763 btfss neg_flag ; above or at threshold depth? | |
| 1764 return ; NO - pause safety stop | |
| 1765 tstfsz safety_stop_countdown ; YES - safety stop armed? | |
| 1766 bsf safety_stop_enabled ; YES - enable safety stop | |
| 1767 return ; - done | |
| 1768 | |
| 1769 | |
| 1770 ;----------------------------------------------------------------------------- | |
| 1771 ; Show Safety Stop | |
| 1772 ; | |
| 1773 safety_stop_show: | |
| 1774 btfss safety_stop_enabled ; safety stop enabled? | |
| 1775 return ; NO - done | |
| 1776 dcfsnz safety_stop_countdown,F ; YES - decrement remaining stop time, reached zero? | |
| 1777 bra safety_stop_finish ; YES - finished with safety stop and return | |
| 1778 bsf FLAG_TFT_safety_stop_show ; NO - request to show safety stop | |
| 1779 return ; - done | |
| 1780 | |
| 1781 | |
| 1782 ;----------------------------------------------------------------------------- | |
| 1783 ; Finish Safety Stop | |
| 1784 ; | |
| 1785 safety_stop_finish: | |
| 1786 clrf safety_stop_countdown ; disarm safety stop | |
| 1787 bcf safety_stop_enabled ; disable safety stop | |
| 1788 bsf FLAG_TFT_safety_stop_clear ; request to clear safety stop | |
| 1789 return ; done | |
| 1790 | |
| 1791 | |
| 1792 ;----------------------------------------------------------------------------- | |
| 1793 ; Check for Timeouts (called by tasks every 1/1 second) | |
| 1794 ; | |
| 1795 timeout_divemode: | |
| 1796 btfss dive_main_menu ; main dive menu shown? | |
| 1797 bra timeout_divemode_1 ; NO - skip | |
| 1798 btfsc trigger_timeout ; YES - timeout occurred? | |
| 1799 rcall divemenu_cleanup ; YES - clean up main menu and restore dive data | |
| 1800 | |
| 1801 timeout_divemode_1: | |
| 1802 btfss dive_pre_menu ; pre-menu shown? | |
| 1803 bra timeout_divemode_2 ; NO - skip | |
| 1804 btfsc trigger_timeout ; YES - timeout occurred? | |
| 1805 call menuview_toggle_reset ; YES - terminate the pre-menu | |
| 1806 | |
| 1807 timeout_divemode_2: | |
| 1808 btfss divetime_longer_1min ; does the dive already last for longer than one minute? | |
| 1809 return ; NO - suspend timeout | |
| 1810 | |
| 1811 INCI dive_timeout_timer ; increment timeout timer | |
| 1812 | |
| 1813 btfsc FLAG_apnoe_mode ; in apnoe mode? | |
| 1814 bra timeout_divemode_apnoe ; YES - use apnoe timeout | |
| 1815 | |
| 1816 IFNDEF _DEBUG | |
| 1817 btfsc sensor_override_active ; in simulator mode? | |
| 1818 bra timeout_divemode_sim ; YES - use simulator timeout | |
| 1819 ENDIF | |
| 1820 | |
| 1821 movff opt_diveTimeout,WREG ; get dive timeout in minutes into WREG | |
| 1822 bra timeout_divemode_com_min ; continue with common part for minutes | |
| 1823 | |
| 1824 timeout_divemode_apnoe: | |
| 1825 movlw apnoe_timeout ; get apnoe timeout in minutes into WREG | |
| 1826 bra timeout_divemode_com_min ; continue with common part for minutes | |
| 1827 | |
| 1828 timeout_divemode_sim: | |
| 1829 MOVLI simulator_timeout,sub_a ; get simulator timeout in seconds directly into sub_a | |
| 1830 bra timeout_divemode_com_sec ; continue with common part for seconds | |
| 1831 | |
| 1832 timeout_divemode_com_min: | |
| 1833 mullw .60 ; multiply with 60 to convert minutes in WREG to seconds | |
| 1834 MOVII PRODL,sub_a ; copy resulting seconds to sub_a | |
| 1835 | |
| 1836 timeout_divemode_com_sec: | |
| 1837 MOVII dive_timeout_timer,sub_b ; copy current timeout timer value to sub_b | |
| 1838 call cmpU16 ; check sub_a - sub_b | |
| 1839 btfsc neg_flag ; result negative, i.e. timeout? | |
| 1840 bcf divemode ; YES - terminate dive mode | |
| 1841 return ; done | |
| 1842 | |
| 1843 | |
| 1844 ;----------------------------------------------------------------------------- | |
| 1845 ; Clean up Dive Menu Area and restore Dive Data | |
| 1846 ; | |
| 1847 divemenu_cleanup: | |
| 1848 bcf dive_main_menu ; clear flag for dive mode menu shown | |
| 1849 call TFT_clear_divemode_menu ; clear menu area | |
| 1850 | |
| 1851 btfss custom_view_locked ; was the custom view locked by the menu system? | |
| 1852 bra divemenu_cleanup_1 ; NO - continue with redrawing the lower display | |
| 1853 bcf custom_view_locked ; YES - release locked | |
| 1854 movf backup_customview,W ; - get previous custom view into WREG | |
| 1855 cpfseq active_customview ; - compare with current custom view, equal? | |
| 1856 call dive_customview_recall ; NO - redraw previous custom view | |
| 1857 | |
| 1858 divemenu_cleanup_1: | |
| 1859 bsf FLAG_TFT_active_gas_divemode; request redraw of gas/setpoint/diluent | |
| 1860 bsf FLAG_TFT_temperature ; request redraw of temperature (or resettable dive) | |
| 1861 bcf better_gas_blinking ; stop better gas cue | |
| 1862 bcf better_dil_blinking ; stop better dil cue | |
| 1863 ;bra request_redraw_NDL_deco_data; request redraw of NDL/deco data and return | |
| 1864 | |
| 1865 | |
| 1866 ;----------------------------------------------------------------------------- | |
| 1867 ; Request redraw of NDL/Deco Data | |
| 1868 ; | |
| 1869 request_redraw_NDL_deco_data: | |
| 1870 btfsc FLAG_gauge_mode ; in gauge mode? | |
| 1871 return ; YES - done | |
| 1872 btfss decostop_active ; NO - in deco mode? | |
| 1873 bra timeout_divemode_menu_ndl ; NO - show NDL again | |
| 1874 ;bra timeout_divemode_menu_deco ; YES - show deco again | |
| 1875 | |
| 1876 timeout_divemode_menu_deco: | |
| 1877 bsf FLAG_TFT_display_deco_mask ; show deco mask | |
| 1878 bsf FLAG_TFT_display_deco ; show deco stop | |
| 1879 bsf FLAG_TFT_display_tts ; show TTS time | |
| 1880 return ; done | |
| 1881 | |
| 1882 timeout_divemode_menu_ndl: | |
| 1883 bsf FLAG_TFT_display_ndl_mask ; show NDL mask | |
| 1884 bsf FLAG_TFT_display_ndl ; show NDL time | |
| 1885 return ; done | |
| 1886 | |
| 1887 | |
| 1888 ;----------------------------------------------------------------------------- | |
| 1889 ; Check if Dive Mode needs to be started (called from Surface Mode) | |
| 1890 ; | |
| 1891 global check_dive_modes_surf | |
| 1892 check_dive_modes_surf: | |
| 1893 SMOVII pressure_rel_cur,sub_a ; ISR-safe 2 byte copy of current relative pressure to sub_a | |
| 1894 bcf divetime_longer_1min ; not diving when in surface mode | |
| 1895 bra check_dive_modes ; continue with common part | |
| 1896 | |
| 1897 | |
| 1898 ;----------------------------------------------------------------------------- | |
| 1899 ; Check if Dive Mode needs to be finished (called from Dive Loop) | |
| 1900 ; | |
| 1901 check_dive_modes_dive: | |
| 1902 MOVII pressure_rel_cur_cached,sub_a ; copy cached relative pressure to sub_a | |
| 1903 ;bra check_dive_modes ; continue with common part | |
| 1904 | |
| 1905 | |
| 1906 ;----------------------------------------------------------------------------- | |
| 1907 ; Check for Dive Mode Start/Finish - common Part | |
| 1908 ; | |
| 1716 check_dive_modes: | 1909 check_dive_modes: |
| 1717 MOVII pressure_rel_cur_cached,sub_a; copy cached relative pressure to sub_a | 1910 btfss high_altitude_mode ; in high altitude mode? |
| 1718 set_dive_modes_1: | 1911 bra check_dive_modes_norm ; NO - use normal start-dive threshold |
| 1719 btfss high_altitude_mode ; in high altitude mode? | 1912 btfsc divetime_longer_1min ; YES - diving since > one minute? |
| 1720 bra set_dive_modes_norm ; NO - use normal start-dive threshold | 1913 bra check_dive_modes_norm ; YES - this is a real dive -> use normal start-dive threshold |
| 1721 btfsc divetime_longer_1min ; YES - dive lasted longer than one minute? | 1914 ;bra check_dive_modes_high ; NO - use hight-altitude start-dive threshold |
| 1722 bra set_dive_modes_norm ; YES - this is a real dive -> use normal start-dive threshold | 1915 |
| 1723 ;bra set_dive_modes_high ; NO - use hight-altitude start-dive threshold | 1916 check_dive_modes_high: |
| 1724 | |
| 1725 ; high altitude start/end dive thresholds | 1917 ; high altitude start/end dive thresholds |
| 1726 set_dive_modes_high: | 1918 btfss count_divetime ; dive time counting, i.e. already in the dive? |
| 1727 btfss count_divetime ; dive time counting, i.e. already in the dive? | 1919 bra check_dive_modes_high_start ; NO - select start threshold |
| 1728 bra set_dive_modes_high_start ; NO - select start threshold | 1920 ;bra check_dive_modes_high_end ; YES - select end threshold |
| 1729 ;bra set_dive_modes_high_end ; YES - select end threshold | 1921 |
| 1730 | 1922 check_dive_modes_high_end: |
| 1731 set_dive_modes_high_end: | 1923 MOVLI dive_threshold_high_alt_end,sub_b ; load high altitude end threshold |
| 1732 MOVLI dive_threshold_high_alt_end,sub_b | 1924 bra check_dive_modes_comm ; continue with common part |
| 1733 bra set_dive_modes_comm | 1925 |
| 1734 | 1926 check_dive_modes_high_start: |
| 1735 set_dive_modes_high_start: | 1927 MOVLI dive_threshold_high_alt_start,sub_b ; load high altitude start threshold |
| 1736 MOVLI dive_threshold_high_alt_start,sub_b | 1928 bra check_dive_modes_comm ; continue with common part |
| 1737 bra set_dive_modes_comm | 1929 |
| 1738 | 1930 check_dive_modes_norm: |
| 1739 ; normal altitude start/end dive thresholds | 1931 ; normal altitude start/end dive thresholds |
| 1740 set_dive_modes_norm: | 1932 btfss count_divetime ; dive time counting, i.e. already in the dive? |
| 1741 btfss count_divetime ; dive time counting, i.e. already in the dive? | 1933 bra check_dive_modes_norm_start ; NO - select start threshold |
| 1742 bra set_dive_modes_norm_start ; NO - select start threshold | 1934 ;bra check_dive_modes_norm_end ; YES - select end threshold |
| 1743 ;bra set_dive_modes_norm_end ; YES - select end threshold | 1935 |
| 1744 | 1936 check_dive_modes_norm_end: |
| 1745 set_dive_modes_norm_end: | 1937 MOVLI dive_threshold_norm_alt_end,sub_b ; load normal altitude end threshold |
| 1746 MOVLI dive_threshold_norm_alt_end,sub_b | 1938 bra check_dive_modes_comm ; continue with common part |
| 1747 bra set_dive_modes_comm | 1939 |
| 1748 | 1940 check_dive_modes_norm_start |
| 1749 set_dive_modes_norm_start | 1941 MOVLI dive_threshold_norm_alt_start,sub_b ; load normal altitude start threshold |
| 1750 MOVLI dive_threshold_norm_alt_start,sub_b | 1942 ;bra check_dive_modes_comm ; continue with common part |
| 1751 ;bra set_dive_modes_comm | 1943 |
| 1752 | 1944 check_dive_modes_comm: |
| 1753 set_dive_modes_comm: | 1945 call cmpU16 ; sub_a - sub_b = pressure_rel_cur - start-dive threshold |
| 1754 call cmpU16 ; sub_a - sub_b = pressure_rel_cur - start-dive threshold | 1946 btfsc neg_flag ; pressure_rel_cur > dive_threshold, i.e. deeper than threshold? |
| 1755 btfsc neg_flag ; pressure_rel_cur > dive_threshold, i.e. deeper than threshold? | 1947 bra check_dive_modes_shallow ; NO - shallower than threshold |
| 1756 bra set_dive_modes_shallow ; NO - shallower than threshold | 1948 btfsc divetime_longer_1min ; YES - diving > one minute? |
| 1757 btfsc divetime_longer_1min ; YES - dive lasted longer than one minute? | 1949 CLRI dive_timeout_timer ; YES - reset timeout counter |
| 1758 CLRI dive_timeout_timer ; YES - reset timeout counter | 1950 bsf divemode ; - set dive mode flag |
| 1759 bsf divemode ; - set dive mode flag | 1951 bsf count_divetime ; - count dive time |
| 1760 bsf count_divetime ; - count dive time | 1952 return ; - done |
| 1761 return ; - done | 1953 |
| 1762 set_dive_modes_shallow: | 1954 check_dive_modes_shallow: |
| 1763 bcf count_divetime ; NO - stop counting dive time | 1955 bcf count_divetime ; stop counting dive time |
| 1764 btfss divetime_longer_1min ; - dive lasted longer than one minute? | 1956 btfss divetime_longer_1min ; diving > one minute? |
| 1765 bcf divemode ; NO - quit dive mode as this was no real dive | 1957 bcf divemode ; NO - quit dive mode as this was no real dive |
| 1766 return ; done | 1958 return ; done |
| 1767 | 1959 |
| 1768 | 1960 |
| 1769 set_powersafe: | 1961 ;----------------------------------------------------------------------------- |
| 1770 movlw d'7' ; set type of alarm = battery low | 1962 ; Initialize the resettable Depth and Timer |
| 1771 movwf alarm_type ; copy to alarm register | 1963 ; |
| 1772 bsf event_occured ; set event flag | 1964 resettable_average_depth_init: |
| 1773 movlw .0 ; coding of brightness level ECO | 1965 CLRI pressure_rel_avg_trip ; prime the resettable average depth with 0 |
| 1774 movff WREG,opt_brightness ; set brightness to ECO | 1966 bra resettable_average_depth_common ; clear pressure accumulator and timer |
| 1775 return ; done | 1967 |
| 1776 | 1968 |
| 1777 | 1969 ;----------------------------------------------------------------------------- |
| 1778 clear_resettable_average_depth: | 1970 ; Reset the resettable Depth and Timer |
| 1779 ; prime the resettable average depth with 0 | 1971 ; |
| 1780 CLRI pressure_rel_avg_trip | 1972 resettable_average_depth_reset: |
| 1781 bra reset_resettable_average_depth1 | 1973 bcf request_reset_avg ; clear request |
| 1782 | 1974 MOVII pressure_rel_cur_cached,pressure_rel_avg_trip ; prime the resettable average depth |
| 1783 reset_resettable_average_depth: | 1975 ; with the current relative pressure (depth) |
| 1784 ; clear reset-average request | 1976 ;bra resettable_average_depth_common ; clear pressure accumulator and timer |
| 1785 bcf request_reset_avg | 1977 |
| 1786 | 1978 |
| 1787 ; prime the resettable average depth with the current relative pressure (depth) | 1979 ;----------------------------------------------------------------------------- |
| 1788 MOVII pressure_rel_cur_cached,pressure_rel_avg_trip | 1980 ; Helper Function - common Part for resettable Depth and Timer init/reset |
| 1789 | 1981 ; |
| 1790 reset_resettable_average_depth1: | 1982 resettable_average_depth_common: |
| 1791 ; clear the resettable depth accumulator | 1983 clrf pressure_rel_accu_trip+0 ; clear the resettable depth accumulator |
| 1792 clrf pressure_rel_accu_trip+0 | 1984 clrf pressure_rel_accu_trip+1 ; .... |
| 1793 clrf pressure_rel_accu_trip+1 | 1985 clrf pressure_rel_accu_trip+2 ; .... |
| 1794 clrf pressure_rel_accu_trip+2 | 1986 clrf pressure_rel_accu_trip+3 ; .... |
| 1795 clrf pressure_rel_accu_trip+3 | 1987 CLRI divesecs_avg_trip ; clear the resettable time accumulator |
| 1796 | 1988 return ; done |
| 1797 ; clear the resettable time accumulator | 1989 |
| 1798 CLRI divesecs_avg_trip | 1990 |
| 1799 return | 1991 ;----------------------------------------------------------------------------- |
| 1800 | 1992 ; Calculate Average Depth |
| 1801 | 1993 ; |
| 1802 calc_average_depth: | 1994 calc_average_depth: |
| 1803 ; 1. compute pressure_rel_cur_cached x 2, because this routine is called every 2nd second only | 1995 ; 1. compute pressure_rel_cur_cached x 2, because this routine is called every 2nd second only |
| 1804 | 1996 MOVII pressure_rel_cur_cached,xB ; copy current rel pressure to xB |
| 1805 ; copy current rel pressure to xB | 1997 bcf STATUS,C ; multiply rel pressure x 2 (via shift left) |
| 1806 MOVII pressure_rel_cur_cached,xB | 1998 rlcf xB+0,F ; ... |
| 1807 | 1999 rlcf xB+1,F ; ... |
| 1808 ; multiply rel pressure x 2 (via shift left) | |
| 1809 bcf STATUS,C | |
| 1810 rlcf xB+0,F | |
| 1811 rlcf xB+1,F | |
| 1812 | 2000 |
| 1813 ; 2a add (pressure_rel_cur_cached x 2) to the resettable depth accumulator | 2001 ; 2a add (pressure_rel_cur_cached x 2) to the resettable depth accumulator |
| 1814 ; will work up to 9999 mbar * 60 * 60 * 24 = 863913600 mbar (24h @ 90 m depth) | 2002 ; will work up to 9999 mbar * 60 * 60 * 24 = 863913600 mbar (24h @ 90 m depth) |
| 1815 movf xB+0,W | 2003 movf xB+0,W ; pressure_rel_accu_trip += xB |
| 1816 addwf pressure_rel_accu_trip+0,F | 2004 addwf pressure_rel_accu_trip+0,F ; ... |
| 1817 movf xB+1,W | 2005 movf xB+1,W ; ... |
| 1818 addwfc pressure_rel_accu_trip+1,F | 2006 addwfc pressure_rel_accu_trip+1,F ; ... |
| 1819 movlw .0 | 2007 movlw .0 ; ... |
| 1820 addwfc pressure_rel_accu_trip+2,F | 2008 addwfc pressure_rel_accu_trip+2,F ; ... |
| 1821 addwfc pressure_rel_accu_trip+3,F | 2009 addwfc pressure_rel_accu_trip+3,F ; ... |
| 1822 | 2010 |
| 1823 ; 2b add (pressure_rel_cur_cached x 2) to the total depth accumulator | 2011 ; 2b add (pressure_rel_cur_cached x 2) to the total depth accumulator |
| 1824 ; will work up to 9999 mbar * 60 * 60 * 24 = 863913600 mbar (24h @ 90 m depth) | 2012 ; will work up to 9999 mbar * 60 * 60 * 24 = 863913600 mbar (24h @ 90 m depth) |
| 1825 movf xB+0,W | 2013 movf xB+0,W ; pressure_rel_accu_total += xB |
| 1826 addwf pressure_rel_accu_total+0,F | 2014 addwf pressure_rel_accu_total+0,F ; ... |
| 1827 movf xB+1,W | 2015 movf xB+1,W ; ... |
| 1828 addwfc pressure_rel_accu_total+1,F | 2016 addwfc pressure_rel_accu_total+1,F ; ... |
| 1829 movlw .0 | 2017 movlw .0 ; ... |
| 1830 addwfc pressure_rel_accu_total+2,F | 2018 addwfc pressure_rel_accu_total+2,F ; ... |
| 1831 addwfc pressure_rel_accu_total+3,F | 2019 addwfc pressure_rel_accu_total+3,F ; ... |
| 1832 | 2020 |
| 1833 ; 3a compute the resettable average depth | 2021 ; 3a compute the resettable average depth |
| 1834 | 2022 movff pressure_rel_accu_trip+0,xC+0 ; get the accumulated depth |
| 1835 ; get the accumulated depth | 2023 movff pressure_rel_accu_trip+1,xC+1 ; ... |
| 1836 movff pressure_rel_accu_trip+0,xC+0 | 2024 movff pressure_rel_accu_trip+2,xC+2 ; ... |
| 1837 movff pressure_rel_accu_trip+1,xC+1 | 2025 movff pressure_rel_accu_trip+3,xC+3 ; ... |
| 1838 movff pressure_rel_accu_trip+2,xC+2 | 2026 MOVII divesecs_avg_trip,xB ; get the accumulated time |
| 1839 movff pressure_rel_accu_trip+3,xC+3 | |
| 1840 | |
| 1841 ; get the accumulated time | |
| 1842 MOVII divesecs_avg_trip,xB | |
| 1843 | 2027 |
| 1844 ; divide accumulated depth by accumulated time | 2028 ; divide accumulated depth by accumulated time |
| 1845 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | 2029 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder |
| 1846 | 2030 |
| 1847 ; store result | 2031 ; store result |
| 1848 MOVII xC,pressure_rel_avg_trip ; resettable average depth | 2032 MOVII xC,pressure_rel_avg_trip ; resettable average depth |
| 1849 btfss count_divetime ; is dive time counted? | 2033 btfss count_divetime ; is dive time counted? |
| 1850 return ; NO (e.g. too shallow) | 2034 return ; NO (e.g. too shallow) |
| 1851 | 2035 |
| 1852 ; 3b compute the dive total average depth | 2036 ; 3b compute the dive total average depth |
| 1853 | 2037 movff pressure_rel_accu_total+0,xC+0 ; get accumulated depth |
| 1854 ; get accumulated depth | 2038 movff pressure_rel_accu_total+1,xC+1 ; ... |
| 1855 movff pressure_rel_accu_total+0,xC+0 | 2039 movff pressure_rel_accu_total+2,xC+2 ; ... |
| 1856 movff pressure_rel_accu_total+1,xC+1 | 2040 movff pressure_rel_accu_total+3,xC+3 ; ... |
| 1857 movff pressure_rel_accu_total+2,xC+2 | 2041 MOVII divesecs_avg_total,xB ; get accumulated time |
| 1858 movff pressure_rel_accu_total+3,xC+3 | |
| 1859 | |
| 1860 ; get accumulated time | |
| 1861 MOVII divesecs_avg_total,xB | |
| 1862 | 2042 |
| 1863 ; divide accumulated depth by accumulated time | 2043 ; divide accumulated depth by accumulated time |
| 1864 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder | 2044 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder |
| 1865 | 2045 |
| 1866 ; store result | 2046 ; store result |
| 1867 MOVII xC,pressure_rel_avg_total ; total dive average depth | 2047 MOVII xC,pressure_rel_avg_total ; total dive average depth |
| 1868 | 2048 |
| 1869 btfsc request_reset_avg ; shall reset the resettable average depth? | 2049 btfsc request_reset_avg ; shall reset the resettable average depth? |
| 1870 rcall reset_resettable_average_depth ; YES - reset the resettable average depth | 2050 rcall resettable_average_depth_reset ; YES - reset the resettable average depth |
| 1871 | 2051 |
| 1872 TSTOSC opt_2ndDepthDisp ; drawing average depth instead of max depth? | 2052 TSTOSC opt_2ndDepthDisp ; drawing average depth instead of max depth? |
| 1873 bsf FLAG_TFT_depth_maximum ; YES - flag to update display | 2053 bsf FLAG_TFT_depth_maximum ; YES - flag to update display |
| 1874 | 2054 |
| 1875 btfsc FLAG_gauge_mode ; in gauge mode? | 2055 btfsc FLAG_gauge_mode ; in gauge mode? |
| 1876 bsf FLAG_TFT_depth_maximum ; YES - flag to update display (needed for alternative layout) | 2056 bsf FLAG_TFT_depth_maximum ; YES - flag to update display (needed for alternative layout) |
| 1877 | 2057 |
| 1878 return ; done | 2058 return ; done |
| 1879 | 2059 |
| 1880 | 2060 |
| 1881 test_switches_divemode: ; checks switches in dive mode, called every second | 2061 ;----------------------------------------------------------------------------- |
| 2062 ; Check Switches, execute Pre-Menu Items (called every second) | |
| 2063 ; | |
| 2064 test_switches_divemode: | |
| 1882 btfsc dive_main_menu ; dive mode menu shown? | 2065 btfsc dive_main_menu ; dive mode menu shown? |
| 1883 bra test_switches_divemode_menu ; YES - use menu processor | 2066 bra test_switches_divemode_menu ; YES - use menu processor |
| 1884 btfsc switch_left ; NO - left button pressed? | 2067 btfsc switch_left ; NO - left button pressed? |
| 1885 goto menuview_toggle ; YES - menu or simulator tasks; and return... | 2068 goto menuview_toggle ; YES - step through pre-menu |
| 1886 btfss switch_right ; NO - right button pressed? | 2069 btfss switch_right ; NO - right button pressed? |
| 1887 return ; NO - done | 2070 return ; NO - done |
| 1888 bcf switch_right ; YES - clear button event | 2071 bcf switch_right ; YES - clear button event |
| 1889 tstfsz active_premenu ; - any pre-menu task selected? | 2072 tstfsz active_premenu ; - any pre-menu task selected? |
| 1890 bra test_switches_divemode1 ; YES - do option or menu tasks | 2073 bra test_switches_divemode1 ; YES - execute a pre-menu item |
| 1891 bsf request_next_custview ; NO - request next custom view | 2074 bsf request_next_custview ; NO - request next custom view |
| 1892 return ; - done | 2075 return ; - done |
| 1893 | 2076 |
| 1894 test_switches_divemode_menu: | 2077 test_switches_divemode_menu: |
| 1895 btfsc switch_left ; left button pressed? | 2078 btfsc switch_left ; left button pressed? |
| 1896 bra test_switches_divemode_menu2 ; YES - move cursor | 2079 bra test_switches_divemode_menu2 ; YES - move cursor |
| 1897 btfsc switch_right ; NO - right button pressed? | 2080 btfsc switch_right ; NO - right button pressed? |
| 1898 bra test_switches_divemode_menu3 ; YES - enter sub-menu or do something | 2081 bra test_switches_divemode_menu3 ; YES - do a menu operation |
| 1899 btfss update_menu ; NO - shall update the menu? | 2082 btfss update_menu ; NO - shall update the menu? |
| 1900 return ; NO - done | 2083 return ; NO - done |
| 1901 bcf update_menu ; YES - clear request | 2084 bcf update_menu ; YES - clear request |
| 1902 goto menu_draw_lines_divemode ; - redraw the menu (to update color coding) and return | 2085 goto menu_draw_lines_divemode ; - redraw the menu (to update color coding) and return |
| 1903 | 2086 |
| 1904 test_switches_divemode_menu1: | 2087 test_switches_divemode_menu1: |
| 1905 clrf menu_pos_cur | 2088 clrf menu_pos_cur ; reset menu item number to zero |
| 1906 test_switches_divemode_menu2: | 2089 test_switches_divemode_menu2: |
| 1907 bcf switch_left | 2090 bcf switch_left ; clear left button event |
| 1908 incf menu_pos_cur,F | 2091 incf menu_pos_cur,F ; increment menu item number |
| 1909 incf menu_pos_max,W ; menu_pos_max + 1 -> WREG | 2092 incf menu_pos_max,W ; get number of items + 1 into WREG |
| 1910 cpfslt menu_pos_cur ; > menu_pos_max ? | 2093 cpfslt menu_pos_cur ; incremented item number > number of items ? |
| 1911 bra test_switches_divemode_menu1 ; YES - set to 1 | 2094 bra test_switches_divemode_menu1 ; YES - restart from first item |
| 1912 call TFT_show_menu_cursor_divemode ; update the cursor | 2095 call menu_draw_cursor_dive ; draw cursor at new position |
| 1913 movlw divemode_timeout_mainmenu ; get timeout for main menu | 2096 movlw divemode_timeout_mainmenu ; get timeout for main menu |
| 1914 call reset_timeout_time ; reset timeout | 2097 call restart_timeout_time ; restart the timeout |
| 1915 return | 2098 return ; done |
| 1916 | 2099 |
| 1917 test_switches_divemode_menu3: ; enter sub-menu or do something | 2100 test_switches_divemode_menu3: |
| 1918 bcf switch_right | 2101 bcf switch_right ; clear right button event |
| 1919 ; decf menu_pos_cur,F ; menu_processor needs 0-5... | 2102 goto do_line_menu ; Warning! trashes STKPTR and returns to |
| 1920 goto do_line_menu ; Warning! trashes STKPTR and returns to diveloop_menu_exit | 2103 ; divemode_option_divemenu_return |
| 1921 | 2104 |
| 1922 test_switches_divemode1: | 2105 test_switches_divemode1: |
| 1923 movlw divemode_timeout_premenu ; get timeout for pre-menu | 2106 movlw divemode_timeout_premenu ; get timeout for pre-menu |
| 1924 call reset_timeout_time ; reset timeout | 2107 call restart_timeout_time ; restart the timeout |
| 1925 movff active_premenu,WREG ; get number of active pre-menu | 2108 movf active_premenu,W ; get active pre-menu item |
| 1926 dcfsnz WREG,F | 2109 dcfsnz WREG,F |
| 1927 bra divemode_option_gaschange ; 1: switch to the the "better gas" / "better diluent" | 2110 bra divemode_option_gaschange ; 1: switch to the the "better gas" / "better diluent" |
| 1928 dcfsnz WREG,F | 2111 dcfsnz WREG,F |
| 1929 bra divemode_option_divemenu ; 2: enter dive mode menu | 2112 bra divemode_option_ackn ; 2: acknowledge current advice, attention, or warning |
| 2113 dcfsnz WREG,F | |
| 2114 bra divemode_option_divemenu ; 3: enter dive mode menu | |
| 1930 dcfsnz WREG,F | 2115 dcfsnz WREG,F |
| 1931 IFDEF _cave_mode | 2116 IFDEF _cave_mode |
| 1932 bra divemode_option_cavemenu ; 3: enter cave mode menu | 2117 bra divemode_option_cavemenu ; 4: enter cave mode menu |
| 1933 ELSE | 2118 ELSE |
| 1934 return ; 3: (no cave mode compiled in) | 2119 return ; 4: (no cave mode compiled in) |
| 1935 ENDIF | 2120 ENDIF |
| 1936 dcfsnz WREG,F | 2121 dcfsnz WREG,F |
| 1937 bra divemode_option_sim_quit ; 4: simulation - quit | 2122 bra divemode_option_sim_quit ; 5: quit simulator mode |
| 1938 dcfsnz WREG,F | 2123 dcfsnz WREG,F |
| 1939 bra divemode_option_sim_down ; 5: simulation - descent | 2124 bra divemode_option_sim_down ; 6: simulator mode - descent |
| 1940 dcfsnz WREG,F | 2125 dcfsnz WREG,F |
| 1941 bra divemode_option_sim_up ; 6: simulation - ascend | 2126 bra divemode_option_sim_up ; 7: simulator mode - ascend |
| 1942 dcfsnz WREG,F | 2127 dcfsnz WREG,F |
| 1943 bra divemode_option_sim_time ; 7: simulation - +5 min | 2128 bra divemode_option_sim_time ; 8: simulator mode - +5 min |
| 1944 dcfsnz WREG,F | 2129 dcfsnz WREG,F |
| 1945 bra divemode_option_apnoe_quit ; 8: apnoe - quit | 2130 bra divemode_option_apnoe_quit ; 9: quit apnoe dive |
| 1946 dcfsnz WREG,F | 2131 dcfsnz WREG,F |
| 1947 bra divemode_option_gauge_reset ; 9: gauge - reset stopwatch and avg depth | 2132 bra divemode_option_gauge_reset ; 10: reset stopwatch and avg depth (gauge mode) |
| 1948 dcfsnz WREG,F | 2133 dcfsnz WREG,F |
| 1949 IFDEF _compass | 2134 IFDEF _compass |
| 1950 bra divemode_option_course ; 10: store heading | 2135 bra divemode_option_course ; 11: set bearing |
| 1951 ELSE | 2136 ELSE |
| 1952 return ; 10: (no compass compiled in) | 2137 return ; 11: (no compass compiled in) |
| 1953 ENDIF | 2138 ENDIF |
| 1954 dcfsnz WREG,F | 2139 dcfsnz WREG,F |
| 1955 bra divemode_option_layout ; 11: switch layout | 2140 bra divemode_option_layout ; 12: switch layout |
| 1956 return | 2141 return ; catch illegal item number |
| 1957 | 2142 |
| 1958 | 2143 |
| 2144 ; item 1: switch to the the "better gas" / "better diluent" | |
| 2145 ; | |
| 2146 divemode_option_gaschange: | |
| 2147 IFDEF _ccr_pscr | |
| 2148 btfsc FLAG_oc_mode ; in OC mode? | |
| 2149 bra divemode_option_gaschange_oc ; YES | |
| 2150 btfsc bailout_mode ; in bailout? | |
| 2151 bra divemode_option_gaschange_oc ; YES | |
| 2152 | |
| 2153 ; in CCR/pSCR mode and not in bailout | |
| 2154 movff best_dil_number,menu_pos_cur ; select best diluent | |
| 2155 bcf better_dil_available ; clear flag immediately | |
| 2156 bra divemode_option_gaschange3 ; continue with common part | |
| 2157 ENDIF | |
| 2158 divemode_option_gaschange_oc: | |
| 2159 movff best_gas_number,menu_pos_cur ; select best gas | |
| 2160 bcf better_gas_available ; clear better gas cue | |
| 2161 | |
| 2162 divemode_option_gaschange3 | |
| 2163 bsf request_gas_change ; request a gas/diluent change | |
| 2164 goto menuview_toggle_reset ; terminate the pre-menu (and return) | |
| 2165 | |
| 2166 | |
| 2167 ; item 2: acknowledge current advice, attention, or warning | |
| 2168 ; | |
| 2169 divemode_option_ackn: | |
| 2170 btfss sign_warning ; any warning active? | |
| 2171 bra divemode_option_ackn_attn ; NO - check for active attentions | |
| 2172 movff DM_flags_war1_det,DM_flags_war1_ack ; YES - memorize active warnings as acknowledged | |
| 2173 movff DM_flags_war2_det,DM_flags_war2_ack ; - ... | |
| 2174 bra divemode_option_ackn_common ; - update screen | |
| 2175 | |
| 2176 divemode_option_ackn_attn: | |
| 2177 btfss sign_attention ; any attention active? | |
| 2178 bra divemode_option_ackn_advc ; NO - must be active advice then | |
| 2179 movff DM_flags_att1_det,DM_flags_att1_ack ; YES - memorize active attentions as acknowledged | |
| 2180 movff DM_flags_att2_det,DM_flags_att2_ack ; - ... | |
| 2181 movff DM_flags_att3_det,DM_flags_att3_ack ; - ... | |
| 2182 bra divemode_option_ackn_common ; - update screen | |
| 2183 | |
| 2184 divemode_option_ackn_advc: | |
| 2185 movff DM_flags_advc_det,DM_flags_advc_ack ; memorize active advices as acknowledged | |
| 2186 ;bra divemode_option_ackn_common ; update screen | |
| 2187 | |
| 2188 divemode_option_ackn_common: | |
| 2189 call menuview_toggle_reset ; terminate pre-menu | |
| 2190 call divemode_check_sign ; compute if the advice / attention / warning sign shall be shown | |
| 2191 btfsc FLAG_TFT_sign_show ; shall show the advice / attention / warning sign? | |
| 2192 goto TFT_divemode_sign_show ; YES - show sign and return | |
| 2193 goto TFT_divemode_sign_clear ; NO - clear sign and return | |
| 2194 | |
| 2195 | |
| 2196 ; item 3: enter dive mode menu | |
| 2197 ; | |
| 2198 divemode_option_divemenu: | |
| 2199 btfss divemode ; in dive mode? | |
| 2200 goto menuview_toggle_reset ; NO - block menu, terminate the pre-menu | |
| 2201 call TFT_clear_divemode_menu ; YES - clear menu area | |
| 2202 bcf dive_pre_menu ; - set pre-menu as not shown anymore | |
| 2203 goto do_main_divemenu ; - hand over to menu processor | |
| 2204 | |
| 2205 | |
| 2206 ; item 4: enter cave mode menu | |
| 2207 ; | |
| 2208 IFDEF _cave_mode | |
| 2209 divemode_option_cavemenu: | |
| 2210 btfss divemode ; in dive mode? | |
| 2211 goto menuview_toggle_reset ; NO - block menu, terminate the pre-menu | |
| 2212 call TFT_clear_divemode_menu ; YES - clear menu area | |
| 2213 bcf dive_pre_menu ; - set pre-menu as not shown anymore | |
| 2214 goto do_main_cavemenu ; - hand over to menu processor | |
| 2215 ENDIF | |
| 2216 | |
| 2217 | |
| 2218 ; item 5: quit simulator mode | |
| 2219 ; | |
| 2220 divemode_option_sim_quit: | |
| 2221 clrf simulatormode_depth ; set target depth to zero | |
| 2222 bsf quit_simulatormode ; request ISR to end simulator mode | |
| 2223 call menuview_toggle_reset ; terminate the pre-menu | |
| 2224 btfsc FLAG_apnoe_mode ; in apnoe mode? | |
| 2225 bcf divemode ; YES - force end of dive mode | |
| 2226 return ; done | |
| 2227 | |
| 2228 | |
| 2229 ; item 6: simulator mode - descent 1 meter | |
| 2230 ; | |
| 2231 divemode_option_sim_down: | |
| 2232 movlw ostc_depth_max-1 ; load depth limit into WREG | |
| 2233 cpfsgt simulatormode_depth ; simulated depth < limit ? | |
| 2234 incf simulatormode_depth,F ; YES - increment simulated depth | |
| 2235 return ; done | |
| 2236 | |
| 2237 | |
| 2238 ; item 7: simulator mode - ascent 1 meter | |
| 2239 ; | |
| 2240 divemode_option_sim_up: | |
| 2241 tstfsz simulatormode_depth ; simulated depth > 0 ? | |
| 2242 decf simulatormode_depth,F ; YES - decrement simulated depth | |
| 2243 return ; done | |
| 2244 | |
| 2245 | |
| 2246 ; item 8: simulator mode - +5 min | |
| 2247 ; | |
| 2248 divemode_option_sim_time: | |
| 2249 movff char_I_sim_advance_time,WREG ; get mailbox content | |
| 2250 tstfsz WREG ; mailbox clear (=0) ? | |
| 2251 return ; NO - still having a pending +5' request, refuse new request | |
| 2252 bra advance_time ; YES - advance time and return | |
| 2253 | |
| 2254 | |
| 2255 ; item 9: quit apnoe dive | |
| 2256 ; | |
| 2257 divemode_option_apnoe_quit: | |
| 2258 btfsc sensor_override_active ; in simulator mode? | |
| 2259 bra divemode_option_sim_quit ; YES - use simulator quit procedure | |
| 2260 bcf divemode ; NO - force end of dive mode | |
| 2261 return ; - done | |
| 2262 | |
| 2263 | |
| 2264 ; item 10: reset stopwatch and avg depth (gauge mode only) | |
| 2265 ; | |
| 2266 divemode_option_gauge_reset: | |
| 2267 bsf request_reset_avg ; request reset of average depth | |
| 2268 goto menuview_toggle_reset ; terminate pre-menu and return | |
| 2269 | |
| 2270 | |
| 2271 ; item 11: set bearing | |
| 2272 ; | |
| 2273 IFDEF _compass | |
| 2274 divemode_option_course: | |
| 2275 MOVII compass_heading_shown,compass_bearing | |
| 2276 bsf compass_bearing_set ; set flag to show heading | |
| 2277 goto menuview_toggle_reset ; terminate the pre-menu and return | |
| 2278 ENDIF | |
| 2279 | |
| 2280 | |
| 2281 ; item 12: switch layout | |
| 2282 ; | |
| 2283 divemode_option_layout: | |
| 2284 call menuview_toggle_reset ; terminate the pre-menu | |
| 2285 call TFT_ClearScreen ; clear the whole screen | |
| 2286 btg alt_layout_active ; toggle layout | |
| 2287 | |
| 2288 bcf depth_color_last ; set warning or attention on the depth not shown | |
| 2289 bcf depth_inverse_last ; set depth displayed in inverse as not shown | |
| 2290 bcf sign_shown ; set warning/attention/advice sign not shown | |
| 2291 bcf velocity_active_num ; set numerical vertical velocity display not shown | |
| 2292 bcf velocity_active_vsi ; set vertical vertical velocity display not shown | |
| 2293 bcf safety_stop_active ; set safety stop not shown | |
| 2294 | |
| 2295 bsf FLAG_TFT_divemode_mask ; request redraw of dive screen mask | |
| 2296 bsf FLAG_TFT_divetime ; request redraw of dive time | |
| 2297 bsf FLAG_TFT_depth_current ; request redraw of current depth | |
| 2298 bsf FLAG_TFT_depth_maximum ; request redraw of maximum depth | |
| 2299 bsf FLAG_TFT_active_gas_divemode; request redraw of gas and setpoint | |
| 2300 bsf FLAG_TFT_temperature ; request redraw of temperature | |
| 2301 bsf FLAG_TFT_customview_callup ; request redraw of custom view | |
| 2302 | |
| 2303 goto request_redraw_NDL_deco_data; request redraw of NDL/deco data and return | |
| 2304 | |
| 2305 | |
| 2306 ;----------------------------------------------------------------------------- | |
| 2307 ; Helper Function - advance Time by 5 Minutes (Simulator Mode) | |
| 2308 ; | |
| 2309 advance_time: | |
| 2310 ; advance tissues pressures and deco obligation by 5 minutes | |
| 2311 movlw .5 ; + 5 minutes | |
| 2312 movff WREG,char_I_sim_advance_time ; copy to mailbox | |
| 2313 call restart_deco_engine ; condition deco engine to execute the +5 minutes | |
| 2314 | |
| 2315 bcf count_divetime ; stop dive time incrementing in ISR | |
| 2316 ADDLI .5,counted_divetime_mins ; add 5 minutes to counted_divetime_mins | |
| 2317 ADDLI .300,total_divetime_secs ; add 5 minutes (300 seconds) to total_divetime_secs | |
| 2318 bsf count_divetime ; continue dive time incrementing in ISR | |
| 2319 | |
| 2320 ADDLI .300,divesecs_avg_trip ; add 5 minutes (300 seconds) to resettable time accumulator | |
| 2321 ADDLI .300,divesecs_avg_total ; add 5 minutes (300 seconds) to total time accumulator | |
| 2322 | |
| 2323 MOVII pressure_rel_cur_cached,xB ; calculate 300 x depth in mbar (300 = 5 min * 60 sec/min) | |
| 2324 MOVLI .300,xA ; ... | |
| 2325 call mult16x16 ; xC = xA * xB | |
| 2326 | |
| 2327 movf xC+0,W ; add to the resettable depth accumulator | |
| 2328 addwf pressure_rel_accu_trip+0,F ; ... | |
| 2329 movf xC+1,W ; ... | |
| 2330 addwfc pressure_rel_accu_trip+1,F ; ... | |
| 2331 movf xC+2,W ; ... | |
| 2332 addwfc pressure_rel_accu_trip+2,F ; ... | |
| 2333 movf xC+3,W ; ... | |
| 2334 addwfc pressure_rel_accu_trip+3,F ; ... | |
| 2335 | |
| 2336 movf xC+0,W ; add to the total depth accumulator | |
| 2337 addwf pressure_rel_accu_total+0,F ; ... | |
| 2338 movf xC+1,W ; ... | |
| 2339 addwfc pressure_rel_accu_total+1,F ; ... | |
| 2340 movf xC+2,W ; ... | |
| 2341 addwfc pressure_rel_accu_total+2,F ; ... | |
| 2342 movf xC+3,W ; ... | |
| 2343 addwfc pressure_rel_accu_total+3,F ; ... | |
| 2344 | |
| 2345 IFDEF _cave_mode | |
| 2346 ; update backtracking data | |
| 2347 btfss cave_mode ; cave mode switched on? | |
| 2348 bra divemode_option_sim_time_exit ; NO - skip backtracking depth recording | |
| 2349 btfsc dive_turned ; YES - dive turned? | |
| 2350 bra divemode_option_sim_time_exit ; YES - skip backtracking depth recording | |
| 2351 ;bra divemode_option_sim_time_exec ; NO - update backtracking depth recording | |
| 2352 | |
| 2353 divemode_option_sim_time_exec: | |
| 2354 movff backtrack_deltatime,hi ; backup time elapsed since last depth recording | |
| 2355 movlw .5 ; configure 5 minutes | |
| 2356 movwf lo ; use lo as loop counter | |
| 2357 | |
| 2358 divemode_option_sim_time_loop: | |
| 2359 call write_backtrack_1min_depth ; store a backtracking depth data set | |
| 2360 btfsc backtrack_entire_full ; backtracking storage entirely used up? | |
| 2361 bra divemode_option_sim_time_exit ; YES - abort backtracking depth recording | |
| 2362 decfsz lo,F ; NO - decrement loop counter, did it became zero? | |
| 2363 bra divemode_option_sim_time_loop ; NO - loop | |
| 2364 ;bra divemode_option_sim_time_done ; YES - done | |
| 2365 | |
| 2366 divemode_option_sim_time_done: | |
| 2367 movff hi,backtrack_deltatime ; restore time elapsed since last depth recording | |
| 2368 ENDIF ; _cave_mode | |
| 2369 | |
| 2370 divemode_option_sim_time_exit: | |
| 2371 return ; done (leaving option avail for repeated selection) | |
| 2372 | |
| 2373 | |
| 2374 ;----------------------------------------------------------------------------- | |
| 2375 ; Change Gas / Diluent | |
| 2376 ; | |
| 1959 gas_switch_common: | 2377 gas_switch_common: |
| 1960 bcf request_gas_change ; clear request flag | 2378 bcf request_gas_change ; clear request flag |
| 1961 IFDEF _ccr_pscr | 2379 IFDEF _ccr_pscr |
| 1962 btfss request_back_to_loop ; is a switchback from OC bailout to loop requested? | 2380 btfss request_back_to_loop ; is a switchback from OC bailout to loop requested? |
| 1963 bra gas_switched_common0 ; NO - continue with checking if selected gas is valid | 2381 bra gas_switched_common0 ; NO - continue with checking if selected gas is valid |
| 1964 bcf request_back_to_loop ; YES - clear flag | 2382 bcf request_back_to_loop ; YES - clear flag |
| 1965 movff active_dil,menu_pos_cur ; - reload last diluent | 2383 movff active_dil,menu_pos_cur ; - reload last diluent |
| 1966 bra gas_switched_common1 ; - continue with common part | 2384 bra gas_switched_common1 ; - continue with common part |
| 1967 ENDIF | 2385 ENDIF |
| 1968 gas_switched_common0: | 2386 gas_switched_common0: |
| 1969 tstfsz menu_pos_cur ; menu_pos_cur = 0 ? | 2387 tstfsz menu_pos_cur ; menu_pos_cur = 0 ? |
| 1970 bra gas_switched_common1 ; NO - valid gas | 2388 bra gas_switched_common1 ; NO - valid gas |
| 1971 return ; YES - something went wrong, invalid gas, abort | 2389 return ; YES - something went wrong, invalid gas, abort |
| 1972 gas_switched_common1: | 2390 gas_switched_common1: |
| 1973 movf menu_pos_cur,W ; get selected gas into WREG (1-5) | 2391 movf menu_pos_cur,W ; get selected gas into WREG (1-5) |
| 1974 IFDEF _ccr_pscr | 2392 IFDEF _ccr_pscr |
| 1975 btfsc FLAG_oc_mode ; in OC mode? | 2393 btfsc FLAG_oc_mode ; in OC mode? |
| 1976 bra gas_switched_common_OC ; YES | 2394 bra gas_switched_common_OC ; YES |
| 1977 btfsc bailout_mode ; in bailout? | 2395 btfsc bailout_mode ; in bailout? |
| 1978 bra gas_switched_common_OC ; YES | 2396 bra gas_switched_common_OC ; YES |
| 1979 gas_switched_common_loop: ; NO to both - must be loop mode then | 2397 gas_switched_common_loop: ; NO to both - must be loop mode then |
| 1980 rcall setup_dil_registers ; set up real tissues with WREG = diluent 1-6 | 2398 call setup_dil_registers ; set up real tissues with WREG = diluent 1-6 |
| 1981 rcall deco_setup_cc_diluents ; set up deco planning with WREG = diluent 1-6 | 2399 call deco_setup_cc_diluents ; set up deco planning with WREG = diluent 1-6 |
| 1982 bra gas_switched_common3 ; continue with common part | 2400 bra gas_switched_common3 ; continue with common part |
| 1983 ENDIF ; _ccr_pscr | 2401 ENDIF ; _ccr_pscr |
| 2402 | |
| 1984 gas_switched_common_OC: | 2403 gas_switched_common_OC: |
| 1985 rcall setup_gas_registers ; set up real tissues with WREG = gas 1-6 | 2404 call setup_gas_registers ; set up real tissues with WREG = gas 1-6 |
| 1986 rcall deco_setup_oc_gases ; set up deco planning with WREG = gas 1-6 | 2405 call deco_setup_oc_gases ; set up deco planning with WREG = gas 1-6 |
| 1987 ;bra gas_switched_common3 ; continue with common part | 2406 ;bra gas_switched_common3 ; continue with common part |
| 2407 | |
| 1988 gas_switched_common3: | 2408 gas_switched_common3: |
| 1989 banksel int_O_breathed_ppO2 | 2409 banksel int_O_breathed_ppO2 |
| 1990 bcf int_O_breathed_ppO2+1,int_low_flag ; | clear all flags that control color-coding | 2410 bcf int_O_breathed_ppO2+1,int_low_flag ; | clear all flags that control color-coding |
| 1991 bcf int_O_breathed_ppO2+1,int_high_flag ; | to have the new gas initially displayed in | 2411 bcf int_O_breathed_ppO2+1,int_high_flag ; | to have the new gas initially displayed in |
| 1992 bcf int_O_breathed_ppO2+1,int_attention_flag ; | memo color instead of a warning or attention | 2412 bcf int_O_breathed_ppO2+1,int_attention_flag ; | memo color instead of a warning or attention |
| 2002 ENDIF | 2422 ENDIF |
| 2003 bsf event_gas_change ; (NO) - set gas change event (normal change) | 2423 bsf event_gas_change ; (NO) - set gas change event (normal change) |
| 2004 goto restart_deco_engine_wo_ceiling ; abort running deco calculations and restart (and return) | 2424 goto restart_deco_engine_wo_ceiling ; abort running deco calculations and restart (and return) |
| 2005 | 2425 |
| 2006 | 2426 |
| 2427 ;----------------------------------------------------------------------------- | |
| 2428 ; Reload the current Gas / Diluent | |
| 2429 ; | |
| 2007 gas_update_common: | 2430 gas_update_common: |
| 2008 bcf request_gas_update ; reset the request flag | 2431 bcf request_gas_update ; reset the request flag |
| 2009 movf active_gas,W ; load WREG with currently used gas | 2432 movf active_gas,W ; load WREG with currently used gas |
| 2010 IFDEF _ccr_pscr | 2433 IFDEF _ccr_pscr |
| 2011 btfsc FLAG_oc_mode ; in OC mode? | 2434 btfsc FLAG_oc_mode ; in OC mode? |
| 2016 bra gas_switched_common_loop ; - set up diluent gases | 2439 bra gas_switched_common_loop ; - set up diluent gases |
| 2017 ELSE | 2440 ELSE |
| 2018 bra gas_switched_common_OC ; reload OC gases | 2441 bra gas_switched_common_OC ; reload OC gases |
| 2019 ENDIF | 2442 ENDIF |
| 2020 | 2443 |
| 2021 ; Code to pass all parameters to the C code | 2444 |
| 2022 | 2445 ;----------------------------------------------------------------------------- |
| 2023 global get_first_gas_to_WREG | 2446 ; Toggle GF/aGF (finalization) |
| 2024 get_first_gas_to_WREG: ; gets first gas (1-5) into WREG | 2447 ; |
| 2025 lfsr FSR1,opt_gas_type ; load base address of the gas types | 2448 divemodemode_togglegf: |
| 2026 clrf lo ; start with gas 0 | 2449 bcf request_toggle_GF ; clear request flag |
| 2027 get_first_gas_to_WREG2: | 2450 goto restart_deco_engine ; restart the deco engine and return |
| 2028 movf lo,W ; set index | 2451 |
| 2029 movf PLUSW1,W ; get type of gas (0=Disabled, 1=First, 2=Travel, 3=Deco) | 2452 |
| 2030 sublw .1 ; is it of type First? | 2453 ;----------------------------------------------------------------------------- |
| 2031 bz get_first_gas_to_WREG3 ; YES - found the First gas | 2454 ; Set a Marker in the Dive Profile |
| 2032 incf lo,F ; NO - increment index | 2455 ; |
| 2033 movlw NUM_GAS+1 ; - get highest index+1 | 2456 set_logbook_marker: |
| 2034 cpfseq lo ; - all gases checked? | 2457 bcf request_set_marker ; clear request flag |
| 2035 bra get_first_gas_to_WREG2 ; NO - not yet | 2458 movlw d'6' ; set type of alarm: manual marker |
| 2036 movlw .1 ; YES - default to gas 1 | 2459 movwf alarm_type ; copy to alarm register |
| 2037 movff WREG,opt_gas_type+0 ; - force it to be of type First | 2460 bsf event_occured ; set event flag |
| 2038 return ; - done | |
| 2039 get_first_gas_to_WREG3: | |
| 2040 movf lo,W ; copy index of gas found to be the First to WREG | |
| 2041 incf WREG,W ; turn index into gas number (0-4 -> 1-5) | |
| 2042 return ; done | 2461 return ; done |
| 2043 | 2462 |
| 2044 ;============================================================================= | 2463 |
| 2045 | 2464 ;----------------------------------------------------------------------------- |
| 2046 IFDEF _ccr_pscr | |
| 2047 | |
| 2048 global get_first_dil_to_WREG | |
| 2049 get_first_dil_to_WREG: ; gets first dil (1-5) into WREG | |
| 2050 lfsr FSR1,opt_dil_type ; load base address of the dil types | |
| 2051 clrf lo ; start with dil 0 | |
| 2052 get_first_dil_to_WREG2: | |
| 2053 movf lo,W ; set index | |
| 2054 movf PLUSW1,W ; get type of Dil (0=Disabled, 1=First, 2=Normal) | |
| 2055 sublw .1 ; is it of type First? | |
| 2056 bz get_first_dil_to_WREG3 ; YES - found the First dil | |
| 2057 incf lo,F ; NO - increment index | |
| 2058 movlw NUM_GAS+1 ; - get highest index+1 | |
| 2059 cpfseq lo ; - dils checked? | |
| 2060 bra get_first_dil_to_WREG2 ; NO - not yet | |
| 2061 movlw .1 ; YES - default to dil 1 | |
| 2062 movff WREG,opt_dil_type+0 ; - force it to be of type First | |
| 2063 return ; - done | |
| 2064 get_first_dil_to_WREG3: | |
| 2065 movf lo,W ; copy index of dil found to be the First to WREG | |
| 2066 incf WREG,W ; turn index into dil number (0-4 -> 1-5) | |
| 2067 return ; done | |
| 2068 | |
| 2069 ENDIF | |
| 2070 | |
| 2071 ;============================================================================= | |
| 2072 | |
| 2073 global deco_setup_oc_gases | |
| 2074 deco_setup_oc_gases: ; with currently breathed gas in WREG (1-5 or 6) | |
| 2075 movff char_O_deco_status,lo ; working copy of char_O_deco_status in bank common | |
| 2076 deco_setup_oc_gases_pre: ; entry point with lo preloaded | |
| 2077 movff WREG,char_I_current_gas_num ; set gas to start with when doing the deco calculations | |
| 2078 ; | |
| 2079 ; Memory Map: | |
| 2080 ; --------------------------------------------------------------------------------- | |
| 2081 ; opt_gas_O2_ratio res NUM_GAS | char_I_deco_O2_ratio res NUM_GAS | |
| 2082 ; opt_dil_O2_ratio res NUM_GAS | | |
| 2083 ; opt_gas_He_ratio res NUM_GAS | char_I_deco_He_ratio res NUM_GAS | |
| 2084 ; opt_dil_He_ratio res NUM_GAS | | |
| 2085 ; opt_gas_type res NUM_GAS | char_I_deco_gas_type res NUM_GAS | |
| 2086 ; opt_dil_type res NUM_GAS | | |
| 2087 ; opt_gas_change res NUM_GAS | char_I_deco_gas_change res NUM_GAS | |
| 2088 ; opt_dil_change res NUM_GAS | | |
| 2089 ; | |
| 2090 lfsr FSR2,char_I_deco_O2_ratio ; load FSR2 with base address of char_I_deco_O2_ratio | |
| 2091 ; FSR2 will step through all char_I_deco_... vars | |
| 2092 lfsr FSR1,opt_gas_O2_ratio ; load FSR1 with base address of opt_gas_O2_ratio | |
| 2093 rcall deco_setup_copy ; copy all OC O2 ratios | |
| 2094 lfsr FSR1,opt_gas_He_ratio ; load FSR1 with base address of opt_gas_He_ratio | |
| 2095 rcall deco_setup_copy ; copy all OC He ratios | |
| 2096 lfsr FSR1,opt_gas_type ; load FSR1 with base address of opt_gas_type | |
| 2097 rcall deco_setup_copy ; copy all gas types | |
| 2098 lfsr FSR1,opt_gas_change ; load FSR1 with base address of opt_gas_change | |
| 2099 rcall deco_setup_copy ; copy all gas change depths | |
| 2100 ; switch deco engine to oc mode: | |
| 2101 bcf lo,DECO_MODE_PSCR_FLAG ; - clear the pSCR-mode flag (may not be set, but never mind) | |
| 2102 bcf lo,DECO_MODE_LOOP_FLAG ; - clear the loop/CCR-mode flag | |
| 2103 movff lo,char_O_deco_status ; - bank safe write-back of char_O_deco_status | |
| 2104 return ; done | |
| 2105 | |
| 2106 ;============================================================================= | |
| 2107 | |
| 2108 IFDEF _ccr_pscr | |
| 2109 | |
| 2110 global deco_setup_cc_diluents | |
| 2111 deco_setup_cc_diluents: ; with currently breathed diluent in WREG (1-5 or 6) | |
| 2112 movff char_O_deco_status,lo ; working copy of char_O_deco_status in bank common | |
| 2113 deco_setup_cc_diluents_pre: ; entry point with lo preloaded | |
| 2114 btfsc bailout_mode ; check if in bailout condition | --------------- FOR SAFETY ONLY -------------- | |
| 2115 bra deco_setup_oc_gases_pre ; YES - revert to setting up OC gases | This branch should never happen to be taken... | |
| 2116 movff WREG,char_I_current_gas_num ; NO - set diluent to start with when doing the deco calculations | |
| 2117 ; | |
| 2118 ; Memory Map: | |
| 2119 ; --------------------------------------------------------------------------------- | |
| 2120 ; opt_gas_O2_ratio res NUM_GAS | | |
| 2121 ; opt_dil_O2_ratio res NUM_GAS | char_I_deco_O2_ratio res NUM_GAS | |
| 2122 ; opt_gas_He_ratio res NUM_GAS | | |
| 2123 ; opt_dil_He_ratio res NUM_GAS | char_I_deco_He_ratio res NUM_GAS | |
| 2124 ; opt_gas_type res NUM_GAS | | |
| 2125 ; opt_dil_type res NUM_GAS | char_I_deco_gas_type res NUM_GAS | |
| 2126 ; opt_gas_change res NUM_GAS | | |
| 2127 ; opt_dil_change res NUM_GAS | char_I_deco_gas_change res NUM_GAS | |
| 2128 ; | |
| 2129 lfsr FSR2,char_I_deco_O2_ratio ; load FSR2 with base address of char_I_deco_O2_ratio. | |
| 2130 ; FSR2 will step through all char_I_deco_... vars. | |
| 2131 lfsr FSR1,opt_dil_O2_ratio ; load FSR1 with base address of opt_dil_O2_ratio | |
| 2132 rcall deco_setup_copy ; copy all dil O2 ratios | |
| 2133 lfsr FSR1,opt_dil_He_ratio ; load FSR1 with base address of opt_dil_He_ratio | |
| 2134 rcall deco_setup_copy ; copy all dil He ratios | |
| 2135 lfsr FSR1,opt_dil_type ; load FSR1 with base address of opt_dil_type | |
| 2136 rcall deco_setup_copy ; copy all dil types | |
| 2137 lfsr FSR1,opt_dil_change ; load FSR1 with base address of opt_dil_change | |
| 2138 rcall deco_setup_copy ; copy all dil change depths | |
| 2139 ; switch to CCR / pSCR mode: | |
| 2140 bsf lo,DECO_MODE_LOOP_FLAG ; - loop flag is set in both, CCR and pSCR mode | |
| 2141 bcf lo,DECO_MODE_PSCR_FLAG ; - clear pSCR mode flag by default | |
| 2142 btfsc FLAG_pscr_mode ; - check if we are in pSCR mode | |
| 2143 bsf lo,DECO_MODE_PSCR_FLAG ; YES - set additional flag for pSCR mode | |
| 2144 movff lo,char_O_deco_status ; - bank safe write-back of char_O_deco_status | |
| 2145 return ; done | |
| 2146 | |
| 2147 ENDIF | |
| 2148 | |
| 2149 ;============================================================================= | |
| 2150 | |
| 2151 deco_setup_copy: | |
| 2152 movlw NUM_GAS ; load loop counter with number of gases (5) | |
| 2153 deco_setup_copy_loop: | |
| 2154 movff POSTINC1,POSTINC2 ; copy from (FSR1) to (FSR2) | |
| 2155 decfsz WREG ; decrement loop counter and check if it became 0 | |
| 2156 bra deco_setup_copy_loop ; NO - not yet, loop | |
| 2157 return ; YES - done | |
| 2158 | |
| 2159 | |
| 2160 global setup_gas_registers | |
| 2161 setup_gas_registers: ; with currently breathed gas in WREG (1-5 or 6) | |
| 2162 movwf active_gas ; set as current gas | |
| 2163 movlw .6 | |
| 2164 cpfseq active_gas ; gas = gas6 ? | |
| 2165 bra setup_gas_registers_15 ; NO - load gas 1-5 | |
| 2166 movff gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine | |
| 2167 IFDEF _helium | |
| 2168 movff gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine | |
| 2169 ENDIF | |
| 2170 movlw .3 ; declare gas6 as a deco gas | |
| 2171 movff WREG,char_I_current_gas_type; copy gas type to deco engine | |
| 2172 movff depth_meter,char_I_gas6_depth;set current depth as change depth | |
| 2173 bra setup_gas_registers_com ; continue with common part | |
| 2174 setup_gas_registers_15: | |
| 2175 lfsr FSR1,opt_gas_O2_ratio ; load base address of gas data | |
| 2176 decf active_gas,W ; set index to O2 ratio of current gas (1-5 -> 0-4) | |
| 2177 movff PLUSW1,char_I_O2_ratio ; copy O2 ratio to deco engine | |
| 2178 addlw .10 ; advance index from O2 ratio to He ratio | |
| 2179 IFDEF _helium | |
| 2180 movff PLUSW1,char_I_He_ratio ; copy He ratio to deco engine | |
| 2181 ENDIF | |
| 2182 addlw .10 ; advance index from He ratio to gas type | |
| 2183 movff PLUSW1,char_I_current_gas_type ; copy gas type (0=Disabled, 1=First, 2=Travel, 3=Deco) | |
| 2184 setup_gas_registers_com: | |
| 2185 movff char_O_main_status,lo ; working copy of char_O_main_status in bank common | |
| 2186 bcf lo,DECO_MODE_PSCR_FLAG ; clear the pSCR-mode flag (if applicable) | |
| 2187 bcf lo,DECO_MODE_LOOP_FLAG ; clear the loop/CCR-mode flag | |
| 2188 movff lo,char_O_main_status ; bank safe write-back of char_O_main_status | |
| 2189 movf active_gas,W ; reload WREG with gas 1-5 or 6 (important!) | |
| 2190 return | |
| 2191 | |
| 2192 ;============================================================================= | |
| 2193 | |
| 2194 IFDEF _ccr_pscr | |
| 2195 | |
| 2196 global setup_dil_registers | |
| 2197 setup_dil_registers: ; with currently breathed gas in WREG (1-5 or 6) | |
| 2198 btfsc bailout_mode ; check if in bailout condition | --------------- FOR SAFETY ONLY -------------- | |
| 2199 bra setup_gas_registers ; revert to setting up OC gases in bailout condition | This branch should never happen to be taken... | |
| 2200 movwf active_dil ; set as current diluent | |
| 2201 movlw .6 | |
| 2202 cpfseq active_dil ; diluent = gas6 ? | |
| 2203 bra setup_dil_registers_15 ; NO - load diluent 1-5 | |
| 2204 movff gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine | |
| 2205 IFDEF _helium | |
| 2206 movff gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine | |
| 2207 ENDIF | |
| 2208 movlw .2 ; declare gas6 as a normal diluent | |
| 2209 movff WREG,char_I_current_gas_type; copy gas type to deco engine | |
| 2210 movff depth_meter,char_I_gas6_depth;set current depth as change depth | |
| 2211 bra setup_dil_registers_com ; continue with common part | |
| 2212 setup_dil_registers_15: | |
| 2213 lfsr FSR1,opt_dil_O2_ratio ; load base address of diluent data | |
| 2214 decf active_dil,W ; set index to O2 ratio of current diluent (1-5 -> 0-4) | |
| 2215 movff PLUSW1,char_I_O2_ratio ; copy O2 ratio to deco engine | |
| 2216 addlw .10 ; advance index from O2 ratio to He ratio | |
| 2217 IFDEF _helium | |
| 2218 movff PLUSW1,char_I_He_ratio ; copy He ratio to deco engine | |
| 2219 ENDIF | |
| 2220 addlw .10 ; advance index from He ratio to diluent type | |
| 2221 movff PLUSW1,char_I_current_gas_type ; copy diluent type (0=Disabled, 1=First, 2=Normal) | |
| 2222 setup_dil_registers_com: | |
| 2223 movff char_O_main_status,lo ; working copy of char_O_main_status in bank common | |
| 2224 bsf lo,DECO_MODE_LOOP_FLAG ; loop flag is set in both, CCR and pSCR mode | |
| 2225 bcf lo,DECO_MODE_PSCR_FLAG ; clear pSCR mode flag by default | |
| 2226 btfsc FLAG_pscr_mode ; check if we are in pSCR mode | |
| 2227 bsf lo,DECO_MODE_PSCR_FLAG ; YES - set additional flag for pSCR mode | |
| 2228 movff lo,char_O_main_status ; bank safe write-back of char_O_main_status | |
| 2229 movf active_dil,W ; reload WREG with diluent 1-5 or 6 (important!) | |
| 2230 return | |
| 2231 | |
| 2232 ENDIF | |
| 2233 | |
| 2234 ;============================================================================= | |
| 2235 | |
| 2236 divemode_option_gaschange: ; switch to the "better gas" / "better diluent" | |
| 2237 IFDEF _ccr_pscr | |
| 2238 btfsc FLAG_oc_mode ; in OC mode? | |
| 2239 bra divemode_option_gaschange_oc; YES | |
| 2240 btfsc bailout_mode ; in bailout? | |
| 2241 bra divemode_option_gaschange_oc; YES | |
| 2242 divemode_option_gaschange_loop: ; in CCR/pSCR mode and not in bailout | |
| 2243 movff best_dil_number,menu_pos_cur; NO - select best diluent | |
| 2244 bcf better_dil_available ; - clear flag immediately | |
| 2245 bra divemode_option_gaschange3 ; - continue with common part | |
| 2246 ENDIF | |
| 2247 divemode_option_gaschange_oc: ; in OC or bailout | |
| 2248 movff best_gas_number,menu_pos_cur; select best gas | |
| 2249 bcf better_gas_available ; clear flag immediately | |
| 2250 divemode_option_gaschange3 ; common part | |
| 2251 bsf request_gas_change ; request a gas/diluent change | |
| 2252 goto menuview_toggle_reset ; terminate the pre-menu (and return) | |
| 2253 | |
| 2254 divemode_option_divemenu: ; start/setup dive mode menu | |
| 2255 btfss divemode ; in dive mode? | |
| 2256 goto menuview_toggle_reset ; NO - block menu, terminate the pre-menu | |
| 2257 call TFT_clear_divemode_menu ; YES - clear menu area | |
| 2258 bcf dive_options_menu ; - set dive options menu as not shown anymore | |
| 2259 goto do_main_divemenu ; - hand over to menu processor | |
| 2260 | |
| 2261 IFDEF _cave_mode | |
| 2262 divemode_option_cavemenu: ; start/setup cave mode menu | |
| 2263 btfss divemode ; in dive mode? | |
| 2264 goto menuview_toggle_reset ; NO - block menu, terminate the pre-menu | |
| 2265 call TFT_clear_divemode_menu ; YES - clear menu area | |
| 2266 bcf dive_options_menu ; - set dive options menu as not shown anymore | |
| 2267 goto do_main_cavemenu ; - hand over to menu processor | |
| 2268 ENDIF | |
| 2269 | |
| 2270 global divemode_option_divemenu_return | |
| 2271 divemode_option_divemenu_return: ; return point for menu processor | |
| 2272 call TFT_show_menu_cursor_divemode ; show the cursor | |
| 2273 clrf active_premenu ; set pre-menu is not shown any more | |
| 2274 bcf safety_stop_active ; set safety stop is not shown any more | |
| 2275 bsf dive_main_menu ; set main menu is shown now | |
| 2276 movlw divemode_timeout_mainmenu ; get timeout for main menu | |
| 2277 call reset_timeout_time ; reload timeout | |
| 2278 goto diveloop_menu_exit ; go back to dive loop (menu processor resets STKPTR!) | |
| 2279 | |
| 2280 divemode_option_sim_quit: ; quit simulation mode | |
| 2281 clrf simulatormode_depth ; set target depth to zero | |
| 2282 bsf quit_simulatormode ; request ISR to end simulator mode | |
| 2283 call menuview_toggle_reset ; terminate the pre-menu | |
| 2284 btfsc FLAG_apnoe_mode ; in apnoe mode? | |
| 2285 bcf divemode ; YES - force end of dive mode | |
| 2286 return ; done | |
| 2287 | |
| 2288 divemode_option_sim_down: ; plus 1 meter | |
| 2289 movlw ostc_depth_max-1 ; load depth limit into WREG | |
| 2290 cpfsgt simulatormode_depth ; simulated depth <= limit ? | |
| 2291 incf simulatormode_depth,F ; YES - increment simulated depth | |
| 2292 return ; done | |
| 2293 | |
| 2294 divemode_option_sim_up: ; minus 1 meter | |
| 2295 tstfsz simulatormode_depth ; simulated depth > 0 ? | |
| 2296 decf simulatormode_depth,F ; YES - decrement simulated depth | |
| 2297 return ; done | |
| 2298 | |
| 2299 divemode_option_sim_time: | |
| 2300 ; check for pending +5' request on deco engine | |
| 2301 movff char_I_sim_advance_time,WREG; get mailbox content | |
| 2302 tstfsz WREG ; mailbox clear (=0) ? | |
| 2303 return ; NO - still having a pending +5' request, refuse new request | |
| 2304 | |
| 2305 ; advance tissues pressures and deco obligation by 5 minutes | |
| 2306 movlw .5 ; + 5 minutes | |
| 2307 movff WREG,char_I_sim_advance_time; copy to mailbox | |
| 2308 call restart_deco_engine ; condition deco engine to execute the +5 minutes | |
| 2309 | |
| 2310 ; stop dive time incrementing in ISR | |
| 2311 bcf count_divetime | |
| 2312 | |
| 2313 ; add 5 minutes to counted_divetime_mins | |
| 2314 ADDLI .5,counted_divetime_mins | |
| 2315 | |
| 2316 ; add 5 minutes (300 seconds) to total_divetime_secs | |
| 2317 ADDLI .300,total_divetime_secs | |
| 2318 | |
| 2319 ; continue dive time incrementing in ISR | |
| 2320 bsf count_divetime | |
| 2321 | |
| 2322 ; add 5 minutes (300 seconds) to resettable time accumulator | |
| 2323 ADDLI .300,divesecs_avg_trip | |
| 2324 | |
| 2325 ; add 5 minutes (300 seconds) to total time accumulator | |
| 2326 ADDLI .300,divesecs_avg_total | |
| 2327 | |
| 2328 ; calculate 300 x depth in mbar (300 = 5 min * 60 sec/min) | |
| 2329 MOVII pressure_rel_cur_cached,xB | |
| 2330 MOVLI .300,xA | |
| 2331 call mult16x16 ; xC = xA * xB | |
| 2332 | |
| 2333 ; add to the resettable depth accumulator | |
| 2334 movf xC+0,W | |
| 2335 addwf pressure_rel_accu_trip+0,F | |
| 2336 movf xC+1,W | |
| 2337 addwfc pressure_rel_accu_trip+1,F | |
| 2338 movf xC+2,W | |
| 2339 addwfc pressure_rel_accu_trip+2,F | |
| 2340 movf xC+3,W | |
| 2341 addwfc pressure_rel_accu_trip+3,F | |
| 2342 | |
| 2343 ; add to the total depth accumulator | |
| 2344 movf xC+0,W | |
| 2345 addwf pressure_rel_accu_total+0,F | |
| 2346 movf xC+1,W | |
| 2347 addwfc pressure_rel_accu_total+1,F | |
| 2348 movf xC+2,W | |
| 2349 addwfc pressure_rel_accu_total+2,F | |
| 2350 movf xC+3,W | |
| 2351 addwfc pressure_rel_accu_total+3,F | |
| 2352 | |
| 2353 IFDEF _cave_mode | |
| 2354 ; update backtracking data | |
| 2355 btfss cave_mode ; cave mode switched on? | |
| 2356 bra divemode_option_sim_time_exit ; NO - skip backtracking depth recording | |
| 2357 btfsc dive_turned ; YES - dive turned? | |
| 2358 bra divemode_option_sim_time_exit ; YES - skip backtracking depth recording | |
| 2359 ;bra divemode_option_sim_time_exec ; NO - update backtracking depth recording | |
| 2360 divemode_option_sim_time_exec: | |
| 2361 movff backtrack_deltatime,hi ; backup time elapsed since last depth recording | |
| 2362 movlw .5 ; configure 5 minutes | |
| 2363 movwf lo ; use lo as loop counter | |
| 2364 divemode_option_sim_time_loop: | |
| 2365 call write_backtrack_1min_depth ; store a backtracking depth data set | |
| 2366 btfsc backtrack_entire_full ; backtracking storage entirely used up? | |
| 2367 bra divemode_option_sim_time_exit ; YES - abort backtracking depth recording | |
| 2368 decfsz lo,F ; NO - decrement loop counter, did it became zero? | |
| 2369 bra divemode_option_sim_time_loop ; NO - loop | |
| 2370 ;bra divemode_option_sim_time_done ; YES - done | |
| 2371 divemode_option_sim_time_done: | |
| 2372 movff hi,backtrack_deltatime ; restore time elapsed since last depth recording | |
| 2373 ;bra divemode_option_sim_time_exit ; finish backtracking depth recording | |
| 2374 ENDIF ; _cave_mode | |
| 2375 | |
| 2376 divemode_option_sim_time_exit: | |
| 2377 ; goto menuview_toggle_reset ; terminate the pre-menu and return | |
| 2378 return ; just return, leaving option avail for repeated selection | |
| 2379 | |
| 2380 divemode_option_apnoe_quit: ; quit apnoe mode (available while at the surface only) | |
| 2381 btfsc sensor_override_active ; in simulator mode? | |
| 2382 bra divemode_option_sim_quit ; YES - use simulator quit procedure | |
| 2383 bcf divemode ; NO - force end of dive mode | |
| 2384 return ; - done | |
| 2385 | |
| 2386 divemode_option_gauge_reset: | |
| 2387 bsf request_reset_avg ; request reset of average depth | |
| 2388 goto menuview_toggle_reset ; terminate pre-menu and return | |
| 2389 | |
| 2390 IFDEF _compass | |
| 2391 divemode_option_course: | |
| 2392 ; store heading for compass view | |
| 2393 MOVII compass_heading_shown,compass_bearing | |
| 2394 bsf compass_bearing_set ; set flag to show heading | |
| 2395 goto menuview_toggle_reset ; terminate the pre-menu and return | |
| 2396 ENDIF | |
| 2397 | |
| 2398 divemode_option_layout: ; switch layout | |
| 2399 call menuview_toggle_reset ; terminate the pre-menu | |
| 2400 call TFT_ClearScreen ; clear the whole screen | |
| 2401 btg alt_layout_active ; toggle layout | |
| 2402 | |
| 2403 bcf depth_warn_att_last ; set warning or attention on the depth not shown | |
| 2404 bcf depth_inverse_last ; set depth displayed in inverse as not shown | |
| 2405 bcf sign_shown ; set warning/attention/advice sign not shown | |
| 2406 bcf velocity_active_num ; set numerical vertical velocity display not shown | |
| 2407 bcf velocity_active_vsi ; set vertical vertical velocity display not shown | |
| 2408 bcf safety_stop_active ; set safety stop not shown | |
| 2409 | |
| 2410 bsf FLAG_TFT_divemode_mask ; request redraw of dive screen mask | |
| 2411 bsf FLAG_TFT_divetime ; request redraw of dive time | |
| 2412 bsf FLAG_TFT_depth_current ; request redraw of current depth | |
| 2413 bsf FLAG_TFT_depth_maximum ; request redraw of maximum depth | |
| 2414 bsf FLAG_TFT_active_gas_divemode; request redraw of gas and setpoint | |
| 2415 bsf FLAG_TFT_temperature ; request redraw of temperature | |
| 2416 bsf FLAG_TFT_customview_callup ; request redraw of custom view | |
| 2417 | |
| 2418 goto request_redraw_NDL_deco_data; request redraw of NDL/deco data and return | |
| 2419 | |
| 2420 | |
| 2421 ;============================================================================= | |
| 2422 ; Find the best gas and diluent for the current depth | 2465 ; Find the best gas and diluent for the current depth |
| 2423 ; and check if a gas/diluent change is to be advised. | 2466 ; and check if a gas/diluent change is to be advised. |
| 2424 ; | 2467 ; |
| 2425 ; Output: best_gas_number : number of best gas, 0= none avail, 255= not computed | 2468 ; Output: best_gas_number : number of best gas, 0= none avail, 255= not computed |
| 2426 ; best_dil_number : number of best dil, 0= none avail, 255= not computed | 2469 ; best_dil_number : number of best dil, 0= none avail, 255= not computed |
| 2497 bz check_gas_best_dil3 ; has a best diluent been found at all? NO - nothing to signal for | 2540 bz check_gas_best_dil3 ; has a best diluent been found at all? NO - nothing to signal for |
| 2498 cpfseq active_dil ; is this the currently used diluent? | 2541 cpfseq active_dil ; is this the currently used diluent? |
| 2499 bra check_gas_best_dil2 ; NO - a better diluent has been found | 2542 bra check_gas_best_dil2 ; NO - a better diluent has been found |
| 2500 bra check_gas_best_dil3 ; YES - no need to signal a better diluent if this diluent is already in use | 2543 bra check_gas_best_dil3 ; YES - no need to signal a better diluent if this diluent is already in use |
| 2501 check_gas_best_dil2: | 2544 check_gas_best_dil2: |
| 2502 btfsc sp_fallback ; in fallback condition? | 2545 btfsc warn_det_sensors_lost ; all sensors lost? |
| 2503 bra check_gas_best_dil3 ; YES - suppress better diluent prompt in this case | 2546 bra check_gas_best_dil3 ; YES - suppress better diluent prompt in this case |
| 2504 ; not using the best gas - show better diluent hint whenever a better diluent is available | 2547 ; not using the best gas - show better diluent hint whenever a better diluent is available |
| 2505 bsf better_dil_available ; signal that a better diluent is available | 2548 bsf better_dil_available ; signal that a better diluent is available |
| 2506 bsf FLAG_TFT_active_gas_divemode ; redraw gas/setpoint/diluent | 2549 bsf FLAG_TFT_active_gas_divemode ; redraw gas/setpoint/diluent |
| 2507 check_gas_best_dil3: | 2550 check_gas_best_dil3: |
| 2566 bra check_gas_best_loop ; NO - loop | 2609 bra check_gas_best_loop ; NO - loop |
| 2567 return ; YES - done | 2610 return ; YES - done |
| 2568 | 2611 |
| 2569 | 2612 |
| 2570 check_gas_best_common: ; with gas to be checked in check_gas_num (1-5) | 2613 check_gas_best_common: ; with gas to be checked in check_gas_num (1-5) |
| 2571 ; ; and current gas in lo (1-5) | 2614 ; and current gas in lo (1-5) |
| 2572 ; | 2615 ; |
| 2573 ; Memory Map: | 2616 ; Memory Map: |
| 2574 ; --------------------------------------------------------------------------------------- | 2617 ; --------------------------------------------------------------------------------------- |
| 2575 ; opt_gas_O2_ratio res 5 ; base address for gases | 2618 ; opt_gas_O2_ratio res 5 ; base address for gases |
| 2576 ; opt_dil_O2_ratio res 5 ; base address for diluents | 2619 ; opt_dil_O2_ratio res 5 ; base address for diluents |
| 2667 ; we have a (new) best gas | 2710 ; we have a (new) best gas |
| 2668 movff check_gas_num, best_gas_num ; YES - set checked gas (1-5) as best gas | 2711 movff check_gas_num, best_gas_num ; YES - set checked gas (1-5) as best gas |
| 2669 movff check_gas_depth,best_gas_depth ; - memorize its change depth | 2712 movff check_gas_depth,best_gas_depth ; - memorize its change depth |
| 2670 return ; - done | 2713 return ; - done |
| 2671 | 2714 |
| 2672 | 2715 IFDEF _ccr_pscr |
| 2673 ;============================================================================= | 2716 |
| 2717 | |
| 2718 ;----------------------------------------------------------------------------- | |
| 2674 ; Check for Auto-SP | 2719 ; Check for Auto-SP |
| 2675 ; | 2720 ; |
| 2676 IFDEF _ccr_pscr | 2721 check_dive_autosp: |
| 2677 | |
| 2678 check_dive_autosp: ; check for Auto-SP | |
| 2679 movff opt_ccr_mode,WREG ; =0: Fixed SP, =1: Sensor, =2: Auto SP | 2722 movff opt_ccr_mode,WREG ; =0: Fixed SP, =1: Sensor, =2: Auto SP |
| 2680 sublw .2 ; opt_ccr_mode = 2 (Auto SP)? | 2723 sublw .2 ; opt_ccr_mode = 2 (Auto SP)? |
| 2681 bz check_dive_autosp2 ; YES - check | 2724 bz check_dive_autosp2 ; YES - check |
| 2682 return ; NO - return for sensor or fixed mode | 2725 return ; NO - return for sensor or fixed mode |
| 2726 | |
| 2683 check_dive_autosp2: | 2727 check_dive_autosp2: |
| 2684 ; check SP2 | 2728 ; check SP2 |
| 2685 btfsc FLAG_SP2_used ; SP 2 used so far? | 2729 btfsc FLAG_SP2_used ; SP 2 used so far? |
| 2686 bra check_dive_autosp3 ; YES - continue with SP 3 | 2730 bra check_dive_autosp3 ; YES - continue with SP 3 |
| 2687 movff opt_setpoint_change+1,lo ; NO - get depth in m | 2731 movff opt_setpoint_change+1,lo ; NO - get depth in m |
| 2694 bra check_dive_autosp3 ; NO - continue with SP 3 | 2738 bra check_dive_autosp3 ; NO - continue with SP 3 |
| 2695 ; auto switch to SP2 | 2739 ; auto switch to SP2 |
| 2696 movff opt_setpoint_cbar+1,char_I_const_ppO2 ; YES - use SP | 2740 movff opt_setpoint_cbar+1,char_I_const_ppO2 ; YES - use SP |
| 2697 rcall xmit_sp_set_flag ; - send SP to external devices | 2741 rcall xmit_sp_set_flag ; - send SP to external devices |
| 2698 bsf FLAG_SP2_used ; - set SP 2 used flag | 2742 bsf FLAG_SP2_used ; - set SP 2 used flag |
| 2743 | |
| 2699 check_dive_autosp3: | 2744 check_dive_autosp3: |
| 2700 ; check SP3 | 2745 ; check SP3 |
| 2701 btfsc FLAG_SP3_used ; SP 3 used so far? | 2746 btfsc FLAG_SP3_used ; SP 3 used so far? |
| 2702 bra check_dive_autosp4 ; YES - continue with SP 4 | 2747 bra check_dive_autosp4 ; YES - continue with SP 4 |
| 2703 movff opt_setpoint_change+2,lo ; NO - get depth in m | 2748 movff opt_setpoint_change+2,lo ; NO - get depth in m |
| 2710 bra check_dive_autosp4 ; NO - continue with SP 4 | 2755 bra check_dive_autosp4 ; NO - continue with SP 4 |
| 2711 ; auto switch to SP3 | 2756 ; auto switch to SP3 |
| 2712 movff opt_setpoint_cbar+2,char_I_const_ppO2 ; YES - use SP | 2757 movff opt_setpoint_cbar+2,char_I_const_ppO2 ; YES - use SP |
| 2713 rcall xmit_sp_set_flag ; - send SP to external devices | 2758 rcall xmit_sp_set_flag ; - send SP to external devices |
| 2714 bsf FLAG_SP3_used ; - set SP 3 used flag | 2759 bsf FLAG_SP3_used ; - set SP 3 used flag |
| 2760 | |
| 2715 check_dive_autosp4: | 2761 check_dive_autosp4: |
| 2716 ; check SP4 | 2762 ; check SP4 |
| 2717 btfsc FLAG_SP4_used ; SP 4 used so far? | 2763 btfsc FLAG_SP4_used ; SP 4 used so far? |
| 2718 bra check_dive_autosp5 ; YES - continue with SP 5 | 2764 bra check_dive_autosp5 ; YES - continue with SP 5 |
| 2719 movff opt_setpoint_change+3,lo ; NO - get depth in m | 2765 movff opt_setpoint_change+3,lo ; NO - get depth in m |
| 2726 bra check_dive_autosp5 ; NO - continue with SP 5 | 2772 bra check_dive_autosp5 ; NO - continue with SP 5 |
| 2727 ; auto switch to SP4 | 2773 ; auto switch to SP4 |
| 2728 movff opt_setpoint_cbar+3,char_I_const_ppO2 ; YES - use SP | 2774 movff opt_setpoint_cbar+3,char_I_const_ppO2 ; YES - use SP |
| 2729 rcall xmit_sp_set_flag ; - send SP to external devices | 2775 rcall xmit_sp_set_flag ; - send SP to external devices |
| 2730 bsf FLAG_SP4_used ; - set SP 4 used flag | 2776 bsf FLAG_SP4_used ; - set SP 4 used flag |
| 2777 | |
| 2731 check_dive_autosp5: | 2778 check_dive_autosp5: |
| 2732 ; check SP5 | 2779 ; check SP5 |
| 2733 btfsc FLAG_SP5_used ; SP 5 used so far? | 2780 btfsc FLAG_SP5_used ; SP 5 used so far? |
| 2734 bra check_dive_autosp6 ; YES - done | 2781 bra check_dive_autosp6 ; YES - done |
| 2735 movff opt_setpoint_change+4,lo ; NO - get depth in m | 2782 movff opt_setpoint_change+4,lo ; NO - get depth in m |
| 2742 bra check_dive_autosp6 ; NO - done | 2789 bra check_dive_autosp6 ; NO - done |
| 2743 ; auto switch to SP5 | 2790 ; auto switch to SP5 |
| 2744 movff opt_setpoint_cbar+4,char_I_const_ppO2 ; YES - use SP | 2791 movff opt_setpoint_cbar+4,char_I_const_ppO2 ; YES - use SP |
| 2745 rcall xmit_sp_set_flag ; - send SP to external devices | 2792 rcall xmit_sp_set_flag ; - send SP to external devices |
| 2746 bsf FLAG_SP5_used ; - set SP 5 used flag | 2793 bsf FLAG_SP5_used ; - set SP 5 used flag |
| 2794 | |
| 2747 check_dive_autosp6: | 2795 check_dive_autosp6: |
| 2748 return | 2796 return ; done |
| 2749 | 2797 |
| 2798 | |
| 2799 ;----------------------------------------------------------------------------- | |
| 2800 ; Helper Function - transmit new Setpoint to external Electronics and flag Change | |
| 2801 ; | |
| 2750 xmit_sp_set_flag: | 2802 xmit_sp_set_flag: |
| 2751 IFDEF _external_sensor | 2803 IFDEF _external_sensor |
| 2752 call transmit_setpoint ; transmit current setpoint from WREG (in cbar) to external electronics | 2804 call transmit_setpoint ; transmit current setpoint from WREG (in cbar) to external electronics |
| 2753 ENDIF | 2805 ENDIF |
| 2754 bsf event_occured ; set global event flag | 2806 bsf event_occured ; set global event flag |
| 2755 bsf event_SP_change ; set setpoint event flag | 2807 bsf event_SP_change ; set setpoint event flag |
| 2756 return | 2808 return |
| 2757 | 2809 |
| 2758 ENDIF ; _ccr_pscr | 2810 ENDIF ; _ccr_pscr |
| 2759 | 2811 |
| 2812 | |
| 2760 ;============================================================================= | 2813 ;============================================================================= |
| 2761 | 2814 dmode2 CODE |
| 2762 set_logbook_marker: | |
| 2763 bcf request_set_marker ; clear request flag | |
| 2764 movlw d'6' ; set type of alarm: manual marker | |
| 2765 movwf alarm_type ; copy to alarm register | |
| 2766 bsf event_occured ; set event flag | |
| 2767 return | |
| 2768 | |
| 2769 ;============================================================================= | 2815 ;============================================================================= |
| 2770 ; Setup everything to enter dive mode | 2816 |
| 2817 | |
| 2818 ;----------------------------------------------------------------------------- | |
| 2819 ; Setup everything to enter OC Dive Mode | |
| 2771 ; | 2820 ; |
| 2772 global dive_boot_oc | 2821 global dive_boot_oc |
| 2773 dive_boot_oc: | 2822 dive_boot_oc: |
| 2774 ; set-up registers | |
| 2775 rcall get_first_gas_to_WREG ; get first gas (1-5) into WREG | 2823 rcall get_first_gas_to_WREG ; get first gas (1-5) into WREG |
| 2776 rcall setup_gas_registers ; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5) | 2824 rcall setup_gas_registers ; set-up of gas parameters of currently breathed gas (with WREG = gas 1-5) |
| 2777 rcall deco_setup_oc_gases ; set-up of gas list for deco calculations (with WREG = gas 1-5) | 2825 rcall deco_setup_oc_gases ; set-up of gas list for deco calculations (with WREG = gas 1-5) |
| 2778 return | 2826 return ; done |
| 2827 | |
| 2828 | |
| 2829 ;----------------------------------------------------------------------------- | |
| 2830 ; Helper Function - get first Gas (1-5) into WREG | |
| 2831 ; | |
| 2832 global get_first_gas_to_WREG | |
| 2833 get_first_gas_to_WREG: | |
| 2834 lfsr FSR1,opt_gas_type ; load base address of the gas types | |
| 2835 clrf lo ; start with gas 0 | |
| 2836 get_first_gas_to_WREG2: | |
| 2837 movf lo,W ; set index | |
| 2838 movf PLUSW1,W ; get type of gas (0=Disabled, 1=First, 2=Travel, 3=Deco) | |
| 2839 sublw .1 ; is it of type First? | |
| 2840 bz get_first_gas_to_WREG3 ; YES - found the First gas | |
| 2841 incf lo,F ; NO - increment index | |
| 2842 movlw NUM_GAS+1 ; - get highest index+1 | |
| 2843 cpfseq lo ; - all gases checked? | |
| 2844 bra get_first_gas_to_WREG2 ; NO - not yet | |
| 2845 movlw .1 ; YES - default to gas 1 | |
| 2846 movff WREG,opt_gas_type+0 ; - force it to be of type First | |
| 2847 return ; - done | |
| 2848 get_first_gas_to_WREG3: | |
| 2849 movf lo,W ; copy index of gas found to be the First to WREG | |
| 2850 incf WREG,W ; turn index into gas number (0-4 -> 1-5) | |
| 2851 return ; done | |
| 2852 | |
| 2853 | |
| 2854 ;----------------------------------------------------------------------------- | |
| 2855 ; Helper Function - load currently breathed Gas into Deco Engine | |
| 2856 ; | |
| 2857 global setup_gas_registers | |
| 2858 setup_gas_registers: | |
| 2859 movwf active_gas ; set as current gas | |
| 2860 movlw .6 ; gas = gas6 ? | |
| 2861 cpfseq active_gas ; ... | |
| 2862 bra setup_gas_registers_15 ; NO - load gas 1-5 | |
| 2863 | |
| 2864 ; load gas 6 | |
| 2865 movff opt_gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine | |
| 2866 IFDEF _helium | |
| 2867 movff opt_gas6_He_ratio,char_I_He_ratio ; copy gas6 H2 ratio to deco engine | |
| 2868 ENDIF | |
| 2869 movlw .3 ; declare gas6 as a deco gas | |
| 2870 movff WREG,char_I_current_gas_type ; copy gas type to deco engine | |
| 2871 movff depth_meter,char_I_gas6_depth ;set current depth as change depth | |
| 2872 bra setup_gas_registers_com ; continue with common part | |
| 2873 | |
| 2874 setup_gas_registers_15: | |
| 2875 lfsr FSR1,opt_gas_O2_ratio ; load base address of gas data | |
| 2876 decf active_gas,W ; set index to O2 ratio of current gas (1-5 -> 0-4) | |
| 2877 movff PLUSW1,char_I_O2_ratio ; copy O2 ratio to deco engine | |
| 2878 addlw .10 ; advance index from O2 ratio to He ratio | |
| 2879 IFDEF _helium | |
| 2880 movff PLUSW1,char_I_He_ratio ; copy He ratio to deco engine | |
| 2881 ENDIF | |
| 2882 addlw .10 ; advance index from He ratio to gas type | |
| 2883 movff PLUSW1,char_I_current_gas_type ; copy gas type (0=Disabled, 1=First, 2=Travel, 3=Deco) | |
| 2884 setup_gas_registers_com: | |
| 2885 movff char_O_main_status,lo ; working copy of char_O_main_status in bank common | |
| 2886 bcf lo,DECO_MODE_PSCR_FLAG ; clear the pSCR-mode flag (if applicable) | |
| 2887 bcf lo,DECO_MODE_LOOP_FLAG ; clear the loop/CCR-mode flag | |
| 2888 movff lo,char_O_main_status ; bank safe write-back of char_O_main_status | |
| 2889 movf active_gas,W ; reload WREG with gas 1-5 or 6 (important!) | |
| 2890 return ; done | |
| 2891 | |
| 2892 | |
| 2893 ;----------------------------------------------------------------------------- | |
| 2894 ; Helper Function - load OC Gases into Deco Engine (currently breathed gas in WREG) | |
| 2895 ; | |
| 2896 global deco_setup_oc_gases | |
| 2897 deco_setup_oc_gases: | |
| 2898 movff char_O_deco_status,lo ; get working copy of char_O_deco_status in bank common | |
| 2899 deco_setup_oc_gases_pre: ; entry point with lo preloaded | |
| 2900 movff WREG,char_I_current_gas_num ; set gas to start with when doing the deco calculations | |
| 2901 ; | |
| 2902 ; Memory Map: | |
| 2903 ; --------------------------------------------------------------------------------- | |
| 2904 ; opt_gas_O2_ratio res NUM_GAS | char_I_deco_O2_ratio res NUM_GAS | |
| 2905 ; opt_dil_O2_ratio res NUM_GAS | | |
| 2906 ; opt_gas_He_ratio res NUM_GAS | char_I_deco_He_ratio res NUM_GAS | |
| 2907 ; opt_dil_He_ratio res NUM_GAS | | |
| 2908 ; opt_gas_type res NUM_GAS | char_I_deco_gas_type res NUM_GAS | |
| 2909 ; opt_dil_type res NUM_GAS | | |
| 2910 ; opt_gas_change res NUM_GAS | char_I_deco_gas_change res NUM_GAS | |
| 2911 ; opt_dil_change res NUM_GAS | | |
| 2912 ; | |
| 2913 lfsr FSR2,char_I_deco_O2_ratio ; load FSR2 with base address of char_I_deco_O2_ratio | |
| 2914 ; FSR2 will step through all char_I_deco_... vars | |
| 2915 lfsr FSR1,opt_gas_O2_ratio ; load FSR1 with base address of opt_gas_O2_ratio | |
| 2916 rcall deco_setup_copy ; copy all OC O2 ratios | |
| 2917 lfsr FSR1,opt_gas_He_ratio ; load FSR1 with base address of opt_gas_He_ratio | |
| 2918 rcall deco_setup_copy ; copy all OC He ratios | |
| 2919 lfsr FSR1,opt_gas_type ; load FSR1 with base address of opt_gas_type | |
| 2920 rcall deco_setup_copy ; copy all gas types | |
| 2921 lfsr FSR1,opt_gas_change ; load FSR1 with base address of opt_gas_change | |
| 2922 rcall deco_setup_copy ; copy all gas change depths | |
| 2923 | |
| 2924 ; switch deco engine to oc mode | |
| 2925 bcf lo,DECO_MODE_PSCR_FLAG ; clear the pSCR-mode flag (may not be set, but never mind) | |
| 2926 bcf lo,DECO_MODE_LOOP_FLAG ; clear the loop/CCR-mode flag | |
| 2927 movff lo,char_O_deco_status ; bank safe write-back of char_O_deco_status | |
| 2928 return ; done | |
| 2929 | |
| 2930 | |
| 2931 ;----------------------------------------------------------------------------- | |
| 2932 ; Helper Function - dedicated Memory Copy | |
| 2933 deco_setup_copy: | |
| 2934 movlw NUM_GAS ; load loop counter with number of gases (5) | |
| 2935 deco_setup_copy_loop: | |
| 2936 movff POSTINC1,POSTINC2 ; copy from (FSR1) to (FSR2) | |
| 2937 decfsz WREG ; decrement loop counter and check if it became 0 | |
| 2938 bra deco_setup_copy_loop ; NO - not yet, loop | |
| 2939 return ; YES - done | |
| 2940 | |
| 2779 | 2941 |
| 2780 | 2942 |
| 2781 IFDEF _ccr_pscr | 2943 IFDEF _ccr_pscr |
| 2782 | 2944 |
| 2945 ;----------------------------------------------------------------------------- | |
| 2946 ; Setup everything to enter CCR/pSCR Dive Mode - Part 1 | |
| 2947 ; | |
| 2783 global dive_boot_cc | 2948 global dive_boot_cc |
| 2784 dive_boot_cc: | 2949 dive_boot_cc: |
| 2785 ; set-up registers | |
| 2786 rcall get_first_dil_to_WREG ; get first diluent (1-5) into WREG | 2950 rcall get_first_dil_to_WREG ; get first diluent (1-5) into WREG |
| 2787 rcall setup_dil_registers ; set-up of diluent parameters for currently breathed diluent (with WREG = current diluent 1-5) | 2951 rcall setup_dil_registers ; set-up of diluent parameters for currently breathed diluent (with WREG = current diluent 1-5) |
| 2788 rcall deco_setup_cc_diluents ; set-up of diluent list for deco calculations (with WREG = current diluent 1-5) | 2952 rcall deco_setup_cc_diluents ; set-up of diluent list for deco calculations (with WREG = current diluent 1-5) |
| 2789 return | 2953 return ; done |
| 2790 | 2954 |
| 2791 | 2955 |
| 2956 ;----------------------------------------------------------------------------- | |
| 2957 ; Helper Function - get first Diluent (1-5) into WREG | |
| 2958 ; | |
| 2959 global get_first_dil_to_WREG | |
| 2960 get_first_dil_to_WREG: ; gets first dil (1-5) into WREG | |
| 2961 lfsr FSR1,opt_dil_type ; load base address of the dil types | |
| 2962 clrf lo ; start with dil 0 | |
| 2963 get_first_dil_to_WREG2: | |
| 2964 movf lo,W ; set index | |
| 2965 movf PLUSW1,W ; get type of Dil (0=Disabled, 1=First, 2=Normal) | |
| 2966 sublw .1 ; is it of type First? | |
| 2967 bz get_first_dil_to_WREG3 ; YES - found the First dil | |
| 2968 incf lo,F ; NO - increment index | |
| 2969 movlw NUM_GAS+1 ; - get highest index+1 | |
| 2970 cpfseq lo ; - dils checked? | |
| 2971 bra get_first_dil_to_WREG2 ; NO - not yet | |
| 2972 movlw .1 ; YES - default to dil 1 | |
| 2973 movff WREG,opt_dil_type+0 ; - force it to be of type First | |
| 2974 return ; - done | |
| 2975 get_first_dil_to_WREG3: | |
| 2976 movf lo,W ; copy index of dil found to be the First to WREG | |
| 2977 incf WREG,W ; turn index into dil number (0-4 -> 1-5) | |
| 2978 return ; done | |
| 2979 | |
| 2980 | |
| 2981 ;----------------------------------------------------------------------------- | |
| 2982 ; Helper Function - load currently breathed Diluent into Deco Engine | |
| 2983 ; | |
| 2984 global setup_dil_registers | |
| 2985 setup_dil_registers: | |
| 2986 btfsc bailout_mode ; check if in bailout condition | --------------- FOR SAFETY ONLY -------------- | |
| 2987 bra setup_gas_registers ; revert to setting up OC gases in bailout condition | This branch should never happen to be taken... | |
| 2988 movwf active_dil ; set as current diluent | |
| 2989 movlw .6 ; diluent = gas6 ? | |
| 2990 cpfseq active_dil ; ... | |
| 2991 bra setup_dil_registers_15 ; NO - load diluent 1-5 | |
| 2992 | |
| 2993 ; load gas 6 | |
| 2994 movff opt_gas6_O2_ratio,char_I_O2_ratio ; copy gas6 O2 ratio to deco engine | |
| 2995 IFDEF _helium | |
| 2996 movff opt_gas6_He_ratio,char_I_He_ratio ; copy gas6 He ratio to deco engine | |
| 2997 ENDIF | |
| 2998 movlw .2 ; declare gas6 as a normal diluent | |
| 2999 movff WREG,char_I_current_gas_type ; copy gas type to deco engine | |
| 3000 movff depth_meter,char_I_gas6_depth ;set current depth as change depth | |
| 3001 bra setup_dil_registers_com ; continue with common part | |
| 3002 | |
| 3003 setup_dil_registers_15: | |
| 3004 lfsr FSR1,opt_dil_O2_ratio ; load base address of diluent data | |
| 3005 decf active_dil,W ; set index to O2 ratio of current diluent (1-5 -> 0-4) | |
| 3006 movff PLUSW1,char_I_O2_ratio ; copy O2 ratio to deco engine | |
| 3007 addlw .10 ; advance index from O2 ratio to He ratio | |
| 3008 IFDEF _helium | |
| 3009 movff PLUSW1,char_I_He_ratio ; copy He ratio to deco engine | |
| 3010 ENDIF | |
| 3011 addlw .10 ; advance index from He ratio to diluent type | |
| 3012 movff PLUSW1,char_I_current_gas_type ; copy diluent type (0=Disabled, 1=First, 2=Normal) | |
| 3013 setup_dil_registers_com: | |
| 3014 movff char_O_main_status,lo ; working copy of char_O_main_status in bank common | |
| 3015 bsf lo,DECO_MODE_LOOP_FLAG ; loop flag is set in both, CCR and pSCR mode | |
| 3016 bcf lo,DECO_MODE_PSCR_FLAG ; clear pSCR mode flag by default | |
| 3017 btfsc FLAG_pscr_mode ; check if we are in pSCR mode | |
| 3018 bsf lo,DECO_MODE_PSCR_FLAG ; YES - set additional flag for pSCR mode | |
| 3019 movff lo,char_O_main_status ; bank safe write-back of char_O_main_status | |
| 3020 movf active_dil,W ; reload WREG with diluent 1-5 or 6 (important!) | |
| 3021 return ; done | |
| 3022 | |
| 3023 | |
| 3024 ;----------------------------------------------------------------------------- | |
| 3025 ; Helper Function - load Diluents into Deco Engine (currently breathed dil in WREG) | |
| 3026 ; | |
| 3027 global deco_setup_cc_diluents | |
| 3028 deco_setup_cc_diluents: | |
| 3029 movff char_O_deco_status,lo ; working copy of char_O_deco_status in bank common | |
| 3030 deco_setup_cc_diluents_pre: ; entry point with lo preloaded | |
| 3031 btfsc bailout_mode ; check if in bailout condition | --------------- FOR SAFETY ONLY -------------- | |
| 3032 bra deco_setup_oc_gases_pre ; YES - revert to setting up OC gases | This branch should never happen to be taken... | |
| 3033 movff WREG,char_I_current_gas_num ; NO - set diluent to start with when doing the deco calculations | |
| 3034 ; | |
| 3035 ; Memory Map: | |
| 3036 ; --------------------------------------------------------------------------------- | |
| 3037 ; opt_gas_O2_ratio res NUM_GAS | | |
| 3038 ; opt_dil_O2_ratio res NUM_GAS | char_I_deco_O2_ratio res NUM_GAS | |
| 3039 ; opt_gas_He_ratio res NUM_GAS | | |
| 3040 ; opt_dil_He_ratio res NUM_GAS | char_I_deco_He_ratio res NUM_GAS | |
| 3041 ; opt_gas_type res NUM_GAS | | |
| 3042 ; opt_dil_type res NUM_GAS | char_I_deco_gas_type res NUM_GAS | |
| 3043 ; opt_gas_change res NUM_GAS | | |
| 3044 ; opt_dil_change res NUM_GAS | char_I_deco_gas_change res NUM_GAS | |
| 3045 ; | |
| 3046 lfsr FSR2,char_I_deco_O2_ratio ; load FSR2 with base address of char_I_deco_O2_ratio. | |
| 3047 ; FSR2 will step through all char_I_deco_... vars. | |
| 3048 lfsr FSR1,opt_dil_O2_ratio ; load FSR1 with base address of opt_dil_O2_ratio | |
| 3049 rcall deco_setup_copy ; copy all dil O2 ratios | |
| 3050 lfsr FSR1,opt_dil_He_ratio ; load FSR1 with base address of opt_dil_He_ratio | |
| 3051 rcall deco_setup_copy ; copy all dil He ratios | |
| 3052 lfsr FSR1,opt_dil_type ; load FSR1 with base address of opt_dil_type | |
| 3053 rcall deco_setup_copy ; copy all dil types | |
| 3054 lfsr FSR1,opt_dil_change ; load FSR1 with base address of opt_dil_change | |
| 3055 rcall deco_setup_copy ; copy all dil change depths | |
| 3056 ; switch to CCR / pSCR mode: | |
| 3057 bsf lo,DECO_MODE_LOOP_FLAG ; - loop flag is set in both, CCR and pSCR mode | |
| 3058 bcf lo,DECO_MODE_PSCR_FLAG ; - clear pSCR mode flag by default | |
| 3059 btfsc FLAG_pscr_mode ; - check if we are in pSCR mode | |
| 3060 bsf lo,DECO_MODE_PSCR_FLAG ; YES - set additional flag for pSCR mode | |
| 3061 movff lo,char_O_deco_status ; - bank safe write-back of char_O_deco_status | |
| 3062 return ; done | |
| 3063 | |
| 3064 | |
| 3065 ;----------------------------------------------------------------------------- | |
| 3066 ; Setup everything to enter CCR / pSCR Dive Mode - Part 2 | |
| 3067 ; | |
| 2792 dive_boot_cc_part2: | 3068 dive_boot_cc_part2: |
| 2793 ; revoke sensors from usage if they do not have a valid calibration | 3069 ; revoke sensors from usage if they do not have a valid calibration |
| 2794 bsf use_O2_sensor1 | 3070 bsf use_O2_sensor1 |
| 2795 bsf use_O2_sensor2 | |
| 2796 bsf use_O2_sensor3 | |
| 2797 btfss sensor1_calibrated_ok | 3071 btfss sensor1_calibrated_ok |
| 2798 bcf use_O2_sensor1 | 3072 bcf use_O2_sensor1 |
| 3073 | |
| 3074 bsf use_O2_sensor2 | |
| 2799 btfss sensor2_calibrated_ok | 3075 btfss sensor2_calibrated_ok |
| 2800 bcf use_O2_sensor2 | 3076 bcf use_O2_sensor2 |
| 3077 | |
| 3078 bsf use_O2_sensor3 | |
| 2801 btfss sensor3_calibrated_ok | 3079 btfss sensor3_calibrated_ok |
| 2802 bcf use_O2_sensor3 | 3080 bcf use_O2_sensor3 |
| 2803 | 3081 |
| 2804 IFDEF _external_sensor | 3082 IFDEF _external_sensor |
| 2805 ; check for external HUD/ppO2 Monitor | 3083 ; check for external HUD/ppO2 Monitor |
| 2806 btfss optical_input ; do we have an optical input? | 3084 btfss ext_input_optical ; do we have an optical input? |
| 2807 bra dive_boot_cc_part2_1 ; NO | 3085 bra dive_boot_cc_part2_1 ; NO |
| 2808 btfsc sensor1_active ; YES - copy valid flags from HUD/ppO2 Monitor | 3086 btfsc sensor1_active ; YES - process flags from HUD/ppO2 Monitor |
| 2809 bsf use_O2_sensor1 ; - ... | 3087 bsf use_O2_sensor1 ; - ... |
| 2810 btfsc sensor2_active ; - ... | 3088 btfsc sensor2_active ; - ... |
| 2811 bsf use_O2_sensor2 ; - ... | 3089 bsf use_O2_sensor2 ; - ... |
| 2812 btfsc sensor3_active ; - ... | 3090 btfsc sensor3_active ; - ... |
| 2813 bsf use_O2_sensor3 ; - ... | 3091 bsf use_O2_sensor3 ; - ... |
| 2814 ENDIF | 3092 ENDIF |
| 2815 | 3093 |
| 2816 dive_boot_cc_part2_1: | 3094 dive_boot_cc_part2_1: |
| 2817 ; In pSCR mode, only settings 0 (calculated ppO2) and 1 (ppO2 from sensors) are defined. | 3095 ; In pSCR mode, only settings 0 (calculated ppO2) and 1 (ppO2 from sensors) are defined. |
| 2818 ; In case we still have 3 (auto SP) selected out of previous CCR mode, we reset to 0. | 3096 ; In case we still have 3 (auto SP) selected out of previous CCR mode, we reset to 0. |
| 2819 btfss FLAG_pscr_mode | 3097 btfss FLAG_pscr_mode ; in pSCR mode? |
| 2820 bra dive_boot_cc_part2_2 | 3098 bra dive_boot_cc_part2_2 ; NO |
| 2821 movff opt_ccr_mode,WREG ; =0: Fixed SP (CCR) / calculated SP (pSCR), =1: Sensor, =2: Auto SP | 3099 movff opt_ccr_mode,WREG ; YES - get mode (=0: Fixed SP (CCR) / calculated SP (pSCR), =1: Sensor, =2: Auto SP) |
| 2822 sublw .2 ; opt_ccr_mode = 1 (Auto SP)? | 3100 sublw .2 ; opt_ccr_mode = 1 (Auto SP)? |
| 2823 bnz dive_boot_cc_part2_2 | 3101 bnz dive_boot_cc_part2_2 ; NO - ok |
| 2824 movlw .0 | 3102 movlw .0 ; YES - revert to calculated SP |
| 2825 movff WREG,opt_ccr_mode | 3103 movff WREG,opt_ccr_mode ; ... |
| 3104 | |
| 2826 dive_boot_cc_part2_2: | 3105 dive_boot_cc_part2_2: |
| 2827 bsf event_SP_change ; set setpoint event flag | 3106 bsf event_SP_change ; set setpoint event flag |
| 2828 | 3107 |
| 2829 ; Start with SP1 (CCR) or 0 (pSCR) as default. | 3108 ; Start with SP1 (CCR) or 0 (pSCR) as default. |
| 2830 ; If in sensor mode, this value will be overwritten by calc_deko_divemode_sensor | 3109 ; If in sensor mode, this value will be overwritten by calc_deko_divemode_sensor |
| 2831 clrf WREG ; pre-load WREG with setpoint value 0 for pSCR calculated | 3110 clrf WREG ; pre-load WREG with setpoint value 0 for pSCR calculated |
| 2832 btfsc FLAG_ccr_mode ; in CCR mode? | 3111 btfsc FLAG_ccr_mode ; in CCR mode? |
| 2833 movff opt_setpoint_cbar+0,WREG ; YES - get value of setpoint 1 into WREG | 3112 movff opt_setpoint_cbar+0,WREG ; YES - get value of setpoint 1 into WREG |
| 2834 movff WREG,char_I_const_ppO2 ; write setpoint to deco engine | 3113 movff WREG,char_I_const_ppO2 ; write setpoint to deco engine |
| 3114 | |
| 2835 IFDEF _external_sensor | 3115 IFDEF _external_sensor |
| 2836 call transmit_setpoint ; transmit current setpoint from WREG (in cbar) to external electronics | 3116 call transmit_setpoint ; transmit current setpoint from WREG (in cbar) to external electronics |
| 2837 goto calc_deko_divemode_sensor ; read & process sensor data (and return) | 3117 goto calc_deko_divemode_sensor ; process sensor readings and return |
| 2838 ELSE | 3118 ELSE |
| 2839 return ; done | 3119 return ; done |
| 2840 ENDIF | 3120 ENDIF |
| 2841 | 3121 |
| 2842 ENDIF ; _ccr_pscr | 3122 ENDIF ; _ccr_pscr |
| 2843 | 3123 |
| 3124 | |
| 2844 ;============================================================================= | 3125 ;============================================================================= |
| 2845 | 3126 dmode3 CODE |
| 3127 ;============================================================================= | |
| 3128 | |
| 3129 | |
| 3130 ;----------------------------------------------------------------------------- | |
| 3131 ; Initialize Dive Mode | |
| 3132 ; | |
| 2846 diveloop_boot: | 3133 diveloop_boot: |
| 2847 ; do the basic initialization | 3134 ; do the basic initialization |
| 2848 call restart_set_modes_and_flags | 3135 call restart_set_modes_and_flags ; basic settings depending on deco mode |
| 2849 | 3136 |
| 2850 ; stop accelerometer and compass | 3137 ; save on energy |
| 2851 call I2C_sleep_compass | 3138 call I2C_sleep_compass ; stop accelerometer and compass |
| 2852 | 3139 |
| 2853 ; do an early initialization of all deco engine output variables to | 3140 ; do an early initialization of all deco engine output variables to |
| 2854 ; avoid glitches in the display outputs during deco engine start-up | 3141 ; avoid glitches in the display outputs during deco engine start-up |
| 2855 call deco_init_output_vars; ; (C-code) | 3142 call deco_init_output_vars; ; (C-code) |
| 2856 banksel common ; back to bank common | 3143 banksel common ; back to bank common |
| 2857 | 3144 |
| 3145 ; configure screen layout | |
| 3146 TSTOSC opt_layout ; alternative layout enabled? | |
| 3147 bsf alt_layout_active ; YES - start with alternative layout | |
| 3148 | |
| 3149 ; configure tissue graphics | |
| 3150 TSTOSS opt_tissue_graphics ; shall show: 0= pres+sat, 1= N2+He | |
| 3151 bsf tissue_graphic_layout ; YES - show press+sat | |
| 3152 TSTOSC char_I_model ; GF factors enabled? | |
| 3153 bsf tissue_graphic_gf ; YES - show GF lines | |
| 3154 | |
| 2858 ; reset max relative pressure (max depth) | 3155 ; reset max relative pressure (max depth) |
| 2859 bsf reset_max_pressure ; request ISR to reset the max pressure | 3156 bsf reset_max_pressure ; request ISR to reset the max pressure |
| 2860 | |
| 2861 | 3157 |
| 2862 IFDEF _min_depth_option | 3158 IFDEF _min_depth_option |
| 2863 ; reset the resettable min/max relative pressure (trip-wise min/max depth) | 3159 ; reset the resettable min/max relative pressure (trip-wise min/max depth) |
| 2864 bsf reset_trip_pressure ; request ISR to reset the resettable min/max pressure | 3160 bsf reset_trip_pressure ; request ISR to reset the resettable min/max pressure |
| 2865 ENDIF | 3161 ENDIF |
| 2905 bsf lo,DECO_START_NORM ; set flag for doing a normal plan | 3201 bsf lo,DECO_START_NORM ; set flag for doing a normal plan |
| 2906 bsf lo,DECO_INITIALIZE ; set flag for initializing the deco engine | 3202 bsf lo,DECO_INITIALIZE ; set flag for initializing the deco engine |
| 2907 movff lo,char_O_deco_status ; bank-safe copy back to deco engine | 3203 movff lo,char_O_deco_status ; bank-safe copy back to deco engine |
| 2908 | 3204 |
| 2909 ; disable "fast forward" function | 3205 ; disable "fast forward" function |
| 2910 movlw .0 | 3206 movlw .0 ; set fast forward to zero |
| 2911 movff WREG,char_I_sim_advance_time | 3207 movff WREG,char_I_sim_advance_time; ... |
| 2912 | 3208 |
| 2913 ; write last stop depth to deco engine | 3209 ; write last stop depth to deco engine |
| 2914 movff opt_last_stop,char_I_last_stop_depth | 3210 movff opt_last_stop,char_I_last_stop_depth |
| 2915 | 3211 |
| 2916 ; initialize max depth for apnoe mode | 3212 ; initialize max depth for apnoe mode |
| 2917 CLRI apnoe_max_pressure | 3213 CLRI apnoe_max_pressure ; reset to zero |
| 2918 | 3214 |
| 2919 ; reset minimum temperature, ISR-safe 2 byte copy | 3215 ; reset minimum temperature, ISR-safe 2 byte copy |
| 2920 SMOVII temperature_cur,temperature_min | 3216 SMOVII temperature_cur,temperature_min |
| 2921 | 3217 |
| 2922 ; ISR-safe copy of start-of-dive date and time for logbook (6 bytes in total) | 3218 ; ISR-safe copy of start-of-dive date and time for logbook (6 bytes in total) |
| 2929 ; save supersaturation at beginning of dive (only lower byte is used for value) | 3225 ; save supersaturation at beginning of dive (only lower byte is used for value) |
| 2930 movff int_O_lead_supersat+0,supersat_start | 3226 movff int_O_lead_supersat+0,supersat_start |
| 2931 | 3227 |
| 2932 clrf menu_pos_cur ; reset current menu position | 3228 clrf menu_pos_cur ; reset current menu position |
| 2933 clrf active_premenu ; no pre-menu task active | 3229 clrf active_premenu ; no pre-menu task active |
| 2934 bsf o2_sensors_agree ; initialize sensors disagree warning system | |
| 2935 | 3230 |
| 2936 clrf safety_stop_countdown ; clear safety stop count-down | 3231 clrf safety_stop_countdown ; clear safety stop count-down |
| 2937 | 3232 |
| 2938 CLRI last_pressure_velocity ; initialize last pressure for velocity calculation | 3233 CLRI last_pressure_velocity ; initialize last pressure for velocity calculation |
| 2939 CLRI dive_timeout_timer ; initialize timeout counter | 3234 CLRI dive_timeout_timer ; initialize timeout counter |
| 2956 | 3251 |
| 2957 btfss tr_functions_activated ; TR functions activated? | 3252 btfss tr_functions_activated ; TR functions activated? |
| 2958 bra diveloop_boot_0 ; NO - skip TR function initialization | 3253 bra diveloop_boot_0 ; NO - skip TR function initialization |
| 2959 | 3254 |
| 2960 banksel int_IO_pressure_value | 3255 banksel int_IO_pressure_value |
| 2961 clrf WREG ; clear WREG | 3256 |
| 2962 bsf WREG,int_not_avail_flag ; set WREG to coding for integer numbers -> data not available | 3257 clrf WREG ; set WREG to coding for integer numbers -> data not available |
| 3258 bsf WREG,int_not_avail_flag ; ... | |
| 2963 clrf int_IO_pressure_value+0 ; clear low byte of 1st pressure reading value | 3259 clrf int_IO_pressure_value+0 ; clear low byte of 1st pressure reading value |
| 2964 movwf int_IO_pressure_value+1 ; copy to high byte of 1st pressure reading value | 3260 movwf int_IO_pressure_value+1 ; copy to high byte of 1st pressure reading value |
| 2965 clrf int_IO_pressure_value+2 ; clear low byte of 2nd pressure reading value | 3261 clrf int_IO_pressure_value+2 ; clear low byte of 2nd pressure reading value |
| 2966 movwf int_IO_pressure_value+3 ; copy to high byte of 2nd pressure reading value | 3262 movwf int_IO_pressure_value+3 ; copy to high byte of 2nd pressure reading value |
| 2967 clrf int_I_pressure_drop+0 ; clear low byte of 1st pressure drop value | 3263 clrf int_I_pressure_drop+0 ; clear low byte of 1st pressure drop value |
| 2989 IFDEF _ccr_pscr | 3285 IFDEF _ccr_pscr |
| 2990 setf best_dil_number ; initialize best diluent as not computed yet (255) | 3286 setf best_dil_number ; initialize best diluent as not computed yet (255) |
| 2991 ENDIF | 3287 ENDIF |
| 2992 | 3288 |
| 2993 btfsc FLAG_oc_mode ; in OC mode? | 3289 btfsc FLAG_oc_mode ; in OC mode? |
| 2994 rcall dive_boot_oc ; YES - add OC mode settings | 3290 call dive_boot_oc ; YES - add OC mode settings |
| 2995 | 3291 |
| 2996 IFDEF _ccr_pscr | 3292 IFDEF _ccr_pscr |
| 2997 btfsc FLAG_ccr_mode ; in CCR mode? | 3293 btfsc FLAG_ccr_mode ; in CCR mode? |
| 2998 rcall dive_boot_cc ; YES - add CC mode settings | 3294 call dive_boot_cc ; YES - add CC mode settings |
| 2999 btfsc FLAG_ccr_mode ; in CCR mode? | 3295 btfsc FLAG_ccr_mode ; in CCR mode? |
| 3000 rcall dive_boot_cc_part2 ; YES - add CC sensor and SP settings | 3296 call dive_boot_cc_part2 ; YES - add CC sensor and SP settings |
| 3001 | 3297 |
| 3002 btfsc FLAG_pscr_mode ; in pSCR mode? | 3298 btfsc FLAG_pscr_mode ; in pSCR mode? |
| 3003 rcall dive_boot_cc ; YES - add CC mode settings | 3299 call dive_boot_cc ; YES - add CC mode settings |
| 3004 btfsc FLAG_pscr_mode ; in pSCR mode? | 3300 btfsc FLAG_pscr_mode ; in pSCR mode? |
| 3005 rcall dive_boot_cc_part2 ; YES - add CC sensor and SP settings | 3301 call dive_boot_cc_part2 ; YES - add CC sensor and SP settings |
| 3006 ENDIF | 3302 ENDIF |
| 3007 | 3303 |
| 3008 bcf bailout_mode ; not in bailout mode | 3304 bcf bailout_mode ; not in bailout mode |
| 3009 | 3305 |
| 3010 call ghostwriter_short_header ; write short header with dive number into profile memory | 3306 call ghostwriter_short_header ; write short header with dive number into profile memory |
| 3037 | 3333 |
| 3038 return ; done with dive mode boot | 3334 return ; done with dive mode boot |
| 3039 | 3335 |
| 3040 | 3336 |
| 3041 ;============================================================================= | 3337 ;============================================================================= |
| 3042 | 3338 dmode4 CODE |
| 3339 ;============================================================================= | |
| 3340 | |
| 3341 | |
| 3342 ;----------------------------------------------------------------------------- | |
| 3343 ; Check all Sorts of Parameters and issue Warnings and Attentions if applicable | |
| 3344 ; | |
| 3043 divemode_check_warnings: | 3345 divemode_check_warnings: |
| 3044 movlw .1 ; one message at a time in alternative layout | 3346 movlw .1 ; one message at a time in alternative layout |
| 3045 btfss alt_layout_active ; in alternative layout? | 3347 btfss alt_layout_active ; in alternative layout? |
| 3046 movlw .2 ; NO - two messages at a time in normal layout | 3348 movlw .2 ; NO - two messages at a time in normal layout |
| 3047 cpfsgt message_counter ; more than one (alt layout) / 2 (normal layout) messages currently active? | 3349 cpfsgt message_counter ; had more than 1 / 2 messages in the last round? |
| 3048 bra divemode_check_warnings1 ; NO - update messages every second | 3350 bra divemode_check_warnings1 ; NO - update messages every second |
| 3049 | 3351 |
| 3050 ; ; YES - update every 4 seconds: | 3352 ; ; YES - update every 4 seconds: |
| 3051 ; btfss timebase_1sec ; - on second 1 or 3 ? | 3353 ; btfss timebase_1sec ; - on second 1 or 3 ? |
| 3052 ; return ; NO - no update in this cycle | 3354 ; return ; NO - no update in this cycle |
| 3053 ; btfss timebase_2sec ; YES - on second 3 ? | 3355 ; btfss timebase_2sec ; YES - on second 3 ? |
| 3054 ; return ; NO - no update in this cycle | 3356 ; return ; NO - no update in this cycle |
| 3055 ; ;bra divemode_check_warnings1 ; YES - update messages | 3357 ; ;bra divemode_check_warnings1 ; YES - update messages |
| 3056 | 3358 |
| 3057 ; NO - update every 2 seconds | 3359 ; YES - update every 2 seconds |
| 3058 btfsc timebase_1sec ; - on even second? | 3360 btfsc timebase_1sec ; - on even second? |
| 3059 return ; NO - done | 3361 return ; NO - done |
| 3060 ;bra divemode_check_warnings1 ; YES - update messages | 3362 ;bra divemode_check_warnings1 ; YES - update messages |
| 3061 | 3363 |
| 3062 divemode_check_warnings1: | 3364 divemode_check_warnings1: |
| 3063 ; start a new message collection cycle | |
| 3064 bcf message_advice ; clear flag for messages of level advice | |
| 3065 bcf message_attention ; clear flag for messages of level attention | |
| 3066 bcf message_warning ; clear flag for messages of level warning | |
| 3067 clrf message_counter ; clear message counter | 3365 clrf message_counter ; clear message counter |
| 3068 | 3366 |
| 3069 ; messages sorted by severity: highest severity warnings first, then attentions, advices and last info | 3367 ; messages sorted by severity: highest severity warnings first, then attentions, advices and last info |
| 3070 | 3368 |
| 3071 ; warnings for all modes | 3369 ; warnings for all modes |
| 3072 call check_warn_battery ; check if the battery level should be displayed/warned | 3370 call check_battery ; check battery status |
| 3073 rcall check_depth_limit ; check current depth against set depth limit | 3371 rcall check_depth_limit ; check current depth |
| 3074 call check_divetimeout ; check and show the dive mode timeout (not actually a warning) | 3372 call check_divetimeout ; check dive timeout |
| 3075 | 3373 |
| 3076 btfsc FLAG_apnoe_mode ; in apnoe mode? | 3374 btfsc FLAG_apnoe_mode ; in apnoe mode? |
| 3077 bra divemode_check_warnings2 ; YES | 3375 bra divemode_check_warnings2 ; YES - skip deco mode checks |
| 3078 | 3376 |
| 3079 btfsc FLAG_gauge_mode ; in gauge mode? | 3377 btfsc FLAG_gauge_mode ; in gauge mode? |
| 3080 bra divemode_check_warnings2 ; YES | 3378 bra divemode_check_warnings2 ; YES - skip deco mode checks |
| 3081 | 3379 |
| 3082 ; warnings applicable only in deco modes | 3380 ; warnings applicable only in deco modes |
| 3083 | 3381 |
| 3084 IFDEF _cave_mode | 3382 IFDEF _cave_mode |
| 3085 rcall check_cavemode ; check cave mode status | 3383 rcall check_cavemode ; check cave mode status |
| 3086 ENDIF | 3384 ENDIF |
| 3087 | 3385 |
| 3088 rcall check_display_ftts ; show @+x time (or cave mode cTTS) | 3386 rcall check_display_ftts ; show fTTS time (or cave mode cTTS) |
| 3089 | 3387 rcall check_ppO2 ; check ppO2 |
| 3090 rcall check_ppO2 ; check ppO2 and displays warning, if required | |
| 3091 | 3388 |
| 3092 IFDEF _external_sensor | 3389 IFDEF _external_sensor |
| 3093 btfss o2_sensors_agree ; are the sensor values within the threshold range? | 3390 rcall check_ext_sensors ; check external sensors |
| 3094 rcall check_warn_sensors_disagree ; NO - do further evaluation | |
| 3095 btfsc o2_sensors_agree ; are the sensor values within the threshold range? | |
| 3096 bcf o2_sensors_warning ; YES - clear flag for a new warning | |
| 3097 ENDIF | 3391 ENDIF |
| 3098 | 3392 |
| 3099 rcall check_outside ; check of ZHL16 model violation | 3393 rcall check_outside ; check of ZHL16 model violation |
| 3100 | 3394 |
| 3101 IFDEF _helium | 3395 IFDEF _ccr_pscr |
| 3102 rcall check_IBCD ; check for IBCD attention or warning | |
| 3103 ENDIF | |
| 3104 | |
| 3105 btfsc FLAG_ccr_mode ; in CCR mode? | 3396 btfsc FLAG_ccr_mode ; in CCR mode? |
| 3106 rcall check_OC_gas_avail ; YES - check if a breathable OC (bailout) gas is available | 3397 rcall check_OC_gas_avail ; YES - check if a breathable OC (bailout) gas is available |
| 3107 btfsc FLAG_pscr_mode ; in pSCR mode? | 3398 btfsc FLAG_pscr_mode ; in pSCR mode? |
| 3108 rcall check_OC_gas_avail ; YES - check if a breathable OC (bailout) gas is available | 3399 rcall check_OC_gas_avail ; YES - check if a breathable OC (bailout) gas is available |
| 3400 ENDIF | |
| 3109 | 3401 |
| 3110 btfsc decostop_active ; in deco mode? | 3402 btfsc decostop_active ; in deco mode? |
| 3111 rcall check_and_store_sat_violation; YES - sets warnings, if required | 3403 rcall check_saturation ; YES - check tissue saturation |
| 3112 | 3404 |
| 3113 rcall check_mbubbles ; check for micro bubbles | 3405 rcall check_mbubbles ; check for micro bubbles |
| 3114 rcall check_cns_violation ; check CNS value and display it, if required | 3406 rcall check_cns_violation_now ; check current CNS value |
| 3115 rcall check_gas_needs ; show gas needs warning if any gas need for ascent is > threshold | 3407 rcall check_cns_violation_eod ; check end-of-dive CNS value (needs to be done after check_cns_violation_now) |
| 3116 rcall check_eod_cns_violation ; check CNS values for end-of-dive and display warning, if required | 3408 rcall check_gas_needs ; check for gas needs |
| 3409 rcall check_gas_change ; check for diluent or gas change advice | |
| 3410 | |
| 3411 IFDEF _ccr_pscr | |
| 3412 btfsc FLAG_ccr_mode ; in CCR mode? | |
| 3413 rcall check_gas_density ; YES - check gas density | |
| 3414 btfsc FLAG_pscr_mode ; in pSCR mode? | |
| 3415 rcall check_gas_density ; YES - check gas density | |
| 3416 ENDIF | |
| 3117 | 3417 |
| 3118 btfsc use_aGF ; using alternative GF factors? | 3418 btfsc use_aGF ; using alternative GF factors? |
| 3119 rcall warn_agf ; YES - show memo | 3419 rcall remind_agf_in_use ; YES - show reminder |
| 3120 | |
| 3121 btfsc sp_fallback ; in fallback condition due to O2 sensor failure? | |
| 3122 rcall warn_fallback ; YES - show a warning | |
| 3123 | |
| 3124 btfsc better_dil_available ; is a better diluent available? | |
| 3125 rcall advice_gas_change ; YES - display a gas change advice | |
| 3126 | |
| 3127 btfsc better_gas_available ; is a better gas available? | |
| 3128 rcall advice_gas_change ; YES - display a gas change advice | |
| 3129 | 3420 |
| 3130 divemode_check_warnings2: | 3421 divemode_check_warnings2: |
| 3422 | |
| 3131 IFDEF _rx_functions | 3423 IFDEF _rx_functions |
| 3132 btfss tr_functions_activated ; TR functions activated? | 3424 btfss tr_functions_activated ; TR functions activated? |
| 3133 bra divemode_check_warnings3 ; NO - skip | 3425 bra divemode_check_warnings3 ; NO - skip |
| 3134 call check_tr_functions ; YES - check transmitter functions | 3426 call check_tr_functions ; YES - check transmitter functions |
| 3135 call check_tr_messages ; - check SAC attention and switch advice | 3427 call check_tr_messages ; - check SAC attention and switch advice |
| 3136 ENDIF | 3428 ENDIF |
| 3137 | 3429 |
| 3138 divemode_check_warnings3: | 3430 divemode_check_warnings3: |
| 3139 ; Display / clear the advice, attention or warning icon | 3431 |
| 3140 btfsc message_advice ; any message of level advice? | 3432 ; compute if an advice / attention / warning sign shall be shown |
| 3141 bsf FLAG_TFT_sign_show ; YES | 3433 rcall divemode_check_sign |
| 3142 btfsc message_attention ; any message of level attention? | 3434 |
| 3143 bsf FLAG_TFT_sign_show ; YES | 3435 ; increment message page number |
| 3144 btfsc message_warning ; any message of level warning? | |
| 3145 bsf FLAG_TFT_sign_show ; YES | |
| 3146 btfss FLAG_TFT_sign_show ; any message of above levels? | |
| 3147 bsf FLAG_TFT_sign_clear ; NO - clear sign | |
| 3148 | |
| 3149 ; Increment message page number | |
| 3150 incf message_page,F ; increment page number | 3436 incf message_page,F ; increment page number |
| 3151 bcf STATUS,C ; clear carry bit | 3437 bcf STATUS,C ; clear carry bit |
| 3152 movf message_page,W ; get page number into WREG | 3438 movf message_page,W ; get page number into WREG |
| 3153 btfss alt_layout_active ; in alternative layout? | 3439 btfss alt_layout_active ; in alternative layout? |
| 3154 rlcf WREG,W ; NO - each page can take two messages | 3440 rlcf WREG,W ; NO - each page can take two messages |
| 3155 cpfsgt message_counter ; number of actual messages > message capacity ? | 3441 cpfsgt message_counter ; number of actual messages > message capacity ? |
| 3156 clrf message_page ; NO - all messages could be shown, restart from first page next time | 3442 clrf message_page ; NO - all messages could be shown, restart from first page next time |
| 3157 | 3443 |
| 3158 ; Clear both rows of messages if there is nothing to show at all | 3444 ; clear both rows of messages if there is nothing to show at all |
| 3159 tstfsz message_counter ; any message to show? | 3445 tstfsz message_counter ; any message to show? |
| 3160 bra divemode_check_warnings4 ; YES - look if second row needs to be cleared | 3446 bra divemode_check_warnings4 ; YES - look if second row needs to be cleared |
| 3161 bsf FLAG_TFT_message_clear_both ; NO - request clearing of left-over messages | 3447 bsf FLAG_TFT_message_clear_both ; NO - request clearing of left-over messages |
| 3162 return ; - done | 3448 return ; - done |
| 3163 | 3449 |
| 3164 divemode_check_warnings4: | 3450 divemode_check_warnings4: |
| 3165 ; Clear 2nd row of messages if there is nothing to show (on this page) | 3451 ; clear 2nd row of messages if there is nothing to show (on this page) |
| 3166 btfss message_2nd_row_used ; does the 2nd row contain a message? | 3452 btfss message_2nd_row_used ; does the 2nd row contain a message? |
| 3167 bsf FLAG_TFT_message_clear_2nd ; NO - set flag to clear the 2nd row | 3453 bsf FLAG_TFT_message_clear_2nd ; NO - set flag to clear the 2nd row |
| 3168 return ; done | 3454 return ; done |
| 3169 | 3455 |
| 3170 ;----------------------------------------------------------------------------- | 3456 |
| 3171 | 3457 ;----------------------------------------------------------------------------- |
| 3172 global check_warn_battery | 3458 ; Helper Function - check if an Advice / Attention / Warning Sign shall be shown |
| 3173 check_warn_battery: | 3459 ; |
| 3460 divemode_check_sign: | |
| 3461 ; clear sign flags | |
| 3462 bcf sign_advice ; clear flag for showing advice sign | |
| 3463 bcf sign_attention ; clear flag for showing attention sign | |
| 3464 bcf sign_warning ; clear flag for showing warning sign | |
| 3465 | |
| 3466 ; check for new advices | |
| 3467 movf DM_flags_advc_det,W ; get current advices | |
| 3468 andwf DM_flags_advc_ack,W ; keep only those acknowledgments that have current advices | |
| 3469 movwf DM_flags_advc_ack ; store updated acknowledgments | |
| 3470 xorwf DM_flags_advc_det,W ; find advices that have not been acknowledged yet | |
| 3471 tstfsz WREG ; any new advice? | |
| 3472 bsf sign_advice ; YES - set flag for showing advice sign | |
| 3473 | |
| 3474 ; check for new attentions (1) | |
| 3475 movf DM_flags_att1_det,W ; get current attentions | |
| 3476 andwf DM_flags_att1_ack,W ; keep only those acknowledgments that have current attentions | |
| 3477 movwf DM_flags_att1_ack ; store updated acknowledgments | |
| 3478 xorwf DM_flags_att1_det,W ; find attentions that have not been acknowledged yet | |
| 3479 tstfsz WREG ; any new attention? | |
| 3480 bsf sign_attention ; YES - set flag for showing attention sign | |
| 3481 | |
| 3482 ; check for new attentions (2) | |
| 3483 movf DM_flags_att2_det,W ; get current attentions | |
| 3484 andwf DM_flags_att2_ack,W ; keep only those acknowledgments that have current attentions | |
| 3485 movwf DM_flags_att2_ack ; store updated acknowledgments | |
| 3486 xorwf DM_flags_att2_det,W ; find attentions that have not been acknowledged yet | |
| 3487 tstfsz WREG ; any new attention? | |
| 3488 bsf sign_attention ; YES - set flag for showing attention sign | |
| 3489 | |
| 3490 ; check for new attentions (3) | |
| 3491 movf DM_flags_att3_det,W ; get current attentions | |
| 3492 andwf DM_flags_att3_ack,W ; keep only those acknowledgments that have current attentions | |
| 3493 movwf DM_flags_att3_ack ; store updated acknowledgments | |
| 3494 xorwf DM_flags_att3_det,W ; find attentions that have not been acknowledged yet | |
| 3495 tstfsz WREG ; any new attention? | |
| 3496 bsf sign_attention ; YES - set flag for showing attention sign | |
| 3497 | |
| 3498 ; check for new warnings (1) | |
| 3499 movf DM_flags_war1_det,W ; get current warnings | |
| 3500 andwf DM_flags_war1_ack,W ; keep only those acknowledgments that have current warnings | |
| 3501 movwf DM_flags_war1_ack ; store updated acknowledgments | |
| 3502 xorwf DM_flags_war1_det,W ; find warnings that have not been acknowledged yet | |
| 3503 tstfsz WREG ; any new warning? | |
| 3504 bsf sign_warning ; YES - set flag for showing warning sign | |
| 3505 | |
| 3506 ; check for new warnings (2) | |
| 3507 movf DM_flags_war2_det,W ; get current warnings | |
| 3508 andwf DM_flags_war2_ack,W ; keep only those acknowledgments that have current warnings | |
| 3509 movwf DM_flags_war2_ack ; store updated acknowledgments | |
| 3510 xorwf DM_flags_war2_det,W ; find warnings that have not been acknowledged yet | |
| 3511 tstfsz WREG ; any new warning? | |
| 3512 bsf sign_warning ; YES - set flag for showing warning sign | |
| 3513 | |
| 3514 ; show or clear the advice / attention / warning sign | |
| 3515 btfsc sign_advice ; shall show advice sign? | |
| 3516 bsf FLAG_TFT_sign_show ; YES - show sign | |
| 3517 btfsc sign_attention ; shall show attention sign? | |
| 3518 bsf FLAG_TFT_sign_show ; YES - show sign | |
| 3519 btfsc sign_warning ; shall show warning sign? | |
| 3520 bsf FLAG_TFT_sign_show ; YES - show sign | |
| 3521 btfss FLAG_TFT_sign_show ; shall show any sign? | |
| 3522 bsf FLAG_TFT_sign_clear ; NO - then clear the sign | |
| 3523 | |
| 3524 return ; done | |
| 3525 | |
| 3526 | |
| 3527 ;----------------------------------------------------------------------------- | |
| 3528 ; Check Battery Power | |
| 3529 ; | |
| 3530 global check_battery | |
| 3531 check_battery: | |
| 3532 bcf warn_det_batt_low ; clear warning for battery low | |
| 3174 movlw battery_show_level+1 ; get threshold for showing battery level, incremented by 1 | 3533 movlw battery_show_level+1 ; get threshold for showing battery level, incremented by 1 |
| 3175 cpfslt batt_percent ; battery percentage ok? | 3534 cpfslt batt_percent ; battery percentage ok? |
| 3176 return ; YES - no display, no warning | 3535 return ; YES - done |
| 3177 ; Display Battery, but warn? | 3536 btfsc battery_low_condition ; NO - battery low condition detected? |
| 3178 btfsc battery_low_condition ; battery low condition detected? | 3537 bsf warn_det_batt_low ; YES - set warning for battery low |
| 3179 bsf message_warning ; YES - set warning flag for battery low | 3538 movf active_customview,W ; - get current custom view |
| 3180 movlw index_clock_batt_surfpress ; index of custom view clock, battery and surface pressure | 3539 xorlw index_clock_batt_surfpress ; - battery shown in custom view? |
| 3181 cpfseq active_customview ; battery shown in custom view? | 3540 bnz check_battery_mesg ; NO - show message |
| 3182 bra check_warn_battery2 ; NO - show warning | 3541 return ; YES - do not show twice, done |
| 3183 return ; YES - do not show twice (in custom view and in message area) | 3542 |
| 3184 check_warn_battery2: | 3543 check_battery_mesg: |
| 3185 incf message_counter,F ; increase counter | 3544 incf message_counter,F ; increase message counter |
| 3186 goto TFT_msg_batt_percent_divemode ; show warning message for battery low (battery percent) and return | 3545 goto TFT_message_battery_percent ; show message for battery low (battery percent) and return |
| 3187 | 3546 |
| 3188 | 3547 |
| 3548 ;----------------------------------------------------------------------------- | |
| 3549 ; Show Dive Timeout Counter if Dive Time is not counted | |
| 3550 ; | |
| 3189 check_divetimeout: | 3551 check_divetimeout: |
| 3190 btfsc count_divetime ; is dive time counted? | 3552 btfsc count_divetime ; is dive time counted? |
| 3191 return ; YES - do nothing | 3553 return ; YES - nothing to do, done |
| 3192 incf message_counter,F ; increase counter | 3554 incf message_counter,F ; NO - increase message counter |
| 3193 goto TFT_divetimeout ; show timeout counter (and return) | 3555 goto TFT_message_divetimeout ; - show timeout counter and return |
| 3194 | 3556 |
| 3195 | 3557 |
| 3558 ;----------------------------------------------------------------------------- | |
| 3559 ; Check ppO2 of all Gases / Diluents in use | |
| 3560 ; | |
| 3196 check_ppO2: | 3561 check_ppO2: |
| 3197 IFDEF _ccr_pscr | 3562 IFDEF _ccr_pscr |
| 3198 btfsc FLAG_oc_mode ; are we in OC mode? | 3563 ; check if breathing from the loop |
| 3564 btfsc FLAG_oc_mode ; in OC mode? | |
| 3199 bra check_ppO2_1 ; YES - continue with breathed gas | 3565 bra check_ppO2_1 ; YES - continue with breathed gas |
| 3200 btfsc bailout_mode ; NO - in bailout? | 3566 btfsc bailout_mode ; NO - in bailout? |
| 3201 bra check_ppO2_1 ; YES - continue with breathed gas | 3567 bra check_ppO2_1 ; YES - continue with breathed gas |
| 3202 ; CCR / pSCR mode - checks on pure diluent | 3568 ; CCR / pSCR mode - check the pure diluent |
| 3569 bcf warn_det_ppO2_diluent ; clear warning for pure diluent ppO2 | |
| 3570 bcf attn_det_ppo2_diluent ; clear attention for pure diluent ppO2 | |
| 3203 MOVII int_O_pure_ppO2,mpr ; get value and attention/warning flags for the pure diluent | 3571 MOVII int_O_pure_ppO2,mpr ; get value and attention/warning flags for the pure diluent |
| 3204 btfsc hi,int_warning_flag ; is there a ppO2 low or high warning on the pure diluent? | 3572 btfsc hi,int_warning_flag ; ppO2 of the pure diluent in warning state? |
| 3205 rcall check_ppO2_dw ; YES - show warning and return on next line | 3573 bra check_ppO2_dil_warn ; YES - show warning |
| 3206 btfsc hi,int_attention_flag ; ppO2 of the pure diluent in attention state? | 3574 btfsc hi,int_attention_flag ; ppO2 of the pure diluent in attention state? |
| 3207 rcall check_ppO2_da ; YES - show attention and return on next line | 3575 bra check_ppO2_dil_attn ; YES - show attention |
| 3208 ENDIF | 3576 bra check_ppO2_1 ; continue with checking breathed gas |
| 3209 ; all modes - checks on breathed gas (OC or from loop) | 3577 |
| 3578 check_ppO2_dil_warn: | |
| 3579 bsf warn_det_ppO2_diluent ; set warning for pure diluent ppO2 | |
| 3580 rcall check_ppO2_show_mesg ; show ppO2 message | |
| 3581 bra check_ppO2_1 ; continue with checking breathed gas | |
| 3582 | |
| 3583 check_ppO2_dil_attn: | |
| 3584 bsf attn_det_ppo2_diluent ; set attention for pure diluent ppO2 | |
| 3585 rcall check_ppO2_show_mesg ; show ppO2 message | |
| 3586 ;bra check_ppO2_1 ; continue with checking breathed gas | |
| 3587 ENDIF ; _ccr_pscr | |
| 3588 | |
| 3210 check_ppO2_1: | 3589 check_ppO2_1: |
| 3590 ; all modes - check breathed gas (OC or loop) | |
| 3591 bcf attn_det_ppo2_breathed ; clear attention for breathed ppO2 | |
| 3592 bcf warn_det_ppO2_breathed ; clear warning for breathed ppO2 | |
| 3211 MOVII int_O_breathed_ppO2,mpr ; get value and attention/warning flags for the breathed gas | 3593 MOVII int_O_breathed_ppO2,mpr ; get value and attention/warning flags for the breathed gas |
| 3212 btfsc hi,int_attention_flag ; breathed ppO2 in attention state (when in loop mode, no attention will be generated)? | 3594 btfsc hi,int_attention_flag ; breathed ppO2 in attention state (when in loop mode, no attention will be generated)? |
| 3213 bra check_ppo2_display_a ; YES - set attention flag and show ppO2 | 3595 bra check_ppO2_breath_attn ; YES - set attention flag and show ppO2 |
| 3214 btfsc hi,int_low_flag ; breathed ppO2 too low? | 3596 btfsc hi,int_low_flag ; NO - breathed ppO2 too low? |
| 3215 bra check_ppO2_low ; YES - record the warning and show ppO2 | 3597 bra check_ppO2_breath_warn_low ; YES - record the warning and show ppO2 |
| 3216 btfsc hi,int_high_flag ; breathed ppO2 too high? | 3598 btfsc hi,int_high_flag ; NO - breathed ppO2 too high? |
| 3217 bra check_ppO2_high ; YES - record the warning and show ppO2 | 3599 bra check_ppO2_breath_warn_high ; YES - record the warning and show ppO2 |
| 3218 TSTOSS opt_showppo2 ; show ppO2 anyhow? (0 = no, 1 = show always) | 3600 bra check_ppO2_breath_ok ; NO - ppO2 is ok |
| 3219 return ; NO - no warnings, no show - done | 3601 |
| 3220 bra check_ppO2_common_2 ; YES - but only when in OC or bailout... | 3602 check_ppO2_breath_attn: |
| 3221 check_ppO2_low: | 3603 bsf attn_det_ppo2_breathed ; set attention for breathed ppO2 |
| 3604 bra check_ppO2_show ; show ppO2 message | |
| 3605 | |
| 3606 check_ppO2_breath_warn_low: | |
| 3222 movlw d'4' ; set type of alarm (ppO2 low) | 3607 movlw d'4' ; set type of alarm (ppO2 low) |
| 3223 bra check_ppO2_common ; continue with common part | 3608 bra check_ppO2_breath_common ; continue with common part |
| 3224 check_ppO2_high: | 3609 |
| 3610 check_ppO2_breath_warn_high: | |
| 3225 movlw d'5' ; set type of alarm (ppO2 high) | 3611 movlw d'5' ; set type of alarm (ppO2 high) |
| 3226 check_ppO2_common: | 3612 ;bra check_ppO2_breath_common ; continue with common part |
| 3613 | |
| 3614 check_ppO2_breath_common: | |
| 3227 movwf alarm_type ; copy alarm type to alarm register | 3615 movwf alarm_type ; copy alarm type to alarm register |
| 3228 bsf event_occured ; set event flag | 3616 bsf event_occured ; set event flag |
| 3229 bsf message_warning ; show warning sign for breathed ppO2 | 3617 bsf warn_det_ppO2_breathed ; set warning for breathed ppO2 |
| 3230 check_ppO2_common_2: | 3618 bra check_ppO2_show ; show ppO2 message |
| 3231 btfsc FLAG_oc_mode ; are we in OC mode? | 3619 |
| 3232 bra check_ppo2_display ; YES - show | 3620 check_ppO2_breath_ok: |
| 3621 TSTOSS opt_showppo2 ; shall always show ppO2 (0 = no, 1 = yes) | |
| 3622 return ; NO - done | |
| 3623 ;bra check_ppO2_show ; YES - show ppO2 message | |
| 3624 | |
| 3625 check_ppO2_show: | |
| 3233 IFDEF _ccr_pscr | 3626 IFDEF _ccr_pscr |
| 3234 btfsc bailout_mode ; are we in bailout mode? | 3627 btfsc FLAG_oc_mode ; in OC mode? |
| 3235 bra check_ppo2_display ; YES - show | 3628 bra check_ppO2_show_1 ; YES - show ppO2 message |
| 3236 ENDIF | 3629 btfsc bailout_mode ; in bailout mode? |
| 3630 bra check_ppO2_show_1 ; YES - show ppO2 message | |
| 3237 return ; NO - in loop mode, ppO2 is already shown via setpoint display | 3631 return ; NO - in loop mode, ppO2 is already shown via setpoint display |
| 3238 check_ppo2_display_a: | 3632 ENDIF |
| 3239 bsf message_attention ; show attention sign for breathed ppO2 | 3633 check_ppO2_show_1: |
| 3240 check_ppo2_display: | 3634 movf active_customview,W ; get current custom view |
| 3241 movlw index_ppo2_ead_end_cns ; index of custom view ppO2, EAD/END and CNS (without He) or gas density (with He) | 3635 xorlw index_ppo2_ead_end_cns ; ppO2 shown already via custom view? |
| 3242 cpfseq active_customview ; ppO2 shown? | 3636 bz check_ppO2_done ; YES - done |
| 3243 bra check_ppO2_b ; NO | 3637 movf active_customview,W ; get current custom view (again) |
| 3244 return ; YES - do not show twice (in custom view and in warning area) | 3638 xorlw index_pscr_info ; ppO2 shown already via custom view? |
| 3245 check_ppO2_b: | 3639 bz check_ppO2_done ; YES - done |
| 3246 movlw index_pscr_info ; index of custom view with pSCR data | 3640 ;bra check_ppO2_show_mesg ; NO - show ppO2 message |
| 3247 cpfseq active_customview ; ppO2 shown? | 3641 |
| 3248 bra check_ppO2_d ; NO - show ppO2 | 3642 check_ppO2_show_mesg: |
| 3249 return ; YES - do not show twice (in custom view and in warning area) | 3643 incf message_counter,F ; increase message counter |
| 3250 check_ppO2_dw: | 3644 goto TFT_message_ppo2 ; show ppO2 message and return |
| 3251 bsf message_warning ; show warning sign for diluent ppO2 | 3645 |
| 3252 check_ppO2_da: | 3646 check_ppO2_done: |
| 3253 bsf message_attention ; show attention sign for diluent ppO2 (no problem if a warning sign is set as well, as it will take priority) | 3647 return ; done |
| 3254 check_ppO2_d: | 3648 |
| 3255 incf message_counter,F ; increase counter | 3649 |
| 3256 goto TFT_show_ppo2_warning ; show warning message for breathed gas or diluent ppO2 and return | 3650 ;----------------------------------------------------------------------------- |
| 3257 | 3651 ; Show fTTS Message |
| 3258 | 3652 ; |
| 3259 check_display_ftts: | 3653 check_display_ftts: |
| 3260 IFDEF _ccr_pscr | 3654 IFDEF _ccr_pscr |
| 3261 btfsc bailout_mode ; in bailout mode? | 3655 btfsc bailout_mode ; in bailout mode? |
| 3262 return ; YES - in bailout no fTTS is computed, done | 3656 return ; YES - in bailout no fTTS is computed, done |
| 3263 ENDIF | 3657 ENDIF |
| 3264 btfss count_divetime ; is dive time counted? | 3658 btfss count_divetime ; is dive time counted? |
| 3265 return ; NO - omit, done | 3659 return ; NO - omit, done |
| 3266 movff char_I_extra_time,lo ; YES - get extra time | 3660 movff char_I_extra_time,lo ; YES - get extra time |
| 3267 tstfsz lo ; - extra time > 0 ? | 3661 tstfsz lo ; - extra time > 0 ? |
| 3268 bra check_display_ftts_1 ; YES - continue checking bailout condition | 3662 bra check_display_ftts_mesg ; YES - show fTTS |
| 3269 return ; NO - no fTTS computed, done | 3663 return ; NO - no fTTS computed, done |
| 3270 check_display_ftts_1: | 3664 |
| 3665 check_display_ftts_mesg: | |
| 3271 incf message_counter,F ; increase counter | 3666 incf message_counter,F ; increase counter |
| 3272 goto TFT_show_ftts ; show @+x time | 3667 goto TFT_message_ftts ; show @+x time |
| 3273 | 3668 |
| 3274 | 3669 |
| 3275 global check_cns_violation | 3670 ;----------------------------------------------------------------------------- |
| 3276 check_cns_violation: | 3671 ; check current CNS Value |
| 3277 ; Check if CNS should be displayed | 3672 ; |
| 3673 global check_cns_violation_now | |
| 3674 check_cns_violation_now: | |
| 3675 bcf warn_det_cns_current ; clear warning for CNS | |
| 3676 bcf attn_det_cns_current ; clear attention for CNS | |
| 3278 movff int_O_CNS_current+1,WREG ; get current CNS, high byte | 3677 movff int_O_CNS_current+1,WREG ; get current CNS, high byte |
| 3279 btfsc WREG,int_warning_flag ; warning flag set? | 3678 btfsc WREG,int_warning_flag ; warning flag set? |
| 3280 bra check_cns_violation_1 ; YES - issue warning | 3679 bra check_cns_violation_now_warn; YES - show a warning |
| 3281 btfsc WREG,int_attention_flag ; NO - attention flag set? | 3680 btfsc WREG,int_attention_flag ; attention flag set? |
| 3282 bra check_cns_violation_2 ; YES - issue attention | 3681 bra check_cns_violation_now_attn; YES - show an attention |
| 3283 return ; NO - done | 3682 return ; NO - done |
| 3284 check_cns_violation_1: | 3683 |
| 3285 bsf message_warning ; show warning sign for CNS | 3684 check_cns_violation_now_warn: |
| 3286 check_cns_violation_2: | 3685 bsf warn_det_cns_current ; set warning for CNS |
| 3287 bsf message_attention ; show attention sign for CNS | 3686 bra check_cns_violation_now_mesg; show message |
| 3687 | |
| 3688 check_cns_violation_now_attn: | |
| 3689 bsf attn_det_cns_current ; set attention for CNS | |
| 3690 ;bra check_cns_violation_now_mesg; show message | |
| 3691 | |
| 3692 check_cns_violation_now_mesg: | |
| 3288 IFNDEF _helium | 3693 IFNDEF _helium |
| 3289 movlw index_ppo2_ead_end_cns ; index of custom view ppO2, EAD/END and CNS (without He) or gas density (with He) | 3694 movf active_customview,W ; get current custom view |
| 3290 cpfseq active_customview ; CNS shown? | 3695 xorlw index_ppo2_ead_end_cns ; CNS shown? |
| 3291 bra check_cns_violation_3 ; NO | 3696 bz check_cns_violation_now_done; YES - done |
| 3292 return ; YES - do not show twice (in custom view and in warning area) | 3697 ENDIF |
| 3293 ENDIF | 3698 movf active_customview,W ; get current custom view (again) |
| 3294 check_cns_violation_3: | 3699 xorlw index_CNS ; CNS shown? |
| 3295 movlw index_CNS ; index of custom view with CNS values | 3700 bz check_cns_violation_now_done; YES - done |
| 3296 cpfseq active_customview ; CNS shown? | 3701 incf message_counter,F ; NO - increase counter |
| 3297 bra check_cns_violation_4 ; NO | 3702 goto TFT_message_cns ; - show message and return |
| 3298 return ; YES - do not show twice (in custom view and in warning area) | 3703 |
| 3299 check_cns_violation_4: | 3704 check_cns_violation_now_done: |
| 3300 incf message_counter,F ; increase counter | 3705 return ; done |
| 3301 goto TFT_show_cns ; show attention/warning message for CNS and return | 3706 |
| 3302 | 3707 |
| 3303 | 3708 ;----------------------------------------------------------------------------- |
| 3304 global check_eod_cns_violation ; check end-of-dive CNS values | 3709 ; check end-of-Dive CNS Value |
| 3305 check_eod_cns_violation: | 3710 ; |
| 3306 movff int_O_CNS_current+1,WREG ; get current CNS, high byte | 3711 global check_cns_violation_eod |
| 3307 btfsc WREG,int_warning_flag ; current CNS value in warning state? | 3712 check_cns_violation_eod: |
| 3308 return ; YES - inhibit end-of-dive warning if current CNS is already in warning | 3713 bcf attn_det_cns_eod ; clear attention for end-of-dive CNS |
| 3714 btfsc warn_det_cns_current ; current CNS value in warning state? | |
| 3715 return ; YES - inhibit end-of-dive CNS checks if current CNS is already in warning | |
| 3716 ;bra check_cns_violation_eod_norm; NO - check normal plan | |
| 3717 | |
| 3718 check_cns_violation_eod_norm: | |
| 3309 movff int_O_CNS_norm+1,WREG ; get CNS at end of dive in normal plan, high byte | 3719 movff int_O_CNS_norm+1,WREG ; get CNS at end of dive in normal plan, high byte |
| 3310 btfsc WREG,int_invalid_flag ; flag for invalid value set? | 3720 btfsc WREG,int_invalid_flag ; flag for invalid value set? |
| 3311 bra check_eod_cns_violation1 ; YES - continue with checking the other CNS value | 3721 bra check_cns_violation_eod_alt ; YES - continue with checking alternative plan |
| 3312 btfsc WREG,int_warning_flag ; NO - flag for warning set? | 3722 btfsc WREG,int_warning_flag ; NO - flag for warning set? |
| 3313 bra check_eod_cns_violation2 ; YES - issue warning | 3723 bra check_cns_violation_eod_warn; YES - show message |
| 3314 check_eod_cns_violation1: ; NO - continue with checking the other CNS value | 3724 ;bra check_cns_violation_eod_alt ; NO - check alternative plan |
| 3725 | |
| 3726 check_cns_violation_eod_alt: | |
| 3315 movff int_O_CNS_alt+1,WREG ; get CNS at end of dive in alternative plan, high byte | 3727 movff int_O_CNS_alt+1,WREG ; get CNS at end of dive in alternative plan, high byte |
| 3316 btfsc WREG,int_invalid_flag ; flag for invalid value set? | 3728 btfsc WREG,int_invalid_flag ; flag for invalid value set? |
| 3317 return ; YES - done with CNS checking | 3729 return ; YES - done |
| 3318 btfsc WREG,int_warning_flag ; NO - flag for warning set? | 3730 btfsc WREG,int_warning_flag ; NO - flag for warning set? |
| 3319 bra check_eod_cns_violation2 ; YES - issue warning | 3731 bra check_cns_violation_eod_warn; YES - show message |
| 3320 return ; NO - done with CNS checking | 3732 return ; NO - done |
| 3321 check_eod_cns_violation2: ; issue warning (actually only on attention level) | 3733 |
| 3322 bsf message_attention ; show attention sign for end-of-dive CNS | 3734 check_cns_violation_eod_warn: |
| 3323 movlw index_CNS ; index of custom view with CNS values | 3735 bsf attn_det_cns_eod ; set attention(!) for end-of-dive CNS |
| 3324 cpfseq active_customview ; CNS values shown? | 3736 movf active_customview,W ; get current custom view |
| 3325 bra display_eod_cns_violation ; NO - issue textual warning | 3737 xorlw index_CNS ; CNS shown? |
| 3326 return ; YES - do not show twice (in custom view and in warning area) | 3738 bz check_cns_violation_eod_done; YES - done |
| 3327 display_eod_cns_violation: | 3739 incf message_counter,F ; NO - increase message counter |
| 3328 incf message_counter,F ; increase counter | 3740 goto TFT_message_cns_eod ; - show message for end-of-dive CNS and return |
| 3329 goto TFT_warning_eod_cns ; show warning message for end-of-dive CNS and return | 3741 |
| 3330 | 3742 check_cns_violation_eod_done: |
| 3331 | 3743 return ; done |
| 3332 global check_and_store_sat_violation | 3744 |
| 3333 check_and_store_sat_violation: | 3745 |
| 3334 movff int_O_lead_supersat+1,WREG ; get upper byte of leading tissue's supersaturation | 3746 ;----------------------------------------------------------------------------- |
| 3335 btfss WREG,int_warning_flag ; check if the warning flag is set | 3747 ; Check current Tissue Supersaturation |
| 3336 bra check_and_store_sat_violation2 ; NO - continue with checking for attention flag | 3748 ; |
| 3337 movlw d'2' ; YES - set type of alarm | 3749 global check_saturation |
| 3338 movwf alarm_type ; - copy to alarm register | 3750 check_saturation: |
| 3339 bsf event_occured ; - set event flag | 3751 bcf attn_det_saturation ; clear attention for saturation |
| 3340 bsf message_warning ; - show warning sign for saturation | 3752 bcf warn_det_saturation ; clear warning for saturation |
| 3341 bra check_and_store_sat_violation3 ; - show saturation | 3753 bcf attn_det_ibcd ; clear attention for IBCD |
| 3342 check_and_store_sat_violation2: | 3754 movff int_O_lead_supersat+1,WREG ; get upper byte of leading tissue's supersaturation |
| 3343 btfsc WREG,int_attention_flag ; check if the attention flag is set | 3755 btfss WREG,int_warning_flag ; warning flag set? |
| 3344 bra check_and_store_sat_violation3 ; YES - show saturation | 3756 bra check_saturation_1 ; NO - continue with checking for attention flag |
| 3345 TSTOSS opt_enable_IBCD ; NO - IBCD warning activated? | 3757 movlw d'2' ; YES - set type of alarm |
| 3346 bra check_and_store_sat_violation4 ; NO - continue checking of deco info | 3758 movwf alarm_type ; - copy to alarm register |
| 3347 movff char_O_deco_warnings,WREG ; YES - get the deco warnings vector | 3759 bsf event_occured ; - set event flag |
| 3348 btfss WREG,IBCD_warning ; - is the IBCD warning flag set? | 3760 bsf warn_det_saturation ; - set warning |
| 3349 bra check_and_store_sat_violation4 ; NO - continue checking for deco info | 3761 bra check_saturation_mesg ; - show saturation message |
| 3350 check_and_store_sat_violation3: ; YES - show saturation | 3762 |
| 3351 bsf message_attention ; show attention sign for saturation | 3763 check_saturation_1: |
| 3352 incf message_counter,F ; increase counter | 3764 btfss WREG,int_attention_flag ; attention flag set? |
| 3353 goto TFT_warning_saturation ; show attention/warning message for saturation and return | 3765 bra check_saturation_2 ; NO - continue with checking for IBCD |
| 3354 check_and_store_sat_violation4: ; check for deco info | 3766 bsf attn_det_saturation ; YES - set attention |
| 3355 btfss divemode ; in dive mode? | 3767 bra check_saturation_mesg ; - show saturation message |
| 3356 return ; NO - done, return | 3768 |
| 3769 check_saturation_2: | |
| 3770 IFDEF _helium | |
| 3771 TSTOSS opt_enable_IBCD ; IBCD warning activated? | |
| 3772 bra check_saturation_3 ; NO - continue with checking deco info | |
| 3773 movff char_O_deco_warnings,WREG ; YES - get the deco warnings vector | |
| 3774 btfss WREG,IBCD_warning ; - IBCD warning flag set? | |
| 3775 bra check_saturation_3 ; NO - continue with checking deco info | |
| 3776 bsf attn_det_ibcd ; YES - set attention | |
| 3777 bra check_saturation_mesg ; - show saturation message | |
| 3778 ENDIF | |
| 3779 | |
| 3780 check_saturation_3: | |
| 3781 btfss divemode ; in dive mode? | |
| 3782 return ; NO - done | |
| 3357 IFDEF _ccr_pscr | 3783 IFDEF _ccr_pscr |
| 3358 btfsc bailout_mode ; YES - in bailout mode? | 3784 btfsc bailout_mode ; YES - in bailout mode? |
| 3359 return ; YES - done, return (deco zone flag is not updated when in bailout mode) | 3785 return ; YES - done (deco zone flag is not updated when in bailout mode) |
| 3360 ENDIF | 3786 ENDIF |
| 3361 movff char_O_deco_info,WREG ; NO - get the deco info vector | 3787 movff char_O_deco_info,WREG ; NO - get the deco info vector |
| 3362 btfss WREG,deco_zone ; check if the deco zone flag is set | 3788 btfss WREG,deco_zone ; deco zone flag set? |
| 3363 return ; NO - done, return | 3789 return ; NO - done |
| 3364 btfsc use_aGF ; YES - using alternative GF factors? | 3790 btfsc use_aGF ; YES - using alternative GF factors? |
| 3365 return ; YES - suppress deco zone info | 3791 return ; YES - suppress deco zone info |
| 3366 btfsc alt_layout_active ; NO - in alternative layout? | 3792 btfsc alt_layout_active ; NO - in alternative layout? |
| 3367 return ; YES - suppress deco zone info | 3793 return ; YES - suppress deco zone info |
| 3368 incf message_counter,F ; NO - increase counter | 3794 incf message_counter,F ; NO - increase message counter |
| 3369 goto TFT_info_deco ; - show deco info | 3795 goto TFT_message_deco_info ; - show deco info and return |
| 3370 | 3796 |
| 3371 | 3797 check_saturation_mesg: |
| 3798 IFDEF _helium | |
| 3799 btfss attn_det_ibcd ; IBCD detected? | |
| 3800 bra check_saturation_mesg_1 ; NO - show saturation message | |
| 3801 incf message_counter,F ; YES - increase message counter | |
| 3802 call TFT_message_IBCD ; - show IBCD message | |
| 3803 ENDIF | |
| 3804 check_saturation_mesg_1: | |
| 3805 incf message_counter,F ; increase message counter | |
| 3806 goto TFT_message_saturation ; show saturation message and return | |
| 3807 | |
| 3808 | |
| 3809 ;----------------------------------------------------------------------------- | |
| 3810 ; Check Depth Limit | |
| 3811 ; | |
| 3372 check_depth_limit: | 3812 check_depth_limit: |
| 3373 bcf depth_limit_exceeded ; clear warning flag by default | 3813 bcf warn_det_depth_limit ; clear warning by default |
| 3374 movff opt_max_depth,WREG ; get depth limit | 3814 movff opt_max_depth,WREG ; get depth limit |
| 3375 cpfsgt depth_meter ; current depth > depth limit? | 3815 cpfsgt depth_meter ; current depth > depth limit? |
| 3376 return ; NO | 3816 return ; NO - done |
| 3377 bsf depth_limit_exceeded ; YES - set flag for depth limit exceeded | 3817 bsf warn_det_depth_limit ; YES - set warning |
| 3378 incf message_counter,F ; - increase counter | 3818 incf message_counter,F ; - increase message counter |
| 3379 bsf message_warning ; - show warning sign for depth | 3819 goto TFT_message_depth_limit ; - show message |
| 3380 goto TFT_warning_depth ; - show warning message for depth | 3820 |
| 3381 | 3821 |
| 3382 | 3822 ;----------------------------------------------------------------------------- |
| 3823 ; Check Bühlmann Model Violation | |
| 3824 ; | |
| 3383 check_outside: | 3825 check_outside: |
| 3826 bcf warn_det_outside ; clear warning | |
| 3827 bcf attn_det_outside ; clear attention | |
| 3384 movff char_O_deco_warnings,WREG ; bank-safe copy of deco warnings | 3828 movff char_O_deco_warnings,WREG ; bank-safe copy of deco warnings |
| 3385 btfss WREG,outside_warning_lock ; are we outside of the ZH-L16 model? | 3829 btfss WREG,outside_warning ; currently outside the ZH-L16 model? |
| 3830 bra check_outside_1 ; NO | |
| 3831 bsf warn_det_outside ; YES - set warning | |
| 3832 bra check_outside_mesg ; - show message | |
| 3833 | |
| 3834 check_outside_1: | |
| 3835 btfss WREG,outside_warning_lock ; had been outside of the ZH-L16 model? | |
| 3386 return ; NO - done | 3836 return ; NO - done |
| 3387 incf message_counter,F ; YES - increase counter | 3837 bsf attn_det_outside ; YES - set attention |
| 3388 bsf message_attention ; - show attention sign for outside | 3838 ;bra check_outside_mesg ; - show message |
| 3389 btfsc WREG,outside_warning ; - are we outside the ZH-L16 model right now (-> warning)? | 3839 |
| 3390 bsf message_warning ; - show warning sign for outside | 3840 check_outside_mesg: |
| 3391 goto TFT_warning_outside ; - show warning/attention message for outside and return | 3841 incf message_counter,F ; increase message counter |
| 3392 | 3842 goto TFT_message_outside ; show message and return |
| 3393 | 3843 |
| 3844 | |
| 3845 ;----------------------------------------------------------------------------- | |
| 3846 ; Check raised Probability for Micro-Bubbles | |
| 3847 ; | |
| 3394 global check_mbubbles | 3848 global check_mbubbles |
| 3395 check_mbubbles: | 3849 check_mbubbles: |
| 3850 bcf warn_det_microbubble ; clear warning | |
| 3851 bcf attn_det_microbubble ; clear attention | |
| 3396 movff char_O_deco_warnings,WREG ; bank-safe copy for deco warnings | 3852 movff char_O_deco_warnings,WREG ; bank-safe copy for deco warnings |
| 3397 btfsc WREG,mbubble_warning ; are we in micro bubbling zone right now? | 3853 btfss WREG,mbubble_warning ; currently in micro bubbling zone? |
| 3398 bra check_mbubbles_warn ; YES | 3854 bra check_mbubbles_1 ; NO |
| 3399 btfss WREG,mbubble_warning_lock ; were we in micro bubbling zone? | 3855 bsf warn_det_microbubble ; YES - set warning |
| 3856 bra check_mbubbles_mesg ; - show message | |
| 3857 | |
| 3858 check_mbubbles_1 | |
| 3859 btfss WREG,mbubble_warning_lock ; had been in micro bubbling zone? | |
| 3400 return ; NO - done | 3860 return ; NO - done |
| 3401 check_mbubble_att ; YES - attention level | 3861 bsf attn_det_microbubble ; YES - set attention |
| 3402 incf message_counter,F ; increase counter | 3862 ;bra check_mbubbles_mesg ; - show message |
| 3403 bsf message_attention ; show attention sign for micro bubbles | 3863 |
| 3404 goto TFT_warning_mbubbles ; show micro bubble attention (and return) - TFT_warning_mbubbles switches by itself between attention and warning | 3864 check_mbubbles_mesg: |
| 3405 check_mbubbles_warn: ; locked micro bubbles - warning level if at issue, attention level if locked | 3865 incf message_counter,F ; increase message counter |
| 3406 incf message_counter,F ; increase counter | 3866 goto TFT_message_mbubbles ; show message and return |
| 3407 bsf message_warning ; show warning sign for micro bubbles | 3867 |
| 3408 goto TFT_warning_mbubbles ; show warning message for micro bubbles (and return) | 3868 |
| 3869 IFDEF _ccr_pscr | |
| 3870 ;----------------------------------------------------------------------------- | |
| 3871 ; Check Gas Density | |
| 3872 ; | |
| 3873 check_gas_density: | |
| 3874 TSTOSS opt_gas_density_check ; shall check gas density? | |
| 3875 return ; NO - done | |
| 3876 bcf warn_det_gas_density ; YES - clear attention for gas density by default | |
| 3877 bcf attn_det_gas_density ; - clear warning for gas density by default | |
| 3878 movff int_O_gas_density+1,WREG ; - get upper byte of current gas density | |
| 3879 btfsc WREG,int_warning_flag ; - warning flag set? | |
| 3880 bra check_gas_density_warn ; YES - generate a warning | |
| 3881 btfsc WREG,int_attention_flag ; NO - attention flag set? | |
| 3882 bra check_gas_density_attn ; YES - generate an attention | |
| 3883 ;bra check_gas_density_ok ; NO - gas density ok | |
| 3884 | |
| 3885 check_gas_density_ok: | |
| 3886 bcf shown_gas_density_attn ; re-arm custom view show-up for warning | |
| 3887 bcf shown_gas_density_warn ; re-arm custom view show-up for attention | |
| 3888 return ; done | |
| 3889 | |
| 3890 check_gas_density_warn: | |
| 3891 bsf warn_det_gas_density ; set warning | |
| 3892 bcf shown_gas_density_attn ; re-arm custom view show-up for attention | |
| 3893 btfsc shown_gas_density_warn ; has the custom view been shown before on warning level? | |
| 3894 bra check_gas_density_mesg ; YES - do not show the gas needs custom view again | |
| 3895 btfsc custom_view_locked ; NO - custom view locked? | |
| 3896 bra check_gas_density_mesg ; YES - do not show it now | |
| 3897 bsf shown_gas_density_warn ; NO - set custom view as shown now | |
| 3898 bra check_gas_density_cv ; - show gas needs custom view | |
| 3899 | |
| 3900 check_gas_density_attn: | |
| 3901 bsf attn_det_gas_density ; set attention | |
| 3902 bcf shown_gas_density_warn ; re-arm custom view show-up for warning | |
| 3903 btfsc shown_gas_density_attn ; has the custom view been shown before on attention level? | |
| 3904 bra check_gas_density_mesg ; YES - do not show the gas needs custom view again | |
| 3905 btfsc custom_view_locked ; NO - custom view locked? | |
| 3906 bra check_gas_density_mesg ; YES - do not show it now | |
| 3907 bsf shown_gas_density_attn ; NO - set custom view as shown now | |
| 3908 ;bra check_gas_density_cv ; - show gas needs custom view | |
| 3909 | |
| 3910 check_gas_density_cv: | |
| 3911 movlw index_ppo2_ead_end_cns ; get custom view number of gas density | |
| 3912 call dive_customview_show ; show custom view | |
| 3913 ;bra check_gas_density_mesg ; show message | |
| 3914 | |
| 3915 check_gas_density_mesg: | |
| 3916 incf message_counter,F ; increase message counter | |
| 3917 goto TFT_message_gas_density ; show gas density message and return | |
| 3918 | |
| 3919 | |
| 3920 ;----------------------------------------------------------------------------- | |
| 3921 ; Check if an OC Bailout Gas is available | |
| 3922 ; | |
| 3923 check_OC_gas_avail: | |
| 3924 bcf warn_det_no_bo_gas ; clear warning by default | |
| 3925 tstfsz best_gas_number ; is a breathable OC (bailout) gas available? | |
| 3926 return ; YES - a breathable gas is available, done | |
| 3927 btfsc bailout_mode ; NO - in bailout? | |
| 3928 return ; YES - suppress warning, done | |
| 3929 bsf warn_det_no_bo_gas ; NO - set warning for no bailout gas | |
| 3930 incf message_counter,F ; - increase message counter | |
| 3931 goto TFT_message_no_BO_gas ; - show message and return | |
| 3932 | |
| 3933 ENDIF ; _ccr_pscr | |
| 3409 | 3934 |
| 3410 | 3935 |
| 3411 IFDEF _cave_mode | 3936 IFDEF _cave_mode |
| 3412 | 3937 |
| 3938 ;----------------------------------------------------------------------------- | |
| 3939 ; Check Cave Profile Storage Usage | |
| 3940 ; | |
| 3413 check_cavemode: | 3941 check_cavemode: |
| 3942 bcf warn_det_cave_shut_down ; clear warning by default | |
| 3943 bcf attn_det_cave_shut_down ; clear attention by default | |
| 3414 btfsc backtrack_entire_full ; is the backtracking storage entirely used up? | 3944 btfsc backtrack_entire_full ; is the backtracking storage entirely used up? |
| 3415 bra check_cavemode_full ; YES - turn dive, switch off cave mode and show warning message | 3945 bra check_cavemode_full ; YES - turn dive, switch off cave mode and show warning message |
| 3416 btfsc backtrack_almost_full ; NO - backtracking storage almost full? | 3946 btfsc backtrack_almost_full ; NO - backtracking storage almost full? |
| 3417 bra check_cavemode_almost_full ; YES - show attention message that cave mode will stop soon | 3947 bra check_cavemode_almost_full ; YES - show attention message that cave mode will stop soon |
| 3418 btfss alt_layout_active ; NO - alternative layout active? | 3948 btfss cave_mode ; NO - cave mode switched on? |
| 3419 bra check_cavemode_info ; NO - show cave mode active info | 3949 return ; NO - do not show info |
| 3420 return ; YES - suppress info message | 3950 btfsc alt_layout_active ; YES - alternative layout active? |
| 3951 return ; YES - suppress info message | |
| 3952 ;bra check_cavemode_mesg ; NO - show cave mode active info | |
| 3953 | |
| 3954 check_cavemode_mesg: | |
| 3955 incf message_counter,F ; increase message counter | |
| 3956 goto TFT_message_cave_mode ; show cave mode message | |
| 3421 | 3957 |
| 3422 check_cavemode_full: | 3958 check_cavemode_full: |
| 3423 btfss backtrack_shutdown ; backtracking shut down already? | 3959 btfss backtrack_shutdown ; backtracking shut down already? |
| 3424 bsf request_cave_off_turned ; NO - request to switch cave mode off and to set the dive as turned | 3960 bsf request_cave_off_turned ; NO - request to switch cave mode off and to set the dive as turned |
| 3425 bsf backtrack_shutdown ; remember shut down as been executed (anyhow) | 3961 bsf backtrack_shutdown ; remember shut down as been executed (anyhow) |
| 3426 incf message_counter,F ; increase counter | 3962 btfss cave_mode ; has the cave mode been switched on again meanwhile? |
| 3963 bsf warn_det_cave_shut_down ; NO - set warning level | |
| 3427 btfsc cave_mode ; has the cave mode been switched on again meanwhile? | 3964 btfsc cave_mode ; has the cave mode been switched on again meanwhile? |
| 3428 goto TFT_cave_shutdown_attention ; YES - show attention message for cave mode shutdown ands return | 3965 bsf attn_det_cave_shut_down ; YES - set attention level |
| 3429 bsf message_warning ; NO - show warning sign for cave mode shutdown | 3966 bra check_cavemode_mesg ; show message |
| 3430 goto TFT_cave_shutdown_warning ; - show warning message for cave mode shutdown and return | |
| 3431 | 3967 |
| 3432 check_cavemode_almost_full: | 3968 check_cavemode_almost_full: |
| 3433 btfss cave_mode ; cave mode switched on? | 3969 btfss cave_mode ; cave mode switched on? |
| 3434 return ; NO - suppress message | 3970 return ; NO - suppress message |
| 3435 incf message_counter,F ; YES - increase counter | 3971 bsf attn_det_cave_shut_down ; YES - set an attention |
| 3436 goto TFT_cave_shutdown_attention ; - show attention message that cave mode will shut down soon | 3972 bra check_cavemode_mesg ; - show message |
| 3437 | |
| 3438 check_cavemode_info: | |
| 3439 btfss cave_mode ; cave mode switched on? | |
| 3440 return ; NO - do not show info | |
| 3441 incf message_counter,F ; YES - increase counter | |
| 3442 goto TFT_info_cave_mode ; - show cave mode active info | |
| 3443 | 3973 |
| 3444 ENDIF ; _cave_mode | 3974 ENDIF ; _cave_mode |
| 3445 | 3975 |
| 3446 | 3976 |
| 3447 warn_agf: | 3977 ;----------------------------------------------------------------------------- |
| 3448 incf message_counter,F ; increase counter | 3978 ; Show aGF Reminder |
| 3449 goto TFT_warning_agf ; show aGF reminder (and return) | 3979 ; |
| 3450 | 3980 remind_agf_in_use: |
| 3451 warn_fallback: | 3981 incf message_counter,F ; increase message counter |
| 3452 incf message_counter,F ; increase counter | 3982 goto TFT_message_agf ; show aGF reminder and return |
| 3453 bsf message_warning ; show warning sign for fallback | 3983 |
| 3454 goto TFT_warning_fallback ; show warning message for fallback and return | 3984 |
| 3455 | 3985 ;----------------------------------------------------------------------------- |
| 3456 ;============================================================================= | 3986 ; Check better Gas / Diluent Advice |
| 3987 ; | |
| 3988 check_gas_change: | |
| 3989 bcf advc_det_change_gas ; clear advice by default | |
| 3990 IFDEF _ccr_pscr | |
| 3991 btfsc better_dil_available ; is a better diluent available? | |
| 3992 bra check_gas_change_mesg ; YES - show a gas change advice | |
| 3993 ENDIF | |
| 3994 btfsc better_gas_available ; is a better gas available? | |
| 3995 bra check_gas_change_mesg ; YES - show a gas change advice | |
| 3996 return ; NO - done | |
| 3997 | |
| 3998 check_gas_change_mesg: | |
| 3999 bsf advc_det_change_gas ; set advice | |
| 4000 incf message_counter,F ; increase message counter | |
| 4001 goto TFT_message_gas_change ; show advice and return | |
| 4002 | |
| 3457 | 4003 |
| 3458 IFDEF _rx_functions | 4004 IFDEF _rx_functions |
| 3459 | 4005 |
| 4006 ;----------------------------------------------------------------------------- | |
| 4007 ; Check SAC and Swap-Tank Advice | |
| 4008 ; | |
| 3460 check_tr_messages: | 4009 check_tr_messages: |
| 4010 bcf attn_det_sac_rate ; clear SAC attention by default | |
| 4011 bcf advc_det_switch_tank ; clear switch advice by default | |
| 3461 btfss count_divetime ; is the dive time counted, i.e. deeper than dive threshold? | 4012 btfss count_divetime ; is the dive time counted, i.e. deeper than dive threshold? |
| 3462 return ; NO - suppress messages | 4013 return ; NO - suppress check |
| 3463 movff int_O_SAC_measured+1,WREG ; YES - bank-safe copy of measured SAC rate | 4014 movff int_O_SAC_measured+1,WREG ; YES - bank-safe copy of measured SAC rate |
| 3464 btfss WREG,int_attention_flag ; - attention flag set? | 4015 btfss WREG,int_attention_flag ; - attention flag set? |
| 3465 bra check_tr_messages2 ; NO - skip | 4016 bra check_tr_messages_chk_swap ; NO - continue with checking for swap advice |
| 3466 btfsc WREG,int_not_avail_flag ; SAC rate available? | 4017 btfsc WREG,int_not_avail_flag ; SAC rate available? |
| 3467 bra check_tr_messages2 ; NO - continue with swap advice | 4018 bra check_tr_messages_chk_swap ; NO - continue with checking for swap advice |
| 3468 bsf message_attention ; YES - show attention sign for SAC rate | 4019 bsf attn_det_sac_rate ; YES - set attention for SAC rate |
| 3469 movlw index_pressures_SAC ; - index of custom view with SAC rate | 4020 movf active_customview,W ; - get current custom view |
| 3470 cpfseq active_customview ; - SAC rate shown right now? | 4021 xorlw index_pressures_SAC ; - SAC rate shown? |
| 3471 bra check_tr_messages1 ; NO - show attention message | 4022 bz check_tr_messages_chk_swap ; YES - do not show twice, continue with swap advice |
| 3472 bra check_tr_messages2 ; YES - do not show twice, continue with swap advice | 4023 ;bra check_tr_messages_mesg_sac ; NO - show SAC message |
| 3473 check_tr_messages1: | 4024 |
| 3474 incf message_counter,F ; increase counter | 4025 check_tr_messages_mesg_sac: |
| 3475 call TFT_attention_sac ; show attention message for SAC rate | 4026 incf message_counter,F ; increase message counter |
| 3476 check_tr_messages2: | 4027 call TFT_message_sac ; show message for SAC rate |
| 4028 ;bra check_tr_messages_chk_swap ; continue with switch advice | |
| 4029 | |
| 4030 check_tr_messages_chk_swap: | |
| 3477 movff char_O_deco_info,WREG ; bank-safe copy of deco info vector | 4031 movff char_O_deco_info,WREG ; bank-safe copy of deco info vector |
| 3478 btfss WREG,ind_double_switch ; swap tank flag set? | 4032 btfss WREG,ind_double_switch ; swap tank flag set? |
| 3479 return ; NO | 4033 return ; NO - done |
| 3480 incf message_counter,F ; YES - increase counter | 4034 ;bra check_tr_messages_mesg_swap ; YES - show swap message |
| 3481 bsf message_advice ; - show advice sign for switching tanks | 4035 |
| 3482 goto TFT_advice_switch ; - show advice message for switching tanks and return | 4036 check_tr_messages_mesg_swap: |
| 3483 | 4037 bsf advc_det_switch_tank ; set advice |
| 4038 incf message_counter,F ; increase message counter | |
| 4039 goto TFT_message_switch_tanks ; show message for switching tanks and return | |
| 4040 | |
| 4041 | |
| 4042 ;----------------------------------------------------------------------------- | |
| 4043 ; Check Transmitter States | |
| 4044 ; | |
| 3484 check_tr_functions: | 4045 check_tr_functions: |
| 3485 clrf xmitter_flags_mesg ; set all messages as not shown yet | 4046 ; check transmitter 1 |
| 3486 movlw index_pressures_SAC ; index of custom view pressure readings | |
| 3487 cpfseq active_customview ; pressure readings shown? | |
| 3488 bra check_tr_functions_tr1 ; NO - continue with checking transmitter 1 | |
| 3489 bsf pres_customview_shown ; YES - suppress redraw by faking it has already been redrawn | |
| 3490 check_tr_functions_tr1: | |
| 3491 movff char_I_pressure_stat+0,WREG ; get status of 1st pressure reading | 4047 movff char_I_pressure_stat+0,WREG ; get status of 1st pressure reading |
| 3492 rcall check_tr_functions_helper1 ; check for transmitter 1 lost | 4048 rcall check_tr_functions_helper1 ; check for transmitter 1 lost |
| 3493 rcall check_tr_functions_helper2 ; check for transmitter 1 low battery | 4049 rcall check_tr_functions_helper2 ; check for transmitter 1 low battery |
| 3494 movff int_IO_pressure_value+1,WREG ; get high byte of 1st pressure reading | 4050 movff int_IO_pressure_value+1,WREG ; get high byte of 1st pressure reading |
| 3495 rcall check_tr_functions_helper3 ; check for transmitter 1 pressure warning | 4051 rcall check_tr_functions_helper3 ; check for transmitter 1 pressure warning |
| 3496 rcall check_tr_functions_helper4 ; check for transmitter 1 pressure attention | 4052 rcall check_tr_functions_helper4 ; check for transmitter 1 pressure attention |
| 3497 check_tr_functions_tr2: | 4053 ; check transmitter 2 |
| 3498 movff char_I_pressure_stat+1,WREG ; get status of 2nd pressure reading | 4054 movff char_I_pressure_stat+1,WREG ; get status of 2nd pressure reading |
| 3499 rcall check_tr_functions_helper5 ; check for transmitter 2 lost | 4055 rcall check_tr_functions_helper5 ; check for transmitter 2 lost |
| 3500 rcall check_tr_functions_helper6 ; check for transmitter 2 low battery | 4056 rcall check_tr_functions_helper6 ; check for transmitter 2 low battery |
| 3501 movff int_IO_pressure_value+3,WREG ; get high byte of 2nd pressure reading | 4057 movff int_IO_pressure_value+3,WREG ; get high byte of 2nd pressure reading |
| 3502 rcall check_tr_functions_helper7 ; check for transmitter 2 pressure warning | 4058 rcall check_tr_functions_helper7 ; check for transmitter 2 pressure warning |
| 3503 rcall check_tr_functions_helper8 ; check for transmitter 2 pressure attention | 4059 rcall check_tr_functions_helper8 ; check for transmitter 2 pressure attention |
| 3504 check_tr_functions_show_xmtr: | 4060 |
| 3505 btfss show_transmitter_attention ; shall show transmitter attention message? | 4061 ; results for transmitter |
| 3506 bra check_tr_functions_show_warn ; NO - continue with pressure warning | 4062 btfsc attn_det_xmit1_bat ; do we have a transmitter 1 attention? |
| 3507 bsf message_attention ; YES - show attention sign for transmitter | 4063 bra check_tr_functions_xmitter_mesg ; YES - show transmitter message |
| 3508 incf message_counter,F ; - increase counter | 4064 btfsc attn_det_xmit2_bat ; do we have a transmitter 2 attention? |
| 3509 call TFT_attention_transmitter ; - show transmitter attention message | 4065 bra check_tr_functions_xmitter_mesg ; YES - show transmitter message |
| 3510 check_tr_functions_show_warn: | 4066 check_tr_functions_1: |
| 3511 btfss show_pres_warning ; shall show pressure warning? | 4067 btfsc warn_det_pressure1 ; do we have a pressure 1 warning? |
| 3512 bra check_tr_functions_show_att ; NO - continue with pressure attention | 4068 bra check_tr_functions_pres_mesg ; YES - show pressure message |
| 3513 bsf message_warning ; YES - show warning sign for pressure | 4069 btfsc warn_det_pressure2 ; do we have a pressure 2 warning? |
| 3514 incf message_counter,F ; - increase counter | 4070 bra check_tr_functions_pres_mesg ; YES - show pressure message |
| 3515 goto TFT_warning_pres_reading ; - show warning message for pressure reading and return | 4071 btfsc attn_det_pressure1 ; do we have a pressure 1 attention? |
| 3516 check_tr_functions_show_att: | 4072 bra check_tr_functions_pres_mesg ; YES - show pressure message |
| 3517 btfss show_pres_attention ; shall show pressure attention? | 4073 btfsc attn_det_pressure2 ; do we have a pressure 2 attention? |
| 3518 return ; NO - done | 4074 bra check_tr_functions_pres_mesg ; YES - show pressure message |
| 3519 bsf message_attention ; YES - show attention sign for pressure | 4075 return ; done |
| 3520 incf message_counter,F ; - increase counter | 4076 |
| 3521 goto TFT_attention_pres_reading ; - show attention message for pressure reading and return | 4077 check_tr_functions_xmitter_mesg: |
| 4078 incf message_counter,F ; increase message counter | |
| 4079 call TFT_message_transmitter ; show transmitter message | |
| 4080 bra check_tr_functions_1 ; continue with pressure messages | |
| 4081 | |
| 4082 check_tr_functions_pres_mesg: | |
| 4083 incf message_counter,F ; increase message counter | |
| 4084 goto TFT_message_pressure ; show pressure message and return | |
| 3522 | 4085 |
| 3523 check_tr_functions_helper1: | 4086 check_tr_functions_helper1: |
| 3524 btfsc WREG,char_transmitter_lost ; transmitter 1 lost? | 4087 btfsc WREG,char_transmitter_lost ; transmitter 1 lost? |
| 3525 bra check_tr_functions_helper1a ; YES - show transmitter attention message | 4088 bra check_tr_functions_helper1a ; YES - show transmitter attention message |
| 3526 bcf transmitter1_lost ; NO - clear flag for old lost attention | 4089 bcf shown_xmit1_lost ; NO - clear flag for old message |
| 3527 return ; - done | 4090 return ; - done |
| 3528 check_tr_functions_helper1a: | 4091 check_tr_functions_helper1a: |
| 3529 ; bsf show_transmitter_attention ; show transmitter attention | 4092 btfsc shown_xmit1_lost ; is it a new message? |
| 3530 btfsc transmitter1_lost ; is it a new message? | |
| 3531 return ; NO - do not show the pressure readings custom view again | 4093 return ; NO - do not show the pressure readings custom view again |
| 3532 bsf transmitter1_lost ; YES - memorize it's an old message now | 4094 bsf shown_xmit1_lost ; YES - memorize it's an old message now |
| 3533 bra check_tr_functions_show_cv ; - show custom view | 4095 rcall check_tr_functions_show_cv ; - show custom view |
| 3534 | 4096 |
| 3535 check_tr_functions_helper2: | 4097 check_tr_functions_helper2: |
| 3536 btfsc WREG,char_transmitter_low_bat ; transmitter 1 low battery? | 4098 btfsc WREG,char_transmitter_low_bat ; transmitter 1 low battery? |
| 3537 bra check_tr_functions_helper2a ; YES - show transmitter attention message | 4099 bra check_tr_functions_helper2a ; YES - show transmitter attention message |
| 3538 bcf transmitter1_battery ; NO - clear flag for old battery attention | 4100 bcf shown_xmit1_battery ; NO - clear flag for old message |
| 4101 bcf attn_det_xmit1_bat ; - clear transmitter 1 attention | |
| 3539 return ; - done | 4102 return ; - done |
| 3540 check_tr_functions_helper2a: | 4103 check_tr_functions_helper2a: |
| 3541 bsf show_transmitter_attention ; show transmitter attention | 4104 bsf attn_det_xmit1_bat ; set transmitter 1 attention |
| 3542 btfsc transmitter1_battery ; is it a new message? | 4105 btfsc shown_xmit1_battery ; is it a new message? |
| 3543 return ; NO - do not show the pressure readings custom view again | 4106 return ; NO - do not show the pressure readings custom view again |
| 3544 bsf transmitter1_battery ; YES - memorize it's an old message now | 4107 bsf shown_xmit1_battery ; YES - memorize it's an old message now |
| 3545 bra check_tr_functions_show_cv ; - show custom view | 4108 rcall check_tr_functions_show_cv ; - show custom view |
| 3546 | 4109 |
| 3547 check_tr_functions_helper3: | 4110 check_tr_functions_helper3: |
| 3548 btfsc WREG,int_warning_flag ; transmitter 1 pressure warning? | 4111 btfsc WREG,int_warning_flag ; transmitter 1 pressure warning? |
| 3549 bra check_tr_functions_helper3a ; YES - show pressure reading message as warning | 4112 bra check_tr_functions_helper3a ; YES - show pressure reading message as warning |
| 3550 bcf transmitter1_pres_warn ; NO - clear flag for old warning | 4113 bcf shown_xmit1_pres_warn ; NO - clear flag for old message |
| 4114 bcf warn_det_pressure1 ; - clear pressure 1 warning | |
| 3551 return ; - done | 4115 return ; - done |
| 3552 check_tr_functions_helper3a: | 4116 check_tr_functions_helper3a: |
| 3553 bsf show_pres_warning ; show pressure warning | 4117 bsf warn_det_pressure1 ; set pressure 1 warning |
| 3554 btfsc transmitter1_pres_warn ; is it a new message? | 4118 btfsc shown_xmit1_pres_warn ; is it a new message? |
| 3555 return ; NO - do not show the pressure readings custom view again | 4119 return ; NO - do not show the pressure readings custom view again |
| 3556 bsf transmitter1_pres_warn ; YES - memorize it's an old message now | 4120 bsf shown_xmit1_pres_warn ; YES - memorize it's an old message now |
| 3557 bra check_tr_functions_show_cv ; - show custom view | 4121 bra check_tr_functions_show_cv ; - show custom view |
| 3558 | 4122 |
| 3559 check_tr_functions_helper4: | 4123 check_tr_functions_helper4: |
| 3560 btfsc WREG,int_attention_flag ; transmitter 1 pressure attention? | 4124 btfsc WREG,int_attention_flag ; transmitter 1 pressure attention? |
| 3561 bra check_tr_functions_helper4a ; YES - show pressure reading message as attention | 4125 bra check_tr_functions_helper4a ; YES - show pressure reading message as attention |
| 3562 bcf transmitter1_pres_att ; NO - clear flag for old attention | 4126 bcf shown_xmit1_pres_attn ; NO - clear flag for old message |
| 4127 bcf attn_det_pressure1 ; - clear pressure 1 attention | |
| 3563 return ; - done | 4128 return ; - done |
| 3564 check_tr_functions_helper4a | 4129 check_tr_functions_helper4a |
| 3565 bsf show_pres_attention ; show pressure attention | 4130 bsf attn_det_pressure1 ; set pressure 1 attention |
| 3566 btfsc transmitter1_pres_att ; is it a new message? | 4131 btfsc shown_xmit1_pres_attn ; is it a new message? |
| 3567 return ; NO - do not show the pressure readings custom view again | 4132 return ; NO - do not show the pressure readings custom view again |
| 3568 bsf transmitter1_pres_att ; YES - memorize it's an old message now | 4133 bsf shown_xmit1_pres_attn ; YES - memorize it's an old message now |
| 3569 bra check_tr_functions_show_cv ; - show custom view | 4134 bra check_tr_functions_show_cv ; - show custom view |
| 3570 | 4135 |
| 3571 check_tr_functions_helper5: | 4136 check_tr_functions_helper5: |
| 3572 btfsc WREG,char_transmitter_lost ; transmitter 2 lost? | 4137 btfsc WREG,char_transmitter_lost ; transmitter 2 lost? |
| 3573 bra check_tr_functions_helper5a ; YES - show transmitter attention message | 4138 bra check_tr_functions_helper5a ; YES - show transmitter attention message |
| 3574 bcf transmitter2_lost ; NO - clear flag for old lost attention | 4139 bcf shown_xmit2_lost ; NO - clear flag for old lost message |
| 3575 return ; - done | 4140 return ; - done |
| 3576 check_tr_functions_helper5a: | 4141 check_tr_functions_helper5a: |
| 3577 ; bsf show_transmitter_attention ; show transmitter attention | 4142 btfsc shown_xmit2_lost ; is it a new message? |
| 3578 btfsc transmitter2_lost ; is it a new message? | |
| 3579 return ; NO - do not show the pressure readings custom view again | 4143 return ; NO - do not show the pressure readings custom view again |
| 3580 bsf transmitter2_lost ; YES - memorize it's an old message now | 4144 bsf shown_xmit2_lost ; YES - memorize it's an old message now |
| 3581 bra check_tr_functions_show_cv ; - show custom view | 4145 bra check_tr_functions_show_cv ; - show custom view |
| 3582 | 4146 |
| 3583 check_tr_functions_helper6: | 4147 check_tr_functions_helper6: |
| 3584 btfsc WREG,char_transmitter_low_bat ; transmitter 2 low battery? | 4148 btfsc WREG,char_transmitter_low_bat ; transmitter 2 low battery? |
| 3585 bra check_tr_functions_helper6a ; YES - show transmitter attention message | 4149 bra check_tr_functions_helper6a ; YES - show transmitter attention message |
| 3586 bcf transmitter2_battery ; NO - clear flag for old battery attention | 4150 bcf shown_xmit2_battery ; NO - clear flag for old battery message |
| 4151 bcf attn_det_xmit2_bat ; - clear transmitter 2 attention | |
| 3587 return ; - done | 4152 return ; - done |
| 3588 check_tr_functions_helper6a: | 4153 check_tr_functions_helper6a: |
| 3589 bsf show_transmitter_attention ; show transmitter attention | 4154 bsf attn_det_xmit2_bat ; set transmitter 2 attention |
| 3590 btfsc transmitter2_battery ; is it a new message? | 4155 btfsc shown_xmit2_battery ; is it a new message? |
| 3591 return ; NO - do not show the pressure readings custom view again | 4156 return ; NO - do not show the pressure readings custom view again |
| 3592 bsf transmitter2_battery ; YES - memorize it's an old message now | 4157 bsf shown_xmit2_battery ; YES - memorize it's an old message now |
| 3593 bra check_tr_functions_show_cv ; - show custom view | 4158 bra check_tr_functions_show_cv ; - show custom view |
| 3594 | 4159 |
| 3595 check_tr_functions_helper7: | 4160 check_tr_functions_helper7: |
| 3596 btfsc WREG,int_warning_flag ; transmitter 2 pressure warning? | 4161 btfsc WREG,int_warning_flag ; transmitter 2 pressure warning? |
| 3597 bra check_tr_functions_helper7a ; YES - show pressure reading message as warning | 4162 bra check_tr_functions_helper7a ; YES - show pressure reading message as warning |
| 3598 bcf transmitter2_pres_warn ; NO - clear flag for old warning | 4163 bcf shown_xmit2_pres_warn ; NO - clear flag for old message |
| 4164 bcf warn_det_pressure2 ; - clear pressure 2 warning | |
| 3599 return ; - done | 4165 return ; - done |
| 3600 check_tr_functions_helper7a: | 4166 check_tr_functions_helper7a: |
| 3601 bsf show_pres_warning ; show pressure warning | 4167 bsf warn_det_pressure2 ; set pressure 2 warning |
| 3602 btfsc transmitter2_pres_warn ; is it a new message? | 4168 btfsc shown_xmit2_pres_warn ; is it a new message? |
| 3603 return ; NO - do not show the pressure readings custom view again | 4169 return ; NO - do not show the pressure readings custom view again |
| 3604 bsf transmitter2_pres_warn ; YES - memorize it's an old message now | 4170 bsf shown_xmit2_pres_warn ; YES - memorize it's an old message now |
| 3605 bra check_tr_functions_show_cv ; - show custom view | 4171 bra check_tr_functions_show_cv ; - show custom view |
| 3606 | 4172 |
| 3607 check_tr_functions_helper8: | 4173 check_tr_functions_helper8: |
| 3608 btfsc WREG,int_attention_flag ; transmitter 2 pressure attention? | 4174 btfsc WREG,int_attention_flag ; transmitter 2 pressure attention? |
| 3609 bra check_tr_functions_helper8a ; YES - show pressure reading message as attention | 4175 bra check_tr_functions_helper8a ; YES - show pressure reading message as attention |
| 3610 bcf transmitter2_pres_att ; NO - clear flag for old attention | 4176 bcf shown_xmit2_pres_attn ; NO - clear flag for old message |
| 4177 bcf attn_det_pressure2 ; - clear pressure 2 attention | |
| 3611 return ; - done | 4178 return ; - done |
| 3612 check_tr_functions_helper8a | 4179 check_tr_functions_helper8a |
| 3613 bsf show_pres_attention ; show pressure attention | 4180 bsf attn_det_pressure2 ; set pressure 2 attention |
| 3614 btfsc transmitter2_pres_att ; is it a new message? | 4181 btfsc shown_xmit2_pres_attn ; is it a new message? |
| 3615 return ; NO - do not show the pressure readings custom view again | 4182 return ; NO - do not show the pressure readings custom view again |
| 3616 bsf transmitter2_pres_att ; YES - memorize it's an old message now | 4183 bsf shown_xmit2_pres_attn ; YES - memorize it's an old message now |
| 3617 ;bra check_tr_functions_show_cv ; - show custom view | 4184 ;bra check_tr_functions_show_cv ; - show custom view |
| 3618 | 4185 |
| 3619 check_tr_functions_show_cv: | 4186 check_tr_functions_show_cv: |
| 3620 btfsc pres_customview_shown ; is the pressure readings custom view not shown yet? | 4187 btfsc custom_view_locked ; NO - custom view locked? |
| 3621 return ; NO - already shown, done | 4188 return ; YES - do not show now |
| 3622 btfsc custom_view_locked ; YES - custom view locked? | 4189 movlw index_pressures_SAC ; NO - get custom view number of pressure readings |
| 3623 return ; YES - done | 4190 goto dive_customview_show ; - show custom view and return |
| 3624 bsf pres_customview_shown ; NO - mark as shown now | 4191 |
| 3625 movlw index_pressures_SAC ; - get custom view number of pressure readings | 4192 ENDIF ; _rx_functions |
| 3626 goto dive_customview_show ; - draw custom view and return | 4193 |
| 3627 | 4194 |
| 3628 ENDIF | 4195 ;----------------------------------------------------------------------------- |
| 3629 | 4196 ; Check Gas Needs |
| 3630 ;============================================================================= | 4197 ; |
| 3631 | |
| 3632 check_gas_needs: | 4198 check_gas_needs: |
| 3633 banksel int_O_gas_need_pres | 4199 bcf attn_det_gas_needs ; clear attention by default |
| 4200 bcf warn_det_gas_needs ; clear warning by default | |
| 4201 banksel int_O_gas_need_pres ; switch to bank where int_O_gas_need_pres is stored | |
| 3634 movf int_O_gas_need_pres+1,W ; get high byte from pres need of 1st tank | 4202 movf int_O_gas_need_pres+1,W ; get high byte from pres need of 1st tank |
| 3635 iorwf int_O_gas_need_pres+3,W ; inclusive or with high byte from pres need of 2nd tank | 4203 iorwf int_O_gas_need_pres+3,W ; inclusive or with high byte from pres need of 2nd tank |
| 3636 iorwf int_O_gas_need_pres+5,W ; inclusive or with high byte from pres need of 3rd tank | 4204 iorwf int_O_gas_need_pres+5,W ; inclusive or with high byte from pres need of 3rd tank |
| 3637 iorwf int_O_gas_need_pres+7,W ; inclusive or with high byte from pres need of 4th tank | 4205 iorwf int_O_gas_need_pres+7,W ; inclusive or with high byte from pres need of 4th tank |
| 3638 iorwf int_O_gas_need_pres+9,W ; inclusive or with high byte from pres need of 5th tank | 4206 iorwf int_O_gas_need_pres+9,W ; inclusive or with high byte from pres need of 5th tank |
| 3639 banksel common | 4207 banksel common ; back to bank common |
| 3640 btfsc WREG,int_invalid_flag ; check if invalid flag is set | 4208 btfsc WREG,int_invalid_flag ; any invalid flag set? |
| 3641 return ; YES - no further checking required | 4209 bra check_gas_needs_ok ; YES - no further checking required |
| 3642 btfsc WREG,int_warning_flag ; NO - check if any gas has a pres_need >= pres_fill | 4210 btfsc WREG,int_warning_flag ; NO - any gas with pres_need >= pres_fill ? |
| 3643 bra check_gas_needs_warn ; YES - generate a warning | 4211 bra check_gas_needs_warn ; YES - generate a warning |
| 3644 btfsc WREG,int_attention_flag ; NO - check if any gas has a pres_need >= pres_fill * threshold | 4212 btfsc WREG,int_attention_flag ; NO - any gas with pres_need >= pres_fill * threshold ? |
| 3645 bra check_gas_needs_att ; YES - generate an attention | 4213 bra check_gas_needs_attn ; YES - generate an attention |
| 3646 bcf gas_needs_attention ; NO - clear flag for a new attention | 4214 ;bra check_gas_needs_ok ; NO - gas needs ok |
| 3647 bcf gas_needs_warning ; - clear flag for a new warning | 4215 |
| 3648 return ; - done | 4216 check_gas_needs_ok: |
| 4217 bcf shown_gas_needs_warn ; re-arm custom view show-up for warning | |
| 4218 bcf shown_gas_needs_attn ; re-arm custom view show-up for attention | |
| 4219 return ; done | |
| 3649 | 4220 |
| 3650 check_gas_needs_warn: | 4221 check_gas_needs_warn: |
| 3651 bsf message_warning ; show warning sign for gas needs | 4222 bsf warn_det_gas_needs ; set warning |
| 3652 incf message_counter,F ; increase counter | 4223 bcf shown_gas_needs_attn ; re-arm custom view show-up for attention |
| 3653 btfsc gas_needs_warning ; is it a new warning? | 4224 btfsc shown_gas_needs_warn ; has the custom view been shown before on warning level? |
| 3654 bra check_gas_needs_warn_1 ; NO - do not show the gas needs custom view again | 4225 bra check_gas_needs_mesg ; YES - do not show the gas needs custom view again |
| 3655 btfsc custom_view_locked ; YES - custom view locked? | 4226 btfsc custom_view_locked ; NO - custom view locked? |
| 3656 bra check_gas_needs_warn_1 ; YES - done | 4227 bra check_gas_needs_mesg ; YES - do not show it now |
| 3657 bsf gas_needs_warning ; NO - memorize it's an old now | 4228 bsf shown_gas_needs_warn ; NO - set custom view as shown now |
| 3658 movlw index_gas_needs_ascent ; - get custom view number of gas needs | 4229 bra check_gas_needs_cv ; - show gas needs custom view |
| 3659 call dive_customview_show ; - draw custom view | 4230 |
| 3660 check_gas_needs_warn_1: | 4231 check_gas_needs_attn: |
| 3661 goto TFT_warning_gas_needs ; - show warning message for gas needs and return | 4232 bsf attn_det_gas_needs ; set attention |
| 3662 | 4233 bcf shown_gas_needs_warn ; re-arm custom view show-up for warning |
| 3663 check_gas_needs_att: | 4234 btfsc shown_gas_needs_attn ; has the custom view been shown before on attention level? |
| 3664 bsf message_attention ; show attention sign for gas needs | 4235 bra check_gas_needs_mesg ; YES - do not show the gas needs custom view again |
| 3665 incf message_counter,F ; increase counter | 4236 btfsc custom_view_locked ; NO - custom view locked? |
| 3666 btfsc gas_needs_attention ; is it a new attention? | 4237 bra check_gas_needs_mesg ; YES - do not show it now |
| 3667 bra check_gas_needs_att_1 ; NO - do not show the gas needs custom view again | 4238 bsf shown_gas_needs_attn ; NO - set custom view as shown now |
| 3668 btfsc custom_view_locked ; YES - custom view locked? | 4239 ;bra check_gas_needs_cv ; - show gas needs custom view |
| 3669 bra check_gas_needs_att_1 ; YES - done | 4240 |
| 3670 bsf gas_needs_attention ; NO - memorize it's an old now | 4241 check_gas_needs_cv: |
| 3671 movlw index_gas_needs_ascent ; - get custom view number of gas needs | 4242 movlw index_gas_needs_ascent ; get custom view number of gas needs |
| 3672 call dive_customview_show ; - draw custom view | 4243 call dive_customview_show ; show custom view |
| 3673 check_gas_needs_att_1: | 4244 ;bra check_gas_needs_mesg ; show message |
| 3674 goto TFT_attention_gas_needs ; - show attention message for gas needs and return | 4245 |
| 4246 check_gas_needs_mesg: | |
| 4247 incf message_counter,F ; increase message counter | |
| 4248 goto TFT_message_gas_needs ; show message for gas needs and return | |
| 4249 | |
| 4250 | |
| 4251 IFDEF _external_sensor | |
| 4252 | |
| 4253 ;----------------------------------------------------------------------------- | |
| 4254 ; Check external Sensors for Loss and Divergence | |
| 4255 ; | |
| 4256 check_ext_sensors: | |
| 4257 btfsc warn_det_sensors_lost ; all sensors lost? | |
| 4258 bra check_ext_sensors_lost_all ; YES - show a warning and return | |
| 4259 | |
| 4260 btfsc attn_det_sensor1_lost ; sensor 1 lost? | |
| 4261 rcall check_ext_sensors_lost_1 ; YES - show an attention | |
| 4262 | |
| 4263 btfsc attn_det_sensor2_lost ; sensor 2 lost? | |
| 4264 rcall check_ext_sensors_lost_2 ; YES - show an attention | |
| 4265 | |
| 4266 btfsc attn_det_sensor3_lost ; sensor 3 lost? | |
| 4267 rcall check_ext_sensors_lost_3 ; YES - show an attention | |
| 4268 | |
| 4269 btfsc warn_det_sensors_div ; sensor values divergence? | |
| 4270 bra check_ext_sensors_diverg ; YES - show a warning and return | |
| 4271 | |
| 4272 return ; done | |
| 4273 | |
| 4274 check_ext_sensors_lost_all: | |
| 4275 btfsc shown_sensors_lost ; has the custom view been shown before? | |
| 4276 bra warn_sensors_lost_mesg ; YES - do not show the sensor custom view again | |
| 4277 btfsc custom_view_locked ; NO - custom view locked? | |
| 4278 bra warn_sensors_lost_mesg ; YES - do not show it now | |
| 4279 bsf shown_sensors_lost ; NO - set it as shown now | |
| 4280 movlw index_ppo2_sensors ; - get custom view number of sensors | |
| 4281 call dive_customview_show ; - show custom view | |
| 4282 ;bra warn_sensors_lost_mesg ; - show message | |
| 4283 | |
| 4284 warn_sensors_lost_mesg: | |
| 4285 incf message_counter,F ; increase message counter | |
| 4286 goto TFT_message_fallback ; show message and return | |
| 4287 | |
| 4288 check_ext_sensors_lost_1: | |
| 4289 btfsc shown_sensor1_fail ; has the custom view been shown before for sensor 1? | |
| 4290 return ; YES - do not show the sensor custom view again | |
| 4291 btfsc custom_view_locked ; NO - custom view locked? | |
| 4292 return ; YES - do not show it now | |
| 4293 bsf shown_sensor1_fail ; NO - set it as shown now | |
| 4294 bra check_ext_sensors_show_cv ; - show sensor custom view | |
| 4295 | |
| 4296 check_ext_sensors_lost_2: | |
| 4297 btfsc shown_sensor2_fail ; has the custom view been shown before for sensor 2? | |
| 4298 return ; YES - do not show the sensor custom view again | |
| 4299 btfsc custom_view_locked ; NO - custom view locked? | |
| 4300 return ; YES - do not show it now | |
| 4301 bsf shown_sensor2_fail ; NO - set it as shown now | |
| 4302 bra check_ext_sensors_show_cv ; - show sensor custom view | |
| 4303 | |
| 4304 check_ext_sensors_lost_3: | |
| 4305 btfsc shown_sensor3_fail ; has the custom view been shown before for sensor 3? | |
| 4306 return ; YES - do not show the sensor custom view again | |
| 4307 btfsc custom_view_locked ; NO - custom view locked? | |
| 4308 return ; YES - do not show it now | |
| 4309 bsf shown_sensor3_fail ; NO - set it as shown now | |
| 4310 ;bra check_ext_sensors_show_cv ; - show sensor custom view | |
| 4311 | |
| 4312 check_ext_sensors_show_cv: | |
| 4313 movlw index_ppo2_sensors ; get custom view number of sensors | |
| 4314 goto dive_customview_show ; show custom view and return | |
| 4315 | |
| 4316 check_ext_sensors_diverg: | |
| 4317 btfsc shown_sensors_diverg ; has the custom view been shown before for divergence? | |
| 4318 bra check_ext_sensors_diverg_mesg ; YES - do not show the sensor custom view again | |
| 4319 btfsc custom_view_locked ; NO - custom view locked? | |
| 4320 bra check_ext_sensors_diverg_mesg ; YES - do not show it now | |
| 4321 bsf shown_sensors_diverg ; NO - set it as shown now | |
| 4322 movlw index_ppo2_sensors ; - get custom view number of sensors | |
| 4323 call dive_customview_show ; - show custom view | |
| 4324 ;bra check_ext_sensors_diverg_mesg ; - show message | |
| 4325 | |
| 4326 check_ext_sensors_diverg_mesg: | |
| 4327 incf message_counter,F ; increase message counter | |
| 4328 goto TFT_message_divergence ; show message and return | |
| 4329 | |
| 4330 ENDIF ; _external_sensor | |
| 4331 | |
| 3675 | 4332 |
| 3676 ;============================================================================= | 4333 ;============================================================================= |
| 3677 | 4334 dmode5 CODE |
| 3678 IFDEF _external_sensor | |
| 3679 | |
| 3680 check_warn_sensors_disagree: | |
| 3681 incf message_counter,F ; increase counter | |
| 3682 bsf message_warning ; show warning sign for sensor disagree | |
| 3683 btfsc o2_sensors_warning ; is it a new warning? | |
| 3684 goto TFT_warning_sensor_disagree ; NO - don't show sensor custom view again, just show sensor disagree warning and return | |
| 3685 bsf o2_sensors_warning ; YES - memorize it's an old warning now | |
| 3686 call show_sensors_custview ; - show sensors custom view | |
| 3687 goto TFT_warning_sensor_disagree ; - show warning message for sensor disagree and return | |
| 3688 | |
| 3689 ENDIF | |
| 3690 | |
| 3691 ;============================================================================= | 4335 ;============================================================================= |
| 3692 | 4336 |
| 3693 IFDEF _helium | 4337 |
| 3694 | 4338 ;----------------------------------------------------------------------------- |
| 3695 check_IBCD: | 4339 ; Restart the Deco Engine |
| 3696 TSTOSS opt_enable_IBCD ; IBCD warning activated? | 4340 ; |
| 3697 return ; NO - done | |
| 3698 movff char_O_deco_warnings,WREG ; YES - get deco warnings vector | |
| 3699 btfss WREG,IBCD_warning ; IBCD warning flag set? | |
| 3700 return ; NO - return | |
| 3701 incf message_counter,F ; YES - increase counter | |
| 3702 goto TFT_warning_IBCD ; write warning to display | |
| 3703 | |
| 3704 ENDIF | |
| 3705 | |
| 3706 ;============================================================================= | |
| 3707 | |
| 3708 check_OC_gas_avail: | |
| 3709 tstfsz best_gas_number ; is a breathable OC (bailout) gas available? | |
| 3710 return ; YES (>0) - a breathable gas is available | |
| 3711 IFDEF _ccr_pscr | |
| 3712 btfsc bailout_mode ; in bailout? | |
| 3713 return ; YES - suppress warning | |
| 3714 ENDIF | |
| 3715 incf message_counter,F ; increase counter | |
| 3716 bsf message_warning ; show warning sign for no bailout gas | |
| 3717 goto TFT_warning_no_BO_gas ; show warning message for no bailout gas and return | |
| 3718 | |
| 3719 | |
| 3720 advice_gas_change: | |
| 3721 bsf message_advice ; show advice sign | |
| 3722 incf message_counter,F ; increase counter | |
| 3723 goto TFT_advice_gas_change ; show advice (and return) | |
| 3724 | |
| 3725 | |
| 3726 global restart_deco_engine | 4341 global restart_deco_engine |
| 3727 global restart_deco_engine_wo_ceiling | 4342 global restart_deco_engine_wo_ceiling |
| 3728 restart_deco_engine: | 4343 restart_deco_engine: |
| 3729 banksel int_O_ceiling ; switch to bank where the shared "_O_" variables are stored | 4344 banksel int_O_ceiling ; switch to bank where the shared "_O_" variables are stored |
| 3730 bsf int_O_ceiling+1,char_invalid_flag ; invalidate ceiling (int_O_ceiling has its invalid flag on a char's position!) | 4345 bsf int_O_ceiling+1,char_invalid_flag ; invalidate ceiling (int_O_ceiling has its invalid flag on a char's position!) |
| 3731 | 4346 |
| 3732 restart_deco_engine_wo_ceiling: | 4347 restart_deco_engine_wo_ceiling: |
| 3733 banksel char_O_deco_gas ; switch to bank where the shared "_O_" variables are stored | 4348 banksel char_O_deco_gas ; switch to bank where the stops table is stored |
| 3734 bsf char_O_deco_gas+0,char_invalid_flag ; invalidate deco data (stop table data) | 4349 bsf char_O_deco_gas+0,char_invalid_flag ; invalidate deco data (stop table data) |
| 4350 banksel int_O_NDL_norm ; switch to bank where the shared "_O_" variables are stored | |
| 3735 bsf int_O_NDL_norm+1,int_invalid_flag ; invalidate NDL time (normal plan) | 4351 bsf int_O_NDL_norm+1,int_invalid_flag ; invalidate NDL time (normal plan) |
| 3736 bsf int_O_TTS_norm+1,int_invalid_flag ; invalidate TTS time (normal plan) | 4352 bsf int_O_TTS_norm+1,int_invalid_flag ; invalidate TTS time (normal plan) |
| 3737 bsf int_O_TST_norm+1,int_invalid_flag ; invalidate TST time (normal plan) | 4353 bsf int_O_TST_norm+1,int_invalid_flag ; invalidate TST time (normal plan) |
| 3738 bsf int_O_CNS_norm+1,int_invalid_flag ; invalidate CNS at end of dive in normal plan | 4354 bsf int_O_CNS_norm+1,int_invalid_flag ; invalidate CNS at end of dive in normal plan |
| 3739 | 4355 |
| 3740 restart_deco_engine_wo_norm: | 4356 restart_deco_engine_wo_norm: |
| 3741 banksel common ; bank to bank common | 4357 banksel common ; bank to bank common |
| 3742 bsf request_restart_engine ; request restart of the deco engine | 4358 bsf request_restart_engine ; request restart of the deco engine |
| 3743 | 4359 |
| 3744 inval_alternative_plan_data: | 4360 inval_alternative_plan_data: |
| 3745 banksel int_O_TTS_alt ; switch to bank where the shared "_O_" variables are stored | 4361 banksel int_O_NDL_alt ; switch to bank where the shared "_O_" variables are stored |
| 3746 bsf int_O_NDL_alt+1,int_invalid_flag ; invalidate NDL time (alternative plan) | 4362 bsf int_O_NDL_alt+1,int_invalid_flag ; invalidate NDL time (alternative plan) |
| 3747 bsf int_O_TTS_alt+1,int_invalid_flag ; invalidate TTS time (alternative plan) | 4363 bsf int_O_TTS_alt+1,int_invalid_flag ; invalidate TTS time (alternative plan) |
| 3748 bsf int_O_TST_alt+1,int_invalid_flag ; invalidate TST time (alternative plan) | 4364 bsf int_O_TST_alt+1,int_invalid_flag ; invalidate TST time (alternative plan) |
| 3749 bsf int_O_CNS_alt+1,int_invalid_flag ; invalidate CNS at end of dive in alternative plan | 4365 bsf int_O_CNS_alt+1,int_invalid_flag ; invalidate CNS at end of dive in alternative plan |
| 3750 bsf int_O_gas_need_pres+1,int_invalid_flag ; invalidate ascent gas needs | 4366 bsf int_O_gas_need_pres+1,int_invalid_flag ; invalidate ascent gas needs |
| 3755 ENDIF | 4371 ENDIF |
| 3756 | 4372 |
| 3757 banksel common ; bank to bank common | 4373 banksel common ; bank to bank common |
| 3758 bsf new_deco_data_avail ; set flag for new NDL and deco data available to have the display updated | 4374 bsf new_deco_data_avail ; set flag for new NDL and deco data available to have the display updated |
| 3759 | 4375 |
| 3760 return | 4376 return ; done |
| 4377 | |
| 3761 | 4378 |
| 3762 ;============================================================================= | 4379 ;============================================================================= |
| 3763 ; Simulator Mode | 4380 dmode6 CODE |
| 3764 ; | 4381 ;============================================================================= |
| 3765 global do_demo_divemode | 4382 |
| 3766 do_demo_divemode: | 4383 |
| 4384 ;----------------------------------------------------------------------------- | |
| 4385 ; Start-up Simulator Mode | |
| 4386 ; | |
| 4387 global demo_divemode | |
| 4388 demo_divemode: | |
| 3767 call TFT_ClearScreen ; blank screen | 4389 call TFT_ClearScreen ; blank screen |
| 3768 | 4390 |
| 3769 ; leaving menu mode, so have option values in EEPROM up-to-date | 4391 ; leaving menu mode, so have option values in EEPROM up-to-date |
| 3770 btfsc options_changed ; do the options need to be stored to EEPROM ? | 4392 btfsc option_changed ; do the options need to be stored to EEPROM ? |
| 3771 call option_check_and_store_all ; YES - check and store all option values in EEPROM | 4393 call option_check_and_store_all ; YES - check and store all option values in EEPROM |
| 3772 bcf options_changed ; clear flag | |
| 3773 | 4394 |
| 3774 ; +++ COMMENT OUT FOR TESTING PURPOSE ONLY !!! +++ | 4395 ; +++ COMMENT OUT FOR TESTING PURPOSE ONLY !!! +++ |
| 3775 bsf simulatormode ; restore tissue pressures and CNS value after finishing simulator use | 4396 bsf simulatormode ; restore tissue pressures and CNS value after finishing simulator use |
| 3776 ; +++ DO NOT COMMENT OUT IN OPERATIONAL USE !!! +++ | 4397 ; +++ DO NOT COMMENT OUT IN OPERATIONAL USE !!! +++ |
| 3777 | 4398 |
| 3793 btfss sensor_override_active ; has the ISR confirmed switch to simulator mode? | 4414 btfss sensor_override_active ; has the ISR confirmed switch to simulator mode? |
| 3794 bra $-2 ; NO - not yet, loop waiting for the ISR to kick in | 4415 bra $-2 ; NO - not yet, loop waiting for the ISR to kick in |
| 3795 | 4416 |
| 3796 ; branch into dive mode | 4417 ; branch into dive mode |
| 3797 bsf divemode ; activate dive mode (to be done after simulator mode is activated) | 4418 bsf divemode ; activate dive mode (to be done after simulator mode is activated) |
| 3798 goto diveloop ; branch to dive mode code | 4419 goto diveloop ; start dive mode |
| 4420 | |
| 4421 ;----------------------------------------------------------------------------- | |
| 3799 | 4422 |
| 3800 END | 4423 END |
