Mercurial > public > hwos_code
comparison src/tft_outputs.asm @ 0:11d4fc797f74
init
| author | heinrichsweikamp |
|---|---|
| date | Wed, 24 Apr 2013 19:22:45 +0200 |
| parents | |
| children | 04794990b619 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:11d4fc797f74 |
|---|---|
| 1 ;============================================================================= | |
| 2 ; | |
| 3 ; File tft_outputs.asm | |
| 4 ; | |
| 5 ; Startup subroutines | |
| 6 ; | |
| 7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
| 8 ;============================================================================= | |
| 9 ; HISTORY | |
| 10 ; 2011-08-07 : [mH] moving from OSTC code | |
| 11 | |
| 12 #include "ostc3.inc" ; Mandatory header | |
| 13 #include "shared_definitions.h" ; Mailbox from/to p2_deco.c | |
| 14 #include "tft.inc" | |
| 15 #include "wait.inc" | |
| 16 #include "strings.inc" | |
| 17 #include "convert.inc" | |
| 18 #include "varargs.inc" | |
| 19 #include "math.inc" | |
| 20 #include "isr.inc" | |
| 21 #include "eeprom_rs232.inc" | |
| 22 #include "adc_lightsensor.inc" | |
| 23 #include "surfmode.inc" | |
| 24 #include "divemode.inc" | |
| 25 #include "external_flash.inc" | |
| 26 #include "ghostwriter.inc" | |
| 27 #include "customview.inc" | |
| 28 #include "i2c.inc" | |
| 29 | |
| 30 extern aa_wordprocessor | |
| 31 | |
| 32 ;============================================================================= | |
| 33 | |
| 34 gui CODE | |
| 35 ;============================================================================= | |
| 36 | |
| 37 global TFT_divemask_color | |
| 38 TFT_divemask_color: | |
| 39 movlw color_green ; TODO | |
| 40 bra TFT_standard_color0 | |
| 41 | |
| 42 global TFT_warnings_color | |
| 43 TFT_warnings_color: | |
| 44 movlw color_red ; TODO | |
| 45 bra TFT_standard_color0 | |
| 46 | |
| 47 global TFT_disabled_color | |
| 48 TFT_disabled_color: | |
| 49 movlw color_grey ; Default to OSTC grey (dark blue) | |
| 50 bra TFT_standard_color0 | |
| 51 | |
| 52 global TFT_standard_color | |
| 53 TFT_standard_color: | |
| 54 setf WREG ; TODO... | |
| 55 TFT_standard_color0: | |
| 56 call TFT_set_color | |
| 57 return | |
| 58 | |
| 59 TFT_color_code macro color_code_temp | |
| 60 movlw color_code_temp | |
| 61 call TFT_color_code1 | |
| 62 endm | |
| 63 | |
| 64 global TFT_color_code1 | |
| 65 TFT_color_code1: ; Color-codes the output, if required | |
| 66 dcfsnz WREG | |
| 67 bra TFT_color_code_depth ; depth_warn_mbar [mbar], 16Bit | |
| 68 dcfsnz WREG | |
| 69 bra TFT_color_code_cns ; color_code_cns_high [%] | |
| 70 dcfsnz WREG | |
| 71 bra TFT_color_code_gf ; color_code_gf_warn_high [%] | |
| 72 dcfsnz WREG | |
| 73 bra TFT_color_code_ppo2 ; Color-code the OC ppO2 results [cbar], opt_ppO2_max as threshold | |
| 74 dcfsnz WREG | |
| 75 bra TFT_color_code_velocity ; color_code_velocity_warn_high [m/min] | |
| 76 dcfsnz WREG | |
| 77 bra TFT_color_code_ceiling ; Show warning if current depth>shown ceiling | |
| 78 dcfsnz WREG | |
| 79 bra TFT_color_code_gaslist ; Color-code current row in Gaslist (%O2 in hi), opt_ppO2_max as threshold | |
| 80 dcfsnz WREG | |
| 81 bra TFT_color_code_ppo2_hud ; Color-code the hud ppO2 readings [cbar], opt_ppO2_max as threshold | |
| 82 dcfsnz WREG | |
| 83 bra TFT_color_code_battery ; Color-code the battery display | |
| 84 | |
| 85 TFT_color_code_gaslist: ; %O2 in hi | |
| 86 ; Check very high ppO2 manually | |
| 87 SAFE_2BYTE_COPY amb_pressure,xA | |
| 88 movlw d'10' | |
| 89 movwf xB+0 | |
| 90 clrf xB+1 | |
| 91 call div16x16 ; xC=p_amb/10 | |
| 92 movff xC+0,xA+0 | |
| 93 movff xC+1,xA+1 | |
| 94 movff hi,xB+0 | |
| 95 clrf xB+1 | |
| 96 call mult16x16 ; lo * p_amb/10 | |
| 97 ; Check if ppO2>6,55bar | |
| 98 tstfsz xC+2 ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar? | |
| 99 bra TFT_color_code_warn ; Yes, warn in warning color | |
| 100 ; Check if ppO2>3,30bar | |
| 101 btfsc xC+1,7 | |
| 102 bra TFT_color_code_warn ; Yes, warn in warning color | |
| 103 | |
| 104 ; Check for low ppo2 | |
| 105 movff xC+0,sub_a+0 | |
| 106 movff xC+1,sub_a+1 | |
| 107 movff opt_ppO2_min,WREG | |
| 108 mullw d'100' ; opt_ppO2_min*100 | |
| 109 movff PRODL,sub_b+0 | |
| 110 movff PRODH,sub_b+1 | |
| 111 call subU16 | |
| 112 btfsc neg_flag | |
| 113 bra TFT_color_code_warn ; too low -> Warning Color! | |
| 114 | |
| 115 ; Check for high ppo2 | |
| 116 movff opt_ppO2_max,WREG ; PPO2 Max for MOD calculation and color coding in divemode | |
| 117 mullw d'100' ; opt_ppO2_max*100 | |
| 118 movff PRODL,sub_b+0 | |
| 119 movff PRODH,sub_b+1 | |
| 120 call subU16 ; sub_c = sub_a - sub_b | |
| 121 btfss neg_flag | |
| 122 bra TFT_color_code_warn ; too high -> Warning Color! | |
| 123 return | |
| 124 | |
| 125 TFT_color_code_warn: | |
| 126 call TFT_warnings_color | |
| 127 return | |
| 128 | |
| 129 TFT_color_code_ceiling: | |
| 130 SAFE_2BYTE_COPY rel_pressure, lo | |
| 131 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 132 movff hi,xA+1 | |
| 133 movff lo,xA+0 | |
| 134 movff char_O_first_deco_depth,lo ; Ceiling in m | |
| 135 decf lo,F ; -1 | |
| 136 movlw LOW d'100' | |
| 137 movwf xB+0 | |
| 138 clrf xB+1 ; Devide/100 -> xC+0 = Depth in m | |
| 139 call div16x16 ; xA/xB=xC with xA as remainder | |
| 140 movf xC+0,W ; Depth in m | |
| 141 subwf lo,W | |
| 142 btfsc STATUS,C | |
| 143 bra TFT_color_code_warn ; Set to warning color | |
| 144 call TFT_standard_color | |
| 145 return | |
| 146 | |
| 147 TFT_color_code_depth: | |
| 148 movff hi,hi_temp | |
| 149 movff lo,lo_temp | |
| 150 SAFE_2BYTE_COPY rel_pressure, lo | |
| 151 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 152 movff lo,sub_a+0 | |
| 153 movff hi,sub_a+1 | |
| 154 movlw LOW depth_warn_mbar | |
| 155 movwf lo | |
| 156 movlw HIGH depth_warn_mbar | |
| 157 movwf hi | |
| 158 movff lo,sub_b+0 | |
| 159 movff hi,sub_b+1 | |
| 160 movff hi_temp,hi | |
| 161 movff lo_temp,lo ; Restore hi, lo | |
| 162 call subU16 ; sub_c = sub_a - sub_b | |
| 163 btfss neg_flag | |
| 164 bra TFT_color_code_warn ; Set to warning color | |
| 165 call TFT_standard_color | |
| 166 return | |
| 167 | |
| 168 TFT_color_code_cns: | |
| 169 movff int_O_CNS_fraction+1,lo ; copy into bank1 | |
| 170 tstfsz lo ; >255% ? | |
| 171 bra TFT_color_code_warn ; Yes | |
| 172 movff int_O_CNS_fraction+0,lo | |
| 173 movlw color_code_cns_high ; CNS Warn [%] | |
| 174 subwf lo,W | |
| 175 btfsc STATUS,C | |
| 176 bra TFT_color_code_warn ; Set to warning color | |
| 177 call TFT_standard_color | |
| 178 return | |
| 179 | |
| 180 TFT_color_code_gf: | |
| 181 movff char_O_gradient_factor,lo ; gradient factor | |
| 182 movlw color_code_gf_warn_high ; GF Warn [%] | |
| 183 subwf lo,W | |
| 184 btfsc STATUS,C | |
| 185 bra TFT_color_code_warn ; Set to warning color | |
| 186 call TFT_standard_color | |
| 187 return | |
| 188 | |
| 189 TFT_color_code_ppo2: | |
| 190 ; Check if ppO2>6,55bar | |
| 191 tstfsz xC+2 ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar? | |
| 192 bra TFT_color_code_warn ; Yes, warn in warning color | |
| 193 ; Check if ppO2>3,30bar | |
| 194 btfsc xC+1,7 | |
| 195 bra TFT_color_code_warn ; Yes, warn in warning color | |
| 196 | |
| 197 movff xC+0,sub_a+0 | |
| 198 movff xC+1,sub_a+1 | |
| 199 movff opt_ppO2_max,WREG ; PPO2 Max for MOD calculation and color coding in divemode | |
| 200 mullw d'100' | |
| 201 movff PRODL,sub_b+0 | |
| 202 movff PRODH,sub_b+1 | |
| 203 call subU16 ; sub_c = sub_a - sub_b | |
| 204 btfss neg_flag | |
| 205 bra TFT_color_code_warn ; Set to warning color | |
| 206 | |
| 207 movff xC+0,sub_a+0 | |
| 208 movff xC+1,sub_a+1 | |
| 209 movff opt_ppO2_min,WREG ; PPO2 min for Sensors and color coding in divemode | |
| 210 mullw d'100' | |
| 211 movff PRODL,sub_b+0 | |
| 212 movff PRODH,sub_b+1 | |
| 213 call subU16 ; sub_c = sub_a - sub_b | |
| 214 btfsc neg_flag | |
| 215 bra TFT_color_code_warn ; Set to warning color | |
| 216 call TFT_standard_color | |
| 217 return | |
| 218 | |
| 219 TFT_color_code_velocity: | |
| 220 btfss neg_flag ; Ignore for descend! | |
| 221 bra TFT_color_code_velocity1 ; Skip check! | |
| 222 movff divA+0,lo | |
| 223 movlw color_code_velocity_warn_high ; Velocity warn [m/min] | |
| 224 subwf lo,W | |
| 225 btfsc STATUS,C | |
| 226 bra TFT_color_code_warn ; Set to warning color | |
| 227 TFT_color_code_velocity1: | |
| 228 call TFT_standard_color | |
| 229 return | |
| 230 | |
| 231 TFT_color_code_ppo2_hud: ; With ppO2 [cbar] in lo | |
| 232 movff opt_ppO2_max,WREG ; PPO2 Max for MOD calculation and color coding in divemode | |
| 233 cpfsgt lo ; lo > opt_ppO2_max? | |
| 234 bra TFT_color_code_ppo2_hud1; No | |
| 235 bra TFT_color_code_warn ; Yes | |
| 236 TFT_color_code_ppo2_hud1: | |
| 237 movff opt_ppO2_min,WREG ; PPO2 min for Sensors and color coding in divemode | |
| 238 cpfslt lo ; lo < opt_ppO2_min? | |
| 239 bra TFT_color_code_ppo2_hud2; No | |
| 240 bra TFT_color_code_warn ; Yes | |
| 241 TFT_color_code_ppo2_hud2: | |
| 242 call TFT_standard_color | |
| 243 return | |
| 244 | |
| 245 TFT_color_code_battery: ; With battery percent in lo | |
| 246 movlw color_code_battery_low | |
| 247 cpfsgt lo ; lo < color_code_battery_low ? | |
| 248 bra TFT_color_code_warn ; No | |
| 249 call TFT_standard_color | |
| 250 return | |
| 251 | |
| 252 ; **************************************************************************** | |
| 253 | |
| 254 global TFT_divemode_mask | |
| 255 TFT_divemode_mask: ; Displays mask in Dive-Mode | |
| 256 call TFT_divemask_color | |
| 257 WIN_TINY divemode_mask_depth_column,divemode_mask_depth_row | |
| 258 lfsr FSR2,buffer | |
| 259 STRCAT_TEXT_PRINT tDepth | |
| 260 WIN_TINY divemode_mask_maxdepth_column,divemode_mask_maxdepth_row | |
| 261 lfsr FSR2,buffer | |
| 262 STRCAT_TEXT_PRINT tMaxDepth | |
| 263 WIN_TINY divemode_mask_divetime_column,divemode_mask_divetime_row | |
| 264 lfsr FSR2,buffer | |
| 265 STRCAT_TEXT_PRINT tDivetime | |
| 266 | |
| 267 call TFT_standard_color | |
| 268 return | |
| 269 | |
| 270 global TFT_clear_customview_divemode | |
| 271 TFT_clear_customview_divemode: | |
| 272 WIN_BOX_BLACK divemode_customview_row, .163, .0, .159 ; top, bottom, left, right | |
| 273 return | |
| 274 | |
| 275 global TFT_display_velocity | |
| 276 TFT_display_velocity: ; With divA+0 = m/min | |
| 277 TFT_color_code warn_velocity ; Color-code Output (With divA+0 = m/min) | |
| 278 WIN_SMALL velocity_text_column,velocity_text_row | |
| 279 | |
| 280 TSTOSS opt_units ; 0=Meters, 1=Feets | |
| 281 bra TFT_display_velocity_metric | |
| 282 ;TFT_display_velocity_imperial: | |
| 283 lfsr FSR2,buffer | |
| 284 movff divA+0,WREG ; divA+0 = m/min | |
| 285 mullw .100 ; PRODL:PRODH = mbar/min | |
| 286 movff PRODL,lo | |
| 287 movff PRODH,hi | |
| 288 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 289 movlw '-' | |
| 290 btfsc neg_flag | |
| 291 movlw '+' | |
| 292 movwf POSTINC2 | |
| 293 bsf leftbind | |
| 294 output_16 | |
| 295 bcf leftbind | |
| 296 STRCAT_TEXT_PRINT tVelImperial ; Unit switch | |
| 297 call TFT_standard_color | |
| 298 return | |
| 299 | |
| 300 TFT_display_velocity_metric: | |
| 301 lfsr FSR2,buffer | |
| 302 movff divA+0,lo ; divA+0 = m/min | |
| 303 movlw '-' | |
| 304 btfsc neg_flag | |
| 305 movlw '+' | |
| 306 movwf POSTINC2 | |
| 307 output_99 | |
| 308 STRCAT_TEXT_PRINT tVelMetric ; Unit switch | |
| 309 call TFT_standard_color | |
| 310 return | |
| 311 | |
| 312 global TFT_display_velocity_clear | |
| 313 TFT_display_velocity_clear: | |
| 314 ; Clear Text | |
| 315 WIN_BOX_BLACK velocity_text_row, velocity_text_row+.22, velocity_text_column, (velocity_text_column+.7*.8)-1 ; top, bottom, left, right | |
| 316 return | |
| 317 | |
| 318 TFT_clear_decoarea: | |
| 319 WIN_BOX_BLACK decostop_1st_stop_row, .239, decostop_1st_stop_column ,.159 ; top, bottom, left, right | |
| 320 return | |
| 321 | |
| 322 global TFT_clear_divemode_menu | |
| 323 TFT_clear_divemode_menu: | |
| 324 WIN_BOX_BLACK divemode_menu_row, divemode_menu_lower, divemode_menu_left ,divemode_menu_right ; top, bottom, left, right | |
| 325 return | |
| 326 | |
| 327 global TFT_display_ndl_mask | |
| 328 TFT_display_ndl_mask: | |
| 329 btfsc divemode_menu ; Is the dive mode menu shown? | |
| 330 return ; Yes, return | |
| 331 rcall TFT_clear_decoarea ; Clear Dekostop and Dekosum | |
| 332 call TFT_divemask_color | |
| 333 WIN_STD ndl_text_column,ndl_text_row | |
| 334 STRCPY_TEXT_PRINT tNDL ; NDL | |
| 335 call TFT_standard_color | |
| 336 return | |
| 337 | |
| 338 global TFT_show_TTS_divemode | |
| 339 TFT_show_TTS_divemode: | |
| 340 btfsc divemode_menu ; Is the dive mode menu shown? | |
| 341 return ; Yes, return | |
| 342 call TFT_standard_color | |
| 343 movff int_O_ascenttime+0,lo ; TTS | |
| 344 movff int_O_ascenttime+1,hi ; on 16bits | |
| 345 WIN_MEDIUM tts_value_column,tts_value_row | |
| 346 lfsr FSR2,buffer | |
| 347 output_16_3 ;Displays only 0...999 | |
| 348 STRCAT_PRINT "'" | |
| 349 return | |
| 350 | |
| 351 global TFT_display_ndl | |
| 352 TFT_display_ndl: | |
| 353 btfsc divemode_menu ; Is the dive mode menu shown? | |
| 354 return ; Yes, return | |
| 355 WIN_MEDIUM ndl_value_column,ndl_value_row | |
| 356 lfsr FSR2,buffer | |
| 357 call TFT_standard_color | |
| 358 movff char_O_nullzeit,lo ; Get NDL from C-code | |
| 359 output_8 | |
| 360 STRCAT_PRINT "'" | |
| 361 return | |
| 362 | |
| 363 global TFT_divemode_warning | |
| 364 TFT_divemode_warning: | |
| 365 bsf dive_warning_displayed ; =1: The warning sign is shown | |
| 366 WIN_TOP warning_icon_row | |
| 367 WIN_LEFT warning_icon_column | |
| 368 TFT_WRITE_PROM_IMAGE dive_warning_block ; Show Warning icon | |
| 369 ; movlw .3 | |
| 370 ; cpfslt warning_counter ; More then two warnings? | |
| 371 ; rcall TFT_divemode_warning_counter ; Yes, show the number | |
| 372 return | |
| 373 | |
| 374 ;TFT_divemode_warning_counter: | |
| 375 ; WIN_SMALL warning_icon_column+.8,warning_icon_row+.13 | |
| 376 ; lfsr FSR2,buffer | |
| 377 ; call TFT_warnings_color | |
| 378 ; movff warning_counter,lo | |
| 379 ; bsf leftbind | |
| 380 ; output_8 | |
| 381 ; bcf leftbind | |
| 382 ; STRCAT_PRINT "" | |
| 383 ; call TFT_standard_color | |
| 384 ; return | |
| 385 | |
| 386 global TFT_divemode_warning_clear | |
| 387 TFT_divemode_warning_clear: | |
| 388 btfss dive_warning_displayed ; =1: The warning sign is shown | |
| 389 return | |
| 390 bcf dive_warning_displayed ; clear only once | |
| 391 WIN_BOX_BLACK warning_icon_row, warning_icon_row+.38, warning_icon_column, warning_icon_column+.21; top, bottom, left, right | |
| 392 return | |
| 393 | |
| 394 global TFT_display_deko_mask | |
| 395 TFT_display_deko_mask: | |
| 396 rcall TFT_clear_decoarea | |
| 397 WIN_STD tts_text_column,tts_text_row | |
| 398 call TFT_divemask_color | |
| 399 STRCPY_TEXT_PRINT tTTS ; TTS | |
| 400 call TFT_standard_color | |
| 401 return | |
| 402 | |
| 403 TFT_display_deko_output_depth: ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 404 TSTOSS opt_units ; 0=m, 1=ft | |
| 405 bra TFT_display_deko_output_metric | |
| 406 ;TFT_display_deko_output_imperial: | |
| 407 movf lo,W ; lo = m | |
| 408 mullw .100 ; PRODL:PRODH = mbar | |
| 409 movff PRODL,lo | |
| 410 movff PRODH,hi | |
| 411 ; Convert with 334feet/100m to have 10ft, 20ft, 30ft stops... | |
| 412 movff lo,xA+0 | |
| 413 movff hi,xA+1 | |
| 414 movlw LOW d'334' ; 334feet/100m | |
| 415 movwf xB+0 | |
| 416 movlw HIGH d'334' | |
| 417 movwf xB+1 | |
| 418 call mult16x16 ; xA*xB=xC (lo:hi * 328) | |
| 419 movlw d'50' ; round up | |
| 420 addwf xC+0,F | |
| 421 movlw 0 | |
| 422 addwfc xC+1,F | |
| 423 addwfc xC+2,F | |
| 424 addwfc xC+3,F | |
| 425 movlw d'100' | |
| 426 movwf xB+0 | |
| 427 clrf xB+1 | |
| 428 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 429 movff xC+0,lo | |
| 430 movff xC+1,hi ; restore lo and hi with updated value | |
| 431 bcf leftbind | |
| 432 bsf ignore_digit4 ; Only full feet | |
| 433 output_16 | |
| 434 STRCAT_TEXT tFeets1 | |
| 435 return | |
| 436 | |
| 437 TFT_display_deko_output_metric: | |
| 438 output_99 | |
| 439 STRCAT_TEXT tMeters | |
| 440 PUTC ' ' | |
| 441 return | |
| 442 | |
| 443 global TFT_display_deko | |
| 444 TFT_display_deko: | |
| 445 btfsc divemode_menu ; Is the dive mode menu shown? | |
| 446 return ; Yes, return | |
| 447 WIN_MEDIUM decostop_1st_stop_column,decostop_1st_stop_row | |
| 448 TFT_color_code warn_ceiling ; Color-code Output | |
| 449 lfsr FSR2,buffer | |
| 450 movff char_O_first_deco_depth,lo ; Ceiling in m | |
| 451 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 452 movff char_O_first_deco_time,lo ; length of first stop in min | |
| 453 output_99 | |
| 454 STRCAT_PRINT "'" | |
| 455 call TFT_standard_color | |
| 456 return | |
| 457 | |
| 458 global TFT_decoplan | |
| 459 TFT_decoplan: | |
| 460 call TFT_divemask_color | |
| 461 WIN_TINY decoplan_title_column,decoplan_title_row | |
| 462 STRCPY_TEXT_PRINT tDiveDecoplan | |
| 463 call TFT_standard_color | |
| 464 | |
| 465 movff char_O_deco_depth+1,lo | |
| 466 tstfsz lo ; Show another stop? | |
| 467 bra TFT_display_deko2 ; Yes | |
| 468 ; No, clear output and return | |
| 469 call TFT_standard_color | |
| 470 WIN_SMALL decostop_4th_stop_column+.16,decostop_4th_stop_row | |
| 471 STRCPY_PRINT "---" | |
| 472 WIN_BOX_BLACK decostop_2nd_stop_row, divemode_simtext_row-1, decostop_2nd_stop_column, decostop_4th_stop_column ; top, bottom, left, right | |
| 473 WIN_BOX_BLACK decostop_5th_stop_row, divemode_simtext_row-1, decostop_5th_stop_column, decostop_6th_stop_column ; top, bottom, left, right | |
| 474 WIN_BOX_BLACK decostop_6th_stop_row, divemode_simtext_row-1, decostop_6th_stop_column, .159 ; top, bottom, left, right | |
| 475 return | |
| 476 TFT_display_deko2: | |
| 477 WIN_SMALL decostop_2nd_stop_column,decostop_2nd_stop_row | |
| 478 lfsr FSR2,buffer | |
| 479 movff char_O_deco_depth+1,lo ; stop in m | |
| 480 bcf lo,7 ; Clear GAS_SWITCH bit | |
| 481 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 482 movff char_O_deco_time+1,lo ; length of stop in min | |
| 483 output_99 | |
| 484 STRCAT_PRINT "'" | |
| 485 movff char_O_deco_depth+2,lo | |
| 486 tstfsz lo ; Show another stop? | |
| 487 bra TFT_display_deko3 ; Yes | |
| 488 ; No, clear output and return | |
| 489 WIN_BOX_BLACK decostop_3rd_stop_row, divemode_simtext_row-1, decostop_2nd_stop_column, decostop_4th_stop_column ; top, bottom, left, right | |
| 490 WIN_BOX_BLACK decostop_4th_stop_row, divemode_simtext_row-1, decostop_4th_stop_column, .159 ; top, bottom, left, right | |
| 491 return | |
| 492 | |
| 493 TFT_display_deko3: | |
| 494 WIN_SMALL decostop_3rd_stop_column,decostop_3rd_stop_row | |
| 495 lfsr FSR2,buffer | |
| 496 movff char_O_deco_depth+2,lo ; stop in m | |
| 497 bcf lo,7 ; Clear GAS_SWITCH bit | |
| 498 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 499 movff char_O_deco_time+2,lo ; length of stop in min | |
| 500 output_99 | |
| 501 STRCAT_PRINT "'" | |
| 502 | |
| 503 movff char_O_deco_depth+3,lo | |
| 504 tstfsz lo ; Show another stop? | |
| 505 bra TFT_display_deko4 ; Yes | |
| 506 ; No, clear output and return | |
| 507 WIN_BOX_BLACK decostop_4th_stop_row, divemode_simtext_row-1, decostop_4th_stop_column, .159 ; top, bottom, left, right | |
| 508 return ; Done. | |
| 509 | |
| 510 TFT_display_deko4: | |
| 511 WIN_SMALL decostop_4th_stop_column,decostop_4th_stop_row | |
| 512 lfsr FSR2,buffer | |
| 513 movff char_O_deco_depth+3,lo ; stop in m | |
| 514 bcf lo,7 ; Clear GAS_SWITCH bit | |
| 515 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 516 movff char_O_deco_time+3,lo ; length of stop in min | |
| 517 output_99 | |
| 518 STRCAT_PRINT "'" | |
| 519 | |
| 520 movff char_O_deco_depth+4,lo | |
| 521 tstfsz lo ; Show another stop? | |
| 522 bra TFT_display_deko5 ; Yes | |
| 523 ; No, clear output and return | |
| 524 WIN_BOX_BLACK decostop_5th_stop_row, divemode_simtext_row-1, decostop_5th_stop_column, decostop_6th_stop_column ; top, bottom, left, right | |
| 525 WIN_BOX_BLACK decostop_6th_stop_row, divemode_simtext_row-1, decostop_6th_stop_column, .159 ; top, bottom, left, right | |
| 526 return ; Done. | |
| 527 | |
| 528 TFT_display_deko5: | |
| 529 WIN_SMALL decostop_5th_stop_column,decostop_5th_stop_row | |
| 530 lfsr FSR2,buffer | |
| 531 movff char_O_deco_depth+4,lo ; stop in m | |
| 532 bcf lo,7 ; Clear GAS_SWITCH bit | |
| 533 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 534 movff char_O_deco_time+4,lo ; length of stop in min | |
| 535 output_99 | |
| 536 STRCAT_PRINT "'" | |
| 537 movff char_O_deco_depth+5,lo | |
| 538 tstfsz lo ; Show another stop? | |
| 539 bra TFT_display_deko6 ; Yes | |
| 540 ; No, clear output and return | |
| 541 WIN_BOX_BLACK decostop_6th_stop_row, divemode_simtext_row-1, decostop_6th_stop_column, .159 ; top, bottom, left, right | |
| 542 return ; Done. | |
| 543 TFT_display_deko6: | |
| 544 WIN_SMALL decostop_6th_stop_column,decostop_6th_stop_row | |
| 545 lfsr FSR2,buffer | |
| 546 movff char_O_deco_depth+5,lo ; stop in m | |
| 547 bcf lo,7 ; Clear GAS_SWITCH bit | |
| 548 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 549 movff char_O_deco_time+5,lo ; length of stop in min | |
| 550 output_99 | |
| 551 STRCAT_PRINT "'" | |
| 552 movff char_O_deco_depth+6,lo | |
| 553 tstfsz lo ; Show another stop? | |
| 554 bra TFT_display_deko7 ; Yes | |
| 555 ; No, clear output and return | |
| 556 WIN_BOX_BLACK decostop_7th_stop_row, divemode_simtext_row-1, decostop_7th_stop_column, .159 ; top, bottom, left, right | |
| 557 return ; Done. | |
| 558 TFT_display_deko7: | |
| 559 WIN_SMALL decostop_7th_stop_column,decostop_7th_stop_row | |
| 560 lfsr FSR2,buffer | |
| 561 movff char_O_deco_depth+6,lo ; stop in m | |
| 562 bcf lo,7 ; Clear GAS_SWITCH bit | |
| 563 rcall TFT_display_deko_output_depth ; Outputs depth (stored in lo) to POSTINC2 with "m" or w/o (For ft) | |
| 564 movff char_O_deco_time+6,lo ; length of stop in min | |
| 565 output_99 | |
| 566 STRCAT_PRINT "'" | |
| 567 return ; Done. | |
| 568 | |
| 569 ;TFT_display_deko1: | |
| 570 ; movff char_O_gradient_factor,lo ; gradient factor | |
| 571 ; movlw gf_display_threshold ; threshold for display | |
| 572 ; cpfslt lo ; show value? | |
| 573 ; bra TFT_display_deko2 ; Yes | |
| 574 ; ; No | |
| 575 ; bra TFT_display_ndl_mask2 ; Clear gradient factor | |
| 576 ; | |
| 577 | |
| 578 global TFT_mask_avr_stopwatch ; Show mask for average depth and stopwatch | |
| 579 TFT_mask_avr_stopwatch: | |
| 580 ; The mask | |
| 581 call TFT_divemask_color | |
| 582 WIN_TINY dive_custom_avr_stop_column1,dive_custom_avr_stop_row | |
| 583 STRCPY_TEXT_PRINT tDiveTotalAvr | |
| 584 WIN_TINY dive_custom_avr_stop_column2,dive_custom_avr_stop_row | |
| 585 STRCPY_TEXT_PRINT tDiveStopwatch | |
| 586 WIN_TINY dive_custom_avr_stop_column3,dive_custom_avr_stop_row | |
| 587 STRCPY_TEXT_PRINT tDiveStopAvr | |
| 588 call TFT_standard_color | |
| 589 return | |
| 590 | |
| 591 global TFT_update_avr_stopwatch ; Update average depth and stopwatch | |
| 592 TFT_update_avr_stopwatch: | |
| 593 call TFT_standard_color | |
| 594 SAFE_2BYTE_COPY average_divesecs,lo | |
| 595 call convert_time ; lo=secs, hi=mins | |
| 596 WIN_MEDIUM dive_avr_stop_column2,dive_avr_stop_row | |
| 597 lfsr FSR2,buffer | |
| 598 bsf leftbind | |
| 599 movf hi,W | |
| 600 movff lo,hi | |
| 601 movwf lo ; exchange lo and hi | |
| 602 output_8 | |
| 603 PUTC ':' | |
| 604 movff hi,lo | |
| 605 output_99x | |
| 606 movlw .5 | |
| 607 call TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 608 clrf WREG | |
| 609 movff WREG,buffer+.5 ; limit to 5 chars | |
| 610 STRCAT_PRINT "" | |
| 611 | |
| 612 TSTOSS opt_units ; 0=m, 1=ft | |
| 613 bra TFT_update_avr_stopwatch_metric | |
| 614 ;TFT_update_avr_stopwatch_imperial | |
| 615 movff avr_rel_pressure_total+0,lo | |
| 616 movff avr_rel_pressure_total+1,hi | |
| 617 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 618 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 619 WIN_MEDIUM dive_avr_stop_column1,dive_avr_stop_row | |
| 620 lfsr FSR2,buffer | |
| 621 bsf leftbind | |
| 622 output_16 ; yxz | |
| 623 STRCAT_PRINT " " | |
| 624 ; Stopped average depth | |
| 625 movff avr_rel_pressure+0,lo | |
| 626 movff avr_rel_pressure+1,hi | |
| 627 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 628 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 629 WIN_MEDIUM dive_avr_stop_column3,dive_avr_stop_row | |
| 630 lfsr FSR2,buffer | |
| 631 output_16 ; yxz | |
| 632 bcf leftbind | |
| 633 STRCAT_PRINT " " | |
| 634 return | |
| 635 | |
| 636 TFT_update_avr_stopwatch_metric: | |
| 637 ; Non-resettable average depth | |
| 638 movff avr_rel_pressure_total+0,lo | |
| 639 movff avr_rel_pressure_total+1,hi | |
| 640 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 641 WIN_MEDIUM dive_avr_stop_column1,dive_avr_stop_row | |
| 642 lfsr FSR2,buffer | |
| 643 bsf ignore_digit5 ; no cm | |
| 644 output_16dp .3 ; yxz.a | |
| 645 STRCAT_PRINT "" | |
| 646 ; Stopped average depth | |
| 647 movff avr_rel_pressure+0,lo | |
| 648 movff avr_rel_pressure+1,hi | |
| 649 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 650 WIN_MEDIUM dive_avr_stop_column3,dive_avr_stop_row | |
| 651 lfsr FSR2,buffer | |
| 652 bsf ignore_digit5 ; no cm | |
| 653 output_16dp .3 ; yxz.a | |
| 654 bcf leftbind | |
| 655 bcf ignore_digit5 | |
| 656 STRCAT_PRINT "" | |
| 657 return | |
| 658 | |
| 659 global TFT_hud_mask ; The HUD mask | |
| 660 TFT_hud_mask: | |
| 661 ; The mask | |
| 662 call TFT_divemask_color | |
| 663 WIN_TINY dive_custom_hud_column1,dive_custom_hud_row | |
| 664 STRCPY_TEXT_PRINT tDiveHudMask1 | |
| 665 WIN_TINY dive_custom_hud_column2,dive_custom_hud_row | |
| 666 STRCPY_TEXT_PRINT tDiveHudMask2 | |
| 667 WIN_TINY dive_custom_hud_column3,dive_custom_hud_row | |
| 668 STRCPY_TEXT_PRINT tDiveHudMask3 | |
| 669 call TFT_standard_color | |
| 670 return | |
| 671 | |
| 672 global TFT_update_hud ; Update HUD data | |
| 673 TFT_update_hud: | |
| 674 ; show three sensors | |
| 675 bsf leftbind | |
| 676 movff o2_ppo2_sensor1,lo | |
| 677 tstfsz lo ; ppO2=0 (No data/failure)? | |
| 678 bra TFT_update_hud1 ; No | |
| 679 btfss dive_hud1_displayed ; Was the sensor shown? | |
| 680 bra TFT_update_hud2 ; Yes, skip clear | |
| 681 bcf dive_hud1_displayed ; No, clear display flag | |
| 682 WIN_BOX_BLACK dive_hud_data_row, dive_hud_data_row+.30, dive_hud_sensor1_column, dive_hud_sensor2_column ; top, bottom, left, right | |
| 683 WIN_STD dive_hud_sensor1_column+.7,dive_hud_data_row+.5 | |
| 684 call TFT_standard_color | |
| 685 STRCPY_PRINT "---" | |
| 686 bra TFT_update_hud2 ; Skip Sensor 1 | |
| 687 TFT_update_hud1: | |
| 688 WIN_MEDIUM dive_hud_sensor1_column,dive_hud_data_row | |
| 689 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 690 lfsr FSR2,buffer | |
| 691 clrf hi | |
| 692 output_16dp .3 ; x.xx bar | |
| 693 STRCAT_PRINT "" | |
| 694 bsf dive_hud1_displayed ; Set display flag | |
| 695 TFT_update_hud2: | |
| 696 movff o2_ppo2_sensor2,lo | |
| 697 tstfsz lo ; ppO2=0 (No data/failure)? | |
| 698 bra TFT_update_hud3 ; No | |
| 699 btfss dive_hud2_displayed ; Was the sensor shown? | |
| 700 bra TFT_update_hud4 ; Yes, skip clear | |
| 701 bcf dive_hud2_displayed ; No, clear display flag | |
| 702 WIN_BOX_BLACK dive_hud_data_row, dive_hud_data_row+.30, dive_hud_sensor2_column, dive_hud_sensor3_column ; top, bottom, left, right | |
| 703 WIN_STD dive_hud_sensor2_column+.7,dive_hud_data_row+.5 | |
| 704 call TFT_standard_color | |
| 705 STRCPY_PRINT "---" | |
| 706 bra TFT_update_hud4 ; Skip Sensor 2 | |
| 707 TFT_update_hud3: | |
| 708 WIN_MEDIUM dive_hud_sensor2_column,dive_hud_data_row | |
| 709 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 710 lfsr FSR2,buffer | |
| 711 clrf hi | |
| 712 output_16dp .3 ; x.xx bar | |
| 713 STRCAT_PRINT "" | |
| 714 bsf dive_hud2_displayed ; Set display flag | |
| 715 TFT_update_hud4: | |
| 716 movff o2_ppo2_sensor3,lo | |
| 717 tstfsz lo ; ppO2=0 (No data/failure)? | |
| 718 bra TFT_update_hud5 ; No | |
| 719 btfss dive_hud3_displayed ; Was the sensor shown? | |
| 720 bra TFT_update_hud6 ; Yes, skip clear | |
| 721 bcf dive_hud3_displayed ; No, clear display flag | |
| 722 WIN_BOX_BLACK dive_hud_data_row, dive_hud_data_row+.30, dive_hud_sensor3_column, .159 ; top, bottom, left, right | |
| 723 WIN_STD dive_hud_sensor3_column+.7,dive_hud_data_row+.5 | |
| 724 call TFT_standard_color | |
| 725 STRCPY_PRINT "---" | |
| 726 bra TFT_update_hud6 ; Skip Sensor 3 | |
| 727 TFT_update_hud5: | |
| 728 WIN_MEDIUM dive_hud_sensor3_column,dive_hud_data_row | |
| 729 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 730 lfsr FSR2,buffer | |
| 731 clrf hi | |
| 732 output_16dp .3 ; x.xx bar | |
| 733 STRCAT_PRINT "" | |
| 734 bsf dive_hud3_displayed ; Set display flag | |
| 735 TFT_update_hud6: | |
| 736 bcf leftbind | |
| 737 call TFT_standard_color | |
| 738 return | |
| 739 | |
| 740 global TFT_surface_hud ; Update HUD data in surface mode | |
| 741 TFT_surface_hud: | |
| 742 ; show three sensors | |
| 743 bsf leftbind | |
| 744 WIN_SMALL surf_hud_sensor1_column,surf_hud_sensor1_row | |
| 745 movff o2_ppo2_sensor1,lo | |
| 746 tstfsz lo ; ppO2=0 (No data/failure)? | |
| 747 bra TFT_surface_hud1 ; No | |
| 748 call TFT_standard_color | |
| 749 STRCPY_PRINT "--- " | |
| 750 bra TFT_surface_hud2 ; Skip Sensor 1 | |
| 751 TFT_surface_hud1: | |
| 752 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 753 lfsr FSR2,buffer | |
| 754 clrf hi | |
| 755 output_16dp .3 ; x.xx bar | |
| 756 STRCAT_PRINT "" | |
| 757 TFT_surface_hud2: | |
| 758 WIN_SMALL surf_hud_sensor2_column,surf_hud_sensor2_row | |
| 759 movff o2_ppo2_sensor2,lo | |
| 760 tstfsz lo ; ppO2=0 (No data/failure)? | |
| 761 bra TFT_surface_hud3 ; No | |
| 762 call TFT_standard_color | |
| 763 STRCPY_PRINT "--- " | |
| 764 bra TFT_surface_hud4 ; Skip Sensor 2 | |
| 765 TFT_surface_hud3: | |
| 766 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 767 lfsr FSR2,buffer | |
| 768 clrf hi | |
| 769 output_16dp .3 ; x.xx bar | |
| 770 STRCAT_PRINT "" | |
| 771 TFT_surface_hud4: | |
| 772 WIN_SMALL surf_hud_sensor3_column,surf_hud_sensor3_row | |
| 773 movff o2_ppo2_sensor3,lo | |
| 774 tstfsz lo ; ppO2=0 (No data/failure)? | |
| 775 bra TFT_surface_hud5 ; No | |
| 776 call TFT_standard_color | |
| 777 STRCPY_PRINT "--- " | |
| 778 bra TFT_surface_hud6 ; Skip Sensor 3 | |
| 779 TFT_surface_hud5: | |
| 780 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 781 lfsr FSR2,buffer | |
| 782 clrf hi | |
| 783 output_16dp .3 ; x.xx bar | |
| 784 STRCAT_PRINT "" | |
| 785 TFT_surface_hud6: | |
| 786 bcf leftbind | |
| 787 call TFT_standard_color | |
| 788 return | |
| 789 | |
| 790 global TFT_menu_hud | |
| 791 TFT_menu_hud: ; Yes, update HUD data | |
| 792 movlw color_yellow | |
| 793 call TFT_set_color | |
| 794 bsf leftbind | |
| 795 WIN_SMALL surf_menu_sensor1_column,surf_menu_sensor1_row | |
| 796 lfsr FSR2,buffer | |
| 797 movff o2_ppo2_sensor1,lo | |
| 798 clrf hi | |
| 799 output_16dp .3 ; x.xx bar | |
| 800 PUTC "," | |
| 801 movff o2_mv_sensor1+0,lo ; in 0.1mV steps | |
| 802 movff o2_mv_sensor1+1,hi ; in 0.1mV steps | |
| 803 output_16dp .4 ; xxx.y mV | |
| 804 STRCAT_PRINT "mV " | |
| 805 WIN_SMALL surf_menu_sensor2_column,surf_menu_sensor2_row | |
| 806 lfsr FSR2,buffer | |
| 807 movff o2_ppo2_sensor2,lo | |
| 808 clrf hi | |
| 809 output_16dp .3 ; x.xx bar | |
| 810 PUTC "," | |
| 811 movff o2_mv_sensor2+0,lo ; in 0.1mV steps | |
| 812 movff o2_mv_sensor2+1,hi ; in 0.1mV steps | |
| 813 output_16dp .4 ; xxx.y mV | |
| 814 STRCAT_PRINT "mV " | |
| 815 WIN_SMALL surf_menu_sensor3_column,surf_menu_sensor3_row | |
| 816 lfsr FSR2,buffer | |
| 817 movff o2_ppo2_sensor3,lo | |
| 818 clrf hi | |
| 819 output_16dp .3 ; x.xx bar | |
| 820 PUTC "," | |
| 821 movff o2_mv_sensor3+0,lo ; in 0.1mV steps | |
| 822 movff o2_mv_sensor3+1,hi ; in 0.1mV steps | |
| 823 output_16dp .4 ; xxx.y mV | |
| 824 STRCAT_PRINT "mV " | |
| 825 WIN_SMALL surf_menu_sensor4_column,surf_menu_sensor4_row | |
| 826 lfsr FSR2,buffer | |
| 827 STRCPY "Batt:" | |
| 828 movff hud_battery_mv+0,lo ; in mV | |
| 829 movff hud_battery_mv+1,hi ; in mV | |
| 830 output_16dp .2 ; x.yyy V | |
| 831 STRCAT_PRINT "V" | |
| 832 call TFT_standard_color | |
| 833 bcf leftbind | |
| 834 return | |
| 835 | |
| 836 global TFT_clock | |
| 837 TFT_clock: | |
| 838 WIN_TINY surf_clock_column,surf_clock_row | |
| 839 TFT_clock2: ; called from divemode clock | |
| 840 call TFT_standard_color | |
| 841 lfsr FSR2,buffer | |
| 842 movff hours,lo | |
| 843 output_99 | |
| 844 movlw ':' | |
| 845 btfss secs,0 ; blinking every second | |
| 846 movlw ' ' | |
| 847 movwf POSTINC2 | |
| 848 movff mins,lo | |
| 849 output_99x | |
| 850 STRCAT_PRINT "" | |
| 851 return | |
| 852 | |
| 853 global TFT_show_time_date_menu | |
| 854 TFT_show_time_date_menu: | |
| 855 call speed_fastest | |
| 856 WIN_SMALL .15,.30 | |
| 857 call TFT_standard_color | |
| 858 lfsr FSR2,buffer | |
| 859 movff hours,lo | |
| 860 output_99 | |
| 861 PUTC ':' | |
| 862 movff mins,lo | |
| 863 output_99x | |
| 864 PUTC ':' | |
| 865 movff secs,lo | |
| 866 output_99x | |
| 867 STRCAT " - " | |
| 868 movff month,convert_value_temp+0 | |
| 869 movff day,convert_value_temp+1 | |
| 870 movff year,convert_value_temp+2 | |
| 871 call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 | |
| 872 STRCAT_PRINT " " | |
| 873 return | |
| 874 ;============================================================================= | |
| 875 | |
| 876 global TFT_interval | |
| 877 TFT_interval: | |
| 878 call TFT_warning_set_window ; Sets the row and column for the current warning | |
| 879 tstfsz WREG ; Is there room for the warning? | |
| 880 return ; No | |
| 881 STRCPY "Int:" | |
| 882 movff surface_interval+0,lo | |
| 883 movff surface_interval+1,hi | |
| 884 call convert_time ; lo=mins, hi=hours | |
| 885 movf hi,W | |
| 886 movff lo,hi | |
| 887 movwf lo ; exchange lo and hi | |
| 888 output_99x | |
| 889 PUTC ':' | |
| 890 movff hi,lo | |
| 891 output_99x | |
| 892 movlw surf_warning_length ; No, use surface string length | |
| 893 call TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 894 STRCAT_PRINT "" | |
| 895 return | |
| 896 | |
| 897 global TFT_compass_fast | |
| 898 TFT_compass_fast: | |
| 899 WIN_TINY .20,.50 | |
| 900 STRCPY "X:" | |
| 901 movff compass_DX+0,lo | |
| 902 movff compass_DX+1,hi | |
| 903 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 904 output_16 | |
| 905 STRCAT " Y:" | |
| 906 movff compass_DY+0,lo | |
| 907 movff compass_DY+1,hi | |
| 908 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 909 output_16 | |
| 910 STRCAT " Z:" | |
| 911 movff compass_DZ+0,lo | |
| 912 movff compass_DZ+1,hi | |
| 913 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 914 output_16 | |
| 915 STRCAT_PRINT " " | |
| 916 return | |
| 917 | |
| 918 global TFT_update_raw_data | |
| 919 TFT_update_raw_data: | |
| 920 WIN_TINY .0,.0 | |
| 921 STRCPY "pres:" | |
| 922 SAFE_2BYTE_COPY amb_pressure, lo | |
| 923 bsf leftbind | |
| 924 output_16 | |
| 925 STRCAT_PRINT "mbar " | |
| 926 WIN_TINY .80,.0 | |
| 927 STRCPY "temp:" | |
| 928 SAFE_2BYTE_COPY temperature, lo | |
| 929 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 930 movlw d'3' | |
| 931 movwf ignore_digits | |
| 932 output_16dp d'2' ; temperature | |
| 933 STRCAT_PRINT "°C " | |
| 934 | |
| 935 call get_battery_voltage ; get battery voltage | |
| 936 WIN_TINY .0,.18 | |
| 937 STRCPY "AN06:" | |
| 938 movff ADRESL,lo | |
| 939 movff ADRESH,hi | |
| 940 output_16 | |
| 941 STRCAT_PRINT "" | |
| 942 WIN_TINY .80,.18 | |
| 943 STRCPY "BATT:" | |
| 944 movff batt_voltage+0,lo | |
| 945 movff batt_voltage+1,hi | |
| 946 output_16 | |
| 947 STRCAT_PRINT "mV " | |
| 948 | |
| 949 call get_ambient_level ; get ambient light level | |
| 950 WIN_TINY .0,.36 | |
| 951 STRCPY "AN07:" | |
| 952 movff ADRESL,lo | |
| 953 movff ADRESH,hi | |
| 954 output_16 | |
| 955 STRCAT_PRINT " " | |
| 956 WIN_TINY .80,.36 | |
| 957 STRCPY "Amb.:" | |
| 958 movff ambient_light+0,lo | |
| 959 movff ambient_light+1,hi | |
| 960 output_16 | |
| 961 STRCAT_PRINT " " | |
| 962 | |
| 963 call get_rssi_level ; get rssi level | |
| 964 WIN_TINY .0,.54 | |
| 965 STRCPY "AN17:" | |
| 966 movff ADRESL,lo | |
| 967 movff ADRESH,hi | |
| 968 output_16 | |
| 969 STRCAT_PRINT " " | |
| 970 WIN_TINY .80,.54 | |
| 971 STRCPY "RSSI:" | |
| 972 movff rssi_value,lo | |
| 973 output_8 | |
| 974 STRCAT_PRINT " " | |
| 975 | |
| 976 WIN_TINY .0,.72 | |
| 977 STRCPY "HUD_Status:" | |
| 978 movff hud_status_byte,lo | |
| 979 output_8 | |
| 980 STRCAT_PRINT " " | |
| 981 WIN_TINY .80,.72 | |
| 982 STRCPY "HUD_BATT:" | |
| 983 movff hud_battery_mv+0,lo | |
| 984 movff hud_battery_mv+1,hi | |
| 985 output_16 | |
| 986 STRCAT_PRINT "mV " | |
| 987 | |
| 988 WIN_TINY .0,.90 | |
| 989 STRCPY "Sens1.:" | |
| 990 movff o2_mv_sensor1+0,lo | |
| 991 movff o2_mv_sensor1+1,hi | |
| 992 output_16dp d'4' | |
| 993 STRCAT_PRINT "mV " | |
| 994 WIN_TINY .80,.90 | |
| 995 STRCPY "Sens2:" | |
| 996 movff o2_mv_sensor2+0,lo | |
| 997 movff o2_mv_sensor2+1,hi | |
| 998 output_16dp d'4' | |
| 999 STRCAT_PRINT "mV " | |
| 1000 | |
| 1001 WIN_TINY .0,.108 | |
| 1002 STRCPY "Sens3.:" | |
| 1003 movff o2_mv_sensor3+0,lo | |
| 1004 movff o2_mv_sensor3+1,hi | |
| 1005 output_16dp d'4' | |
| 1006 STRCAT_PRINT "mV " | |
| 1007 WIN_TINY .80,.108 ; Space | |
| 1008 | |
| 1009 WIN_TINY .0,.128 | |
| 1010 STRCPY "ccDX:" | |
| 1011 movff compass_DX_f+0,lo ; Display calibrated data | |
| 1012 movff compass_CX_f+0,WREG ; by substracting compass_CX_f | |
| 1013 subwf lo,F ; lo := lo - W | |
| 1014 movff compass_DX_f+1,hi | |
| 1015 movff compass_CX_f+1,WREG | |
| 1016 subwfb hi,F | |
| 1017 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1018 output_16 | |
| 1019 STRCAT_PRINT " " | |
| 1020 WIN_TINY .80,.128 | |
| 1021 STRCPY "ccDY:" | |
| 1022 movff compass_DY_f+0,lo | |
| 1023 movff compass_CY_f+0,WREG | |
| 1024 subwf lo,F | |
| 1025 movff compass_DY_f+1,hi | |
| 1026 movff compass_CY_f+1,WREG | |
| 1027 subwfb hi,F | |
| 1028 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1029 output_16 | |
| 1030 STRCAT_PRINT " " | |
| 1031 WIN_TINY .0,.146 | |
| 1032 STRCPY "ccDZ:" | |
| 1033 movff compass_DZ_f+0,lo | |
| 1034 movff compass_CZ_f+0,WREG | |
| 1035 subwf lo,F | |
| 1036 movff compass_DZ_f+1,hi | |
| 1037 movff compass_CZ_f+1,WREG | |
| 1038 subwfb hi,F | |
| 1039 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1040 output_16 | |
| 1041 STRCAT_PRINT " " | |
| 1042 WIN_TINY .80,.146 ; Space | |
| 1043 | |
| 1044 WIN_TINY .0,.164 | |
| 1045 STRCPY "AcDX:" | |
| 1046 movff accel_DX_f+0,lo | |
| 1047 movff accel_DX_f+1,hi | |
| 1048 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1049 output_16 | |
| 1050 STRCAT_PRINT "mg " | |
| 1051 WIN_TINY .80,.164 | |
| 1052 STRCPY "AcDY:" | |
| 1053 movff accel_DY_f+0,lo | |
| 1054 movff accel_DY_f+1,hi | |
| 1055 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1056 output_16 | |
| 1057 STRCAT_PRINT "mg " | |
| 1058 WIN_TINY .0,.182 | |
| 1059 STRCPY "AcDZ:" | |
| 1060 movff accel_DZ_f+0,lo | |
| 1061 movff accel_DZ_f+1,hi | |
| 1062 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1063 output_16 | |
| 1064 STRCAT_PRINT "mg " | |
| 1065 | |
| 1066 WIN_TINY .80,.182 | |
| 1067 STRCPY "Head:" | |
| 1068 movff compass_heading+0,lo | |
| 1069 movff compass_heading+1,hi | |
| 1070 | |
| 1071 btfsc hi,7 ; Uncalibrated compass ? | |
| 1072 bra TFT_update_compass_1 | |
| 1073 | |
| 1074 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1075 output_16 | |
| 1076 STRCAT_PRINT " " | |
| 1077 bra TFT_update_compass_2 | |
| 1078 | |
| 1079 TFT_update_compass_1: | |
| 1080 STRCAT_PRINT "---" | |
| 1081 | |
| 1082 TFT_update_compass_2: | |
| 1083 WIN_TINY .0,.200 | |
| 1084 STRCPY "calX:" | |
| 1085 movff compass_CX_f+0,lo | |
| 1086 movff compass_CX_f+1,hi | |
| 1087 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1088 output_16 | |
| 1089 STRCAT ", " | |
| 1090 movff compass_CY_f+0,lo | |
| 1091 movff compass_CY_f+1,hi | |
| 1092 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1093 output_16 | |
| 1094 STRCAT ", " | |
| 1095 movff compass_CZ_f+0,lo | |
| 1096 movff compass_CZ_f+1,hi | |
| 1097 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1098 output_16 | |
| 1099 STRCAT_PRINT " " | |
| 1100 | |
| 1101 WIN_TINY .0,.218 | |
| 1102 STRCPY "Roll:" | |
| 1103 movff compass_roll+0,lo | |
| 1104 movff compass_roll+1,hi | |
| 1105 call TFT_convert_signed_16bit | |
| 1106 output_16 | |
| 1107 STRCAT_PRINT " " | |
| 1108 | |
| 1109 WIN_TINY .80, .218 | |
| 1110 STRCPY "Pitch:" | |
| 1111 movff compass_pitch+0,lo | |
| 1112 movff compass_pitch+1,hi | |
| 1113 call TFT_convert_signed_16bit | |
| 1114 output_16 | |
| 1115 STRCAT_PRINT " " | |
| 1116 | |
| 1117 ; call TFT_serial | |
| 1118 bcf leftbind | |
| 1119 return | |
| 1120 | |
| 1121 | |
| 1122 global TFT_surface_compass_mask | |
| 1123 TFT_surface_compass_mask: | |
| 1124 WIN_SMALL surf_compass_mask_column,surf_compass_mask_row | |
| 1125 call TFT_standard_color | |
| 1126 STRCPY_TEXT_PRINT tHeading ; Heading: | |
| 1127 return | |
| 1128 | |
| 1129 global TFT_dive_compass_mask | |
| 1130 TFT_dive_compass_mask: | |
| 1131 WIN_TINY dive_compass_mask_column,dive_compass_mask_row | |
| 1132 call TFT_divemask_color | |
| 1133 STRCPY_TEXT_PRINT tHeading ; Heading: | |
| 1134 return | |
| 1135 | |
| 1136 | |
| 1137 global TFT_surface_compass_heading | |
| 1138 TFT_surface_compass_heading: | |
| 1139 rcall compass_heading_common | |
| 1140 WIN_STD surf_compass_head_column,surf_compass_head_row | |
| 1141 call TFT_standard_color | |
| 1142 lfsr FSR2,buffer | |
| 1143 movff compass_heading+0,lo | |
| 1144 movff compass_heading+1,hi | |
| 1145 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1146 bsf leftbind | |
| 1147 output_16 | |
| 1148 bcf leftbind | |
| 1149 STRCAT_PRINT "° " | |
| 1150 return | |
| 1151 | |
| 1152 global TFT_dive_compass_heading | |
| 1153 TFT_dive_compass_heading: | |
| 1154 rcall compass_heading_common | |
| 1155 WIN_STD dive_compass_head_column,dive_compass_head_row | |
| 1156 call TFT_standard_color | |
| 1157 lfsr FSR2,buffer | |
| 1158 movff compass_heading+0,lo | |
| 1159 movff compass_heading+1,hi | |
| 1160 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1161 bsf leftbind | |
| 1162 output_16 | |
| 1163 bcf leftbind | |
| 1164 STRCAT_PRINT "° " | |
| 1165 return | |
| 1166 | |
| 1167 | |
| 1168 compass_heading_common: | |
| 1169 extern compass | |
| 1170 extern compass_filter | |
| 1171 rcall TFT_get_compass | |
| 1172 rcall TFT_get_compass | |
| 1173 rcall TFT_get_compass | |
| 1174 rcall TFT_get_compass | |
| 1175 rcall TFT_get_compass | |
| 1176 rcall TFT_get_compass | |
| 1177 call compass ; Do compass corrections. | |
| 1178 banksel common | |
| 1179 return | |
| 1180 | |
| 1181 TFT_get_compass: | |
| 1182 call speed_normal | |
| 1183 call I2C_RX_compass ; Test Compass | |
| 1184 call I2C_RX_accelerometer ; Test Accelerometer | |
| 1185 call compass_filter ; Filter Raw compass + accel readings. | |
| 1186 banksel common | |
| 1187 return | |
| 1188 | |
| 1189 global TFT_debug_output | |
| 1190 TFT_debug_output: | |
| 1191 return | |
| 1192 WIN_TINY .107,.0 | |
| 1193 call TFT_standard_color | |
| 1194 lfsr FSR2,buffer | |
| 1195 movff CCPR1L,lo | |
| 1196 output_8 | |
| 1197 STRCAT_PRINT "" | |
| 1198 return | |
| 1199 | |
| 1200 global TFT_ftts | |
| 1201 TFT_ftts: | |
| 1202 movff char_I_extra_time,lo | |
| 1203 tstfsz lo | |
| 1204 bra $+4 | |
| 1205 return ; char_I_extra_time=0, return. | |
| 1206 incf warning_counter,F ; increase counter | |
| 1207 call TFT_warning_set_window ; Sets the row and column for the current warning | |
| 1208 tstfsz WREG ; Is there room for the warning? | |
| 1209 return ; No | |
| 1210 movff char_I_extra_time,lo | |
| 1211 STRCPY "@+" | |
| 1212 bsf leftbind | |
| 1213 output_8 | |
| 1214 PUTC ":" | |
| 1215 movff int_O_extra_ascenttime+0,lo | |
| 1216 movff int_O_extra_ascenttime+1,hi | |
| 1217 movf lo,W | |
| 1218 iorwf hi,W ; extra_ascenttime == 0 ? | |
| 1219 bz TFT_ftts2 ; No deco | |
| 1220 movf lo,W ; extra_ascenttime == 0xFFFF ? | |
| 1221 andwf hi,W | |
| 1222 incf WREG,w | |
| 1223 bz TFT_ftts2 ; Wait... | |
| 1224 output_16 | |
| 1225 bcf leftbind | |
| 1226 PUTC "'" | |
| 1227 movlw warning_length ; Divemode string length | |
| 1228 call TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 1229 STRCAT_PRINT "" | |
| 1230 return | |
| 1231 | |
| 1232 TFT_ftts2: | |
| 1233 STRCAT "---" | |
| 1234 bcf leftbind | |
| 1235 movlw warning_length ; Divemode string length | |
| 1236 call TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 1237 STRCAT_PRINT "" | |
| 1238 return | |
| 1239 | |
| 1240 | |
| 1241 ;============================================================================= | |
| 1242 | |
| 1243 global TFT_temp_surfmode | |
| 1244 TFT_temp_surfmode: | |
| 1245 WIN_SMALL surf_temp_column,surf_temp_row | |
| 1246 call TFT_standard_color | |
| 1247 | |
| 1248 SAFE_2BYTE_COPY temperature, lo | |
| 1249 | |
| 1250 TSTOSS opt_units ; 0=°C, 1=°F | |
| 1251 bra TFT_temp_surfmode_metric | |
| 1252 | |
| 1253 ;TFT_temp_surfmode_imperial: | |
| 1254 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1255 call convert_celsius_to_fahrenheit ; convert value in lo:hi from celsius to fahrenheit | |
| 1256 lfsr FSR2,buffer ; Overwrite "-" | |
| 1257 bsf ignore_digit5 ; Full degrees only | |
| 1258 output_16 | |
| 1259 STRCAT_PRINT "" | |
| 1260 call TFT_divemask_color | |
| 1261 WIN_SMALL surf_temp_column+4*8,surf_temp_row | |
| 1262 STRCPY_PRINT "°F" | |
| 1263 return | |
| 1264 | |
| 1265 TFT_temp_surfmode_metric: | |
| 1266 lfsr FSR2,buffer | |
| 1267 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1268 movlw d'3' | |
| 1269 movwf ignore_digits | |
| 1270 bsf ignore_digit5 ; Full degrees only | |
| 1271 output_16 | |
| 1272 | |
| 1273 ; read-back the buffer+3 | |
| 1274 movff buffer+3,lo | |
| 1275 movlw " " ; Space | |
| 1276 cpfseq lo ; Was it a space (between +1°C and -1°C)? | |
| 1277 bra TFT_temp_surfmode1 ; No. | |
| 1278 movlw "0" ; Yes, print manual zero | |
| 1279 movff WREG,buffer+3 | |
| 1280 bra TFT_temp_surfmode2 | |
| 1281 TFT_temp_surfmode1: | |
| 1282 ; Test if output was negative (Flag set in TFT_convert_signed_16bit) | |
| 1283 btfss neg_flag ; Negative temperature? | |
| 1284 bra TFT_temp_surfmode3 ; No, continue | |
| 1285 ; Yes, negative temperature! | |
| 1286 movff buffer+3,buffer+2 ; remove two spaces manually | |
| 1287 movff buffer+4,buffer+3 | |
| 1288 TFT_temp_surfmode2: | |
| 1289 movlw 0x00 | |
| 1290 movff WREG,buffer+4 | |
| 1291 TFT_temp_surfmode3: | |
| 1292 STRCAT_PRINT "" | |
| 1293 call TFT_divemask_color | |
| 1294 WIN_SMALL surf_temp_column+4*8,surf_temp_row | |
| 1295 STRCPY_PRINT "°C" | |
| 1296 return | |
| 1297 | |
| 1298 ;============================================================================= | |
| 1299 global TFT_divemode_menu_cursor | |
| 1300 TFT_divemode_menu_cursor: | |
| 1301 WIN_BOX_BLACK divemode_menu_item1_row,divemode_menu_item3_row+.24,divemode_menu_item1_column-.8,divemode_menu_item1_column-.1 | |
| 1302 WIN_BOX_BLACK divemode_menu_item4_row,divemode_menu_item6_row+.24,divemode_menu_item4_column-.8,divemode_menu_item4_column-.1 | |
| 1303 call TFT_standard_color | |
| 1304 | |
| 1305 movlw divemode_menu_item1_column-.8 | |
| 1306 btfsc menupos,2 ; >3? | |
| 1307 movlw divemode_menu_item4_column-.8 ; Yes | |
| 1308 movff WREG,win_leftx2 | |
| 1309 | |
| 1310 movff menupos,lo ; Copy menu pos | |
| 1311 movlw divemode_menu_item6_row | |
| 1312 dcfsnz lo,F | |
| 1313 movlw divemode_menu_item1_row | |
| 1314 dcfsnz lo,F | |
| 1315 movlw divemode_menu_item2_row | |
| 1316 dcfsnz lo,F | |
| 1317 movlw divemode_menu_item3_row | |
| 1318 dcfsnz lo,F | |
| 1319 movlw divemode_menu_item4_row | |
| 1320 dcfsnz lo,F | |
| 1321 movlw divemode_menu_item5_row | |
| 1322 movff WREG,win_top | |
| 1323 movlw FT_SMALL | |
| 1324 movff WREG,win_font | |
| 1325 STRCPY_PRINT "\xb7" ; print cursor | |
| 1326 return | |
| 1327 | |
| 1328 global TFT_temp_divemode | |
| 1329 TFT_temp_divemode: | |
| 1330 btfsc divemode_menu ; Is the dive mode menu shown? | |
| 1331 return ; Yes, return | |
| 1332 btfsc blinking_better_gas ; blinking better Gas? | |
| 1333 return ; Yes, no update of temperature now | |
| 1334 ; temperature | |
| 1335 WIN_SMALL dive_temp_column,dive_temp_row | |
| 1336 call TFT_standard_color | |
| 1337 bsf leftbind | |
| 1338 | |
| 1339 SAFE_2BYTE_COPY temperature, lo | |
| 1340 TSTOSS opt_units ; 0=°C, 1=°F | |
| 1341 bra TFT_temp_divemode_metric | |
| 1342 | |
| 1343 ;TFT_temp_divemode_imperial: | |
| 1344 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1345 call convert_celsius_to_fahrenheit ; convert value in lo:hi from celsius to fahrenheit | |
| 1346 lfsr FSR2,buffer ; Overwrite "-" (There won't be less then -18°C underwater...) | |
| 1347 bsf ignore_digit5 ; Full degrees only | |
| 1348 output_16 | |
| 1349 STRCAT_TEXT tLogTunitF | |
| 1350 TFT_temp_divemode_common: | |
| 1351 bcf leftbind | |
| 1352 movlw .4 ; limit to three chars | |
| 1353 call TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 1354 STRCAT_PRINT "" | |
| 1355 return ; Done. | |
| 1356 | |
| 1357 TFT_temp_divemode_metric: | |
| 1358 lfsr FSR2,buffer | |
| 1359 call TFT_convert_signed_16bit ; converts lo:hi into signed-short and adds '-' to POSTINC2 if required | |
| 1360 movlw d'3' | |
| 1361 movwf ignore_digits | |
| 1362 bsf ignore_digit5 ; Full degrees only | |
| 1363 output_16 | |
| 1364 STRCAT_TEXT tLogTunitC | |
| 1365 bra TFT_temp_divemode_common ; Done. | |
| 1366 | |
| 1367 TFT_active_setpoint: ; Show setpoint | |
| 1368 WIN_STD active_gas_column,active_gas_row | |
| 1369 call TFT_standard_color | |
| 1370 btfsc is_bailout ; =1: Bailout | |
| 1371 bra TFT_active_setpoint_bail ; Show "Bailout" instead of Setpoint | |
| 1372 | |
| 1373 lfsr FSR2,buffer | |
| 1374 movff char_I_const_ppO2,lo | |
| 1375 TFT_color_code warn_ppo2_hud ; With ppO2 [cbar] in lo | |
| 1376 clrf hi | |
| 1377 bsf leftbind | |
| 1378 output_16dp d'3' | |
| 1379 bcf leftbind | |
| 1380 STRCAT_TEXT tbar | |
| 1381 TSTOSS opt_ccr_mode ; =0: Fixed SP, =1: Sensor | |
| 1382 bra $+4 | |
| 1383 PUTC "*" | |
| 1384 STRCAT_PRINT "" | |
| 1385 | |
| 1386 TFT_active_setpoint_diluent: | |
| 1387 call TFT_standard_color | |
| 1388 WIN_SMALL active_dil_column,active_dil_row | |
| 1389 movff char_I_O2_ratio,lo ; lo now stores O2 in % | |
| 1390 movff char_I_He_ratio,hi ; hi now stores He in % | |
| 1391 rcall TFT_show_dil_divemode2 ; Show diluent (Non-Inverted in all cases) | |
| 1392 | |
| 1393 btfss better_gas_available ; =1: A better gas is available and a gas change is advised in divemode | |
| 1394 return ; Done. | |
| 1395 btg blinking_better_gas ; Toggle blink bit... | |
| 1396 btfss blinking_better_gas ; blink now? | |
| 1397 return ; No, Done. | |
| 1398 | |
| 1399 movlw color_yellow ; Blink in yellow | |
| 1400 call TFT_set_color | |
| 1401 WIN_SMALL_INVERT active_dil_column,active_dil_row | |
| 1402 movff char_I_O2_ratio,lo ; lo now stores O2 in % | |
| 1403 movff char_I_He_ratio,hi ; hi now stores He in % | |
| 1404 rcall TFT_show_dil_divemode2 ; Show gas | |
| 1405 WIN_INVERT .0 ; Init new Wordprocessor | |
| 1406 call TFT_standard_color | |
| 1407 return ; Done. | |
| 1408 | |
| 1409 TFT_show_dil_divemode2: | |
| 1410 lfsr FSR2,buffer | |
| 1411 call customview_show_mix ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 | |
| 1412 STRCAT_PRINT "" | |
| 1413 return | |
| 1414 | |
| 1415 TFT_active_setpoint_bail: | |
| 1416 STRCPY_TEXT_PRINT tDiveBailout ; Bailout | |
| 1417 bra TFT_active_setpoint_diluent | |
| 1418 | |
| 1419 global TFT_active_gas_divemode | |
| 1420 TFT_active_gas_divemode: ; Display gas/Setpoint | |
| 1421 btfsc divemode_menu ; Is the dive mode menu shown? | |
| 1422 return ; Yes, return | |
| 1423 btfsc FLAG_apnoe_mode ; Ignore in Apnoe mode | |
| 1424 return | |
| 1425 btfsc FLAG_ccr_mode ; in CCR mode | |
| 1426 bra TFT_active_setpoint ; Yes, show setpoint | |
| 1427 | |
| 1428 call TFT_standard_color | |
| 1429 WIN_STD active_gas_column,active_gas_row | |
| 1430 movff char_I_O2_ratio,lo ; lo now stores O2 in % | |
| 1431 movff char_I_He_ratio,hi ; hi now stores He in % | |
| 1432 rcall TFT_active_gas_divemode2 ; Show gas (Non-Inverted in all cases) | |
| 1433 btfss better_gas_available ; =1: A better gas is available and a gas change is advised in divemode | |
| 1434 return ; Done. | |
| 1435 | |
| 1436 btg blinking_better_gas ; Toggle blink bit... | |
| 1437 btfss blinking_better_gas ; blink now? | |
| 1438 return ; No, Done. | |
| 1439 movlw color_yellow ; Blink in yellow | |
| 1440 call TFT_set_color | |
| 1441 WIN_STD_INVERT active_gas_column,active_gas_row | |
| 1442 movff char_I_O2_ratio,lo ; lo now stores O2 in % | |
| 1443 movff char_I_He_ratio,hi ; hi now stores He in % | |
| 1444 rcall TFT_active_gas_divemode2 ; Show gas (Non-Inverted in all cases) | |
| 1445 WIN_INVERT .0 ; Init new Wordprocessor | |
| 1446 call TFT_standard_color | |
| 1447 return ; Done. | |
| 1448 | |
| 1449 TFT_active_gas_divemode2: | |
| 1450 lfsr FSR2,buffer | |
| 1451 call customview_show_mix ; Put "Nxlo", "Txlo/hi", "Air" or "O2" into Postinc2 | |
| 1452 STRCAT_PRINT "" | |
| 1453 return | |
| 1454 | |
| 1455 global TFT_display_decotype_surface | |
| 1456 global TFT_display_decotype_surface1 ; Used from logbook! | |
| 1457 TFT_display_decotype_surface: | |
| 1458 WIN_STD surf_decotype_column,surf_decotype_row | |
| 1459 WIN_COLOR color_lightblue | |
| 1460 lfsr FSR2,buffer | |
| 1461 movff opt_dive_mode,lo ; 0=OC, 1=CC, 2=Gauge, 3=Apnea | |
| 1462 TFT_display_decotype_surface1: ; Used from logbook! | |
| 1463 tstfsz lo | |
| 1464 bra TFT_display_decotype_surface2 | |
| 1465 STRCAT_TEXT_PRINT tDvOC ; OC | |
| 1466 bra TFT_display_decotype_exit | |
| 1467 TFT_display_decotype_surface2: | |
| 1468 decfsz lo,F | |
| 1469 bra TFT_display_decotype_surface3 | |
| 1470 STRCAT_TEXT_PRINT tDvCC ; CC | |
| 1471 bra TFT_display_decotype_exit | |
| 1472 TFT_display_decotype_surface3: | |
| 1473 decfsz lo,F | |
| 1474 bra TFT_display_decotype_surface4 | |
| 1475 STRCAT_TEXT_PRINT tDvGauge ; Gauge | |
| 1476 bra TFT_display_decotype_exit | |
| 1477 TFT_display_decotype_surface4: | |
| 1478 STRCAT_TEXT_PRINT tDvApnea ; Apnea | |
| 1479 TFT_display_decotype_exit: | |
| 1480 call TFT_standard_color | |
| 1481 return | |
| 1482 ;============================================================================= | |
| 1483 | |
| 1484 global TFT_splist_surfmode ; Show Setpoint list | |
| 1485 extern gaslist_strcat_setpoint | |
| 1486 TFT_splist_surfmode: | |
| 1487 bsf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint | |
| 1488 ;SP 1 | |
| 1489 WIN_SMALL surf_gaslist_column,surf_gaslist_row | |
| 1490 lfsr FSR2,buffer | |
| 1491 clrf PRODL | |
| 1492 call gaslist_strcat_setpoint ; Show SP#+1 of PRODL# | |
| 1493 STRCAT_PRINT "" | |
| 1494 ;SP 2 | |
| 1495 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) | |
| 1496 lfsr FSR2,buffer | |
| 1497 movlw .1 | |
| 1498 movwf PRODL | |
| 1499 call gaslist_strcat_setpoint ; Show SP#+1 of PRODL# | |
| 1500 STRCAT_PRINT "" | |
| 1501 ;SP 3 | |
| 1502 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2) | |
| 1503 lfsr FSR2,buffer | |
| 1504 movlw .2 | |
| 1505 movwf PRODL | |
| 1506 call gaslist_strcat_setpoint ; Show SP#+1 of PRODL# | |
| 1507 STRCAT_PRINT "" | |
| 1508 ;SP 4 | |
| 1509 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
| 1510 lfsr FSR2,buffer | |
| 1511 movlw .3 | |
| 1512 movwf PRODL | |
| 1513 call gaslist_strcat_setpoint ; Show SP#+1 of PRODL# | |
| 1514 STRCAT_PRINT "" | |
| 1515 ;SP 5 | |
| 1516 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4) | |
| 1517 lfsr FSR2,buffer | |
| 1518 movlw .4 | |
| 1519 movwf PRODL | |
| 1520 call gaslist_strcat_setpoint ; Show SP#+1 of PRODL# | |
| 1521 STRCAT_PRINT "" | |
| 1522 bcf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint | |
| 1523 bcf leftbind | |
| 1524 return | |
| 1525 | |
| 1526 global TFT_gaslist_surfmode | |
| 1527 TFT_gaslist_surfmode: ; Displays Gas List | |
| 1528 bsf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint | |
| 1529 extern gaslist_strcat_gas_mod | |
| 1530 ;Gas 1 | |
| 1531 WIN_SMALL surf_gaslist_column,surf_gaslist_row | |
| 1532 lfsr FSR2,buffer | |
| 1533 movlw .0 | |
| 1534 movwf PRODL | |
| 1535 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1536 STRCAT_PRINT "" | |
| 1537 ;Gas 2 | |
| 1538 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) | |
| 1539 lfsr FSR2,buffer | |
| 1540 movlw .1 | |
| 1541 movwf PRODL | |
| 1542 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1543 STRCAT_PRINT "" | |
| 1544 ;Gas 3 | |
| 1545 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2) | |
| 1546 lfsr FSR2,buffer | |
| 1547 movlw .2 | |
| 1548 movwf PRODL | |
| 1549 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1550 STRCAT_PRINT "" | |
| 1551 ;Gas 4 | |
| 1552 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
| 1553 lfsr FSR2,buffer | |
| 1554 movlw .3 | |
| 1555 movwf PRODL | |
| 1556 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1557 STRCAT_PRINT "" | |
| 1558 ;Gas 5 | |
| 1559 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4) | |
| 1560 lfsr FSR2,buffer | |
| 1561 movlw .4 | |
| 1562 movwf PRODL | |
| 1563 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1564 STRCAT_PRINT "" | |
| 1565 bcf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint | |
| 1566 bcf leftbind | |
| 1567 return | |
| 1568 | |
| 1569 global TFT_dillist_surfmode | |
| 1570 TFT_dillist_surfmode: ; Displays Diluent List | |
| 1571 bsf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint | |
| 1572 ;Dil 1 | |
| 1573 WIN_SMALL surf_gaslist_column,surf_gaslist_row | |
| 1574 lfsr FSR2,buffer | |
| 1575 movlw .5 | |
| 1576 movwf PRODL | |
| 1577 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1578 STRCAT_PRINT "" | |
| 1579 ;Dil 2 | |
| 1580 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) | |
| 1581 lfsr FSR2,buffer | |
| 1582 movlw .6 | |
| 1583 movwf PRODL | |
| 1584 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1585 STRCAT_PRINT "" | |
| 1586 ;Dil 3 | |
| 1587 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2) | |
| 1588 lfsr FSR2,buffer | |
| 1589 movlw .7 | |
| 1590 movwf PRODL | |
| 1591 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1592 STRCAT_PRINT "" | |
| 1593 ;Dil 4 | |
| 1594 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
| 1595 lfsr FSR2,buffer | |
| 1596 movlw .8 | |
| 1597 movwf PRODL | |
| 1598 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1599 STRCAT_PRINT "" | |
| 1600 ;Dil 5 | |
| 1601 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4) | |
| 1602 lfsr FSR2,buffer | |
| 1603 movlw .9 | |
| 1604 movwf PRODL | |
| 1605 call gaslist_strcat_gas_mod ;Append gas description of gas #PRODL (0-4) to current string | |
| 1606 STRCAT_PRINT "" | |
| 1607 bcf short_gas_decriptions ; =1: Use short versions of gaslist_strcat_gas_mod and gaslist_strcat_setpoint | |
| 1608 bcf leftbind | |
| 1609 return | |
| 1610 | |
| 1611 global TFT_depth | |
| 1612 TFT_depth: | |
| 1613 SAFE_2BYTE_COPY rel_pressure, lo | |
| 1614 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 1615 | |
| 1616 TSTOSS opt_units ; 0=m, 1=ft | |
| 1617 bra TFT_depth_metric | |
| 1618 ;TFT_depth_imperial | |
| 1619 WIN_LARGE depth_feet_column,depth_feet_row | |
| 1620 lfsr FSR2,buffer | |
| 1621 TFT_color_code warn_depth ; Color-code the output | |
| 1622 | |
| 1623 clrf sub_a+1 ; Display 0ft if lower then 30cm | |
| 1624 movlw d'30' | |
| 1625 movwf sub_a+0 | |
| 1626 movff hi,sub_b+1 | |
| 1627 movff lo,sub_b+0 | |
| 1628 call subU16 ; sub_c = sub_a - sub_b | |
| 1629 btfss neg_flag ; Depth lower then 0.4m? | |
| 1630 bra depth_less_0.3mtr_feet ; Yes, Show 0ft manually | |
| 1631 | |
| 1632 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 1633 bsf leftbind | |
| 1634 output_16 ; feet in Big font | |
| 1635 bcf leftbind | |
| 1636 movlw .3 ; limit to three chars | |
| 1637 call TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 1638 STRCAT_PRINT "" ; Display feet | |
| 1639 return | |
| 1640 | |
| 1641 depth_less_0.3mtr_feet: | |
| 1642 STRCAT_PRINT "0 " ; manual zero | |
| 1643 return | |
| 1644 | |
| 1645 TFT_depth_metric: | |
| 1646 WIN_LARGE depth_column,depth_row | |
| 1647 TFT_color_code warn_depth ; Color-code the output | |
| 1648 | |
| 1649 movlw .039 | |
| 1650 cpfslt hi | |
| 1651 bra depth_greater_99_84mtr | |
| 1652 | |
| 1653 btfsc depth_greater_100m ; Was depth>100m during last call | |
| 1654 call TFT_clear_depth ; Yes, clear depth area | |
| 1655 bcf depth_greater_100m ; Do this once only... | |
| 1656 | |
| 1657 lfsr FSR2,buffer | |
| 1658 movlw HIGH d'1000' | |
| 1659 movwf sub_a+1 | |
| 1660 movlw LOW d'1000' | |
| 1661 movwf sub_a+0 | |
| 1662 movff hi,sub_b+1 | |
| 1663 movff lo,sub_b+0 | |
| 1664 incf sub_b+0,F | |
| 1665 movlw d'0' | |
| 1666 addwfc sub_b+1,F ; Add 1mbar offset | |
| 1667 call sub16 ; sub_c = sub_a - sub_b | |
| 1668 movlw ' ' | |
| 1669 btfss neg_flag ; Depth lower then 10m? | |
| 1670 movwf POSTINC2 ; Yes, add extra space | |
| 1671 | |
| 1672 clrf sub_a+1 | |
| 1673 movlw d'99' | |
| 1674 movwf sub_a+0 | |
| 1675 movff hi,sub_b+1 | |
| 1676 movff lo,sub_b+0 | |
| 1677 call subU16 ; sub_c = sub_a - sub_b | |
| 1678 btfss neg_flag ; Depth lower then 1m? | |
| 1679 bra tft_depth2 ; Yes, display manual Zero | |
| 1680 | |
| 1681 bsf leftbind | |
| 1682 bsf ignore_digit4 | |
| 1683 output_16 ; Full meters in Big font | |
| 1684 bcf leftbind | |
| 1685 bra tft_depth3 | |
| 1686 | |
| 1687 tft_depth2: | |
| 1688 WIN_LARGE depth_column,depth_row | |
| 1689 STRCAT "0" | |
| 1690 | |
| 1691 tft_depth3: | |
| 1692 STRCAT_PRINT "" ; Display full meters | |
| 1693 | |
| 1694 ; .1m in MEDIUM font | |
| 1695 WIN_MEDIUM depth_dm_column,depth_dm_row | |
| 1696 TFT_color_code warn_depth ; Color-code the output | |
| 1697 | |
| 1698 SAFE_2BYTE_COPY rel_pressure, lo | |
| 1699 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 1700 | |
| 1701 lfsr FSR2,buffer | |
| 1702 PUTC "." | |
| 1703 movlw HIGH d'30' ; Display 0.0m if lower then 30cm | |
| 1704 movwf sub_a+1 | |
| 1705 movlw LOW d'30' | |
| 1706 movwf sub_a+0 | |
| 1707 movff hi,sub_b+1 | |
| 1708 movff lo,sub_b+0 | |
| 1709 call subU16 ; sub_c = sub_a - sub_b | |
| 1710 btfss neg_flag ; Depth lower then 0.3m? | |
| 1711 bra depth_less_0.3mtr ; Yes, Show ".0" manually | |
| 1712 | |
| 1713 movlw d'4' | |
| 1714 movwf ignore_digits | |
| 1715 bsf ignore_digit5 | |
| 1716 output_16dp d'0' | |
| 1717 STRCAT_PRINT "" ; Display decimeters | |
| 1718 WIN_FONT FT_SMALL | |
| 1719 return | |
| 1720 | |
| 1721 depth_less_0.3mtr: | |
| 1722 STRCAT_PRINT "0" ; Display 0.0m manually | |
| 1723 WIN_FONT FT_SMALL | |
| 1724 return | |
| 1725 | |
| 1726 depth_greater_99_84mtr: ; Display only in full meters | |
| 1727 btfss depth_greater_100m ; Is depth>100m already? | |
| 1728 rcall TFT_clear_depth ; No, clear depth area and set flag | |
| 1729 ; Depth is already in hi:lo | |
| 1730 ; Show depth in Full meters | |
| 1731 ; That means ignore figure 4 and 5 | |
| 1732 lfsr FSR2,buffer | |
| 1733 bsf ignore_digit4 | |
| 1734 bsf leftbind | |
| 1735 output_16 | |
| 1736 bcf leftbind | |
| 1737 STRCAT_PRINT "" ; Display full meters only | |
| 1738 WIN_FONT FT_SMALL | |
| 1739 return | |
| 1740 | |
| 1741 TFT_clear_depth: ; No, clear depth area and set flag | |
| 1742 WIN_BOX_BLACK depth_row, .77,.0, max_depth_column-.1 ;top, bottom, left, right | |
| 1743 bsf depth_greater_100m ; Set Flag | |
| 1744 return | |
| 1745 | |
| 1746 ;============================================================================= | |
| 1747 | |
| 1748 ; global TFT_user_image | |
| 1749 ;TFT_user_image: | |
| 1750 ; ;---- Display user image ------------------------------------------------- | |
| 1751 ; ; Compute address in external EEPROM | |
| 1752 ; movff opt_skin,WREG | |
| 1753 ; mullw 0x50 | |
| 1754 ; movff PRODL,ext_flash_address+1 | |
| 1755 ; movf PRODH,W | |
| 1756 ; iorlw 0x30 | |
| 1757 ; movwf ext_flash_address+2 | |
| 1758 ; | |
| 1759 ; ; First pixel at @+4: | |
| 1760 ; movlw 4 | |
| 1761 ; movwf ext_flash_address+0 | |
| 1762 ; | |
| 1763 ; ; Read first pixel | |
| 1764 ; call ext_flash_read_block_start | |
| 1765 ;; movff SSP2BUF,skin_color+1 ; TFT format: HIGH is first... | |
| 1766 ; movwf SSP2BUF ; Write to buffer to initiate new read | |
| 1767 ; btfss SSP2STAT, BF ; Next byte ready ? | |
| 1768 ; bra $-2 ; NO: wait... | |
| 1769 ;; movff SSP2BUF,skin_color+0 | |
| 1770 ; call ext_flash_read_block_stop | |
| 1771 ; | |
| 1772 ; ; Make a frame of the retrieved skin color. | |
| 1773 ; setf win_color1 | |
| 1774 ; setf win_color2 | |
| 1775 ; WIN_FRAME_COLOR16 user_image_upper-.1, user_image_upper+.100,user_image_left-.1, user_image_left+.50 | |
| 1776 ; | |
| 1777 ; WIN_LEFT user_image_left+.25 | |
| 1778 ; WIN_TOP user_image_upper+.50 | |
| 1779 ; | |
| 1780 ; ; Display skin icon | |
| 1781 ; clrf ext_flash_address+0 | |
| 1782 ; call TFT_write_flash_image_addr | |
| 1783 ; | |
| 1784 ; ;---- Print custom text string | |
| 1785 ; WIN_LEFT user_image_left+.50+.5 | |
| 1786 ; WIN_TOP user_image_upper+.0 | |
| 1787 ; | |
| 1788 ; ; ---- STRNCPY : String copy from RAM | |
| 1789 ; ; lfsr FSR0, opt_name ; Source | |
| 1790 ; lfsr FSR1, .13 ; Len max | |
| 1791 ; lfsr FSR2, buffer ; destination | |
| 1792 ;TFT_user_image_1: | |
| 1793 ; movf POSTINC0,W ; Get byte | |
| 1794 ; bz TFT_user_image_2 ; End if NULL | |
| 1795 ; movwf POSTINC2 ; NO: copy | |
| 1796 ; decfsz FSR1L ; Max len reached ? | |
| 1797 ; bra TFT_user_image_1 ; NO: loop | |
| 1798 ;TFT_user_image_2: | |
| 1799 ; clrf POSTINC2 ; Mark end of string | |
| 1800 ; | |
| 1801 ; goto aa_wordprocessor ; and print | |
| 1802 | |
| 1803 | |
| 1804 global TFT_custom_text | |
| 1805 TFT_custom_text: ; Show the custom text | |
| 1806 lfsr FSR0, opt_name ; Source | |
| 1807 WIN_SMALL surf_customtext_column,surf_customtext_row1 ; First row | |
| 1808 rcall TFT_custom_text_2 ; Show up to 12 chars and print | |
| 1809 incfsz lo,F ; Was lo=255? | |
| 1810 return ; No, all done. | |
| 1811 lfsr FSR0, opt_name+.12 ; Source | |
| 1812 WIN_SMALL surf_customtext_column,surf_customtext_row2 ; Second row | |
| 1813 rcall TFT_custom_text_2 ; Show up to 12 chars and print | |
| 1814 incfsz lo,F ; Was lo=255? | |
| 1815 return ; No, all done. | |
| 1816 lfsr FSR0, opt_name+.24 ; Source | |
| 1817 WIN_SMALL surf_customtext_column,surf_customtext_row3 ; Third row | |
| 1818 rcall TFT_custom_text_2 ; Show up to 12 chars and print | |
| 1819 incfsz lo,F ; Was lo=255? | |
| 1820 return ; No, all done. | |
| 1821 lfsr FSR0, opt_name+.36 ; Source | |
| 1822 WIN_SMALL surf_customtext_column,surf_customtext_row4 ; Forth row | |
| 1823 rcall TFT_custom_text_2 ; Show up to 12 chars and print | |
| 1824 incfsz lo,F ; Was lo=255? | |
| 1825 return ; No, all done. | |
| 1826 lfsr FSR0, opt_name+.48 ; Source | |
| 1827 WIN_SMALL surf_customtext_column,surf_customtext_row5 ; Fifth row | |
| 1828 rcall TFT_custom_text_2 ; Show up to 12 chars and print | |
| 1829 return ; Done. | |
| 1830 | |
| 1831 TFT_custom_text_2: | |
| 1832 lfsr FSR2, buffer ; destination | |
| 1833 movlw .12 | |
| 1834 movwf lo ; length/line | |
| 1835 TFT_custom_text_3: | |
| 1836 movf POSTINC0,W ; Get byte | |
| 1837 bz TFT_custom_text_4 ; End if NULL | |
| 1838 movwf POSTINC2 ; NO: copy | |
| 1839 decfsz lo,F ; Max len reached ? | |
| 1840 bra TFT_custom_text_3 ; NO: loop | |
| 1841 setf lo ; lo=255 -> more to come | |
| 1842 TFT_custom_text_4: | |
| 1843 clrf POSTINC2 ; Mark end of string | |
| 1844 goto aa_wordprocessor ; print and return | |
| 1845 | |
| 1846 | |
| 1847 ;============================================================================= | |
| 1848 global TFT_update_surf_press | |
| 1849 TFT_update_surf_press: | |
| 1850 WIN_SMALL surf_press_column,surf_press_row | |
| 1851 call TFT_standard_color | |
| 1852 SAFE_2BYTE_COPY amb_pressure, lo | |
| 1853 lfsr FSR2,buffer | |
| 1854 movff lo,sub_a+0 | |
| 1855 movff hi,sub_a+1 | |
| 1856 movff last_surfpressure_30min+0,sub_b+0 | |
| 1857 movff last_surfpressure_30min+1,sub_b+1 | |
| 1858 call subU16 ; sub_c = sub_a - sub_b | |
| 1859 btfsc neg_flag ; Pressure lower? | |
| 1860 rcall update_surf_press2 ; Yes, test threshold | |
| 1861 | |
| 1862 tstfsz sub_c+1 ; >255mbar difference? | |
| 1863 bra update_surf_press_common; Yes, display! | |
| 1864 movlw d'10' ; 10mbar noise suppression | |
| 1865 subwf sub_c+0,W | |
| 1866 btfsc STATUS,C | |
| 1867 bra update_surf_press_common; Yes, display! | |
| 1868 SAFE_2BYTE_COPY last_surfpressure_30min, lo ; Overwrite with stable value... | |
| 1869 | |
| 1870 update_surf_press_common: | |
| 1871 output_16 | |
| 1872 ; Show only 4 figures | |
| 1873 movff buffer+1,buffer+0 | |
| 1874 movff buffer+2,buffer+1 | |
| 1875 movff buffer+3,buffer+2 | |
| 1876 movff buffer+4,buffer+3 | |
| 1877 movlw 0x00 | |
| 1878 movff WREG,buffer+4 | |
| 1879 STRCAT_PRINT "" | |
| 1880 call TFT_divemask_color | |
| 1881 WIN_SMALL surf_press_column+4*8,surf_press_row | |
| 1882 STRCPY_PRINT "mbar" | |
| 1883 return | |
| 1884 | |
| 1885 update_surf_press2: | |
| 1886 movff lo,sub_b+0 | |
| 1887 movff hi,sub_b+1 | |
| 1888 movff last_surfpressure_30min+0,sub_a+0 | |
| 1889 movff last_surfpressure_30min+1,sub_a+1 | |
| 1890 call subU16 ; sub_c = sub_a - sub_b | |
| 1891 return | |
| 1892 | |
| 1893 ;============================================================================= | |
| 1894 | |
| 1895 global TFT_update_batt_voltage | |
| 1896 TFT_update_batt_voltage: | |
| 1897 movff batt_percent,lo ; Get battery percent | |
| 1898 TFT_color_code warn_battery; Color-code battery percent | |
| 1899 WIN_TINY batt_percent_column,batt_percent_row | |
| 1900 lfsr FSR2,buffer | |
| 1901 bsf leftbind | |
| 1902 output_8 | |
| 1903 bcf leftbind | |
| 1904 STRCAT_PRINT "%" | |
| 1905 call TFT_standard_color | |
| 1906 WIN_TINY batt_voltage_column,batt_voltage_row | |
| 1907 lfsr FSR2,buffer | |
| 1908 movff batt_voltage+0,lo | |
| 1909 movff batt_voltage+1,hi | |
| 1910 bsf leftbind | |
| 1911 output_16dp .2 | |
| 1912 bcf leftbind | |
| 1913 PUTC 'V' | |
| 1914 movff buffer+5,buffer+3 | |
| 1915 movlw 0x00 | |
| 1916 movff WREG,buffer+4 ; Only "x.yV" | |
| 1917 STRCAT_PRINT "" | |
| 1918 return | |
| 1919 | |
| 1920 ;update_battery_debug: | |
| 1921 ; call TFT_standard_color | |
| 1922 ; WIN_TINY .70,.0 | |
| 1923 ; lfsr FSR2,buffer | |
| 1924 ; movff battery_gauge+5,xC+3 | |
| 1925 ; movff battery_gauge+4,xC+2 | |
| 1926 ; movff battery_gauge+3,xC+1 | |
| 1927 ; movff battery_gauge+2,xC+0 | |
| 1928 ; ; battery_gauge:6 is nAs | |
| 1929 ; ; devide through 65536 | |
| 1930 ; ; devide through 152 | |
| 1931 ; ; Result is 0.01Ah in xC+1:xC+0 | |
| 1932 ; movlw LOW .152 | |
| 1933 ; movwf xB+0 | |
| 1934 ; movlw HIGH .152 | |
| 1935 ; movwf xB+1 | |
| 1936 ; call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 1937 ; bsf leftbind | |
| 1938 ; movff xC+0,lo | |
| 1939 ; movff xC+1,hi | |
| 1940 ; output_16 | |
| 1941 ; STRCAT_PRINT "x.01Ah" | |
| 1942 ; WIN_FONT FT_SMALL | |
| 1943 ; bcf leftbind | |
| 1944 ; return | |
| 1945 | |
| 1946 ;============================================================================= | |
| 1947 | |
| 1948 global TFT_convert_signed_16bit | |
| 1949 TFT_convert_signed_16bit: | |
| 1950 bcf neg_flag ; Positive temperature | |
| 1951 btfss hi,7 ; Negative temperature ? | |
| 1952 return ; No, return | |
| 1953 ; Yes, negative temperature! | |
| 1954 bsf neg_flag ; Negative temperature | |
| 1955 PUTC '-' ; Display "-" | |
| 1956 comf hi ; Then, 16bit sign changes. | |
| 1957 negf lo | |
| 1958 btfsc STATUS,C | |
| 1959 incf hi | |
| 1960 return ; and return | |
| 1961 | |
| 1962 ;============================================================================= | |
| 1963 | |
| 1964 global TFT_convert_date | |
| 1965 TFT_convert_date: ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 | |
| 1966 movff opt_dateformat,WREG ; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD | |
| 1967 movwf EEDATA ; used as temp here | |
| 1968 tstfsz EEDATA | |
| 1969 bra TFT_convert_date1 | |
| 1970 ; EEDATA was 0 | |
| 1971 ; Use MMDDYY | |
| 1972 movff convert_value_temp+0,lo ;month | |
| 1973 bsf leftbind | |
| 1974 output_99x | |
| 1975 PUTC '.' | |
| 1976 movff convert_value_temp+1,lo ;day | |
| 1977 bra TFT_convert_date1_common ;year | |
| 1978 | |
| 1979 TFT_convert_date1: ; Read date format (0=MMDDYY, 1=DDMMYY, 2=YYMMDD) | |
| 1980 decfsz EEDATA,F | |
| 1981 bra TFT_convert_date2 ; EEDATA was 2 | |
| 1982 ; EEDATA was 1 | |
| 1983 ; Use DDMMYY | |
| 1984 movff convert_value_temp+1,lo ;day | |
| 1985 bsf leftbind | |
| 1986 output_99x | |
| 1987 PUTC '.' | |
| 1988 movff convert_value_temp+0,lo ;month | |
| 1989 | |
| 1990 TFT_convert_date1_common: | |
| 1991 bsf leftbind | |
| 1992 output_99x | |
| 1993 PUTC '.' | |
| 1994 movff convert_value_temp+2,lo ;year | |
| 1995 output_99x | |
| 1996 bcf leftbind | |
| 1997 return | |
| 1998 | |
| 1999 TFT_convert_date2: | |
| 2000 ; Use YYMMDD | |
| 2001 movff convert_value_temp+2,lo ;year | |
| 2002 bsf leftbind | |
| 2003 output_99x | |
| 2004 PUTC '.' | |
| 2005 movff convert_value_temp+0,lo ;month | |
| 2006 output_99x | |
| 2007 PUTC '.' | |
| 2008 movff convert_value_temp+1,lo ;day | |
| 2009 output_99x | |
| 2010 bcf leftbind | |
| 2011 return | |
| 2012 | |
| 2013 ;============================================================================= | |
| 2014 | |
| 2015 global TFT_convert_date_short | |
| 2016 TFT_convert_date_short: ; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2 | |
| 2017 movff opt_dateformat,WREG ; =0:MMDDYY, =1:DDMMYY, =2:YYMMDD | |
| 2018 movwf EEDATA ; used as temp here | |
| 2019 tstfsz EEDATA | |
| 2020 bra TFT_convert_date_short1 | |
| 2021 ; EEDATA was 0 | |
| 2022 ; Use MMDDYY | |
| 2023 TFT_convert_date_short_common: | |
| 2024 movff convert_value_temp+0,lo ;month | |
| 2025 bsf leftbind | |
| 2026 output_99x | |
| 2027 PUTC '.' | |
| 2028 movff convert_value_temp+1,lo ;day | |
| 2029 output_99x | |
| 2030 bcf leftbind | |
| 2031 return | |
| 2032 | |
| 2033 TFT_convert_date_short1: | |
| 2034 decfsz EEDATA,F | |
| 2035 bra TFT_convert_date_short_common ; EEDATA was 2 -> Use YYMMDD | |
| 2036 ; EEDATA was 1 | |
| 2037 ; Use DDMMYY | |
| 2038 movff convert_value_temp+1,lo ;day | |
| 2039 bsf leftbind | |
| 2040 output_99x | |
| 2041 PUTC '.' | |
| 2042 movff convert_value_temp+0,lo ;month | |
| 2043 output_99x | |
| 2044 bcf leftbind | |
| 2045 return | |
| 2046 | |
| 2047 ;============================================================================= | |
| 2048 | |
| 2049 global TFT_date | |
| 2050 TFT_date: | |
| 2051 WIN_TINY surf_date_column,surf_date_row ; Init new Wordprocessor | |
| 2052 call TFT_standard_color | |
| 2053 lfsr FSR2,buffer | |
| 2054 movff month,convert_value_temp+0 | |
| 2055 movff day,convert_value_temp+1 | |
| 2056 movff year,convert_value_temp+2 | |
| 2057 call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 | |
| 2058 STRCAT_PRINT "" | |
| 2059 return | |
| 2060 | |
| 2061 ;============================================================================= | |
| 2062 | |
| 2063 global TFT_max_pressure | |
| 2064 TFT_max_pressure: | |
| 2065 btfsc FLAG_apnoe_mode ; different display in apnoe mode | |
| 2066 bra TFT_max_pressure_apnoe | |
| 2067 TFT_max_pressure2: | |
| 2068 SAFE_2BYTE_COPY max_pressure, lo | |
| 2069 TFT_max_pressure3: | |
| 2070 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 2071 TSTOSS opt_units ; 0=m, 1=ft | |
| 2072 bra TFT_max_pressure2_metric | |
| 2073 ;TFT_max_pressure2_imperial | |
| 2074 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 2075 WIN_MEDIUM max_depth_feet_column,max_depth_feet_row | |
| 2076 lfsr FSR2,buffer | |
| 2077 call TFT_standard_color | |
| 2078 output_16_3 | |
| 2079 STRCAT_PRINT "" | |
| 2080 return | |
| 2081 | |
| 2082 TFT_max_pressure2_metric: | |
| 2083 WIN_MEDIUM max_depth_column,max_depth_row | |
| 2084 lfsr FSR2,buffer | |
| 2085 call TFT_standard_color | |
| 2086 bsf ignore_digit4 ; no 0.1m | |
| 2087 output_16 | |
| 2088 STRCAT_PRINT "" | |
| 2089 return | |
| 2090 | |
| 2091 TFT_max_pressure_apnoe: | |
| 2092 btfss FLAG_active_descent ; Are we descending? | |
| 2093 bra TFT_max_pressure2 ; Yes, show normal max. | |
| 2094 SAFE_2BYTE_COPY apnoe_max_pressure, lo | |
| 2095 bra TFT_max_pressure3 ; Show apnoe_max_pressure as max. depth | |
| 2096 | |
| 2097 global TFT_display_apnoe_last_max | |
| 2098 TFT_display_apnoe_last_max: | |
| 2099 call TFT_divemask_color | |
| 2100 WIN_TINY last_max_apnoe_text_column,last_max_apnoe_text_row | |
| 2101 STRCPY_TEXT_PRINT tApnoeMax | |
| 2102 | |
| 2103 call TFT_standard_color | |
| 2104 SAFE_2BYTE_COPY max_pressure, lo | |
| 2105 call adjust_depth_with_salinity ; computes salinity setting into lo:hi [mbar] | |
| 2106 TSTOSS opt_units ; 0=m, 1=ft | |
| 2107 bra TFT_display_apnoe_last_m_metric | |
| 2108 ;TFT_display_apnoe_last_max_imperial | |
| 2109 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 2110 WIN_MEDIUM apnoe_last_max_depth_column,apnoe_last_max_depth_row | |
| 2111 lfsr FSR2,buffer | |
| 2112 output_16 | |
| 2113 STRCAT_PRINT "" | |
| 2114 return | |
| 2115 | |
| 2116 TFT_display_apnoe_last_m_metric: | |
| 2117 WIN_MEDIUM apnoe_last_max_depth_column,apnoe_last_max_depth_row | |
| 2118 lfsr FSR2,buffer | |
| 2119 bsf ignore_digit5 ; do not display 1cm depth | |
| 2120 output_16dp d'3' | |
| 2121 STRCAT_PRINT "" | |
| 2122 return | |
| 2123 | |
| 2124 ;============================================================================= | |
| 2125 global TFT_divemins | |
| 2126 TFT_divemins: | |
| 2127 movff divemins+0,lo | |
| 2128 movff divemins+1,hi | |
| 2129 | |
| 2130 btfsc no_more_divesecs ; Ignore seconds? | |
| 2131 bra TFT_divemins2 ; Show minutes only | |
| 2132 | |
| 2133 movlw .99 | |
| 2134 cpfsgt lo ; bigger then 99? | |
| 2135 bra TFT_divemins1 ; No show mins:secs | |
| 2136 ; Yes, remove second display for the rest of the dive and clear seconds | |
| 2137 bsf no_more_divesecs ; Set flag | |
| 2138 ; Clear rest of seconds | |
| 2139 WIN_BOX_BLACK divetime_row, warning1_row,divetime_column,.159 ;top, bottom, left, right | |
| 2140 bra TFT_divemins2 ; Show minutes only | |
| 2141 | |
| 2142 TFT_divemins1: | |
| 2143 WIN_MEDIUM divetime_column, divetime_row | |
| 2144 lfsr FSR2,buffer | |
| 2145 output_16_3 ; displays only last three figures from a 16Bit value (0-999) | |
| 2146 call TFT_standard_color | |
| 2147 STRCAT_PRINT "" ; Show minutes in large font | |
| 2148 | |
| 2149 WIN_SMALL divetime_secs_column, divetime_secs_row ; left position for two sec figures | |
| 2150 lfsr FSR2,buffer | |
| 2151 PUTC ':' | |
| 2152 bsf leftbind | |
| 2153 movff divesecs,lo | |
| 2154 output_99x | |
| 2155 bcf leftbind | |
| 2156 STRCAT_PRINT "" ; Show seconds in small font | |
| 2157 return | |
| 2158 | |
| 2159 TFT_divemins2: | |
| 2160 WIN_MEDIUM divetime_minsonly_column, divetime_row | |
| 2161 lfsr FSR2,buffer | |
| 2162 output_16 | |
| 2163 call TFT_standard_color | |
| 2164 STRCAT_PRINT "" ; Show minutes in large font | |
| 2165 return | |
| 2166 | |
| 2167 ;============================================================================= | |
| 2168 global TFT_display_apnoe_surface | |
| 2169 TFT_display_apnoe_surface: | |
| 2170 call TFT_divemask_color | |
| 2171 WIN_TINY surface_apnoe_text_column,surface_apnoe_text_row | |
| 2172 STRCPY_TEXT_PRINT tApnoeSurface | |
| 2173 | |
| 2174 call TFT_standard_color | |
| 2175 WIN_MEDIUM surface_time_apnoe_column, surface_time_apnoe_row | |
| 2176 movff apnoe_surface_mins,lo | |
| 2177 lfsr FSR2,buffer | |
| 2178 output_8 | |
| 2179 PUTC ':' | |
| 2180 movff apnoe_surface_secs,lo | |
| 2181 output_99x | |
| 2182 STRCAT_PRINT "" | |
| 2183 return | |
| 2184 | |
| 2185 global TFT_apnoe_clear_surface | |
| 2186 TFT_apnoe_clear_surface: | |
| 2187 ; Clear Surface timer.... | |
| 2188 WIN_BOX_BLACK surface_apnoe_text_row, .239, surface_apnoe_text_column, .159 ;top, bottom, left, right | |
| 2189 return | |
| 2190 | |
| 2191 global TFT_display_apnoe_descent | |
| 2192 TFT_display_apnoe_descent: ; Descent divetime | |
| 2193 movff apnoe_mins,lo | |
| 2194 clrf hi | |
| 2195 WIN_MEDIUM divetime_column, divetime_row | |
| 2196 lfsr FSR2,buffer | |
| 2197 output_16_3 ; displays only last three figures from a 16Bit value (0-999) | |
| 2198 call TFT_standard_color | |
| 2199 STRCAT_PRINT "" ; Show minutes in large font | |
| 2200 | |
| 2201 WIN_SMALL divetime_secs_column, divetime_secs_row ; left position for two sec figures | |
| 2202 lfsr FSR2,buffer | |
| 2203 PUTC ':' | |
| 2204 bsf leftbind | |
| 2205 movff apnoe_secs,lo | |
| 2206 output_99x | |
| 2207 bcf leftbind | |
| 2208 STRCAT_PRINT "" ; Show seconds in small font | |
| 2209 return | |
| 2210 | |
| 2211 ;============================================================================= | |
| 2212 ; Writes ostc3 #Serial and Firmware version in splash screen | |
| 2213 ; | |
| 2214 global TFT_serial | |
| 2215 TFT_serial: | |
| 2216 WIN_TINY .0,.239-.14 | |
| 2217 | |
| 2218 STRCPY "OSTC3 #" ; Won't translate that... | |
| 2219 rcall TFT_cat_serial | |
| 2220 | |
| 2221 STRCAT " v" | |
| 2222 rcall TFT_cat_firmware | |
| 2223 | |
| 2224 ifdef __DEBUG | |
| 2225 movlw color_grey ; Write header in blue when | |
| 2226 call TFT_set_color ; compiled in DEBUG mode... | |
| 2227 STRCAT_PRINT "DEBUG" | |
| 2228 call TFT_standard_color | |
| 2229 else | |
| 2230 call TFT_standard_color | |
| 2231 STRCAT_PRINT "" | |
| 2232 | |
| 2233 movlw softwareversion_beta ; =1: Beta, =0: Release | |
| 2234 decfsz WREG,F | |
| 2235 return ; Release version -> Return | |
| 2236 | |
| 2237 call TFT_warnings_color | |
| 2238 WIN_LEFT .160-4*9/2 ; Right pad. | |
| 2239 STRCPY_TEXT_PRINT tBeta | |
| 2240 call TFT_standard_color | |
| 2241 endif | |
| 2242 | |
| 2243 return | |
| 2244 | |
| 2245 | |
| 2246 | |
| 2247 ;============================================================================= | |
| 2248 ; For the Information menu: append firmware x.yy version. | |
| 2249 global info_menu_firmware | |
| 2250 extern tFirmware | |
| 2251 info_menu_firmware: | |
| 2252 lfsr FSR1,tFirmware | |
| 2253 call strcat_text | |
| 2254 TFT_cat_firmware: | |
| 2255 movlw softwareversion_x | |
| 2256 movwf lo | |
| 2257 bsf leftbind | |
| 2258 output_8 | |
| 2259 PUTC '.' | |
| 2260 movlw softwareversion_y | |
| 2261 movwf lo | |
| 2262 output_99x | |
| 2263 bcf leftbind | |
| 2264 return | |
| 2265 | |
| 2266 ;----------------------------------------------------------------------------- | |
| 2267 ; For the Information menu: append serial number ostc3#42. | |
| 2268 global info_menu_serial | |
| 2269 extern tSerial | |
| 2270 info_menu_serial: | |
| 2271 lfsr FSR1,tSerial | |
| 2272 call strcat_text | |
| 2273 TFT_cat_serial: | |
| 2274 clrf EEADRH | |
| 2275 clrf EEADR ; Get Serial number LOW | |
| 2276 call read_eeprom ; read byte | |
| 2277 movff EEDATA,lo | |
| 2278 incf EEADR,F ; Get Serial number HIGH | |
| 2279 call read_eeprom ; read byte | |
| 2280 movff EEDATA,hi | |
| 2281 | |
| 2282 bsf leftbind | |
| 2283 output_16 | |
| 2284 bcf leftbind | |
| 2285 return | |
| 2286 | |
| 2287 ;----------------------------------------------------------------------------- | |
| 2288 ; For the Information menu: Append total dives | |
| 2289 global info_menu_total_dives | |
| 2290 extern tTotalDives | |
| 2291 info_menu_total_dives: | |
| 2292 lfsr FSR1,tTotalDives | |
| 2293 call strcat_text | |
| 2294 TFT_cat_total_dives: | |
| 2295 read_int_eeprom .2 | |
| 2296 movff EEDATA,lo | |
| 2297 read_int_eeprom .3 | |
| 2298 movff EEDATA,hi | |
| 2299 bsf leftbind | |
| 2300 output_16 | |
| 2301 bcf leftbind | |
| 2302 return | |
| 2303 | |
| 2304 ;----------------------------------------------------------------------------- | |
| 2305 ; ppO2 menu | |
| 2306 global divesets_ppo2_max | |
| 2307 extern tPPO2Max | |
| 2308 extern tbar | |
| 2309 divesets_ppo2_max: | |
| 2310 lfsr FSR1,tPPO2Max | |
| 2311 call strcat_text | |
| 2312 movff opt_ppO2_max,lo | |
| 2313 movlw ppo2_warning_high | |
| 2314 divesets_ppo2_common: | |
| 2315 movwf up ; Save default value | |
| 2316 clrf hi | |
| 2317 bsf leftbind | |
| 2318 output_16dp d'3' | |
| 2319 bcf leftbind | |
| 2320 lfsr FSR1,tbar | |
| 2321 call strcat_text | |
| 2322 | |
| 2323 movf up,W ; Default value | |
| 2324 cpfseq lo ; Current value | |
| 2325 bra divesets_ppo2_common2 ; Not default, add * | |
| 2326 return ; Default, Done. | |
| 2327 divesets_ppo2_common2: | |
| 2328 PUTC "*" | |
| 2329 return ; Done. | |
| 2330 | |
| 2331 global divesets_ppo2_min | |
| 2332 extern tPPO2Min | |
| 2333 divesets_ppo2_min: | |
| 2334 lfsr FSR1,tPPO2Min | |
| 2335 call strcat_text | |
| 2336 movff opt_ppO2_min,lo | |
| 2337 movlw ppo2_warning_low | |
| 2338 bra divesets_ppo2_common | |
| 2339 | |
| 2340 ;============================================================================= | |
| 2341 | |
| 2342 global TFT_clear_warning_text | |
| 2343 TFT_clear_warning_text: | |
| 2344 btfss divemode ; in divemode? | |
| 2345 bra TFT_clear_warning_text2 ; No, setup for surface mode | |
| 2346 WIN_BOX_BLACK warning1_row, divemode_customview_row-3, warning1_column, warning_icon_column-3 ;top, bottom, left, right | |
| 2347 return | |
| 2348 TFT_clear_warning_text2: | |
| 2349 WIN_BOX_BLACK surf_warning1_row, surf_warning2_row+.24, surf_warning1_column, surf_warning1_column+.76 ;top, bottom, left, right | |
| 2350 return | |
| 2351 | |
| 2352 global TFT_clear_warning_text_2nd_row | |
| 2353 TFT_clear_warning_text_2nd_row: | |
| 2354 btfss divemode ; in divemode? | |
| 2355 bra TFT_clear_warning_text_2nd_2 ; No, setup for surface mode | |
| 2356 WIN_BOX_BLACK warning2_row, divemode_customview_row-3, warning2_column, warning_icon_column-3 ;top, bottom, left, right | |
| 2357 return | |
| 2358 TFT_clear_warning_text_2nd_2: | |
| 2359 WIN_BOX_BLACK surf_warning2_row, surf_warning2_row+.24, surf_warning2_column, surf_warning2_column+.76 ;top, bottom, left, right | |
| 2360 return | |
| 2361 | |
| 2362 global TFT_fillup_with_spaces | |
| 2363 TFT_fillup_with_spaces: ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2364 movwf lo ; save max. string length into lo | |
| 2365 movf FSR2L,W ; Get current string length | |
| 2366 subwf lo,F ; lo-WREG | |
| 2367 btfsc STATUS,N ; longer then #lo already? | |
| 2368 return ; Yes, done. | |
| 2369 tstfsz lo ; Zero? | |
| 2370 bra TFT_fillup_with_spaces2 ; No. | |
| 2371 return ; Yes, done. | |
| 2372 TFT_fillup_with_spaces2: | |
| 2373 PUTC " " ; Add one space | |
| 2374 decfsz lo,F ; All done? | |
| 2375 bra TFT_fillup_with_spaces2 ; No, loop | |
| 2376 return ; Done. | |
| 2377 | |
| 2378 global TFT_desaturation_time | |
| 2379 TFT_desaturation_time: | |
| 2380 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2381 tstfsz WREG ; Is there room for the warning? | |
| 2382 return ; No | |
| 2383 STRCPY "Desat:" | |
| 2384 movff desaturation_time+0,lo ; divide by 60... | |
| 2385 movff desaturation_time+1,hi | |
| 2386 call convert_time ; converts hi:lo in minutes to hours (hi) and minutes (lo) | |
| 2387 bsf leftbind | |
| 2388 movf lo,W | |
| 2389 movff hi,lo | |
| 2390 movwf hi ; exchange lo and hi... | |
| 2391 output_8 ; Hours | |
| 2392 PUTC ':' | |
| 2393 movff hi,lo ; Minutes | |
| 2394 output_99x | |
| 2395 bcf leftbind | |
| 2396 movlw surf_warning_length ; Only use surface string length | |
| 2397 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2398 STRCAT_PRINT "" | |
| 2399 return | |
| 2400 | |
| 2401 global TFT_nofly_time | |
| 2402 TFT_nofly_time: | |
| 2403 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2404 tstfsz WREG ; Is there room for the warning? | |
| 2405 return ; No | |
| 2406 STRCPY "NoFly:" | |
| 2407 movff nofly_time+0,lo ; divide by 60... | |
| 2408 movff nofly_time+1,hi | |
| 2409 call convert_time ; converts hi:lo in minutes to hours (hi) and minutes (lo) | |
| 2410 bsf leftbind | |
| 2411 movf lo,W | |
| 2412 movff hi,lo | |
| 2413 movwf hi ; exchange lo and hi... | |
| 2414 output_8 ; Hours | |
| 2415 PUTC ':' | |
| 2416 movff hi,lo ; Minutes | |
| 2417 output_99x | |
| 2418 bcf leftbind | |
| 2419 movlw surf_warning_length ; Only use surface string length | |
| 2420 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2421 STRCAT_PRINT "" | |
| 2422 return | |
| 2423 | |
| 2424 global TFT_warning_agf | |
| 2425 TFT_warning_agf: | |
| 2426 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2427 tstfsz WREG ; Is there room for the warning? | |
| 2428 return ; No | |
| 2429 call TFT_warnings_color | |
| 2430 STRCPY_TEXT tDiveaGF_active ; "aGF!" | |
| 2431 movlw warning_length ; Divemode string length | |
| 2432 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2433 STRCAT_PRINT "" | |
| 2434 call TFT_standard_color | |
| 2435 return | |
| 2436 | |
| 2437 global TFT_warning_gf | |
| 2438 TFT_warning_gf: ;GF | |
| 2439 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2440 tstfsz WREG ; Is there room for the warning? | |
| 2441 return ; No | |
| 2442 TFT_color_code warn_gf ; Color-code Output | |
| 2443 STRCPY "GF:" | |
| 2444 movff char_O_gradient_factor,lo ; gradient factor | |
| 2445 bsf leftbind | |
| 2446 output_8 | |
| 2447 PUTC "%" | |
| 2448 movlw warning_length ; Divemode string length | |
| 2449 btfss divemode ; In Divemode? | |
| 2450 movlw surf_warning_length ; No, use surface string length | |
| 2451 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2452 STRCAT_PRINT "" | |
| 2453 bcf leftbind | |
| 2454 call TFT_standard_color | |
| 2455 return | |
| 2456 | |
| 2457 TFT_warning_set_window: ; Sets the row and column for the current warning | |
| 2458 ; ignore warning (now)? | |
| 2459 decf warning_counter,W ; -1 | |
| 2460 bcf STATUS,C | |
| 2461 rrcf WREG,W ; (warning_counter-1)/2 | |
| 2462 cpfseq warning_page | |
| 2463 retlw .255 ; WREG <> 0 -> Warning window not defined | |
| 2464 | |
| 2465 call TFT_standard_color | |
| 2466 | |
| 2467 btfss divemode ; in divemode? | |
| 2468 bra TFT_warning_set_window3 ; No, setup for surface mode | |
| 2469 | |
| 2470 btfss warning_counter,0 ; Toggle with each warning | |
| 2471 bra TFT_warning_set_window2 | |
| 2472 WIN_SMALL warning1_column,warning1_row | |
| 2473 bcf second_row_warning ; =1: The second row contains a warning | |
| 2474 retlw .0 ; WREG=0 -> Warning window defined | |
| 2475 TFT_warning_set_window2: | |
| 2476 WIN_SMALL warning2_column,warning2_row | |
| 2477 bsf second_row_warning ; =1: The second row contains a warning | |
| 2478 retlw .0 ; WREG=0 -> Warning window defined | |
| 2479 | |
| 2480 TFT_warning_set_window3: | |
| 2481 btfss warning_counter,0 ; Toggle with each warning | |
| 2482 bra TFT_warning_set_window4 | |
| 2483 WIN_SMALL surf_warning1_column,surf_warning1_row | |
| 2484 bcf second_row_warning ; =1: The second row contains a warning | |
| 2485 retlw .0 ; WREG=0 -> Warning window defined | |
| 2486 TFT_warning_set_window4: | |
| 2487 WIN_SMALL surf_warning2_column,surf_warning2_row | |
| 2488 bsf second_row_warning ; =1: The second row contains a warning | |
| 2489 retlw .0 ; WREG=0 -> Warning window defined | |
| 2490 | |
| 2491 | |
| 2492 global TFT_update_batt_percent_divemode | |
| 2493 TFT_update_batt_percent_divemode: | |
| 2494 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2495 tstfsz WREG ; Is there room for the warning? | |
| 2496 return ; No | |
| 2497 movff batt_percent,lo ; Get battery percent | |
| 2498 TFT_color_code warn_battery; Color-code battery percent | |
| 2499 STRCPY "Batt:" | |
| 2500 bsf leftbind | |
| 2501 output_8 | |
| 2502 bcf leftbind | |
| 2503 PUTC "%" | |
| 2504 movlw warning_length ; Divemode string length | |
| 2505 btfss divemode ; In Divemode? | |
| 2506 movlw surf_warning_length ; No, use surface string length | |
| 2507 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2508 STRCAT_PRINT "" | |
| 2509 call TFT_standard_color | |
| 2510 return | |
| 2511 | |
| 2512 | |
| 2513 global TFT_gf_mask ; Setup Mask | |
| 2514 TFT_gf_mask: | |
| 2515 ; The mask | |
| 2516 call TFT_divemask_color | |
| 2517 WIN_TINY dive_gf_column1,dive_gf_text_row | |
| 2518 STRCPY_TEXT_PRINT tGFactors | |
| 2519 WIN_TINY dive_gf_column2,dive_gf_text_row | |
| 2520 STRCPY_TEXT_PRINT taGFactors | |
| 2521 WIN_TINY dive_gf_column3,dive_gf_text_row | |
| 2522 STRCPY_TEXT_PRINT tGFInfo | |
| 2523 | |
| 2524 ; Show GF (Static) | |
| 2525 call TFT_disabled_color | |
| 2526 btfss use_agf | |
| 2527 call TFT_standard_color | |
| 2528 | |
| 2529 WIN_STD dive_gf_column,dive_gf_row | |
| 2530 lfsr FSR2,buffer | |
| 2531 bsf leftbind | |
| 2532 movff opt_GF_low,lo | |
| 2533 output_8 | |
| 2534 PUTC "/" | |
| 2535 movff opt_GF_high,lo | |
| 2536 output_8 | |
| 2537 STRCAT_PRINT "" | |
| 2538 ; Show aGF (Static) | |
| 2539 call TFT_standard_color | |
| 2540 TSTOSS opt_enable_aGF ; =1: aGF can be selected underwater | |
| 2541 bra TFT_gf_mask2 ; Show "---" instead | |
| 2542 | |
| 2543 btfss use_agf | |
| 2544 call TFT_disabled_color | |
| 2545 | |
| 2546 WIN_STD dive_agf_column,dive_agf_row | |
| 2547 lfsr FSR2,buffer | |
| 2548 movff opt_aGF_low,lo | |
| 2549 output_8 | |
| 2550 PUTC "/" | |
| 2551 movff opt_aGF_high,lo | |
| 2552 output_8 | |
| 2553 STRCAT_PRINT "" | |
| 2554 bcf leftbind | |
| 2555 call TFT_standard_color | |
| 2556 return | |
| 2557 | |
| 2558 TFT_gf_mask2: | |
| 2559 WIN_STD dive_agf_column+.10,dive_agf_row | |
| 2560 STRCPY_PRINT "---" | |
| 2561 bcf leftbind | |
| 2562 return | |
| 2563 | |
| 2564 global TFT_gf_info ; Show GF informations | |
| 2565 TFT_gf_info: | |
| 2566 ; Show current GF | |
| 2567 movff char_O_gradient_factor,lo ; gradient factor absolute (Non-GF model) | |
| 2568 movff char_I_deco_model,hi | |
| 2569 decfsz hi,F ; jump over next line if char_I_deco_model == 1 | |
| 2570 movff char_O_relative_gradient_GF,lo ; gradient factor relative (GF model) | |
| 2571 WIN_STD dive_currentgf_column,dive_currentgf_row | |
| 2572 lfsr FSR2,buffer | |
| 2573 output_8 | |
| 2574 STRCAT_PRINT "%" | |
| 2575 return | |
| 2576 | |
| 2577 global TFT_ead_end_tissues_clock_mask ; Setup Mask | |
| 2578 TFT_ead_end_tissues_clock_mask: | |
| 2579 ; The mask | |
| 2580 call TFT_divemask_color | |
| 2581 ; Put three columns at HUD positions | |
| 2582 WIN_TINY dive_custom_hud_column1,dive_custom_hud_row | |
| 2583 STRCPY_TEXT_PRINT tDiveClock | |
| 2584 WIN_TINY dive_custom_hud_column2,dive_custom_hud_row | |
| 2585 STRCPY_TEXT_PRINT tDiveEAD_END | |
| 2586 WIN_TINY dive_custom_hud_column3,dive_custom_hud_row | |
| 2587 STRCPY_TEXT_PRINT tDiveTissues | |
| 2588 call TFT_standard_color | |
| 2589 return | |
| 2590 | |
| 2591 global TFT_ead_end_tissues_clock ; Show EAD/END, Tissues and clock | |
| 2592 TFT_ead_end_tissues_clock: | |
| 2593 ; Update clock and date | |
| 2594 WIN_SMALL dive_clock_column,dive_clock_row | |
| 2595 call TFT_clock2 ; print clock | |
| 2596 ; WIN_SMALL dive_date_column,dive_date_row | |
| 2597 ; lfsr FSR2,buffer | |
| 2598 ; movff month,convert_value_temp+0 | |
| 2599 ; movff day,convert_value_temp+1 | |
| 2600 ; movff year,convert_value_temp+2 | |
| 2601 ; rcall TFT_convert_date_short ; converts into "DD/MM" or "MM/DD" or "MM/DD" in postinc2 | |
| 2602 ; STRCAT_PRINT "." | |
| 2603 | |
| 2604 ; Show END/EAD | |
| 2605 WIN_SMALL dive_ead_column,dive_ead_row | |
| 2606 STRCPY_TEXT tEAD ; EAD: | |
| 2607 movff char_O_EAD,lo | |
| 2608 rcall TFT_end_ead_common ; print "lo m" (or ft) and limit to 8 chars | |
| 2609 WIN_SMALL dive_end_column,dive_end_row | |
| 2610 STRCPY_TEXT tEND ; END: | |
| 2611 movff char_O_END,lo | |
| 2612 rcall TFT_end_ead_common ; print "lo m" (or ft) and limit to 8 chars | |
| 2613 | |
| 2614 ; Show tissue diagram | |
| 2615 call TFT_divemask_color | |
| 2616 WIN_TINY dive_tissue_N2_column,dive_tissue_N2_row | |
| 2617 STRCPY_TEXT_PRINT tN2 | |
| 2618 WIN_TINY dive_tissue_He_column,dive_tissue_He_row | |
| 2619 STRCPY_TEXT_PRINT tHe | |
| 2620 call deco_calc_desaturation_time ; calculate desaturation time (and char_O_tissue_N2_saturation and char_O_tissue_He_saturation) | |
| 2621 movlb b'00000001' ; select ram bank 1 | |
| 2622 rcall DISP_tissue_saturation_graph ; Show char_O_tissue_N2_saturation and char_O_tissue_He_saturation | |
| 2623 return | |
| 2624 | |
| 2625 TFT_end_ead_common: ; print "lo m" (or ft) and limit to 8 chars | |
| 2626 bsf leftbind | |
| 2627 TSTOSS opt_units ; 0=Meters, 1=Feets | |
| 2628 bra TFT_end_ead_common_metric | |
| 2629 ;TFT_end_ead_common_imperial: | |
| 2630 ; With lo in m | |
| 2631 movf lo,W | |
| 2632 mullw .100 ; PRODL:PRODH = mbar/min | |
| 2633 movff PRODL,lo | |
| 2634 movff PRODH,hi | |
| 2635 call convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 2636 output_16_3 | |
| 2637 STRCAT_TEXT tFeets | |
| 2638 clrf WREG | |
| 2639 movff WREG,buffer+.8 ; limit string length to 8 | |
| 2640 bra TFT_end_ead_common_exit | |
| 2641 TFT_end_ead_common_metric: | |
| 2642 output_8 | |
| 2643 STRCAT_TEXT tMeters | |
| 2644 TFT_end_ead_common_exit: | |
| 2645 bcf leftbind | |
| 2646 movlw .8 | |
| 2647 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2648 STRCAT_PRINT "" | |
| 2649 return | |
| 2650 | |
| 2651 global TFT_surface_tissues | |
| 2652 TFT_surface_tissues: ; Show Tissue diagram in surface mode | |
| 2653 WIN_SMALL surf_tissue_N2_column,surf_tissue_N2_row | |
| 2654 STRCPY_TEXT_PRINT tN2 | |
| 2655 WIN_SMALL surf_tissue_He_column,surf_tissue_He_row | |
| 2656 STRCPY_TEXT_PRINT tHe | |
| 2657 | |
| 2658 call deco_calc_desaturation_time ; calculate desaturation time (and char_O_tissue_N2_saturation and char_O_tissue_He_saturation) | |
| 2659 movlb b'00000001' ; select ram bank 1 | |
| 2660 | |
| 2661 movlw color_deepblue | |
| 2662 call TFT_set_color ; Make this configurable? | |
| 2663 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.29,.29 | |
| 2664 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.37,.37 | |
| 2665 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.45,.45 | |
| 2666 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.53,.53 | |
| 2667 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.61,.61 | |
| 2668 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.69,.69 | |
| 2669 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.77,.77 | |
| 2670 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,.85,.85 | |
| 2671 WIN_FRAME_STD surf_tissue_diagram_top, surf_tissue_diagram_bottom, surf_tissue_diagram_left, surf_tissue_diagram_right ; outer frame | |
| 2672 | |
| 2673 movlw .1 | |
| 2674 movff WREG,win_height ; row bottom (0-239) | |
| 2675 movlw surf_tissue_diagram_left+.4 ; Surface mode | |
| 2676 movff WREG,win_leftx2 ; column left (0-159) | |
| 2677 movlw surf_tissue_diagram_right-surf_tissue_diagram_left-4 ; Width | |
| 2678 movff WREG,win_width | |
| 2679 | |
| 2680 ;---- Draw N2 Tissues | |
| 2681 lfsr FSR2, char_O_tissue_N2_saturation | |
| 2682 movlw d'16' | |
| 2683 movwf wait_temp ; 16 tissues | |
| 2684 clrf waitms_temp ; Row offset | |
| 2685 surf_tissue_saturation_graph_N2: | |
| 2686 movlw surf_tissue_diagram_top+.23 ; surface mode | |
| 2687 addwf waitms_temp,W | |
| 2688 movff WREG,win_top ; row top (0-239) | |
| 2689 rcall surf_tissue_saturation_loop ; Show one tissue | |
| 2690 decfsz wait_temp,F | |
| 2691 bra surf_tissue_saturation_graph_N2 | |
| 2692 | |
| 2693 ;---- Draw He Tissues ---------------------------------------------------- | |
| 2694 lfsr FSR2, char_O_tissue_He_saturation | |
| 2695 movlw d'16' | |
| 2696 movwf wait_temp ; 16 tissues | |
| 2697 clrf waitms_temp ; Row offset | |
| 2698 surf_tissue_saturation_graph_He: | |
| 2699 movlw surf_tissue_diagram_top+.23+.56 ; surface mode | |
| 2700 addwf waitms_temp,W | |
| 2701 movff WREG,win_top ; row top (0-239) | |
| 2702 rcall surf_tissue_saturation_loop ; Show one tissue | |
| 2703 decfsz wait_temp,F | |
| 2704 bra surf_tissue_saturation_graph_He | |
| 2705 return | |
| 2706 | |
| 2707 surf_tissue_saturation_loop: | |
| 2708 call TFT_standard_color | |
| 2709 movlw .2 ; row spacing | |
| 2710 addwf waitms_temp,F | |
| 2711 movf POSTINC2,W ; Get tissue load | |
| 2712 bcf STATUS,C | |
| 2713 rrcf WREG ; And divide by 2 | |
| 2714 movwf temp1 | |
| 2715 movlw .20 | |
| 2716 subwf temp1,F ; Subtract some offset | |
| 2717 movff win_width,WREG ; Max width. | |
| 2718 cpfslt temp1 ; skip if WREG < win_width | |
| 2719 movwf temp1 | |
| 2720 movff temp1,win_bargraph | |
| 2721 call TFT_box | |
| 2722 return | |
| 2723 | |
| 2724 ;============================================================================= | |
| 2725 ; Draw saturation graph, is surface mode or in dive mode. | |
| 2726 DISP_tissue_saturation_graph: | |
| 2727 ;---- Draw Frame | |
| 2728 WIN_FRAME_STD tissue_diagram_top, tissue_diagram_bottom, tissue_diagram_left, .159 ; outer frame | |
| 2729 | |
| 2730 movlw .1 | |
| 2731 movff WREG,win_height ; row bottom (0-239) | |
| 2732 movlw tissue_diagram_left+.3 ; divemode | |
| 2733 movff WREG,win_leftx2 ; column left (0-159) | |
| 2734 movlw .159-tissue_diagram_left-4 ; Width | |
| 2735 movff WREG,win_width | |
| 2736 | |
| 2737 ;---- Draw N2 Tissues | |
| 2738 lfsr FSR2, char_O_tissue_N2_saturation | |
| 2739 movlw d'16' | |
| 2740 movwf wait_temp ; 16 tissues | |
| 2741 clrf waitms_temp ; Row offset | |
| 2742 tissue_saturation_graph_N2: | |
| 2743 movlw tissue_diagram_top+3 ; divemode | |
| 2744 addwf waitms_temp,W | |
| 2745 movff WREG,win_top ; row top (0-239) | |
| 2746 rcall tissue_saturation_graph_loop ; Show one tissue | |
| 2747 decfsz wait_temp,F | |
| 2748 bra tissue_saturation_graph_N2 | |
| 2749 | |
| 2750 ;---- Draw He Tissues ---------------------------------------------------- | |
| 2751 lfsr FSR2, char_O_tissue_He_saturation | |
| 2752 movlw d'16' | |
| 2753 movwf wait_temp ; 16 tissues | |
| 2754 clrf waitms_temp ; Row offset | |
| 2755 tissue_saturation_graph_He: | |
| 2756 movlw tissue_diagram_top+3+.22 ; divemode | |
| 2757 addwf waitms_temp,W | |
| 2758 movff WREG,win_top ; row top (0-239) | |
| 2759 | |
| 2760 rcall tissue_saturation_graph_loop ; Show one tissue | |
| 2761 | |
| 2762 decfsz wait_temp,F | |
| 2763 bra tissue_saturation_graph_He | |
| 2764 return | |
| 2765 | |
| 2766 tissue_saturation_graph_loop: | |
| 2767 call TFT_standard_color | |
| 2768 incf waitms_temp,F | |
| 2769 movf POSTINC2,W | |
| 2770 bcf STATUS,C | |
| 2771 rrcf WREG | |
| 2772 bcf STATUS,C | |
| 2773 rrcf WREG ; And divide by 4 | |
| 2774 movwf temp1 | |
| 2775 movlw .12 | |
| 2776 subwf temp1,F ; Subtract some offset | |
| 2777 movff win_width,WREG ; Max width. | |
| 2778 cpfslt temp1 ; skip if WREG < win_width | |
| 2779 movwf temp1 | |
| 2780 movff temp1,win_bargraph | |
| 2781 call TFT_box | |
| 2782 return | |
| 2783 | |
| 2784 global TFT_display_cns | |
| 2785 TFT_display_cns: | |
| 2786 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2787 tstfsz WREG ; Is there room for the warning? | |
| 2788 return ; No | |
| 2789 TFT_color_code warn_cns ; Color-code CNS output | |
| 2790 STRCPY_TEXT tCNS2 ; CNS: | |
| 2791 movff int_O_CNS_fraction+0,lo | |
| 2792 movff int_O_CNS_fraction+1,hi | |
| 2793 bsf leftbind | |
| 2794 output_16_3 ;Displays only 0...999 | |
| 2795 bcf leftbind | |
| 2796 PUTC "%" | |
| 2797 movlw warning_length ; Divemode string length | |
| 2798 btfss divemode ; In Divemode? | |
| 2799 movlw surf_warning_length ; No, use surface string length | |
| 2800 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2801 STRCAT_PRINT "" | |
| 2802 call TFT_standard_color | |
| 2803 return | |
| 2804 | |
| 2805 global TFT_display_ppo2 | |
| 2806 TFT_display_ppo2: ; Show ppO2 (ppO2 stored in xC, in mbar!) | |
| 2807 rcall TFT_warning_set_window ; Sets the row and column for the current warning | |
| 2808 tstfsz WREG ; Is there room for the warning? | |
| 2809 return ; No | |
| 2810 TFT_color_code warn_ppo2 ; Color-code output (ppO2 stored in xC) | |
| 2811 STRCPY "O2:" | |
| 2812 ; Check very high ppO2 manually | |
| 2813 tstfsz xC+2 ; char_I_O2_ratio * p_amb/10 > 65536, ppO2>6,55bar? | |
| 2814 bra TFT_show_ppO2_3 ; Yes, display fixed Value! | |
| 2815 movff xC+0,lo | |
| 2816 movff xC+1,hi | |
| 2817 bsf ignore_digit4 | |
| 2818 output_16dp d'1' | |
| 2819 TFT_show_ppO2_2: | |
| 2820 movlw warning_length ; Divemode string length | |
| 2821 rcall TFT_fillup_with_spaces ; Fillup FSR2 with spaces (Total string length in #WREG) | |
| 2822 STRCAT_PRINT "" | |
| 2823 call TFT_standard_color | |
| 2824 return | |
| 2825 | |
| 2826 TFT_show_ppO2_3: | |
| 2827 STRCAT ">6.6" | |
| 2828 bra TFT_show_ppO2_2 | |
| 2829 | |
| 2830 | |
| 2831 global TFT_LogOffset_Logtitle | |
| 2832 TFT_LogOffset_Logtitle: | |
| 2833 STRCPY_TEXT tLogOffset | |
| 2834 PUTC ":" | |
| 2835 call do_logoffset_common_read ; Offset into lo:hi | |
| 2836 bsf leftbind | |
| 2837 output_16 | |
| 2838 bcf leftbind | |
| 2839 PUTC " " | |
| 2840 return ; No "_PRINT" here... | |
| 2841 | |
| 2842 | |
| 2843 global adjust_depth_with_salinity | |
| 2844 adjust_depth_with_salinity: ; computes salinity setting into lo:hi [mbar] | |
| 2845 btfsc simulatormode_active ; Do apply salinity in Simulatormode | |
| 2846 return | |
| 2847 | |
| 2848 movff opt_salinity,WREG ; 0-5% | |
| 2849 addlw d'100' ; 1.00kg/l | |
| 2850 movwf wait_temp | |
| 2851 | |
| 2852 movlw d'105' ; 105% ? | |
| 2853 cpfslt wait_temp ; Salinity higher limit | |
| 2854 return ; Out of limit, do not adjust lo:hi | |
| 2855 movlw d'99' ; 99% ? | |
| 2856 cpfsgt wait_temp ; Salinity lower limit | |
| 2857 return ; Out of limit, do not adjust lo:hi | |
| 2858 | |
| 2859 movff lo,xA+0 | |
| 2860 movff hi,xA+1 | |
| 2861 | |
| 2862 movlw d'102' ; 0,98bar/10m | |
| 2863 movwf xB+0 | |
| 2864 clrf xB+1 | |
| 2865 call mult16x16 ;xA*xB=xC (lo:hi * 100) | |
| 2866 movff wait_temp,xB+0 ; Salinity | |
| 2867 clrf xB+1 | |
| 2868 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 2869 movff xC+0,lo | |
| 2870 movff xC+1,hi ; restore lo and hi with updated value | |
| 2871 return | |
| 2872 | |
| 2873 global convert_mbar_to_feet ; convert value in lo:hi from mbar to feet | |
| 2874 convert_mbar_to_feet: ; convert value in lo:hi from mbar to feet | |
| 2875 movff lo,xA+0 | |
| 2876 movff hi,xA+1 | |
| 2877 | |
| 2878 movlw LOW d'328' ; 328feet/100m | |
| 2879 movwf xB+0 | |
| 2880 movlw HIGH d'328' | |
| 2881 movwf xB+1 | |
| 2882 | |
| 2883 call mult16x16 ; xA*xB=xC (lo:hi * 328) | |
| 2884 | |
| 2885 movlw d'50' ; round up | |
| 2886 addwf xC+0,F | |
| 2887 movlw 0 | |
| 2888 addwfc xC+1,F | |
| 2889 addwfc xC+2,F | |
| 2890 addwfc xC+3,F | |
| 2891 | |
| 2892 movlw LOW .10000 | |
| 2893 movwf xB+0 | |
| 2894 movlw HIGH .10000 | |
| 2895 movwf xB+1 | |
| 2896 | |
| 2897 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 2898 | |
| 2899 movff xC+0,lo | |
| 2900 movff xC+1,hi ; restore lo and hi with updated value | |
| 2901 return | |
| 2902 | |
| 2903 global convert_celsius_to_fahrenheit ; convert value in lo:hi from celsius to fahrenheit | |
| 2904 convert_celsius_to_fahrenheit: ; convert value in lo:hi from celsius to fahrenheit | |
| 2905 ; Does it work with signed temperature? mH | |
| 2906 movff lo,xA+0 | |
| 2907 movff hi,xA+1 | |
| 2908 | |
| 2909 movlw d'18' ; 1C = 1.8F | |
| 2910 movwf xB+0 | |
| 2911 clrf xB+1 | |
| 2912 | |
| 2913 call mult16x16 ;xA*xB=xC (lo:hi * 18) | |
| 2914 | |
| 2915 movlw d'10' | |
| 2916 movwf xB+0 | |
| 2917 clrf xB+1 | |
| 2918 | |
| 2919 call div32x16 ; xC:4 / xB:2 = xC+3:xC+2 with xC+1:xC+0 as remainder | |
| 2920 | |
| 2921 movlw LOW d'320' ; 0C = 32F | |
| 2922 addwf xC+0,F | |
| 2923 movlw HIGH d'320' | |
| 2924 addwfc xC+1,F | |
| 2925 | |
| 2926 movff xC+0,lo | |
| 2927 movff xC+1,hi ; restore lo and hi with updated value | |
| 2928 return | |
| 2929 | |
| 2930 END |
