Mercurial > public > hwos_code
annotate src/tft_outputs.asm @ 632:0347acdf6d8e
changelog updates
author | heinrichsweikamp |
---|---|
date | Sat, 29 Feb 2020 16:57:45 +0100 |
parents | 185ba2f91f59 |
children | 690c48db7b5b |
rev | line source |
---|---|
0 | 1 ;============================================================================= |
2 ; | |
631 | 3 ; File tft_outputs.asm next combined generation V3.08.7 |
0 | 4 ; |
623 | 5 ; high-level Display Outputs |
0 | 6 ; |
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
8 ;============================================================================= | |
9 ; HISTORY | |
10 ; 2011-08-07 : [mH] moving from OSTC code | |
11 | |
604 | 12 #include "hwos.inc" ; mandatory header |
13 #include "shared_definitions.h" ; mailbox from/to p2_deco.c | |
582 | 14 #include "tft.inc" |
15 #include "start.inc" | |
16 #include "strings.inc" | |
17 #include "convert.inc" | |
18 #include "varargs.inc" | |
19 #include "math.inc" | |
20 #include "eeprom_rs232.inc" | |
21 #include "adc_lightsensor.inc" | |
22 #include "surfmode.inc" | |
23 #include "divemode.inc" | |
24 #include "external_flash.inc" | |
25 #include "ghostwriter.inc" | |
26 #include "customview.inc" | |
27 #include "i2c.inc" | |
28 #include "colorschemes.inc" | |
29 #include "calibrate.inc" | |
604 | 30 #include "gaslist.inc" |
31 #include "rx_ops.inc" | |
631 | 32 #include "logbook.inc" |
623 | 33 |
34 | |
35 ;---- external Functions ----------------------------------------------------- | |
560 | 36 |
0 | 37 extern aa_wordprocessor |
604 | 38 extern get_first_gas_to_WREG |
623 | 39 |
40 | |
41 ;---- external Texts --------------------------------------------------------- | |
604 | 42 |
43 extern tFirmware | |
631 | 44 extern tFirmwareDate |
628 | 45 extern tHardware |
604 | 46 extern tSerial |
47 extern tTotalDives | |
48 extern tBatteryV | |
631 | 49 extern tSensorC |
50 extern tSensorD | |
604 | 51 extern tUptime |
52 extern tPPO2MIN | |
53 extern tPPO2Max | |
54 extern tPPO2DECO | |
623 | 55 extern tbar |
56 | |
57 IFDEF _ccr_pscr | |
58 extern tPPO2MINCC | |
59 ENDIF | |
604 | 60 |
61 IFDEF _rx_functions | |
62 extern tFirmware_rx | |
63 ENDIF | |
0 | 64 |
623 | 65 IFDEF _compass |
66 extern tCalX,tCalY,tCalZ | |
67 ENDIF | |
68 | |
69 | |
70 tft_out CODE | |
71 | |
0 | 72 ;============================================================================= |
73 | |
623 | 74 global TFT_debug_output |
75 TFT_debug_output: | |
76 ifndef _debug_output | |
77 return | |
78 else | |
79 btfsc alt_layout_active ; alternative layout active? | |
80 return ; YES - abort | |
81 | |
82 ; WIN_TINY .100,.30 ; surface mode: fits under the textual logo in the upper right corner | |
83 ; WIN_TINY .35, .0 ; dive mode: fits to the right side of the depth label | |
84 WIN_TINY .0, .0 ; dive mode: overwrites depth label | |
85 call TFT_standard_color | |
86 lfsr FSR2,buffer | |
87 | |
631 | 88 ; print an 16 bit integer as x.yy |
89 ;MOVII int_O_profiling_overrun,mpr | |
90 ;output_16dp .3 | |
91 ;STRCAT_PRINT "" | |
92 ;return | |
93 | |
623 | 94 ; deco engine scheduling performance |
95 MOVII int_O_profiling_overrun,mpr ; runtime +/- versus target | |
96 btfss mpr+1,7 | |
97 bra TFT_debug_output_1 | |
98 bcf mpr+1,7 | |
99 PUTC "-" | |
100 bra TFT_debug_output_2 | |
101 TFT_debug_output_1: | |
102 PUTC " " | |
103 TFT_debug_output_2: | |
104 output_16_3 | |
105 PUTC "." | |
106 MOVII int_O_profiling_overrun_max,mpr ; max runtime | |
107 output_16_3 | |
108 PUTC "." | |
109 movff char_O_profiling_overrun_phase,WREG ; calculation phase causing the max runtime | |
110 output_hex | |
111 PUTC "." | |
112 movff char_O_profiling_runs_norm,mpr ; runs/cycle normal plan | |
113 output_99 | |
114 PUTC "." | |
115 movff char_O_profiling_runs_alt,mpr ; runs/cycle alternative plan | |
116 output_99 | |
117 STRCAT_PRINT "" | |
118 return | |
119 endif | |
120 | |
582 | 121 |
0 | 122 ;============================================================================= |
123 | |
582 | 124 global TFT_divemask_color |
0 | 125 TFT_divemask_color: |
582 | 126 movlw color_green |
623 | 127 btfsc divemode ; in dive mode? |
582 | 128 rcall TFT_divemask_color_dive |
50 | 129 bra TFT_standard_color0 |
130 | |
131 TFT_divemask_color_dive: | |
582 | 132 movff opt_dive_color_scheme,WREG ; 0-3 |
133 incf WREG | |
50 | 134 dcfsnz WREG |
582 | 135 retlw color_scheme_divemode_mask1 ;0 |
50 | 136 dcfsnz WREG |
582 | 137 retlw color_scheme_divemode_mask2 ;1 |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
138 dcfsnz WREG |
582 | 139 retlw color_scheme_divemode_mask3 ;2 |
140 retlw color_scheme_divemode_mask4 ;3 | |
141 | |
142 | |
604 | 143 global TFT_memo_color |
144 TFT_memo_color: ; information, values within normal range, things without a need to react upon | |
145 movlw color_white | |
146 bra TFT_standard_color0 | |
605 | 147 TFT_memo_color_dive: |
148 retlw color_white | |
604 | 149 |
150 global TFT_advice_color | |
151 TFT_advice_color: ; advices to do something, but without essential need to actually do it | |
152 movlw color_green | |
153 bra TFT_standard_color0 | |
154 TFT_advice_color_dive: | |
155 retlw color_green | |
156 | |
157 global TFT_attention_color ; important things to be aware of and things that are developing towards a warning | |
50 | 158 TFT_attention_color: |
604 | 159 movlw color_yellow |
0 | 160 bra TFT_standard_color0 |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
161 TFT_attention_color_dive: |
604 | 162 retlw color_yellow |
163 | |
623 | 164 global TFT_warning_color ; important things with immediate need to react upon |
165 TFT_warning_color: | |
604 | 166 movlw color_red |
0 | 167 bra TFT_standard_color0 |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
168 TFT_warnings_color_dive: |
604 | 169 retlw color_red |
582 | 170 |
171 | |
172 global TFT_disabled_color | |
0 | 173 TFT_disabled_color: |
582 | 174 movlw color_lightblue |
623 | 175 btfsc divemode ; in dive mode? |
582 | 176 rcall TFT_disabled_color_dive ; YES |
177 bra TFT_standard_color0 | |
87 | 178 TFT_disabled_color_dive: |
582 | 179 movff opt_dive_color_scheme,WREG ; 0-3 |
180 incf WREG | |
87 | 181 dcfsnz WREG |
582 | 182 retlw color_scheme_divemode_dis1 ; 0 |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
183 dcfsnz WREG |
582 | 184 retlw color_scheme_divemode_dis2 ; 1 |
50 | 185 dcfsnz WREG |
582 | 186 retlw color_scheme_divemode_dis3 ; 2 |
187 retlw color_scheme_divemode_dis4 ; 3 | |
188 | |
189 | |
190 global TFT_standard_color | |
191 TFT_standard_color: | |
604 | 192 setf WREG ; default white |
623 | 193 btfsc divemode ; in dive mode? |
582 | 194 rcall TFT_standard_color_dive |
195 ;bra TFT_standard_color0 | |
196 TFT_standard_color0: | |
197 goto TFT_set_color ; and return... | |
198 | |
199 | |
200 TFT_standard_color_dive: | |
201 movff opt_dive_color_scheme,WREG ; 0-3 | |
202 incf WREG | |
0 | 203 dcfsnz WREG |
623 | 204 retlw color_scheme_divemode_std1 ; 0 |
0 | 205 dcfsnz WREG |
623 | 206 retlw color_scheme_divemode_std2 ; 1 |
0 | 207 dcfsnz WREG |
623 | 208 retlw color_scheme_divemode_std3 ; 2 |
209 retlw color_scheme_divemode_std4 ; 3 | |
582 | 210 |
211 | |
604 | 212 global TFT_color_code_tank_pres_sac |
213 TFT_color_code_tank_pres_sac: ; color-code a tank pressure or SAC rate, data in hi:lo | |
214 btfss hi,int_not_avail_flag ; is the not-available flag set? | |
215 bra TFT_color_code_tank_pres_1 ; NO | |
216 bcf hi,int_not_avail_flag ; YES - clear not-available flag | |
217 TFT_color_code_tank_pres_0: ; entry point for outdated flag | |
218 bcf hi,int_outdated_flag ; clear outdated flag (it may be set) | |
219 bcf hi,int_warning_flag ; clear warning flag (it may be set) | |
220 bcf hi,int_attention_flag ; clear attention flag (it may be set) | |
221 bra TFT_disabled_color ; set to disabled color and return | |
222 TFT_color_code_tank_pres_1: | |
223 btfsc hi,int_outdated_flag ; is the outdated flag set? | |
224 bra TFT_color_code_tank_pres_0 ; YES - handle alike with not-available flag | |
225 TFT_color_code_tank_pres_2: | |
226 btfss hi,int_warning_flag ; is the warning flag set? | |
227 bra TFT_color_code_tank_pres_3 ; NO | |
228 bcf hi,int_warning_flag ; YES - clear warning flag | |
229 bcf hi,int_attention_flag ; - clear attention flag (it may be set) | |
623 | 230 bra TFT_warning_color ; - set to warning color and return |
604 | 231 TFT_color_code_tank_pres_3: |
232 btfss hi,int_attention_flag ; is the attention flag set? | |
233 bra TFT_memo_color ; NO - set to memo color and return | |
234 bcf hi,int_attention_flag ; YES - clear attention flag | |
235 bra TFT_attention_color ; - set to attention color and return | |
236 | |
237 | |
582 | 238 global TFT_color_code_gaslist |
628 | 239 TFT_color_code_gaslist: ; color-code a gas (%O2 in hi) according to current absolute pressure |
0 | 240 ; Check very high ppO2 manually |
623 | 241 MOVII pressure_abs_10,xA |
560 | 242 movff hi,xB+0 |
243 clrf xB+1 | |
623 | 244 call mult16x16 ; hi * absolute pressure / 10 |
604 | 245 ; Check if ppO2 > 6.55 bar |
623 | 246 tstfsz xC+2 ; char_I_O2_ratio * absolute pressure / 10 > 65536, i.e. ppO2 > 6.55 bar ? |
247 bra TFT_warning_color ; YES - warn in warning color | |
604 | 248 ; Check if ppO2 > 3.30 bar |
560 | 249 btfsc xC+1,7 |
623 | 250 bra TFT_warning_color ; YES - warn in warning color |
604 | 251 ; Check for low ppO2 |
623 | 252 MOVII xC,sub_a |
582 | 253 movff char_I_ppO2_min,WREG |
254 mullw d'100' ; char_I_ppO2_min*100 | |
623 | 255 MOVII PRODL,sub_b |
256 call cmpU16 ; compare (sub_a - sub_b) | |
604 | 257 btfsc neg_flag ; lower than ppO2 min? |
623 | 258 bra TFT_warning_color ; YES - set warning color and return |
604 | 259 ; Check for high ppO2 |
260 movff char_O_deco_info,WREG ; bank-safe copy of deco info vector | |
628 | 261 btfsc WREG,deco_mode ; are we in deco? |
604 | 262 bra TFT_color_code_gaslist_deco ; YES - check against ppO2 max deco only |
263 ; NO - check against ppO2 max travel/normal and deco | |
264 ; Check for ppO2 max travel/normal | |
623 | 265 movff char_I_ppO2_max_work,WREG ; ppo2 max during working phase |
266 mullw d'100' ; char_I_ppO2_max_work*100 | |
628 | 267 ADDLI ppO2_margin_on_max,PROD ; add ppO2 margin on max value to compensate for surface pressures > 1000 hPa |
268 MOVII PRODL,sub_b ; copy result to sub_b | |
623 | 269 call cmpU16 ; compare (sub_a - sub_b) |
604 | 270 btfss neg_flag ; higher than ppO2 max travel/deco? |
271 rcall TFT_attention_color ; YES - set attention color | |
272 ; Check for ppO2 max deco | |
273 TFT_color_code_gaslist_deco: | |
274 movff char_I_ppO2_max_deco,WREG ; ppo2 max for deco | |
623 | 275 mullw d'100' ; char_I_ppO2_max_deco * 100 |
628 | 276 ADDLI ppO2_margin_on_max,PROD ; add ppO2 margin on max value to compensate for surface pressures > 1000 hPa |
277 MOVII PRODL,sub_b ; copy result to sub_b | |
623 | 278 call cmpU16 ; compare (sub_a - sub_b) |
604 | 279 btfss neg_flag ; higher than ppO2 max deco? |
623 | 280 bra TFT_warning_color ; YES - set warning color and return |
604 | 281 return ; NO - keep current color |
560 | 282 |
283 | |
582 | 284 TFT_color_code_ceiling: ; color-code the ceiling depth |
285 btfsc hi,char_invalid_flag ; is the invalid flag set? (bit 7 here) | |
623 | 286 bra TFT_color_code_ceiling_1 ; YES - set disabled color |
287 MOVII pressure_rel_cur_cached,sub_a; NO - get current pressure to sub_a | |
288 MOVII mpr,sub_b ; - get ceiling to sub_b | |
289 call cmpU16 ; - sub_a - sub_b = relative pressure [mbar] - int_O_ceiling [mbar] | |
290 btfss neg_flag ; - is current depth < ceiling (too shallow) ? | |
291 bra TFT_memo_color ; NO - set to memo color and return | |
292 movff char_O_deco_warnings,WREG ; YES - bank-safe copy of deco warnings | |
293 btfsc WREG,outside_warning ; - are we currently outside of the ZH-L16 model? | |
294 bra TFT_warning_color ; YES - set to warnings color and return | |
295 bra TFT_attention_color ; NO - set to attention color and return | |
560 | 296 TFT_color_code_ceiling_1: |
297 bcf hi,char_invalid_flag ; clear the invalid flag (bit 7 here) | |
298 bra TFT_disabled_color ; set to disabled color and return | |
299 | |
300 | |
604 | 301 TFT_color_code_stop: ; color-code the stop depth: memo color if below stop depth, |
302 ; attention color if above stop but below ceiling, | |
303 ; warning color if above stop and ceiling | |
304 ; (ceiling depth is calculated using current GF) | |
560 | 305 movff char_O_deco_gas+0,WREG ; get flag for invalid deco data |
306 btfsc WREG,char_invalid_flag ; is the invalid flag set? | |
604 | 307 bra TFT_disabled_color ; YES - set to disabled color and return |
628 | 308 movff char_O_deco_depth+0,WREG ; NO - get depth of first stop in meters into WREG |
623 | 309 subwf depth_meter,W ; - compute current depth - stop depth |
604 | 310 btfsc STATUS,C ; - result negative? |
623 | 311 bra TFT_color_code_stop_1 ; NO - not shallower than stop depth, check for ascent advice |
312 MOVII int_O_ceiling,sub_b ; YES - get ceiling depth in mbar | |
604 | 313 btfsc sub_b+1,char_invalid_flag ; - is the invalid flag set? (bit 7 here) |
623 | 314 bra TFT_warning_color ; YES - set to warning color and return |
315 MOVII pressure_rel_cur_cached,sub_a; NO - get current pressure | |
316 call cmpU16 ; - sub_a - sub_b = relative pressure - int_O_ceiling | |
604 | 317 btfsc neg_flag ; - is ceiling > current depth? |
623 | 318 bra TFT_warning_color ; YES - set to warning color and return |
604 | 319 bra TFT_attention_color ; NO - set to attention color and return |
623 | 320 TFT_color_code_stop_1: |
628 | 321 movff char_O_deco_depth+0,WREG ; get depth of first stop in meters into WREG |
322 incf WREG,W ; compute stop depth + 1 meter | |
323 subwf depth_meter,W ; compute current depth - (first stop depth + 1 meter) | |
324 btfss STATUS,C ; result negative? | |
325 bra TFT_memo_color ; YES - within 1 meter of stop depth, use memo color | |
326 btfss deco_region ; NO - within deco stops region? | |
327 bra TFT_memo_color ; NO - use memo color | |
328 bsf win_invert ; YES - give ascent advice, ... | |
623 | 329 bra TFT_advice_color ; - ... and return |
330 | |
331 | |
332 TFT_color_code_depth: | |
631 | 333 TSTOSS opt_depth_warn ; depth warning switched on? |
623 | 334 bra TFT_color_code_depth_no_mod ; NO |
335 btfsc depth_limit_exceeded ; YES - deeper than depth limit? | |
336 bra TFT_color_code_depth_warn ; YES - set to warning color | |
337 bra TFT_color_code_depth_mod ; NO - check depth against MOD and return... | |
338 TFT_color_code_depth_no_mod: | |
339 btfsc depth_limit_exceeded ; NO - deeper than depth limit? | |
340 bra TFT_warning_color ; YES - set to warning color and return | |
341 bra TFT_memo_color ; NO - set to memo color and return... | |
342 TFT_color_code_depth_mod: | |
343 IFDEF _ccr_pscr | |
344 movff opt_dive_mode,WREG ; get deco mode: 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR | |
345 decfsz WREG,F ; in CCR mode? | |
560 | 346 bra TFT_color_code_depth_no_ccr ; NO - continue checking for ppO2 |
623 | 347 btfss bailout_mode ; YES - check if in bailout |
604 | 348 bra TFT_color_code_depth_outside; NO - continue checking for outside ZHL16 model |
623 | 349 ENDIF |
560 | 350 TFT_color_code_depth_no_ccr: |
351 movff int_O_breathed_ppO2+1,WREG ; get upper byte of currently breathed ppO2 | |
352 btfsc WREG,int_warning_flag ; is the warning flag set? | |
353 bra TFT_color_code_depth_warn ; YES - animate in warning design | |
604 | 354 TFT_color_code_depth_outside: |
355 movff char_O_deco_warnings,WREG ; bank-safe copy of deco warnings | |
356 btfsc WREG,outside_warning ; are we currently outside of the ZH-L16 model? | |
623 | 357 bra TFT_color_code_depth_warn ; YES - activate depth warning |
358 bcf depth_warning ; NO - terminate depth warning | |
359 btfsc WREG,outside_attention ; - are we near to outside of the ZH-L16 model? | |
360 bra TFT_color_code_depth_att ; YES - activate depth attention | |
361 bcf depth_attention ; NO - terminate depth attention | |
362 bra TFT_memo_color ; - select memo color and return | |
300
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
363 TFT_color_code_depth_warn: |
623 | 364 bsf depth_warning ; activate depth warning |
365 bra TFT_warning_color ; select warning color and return... | |
604 | 366 TFT_color_code_depth_att: |
623 | 367 bsf depth_attention ; activate depth attention |
368 bra TFT_attention_color ; select attention color and return... | |
582 | 369 |
370 | |
371 global TFT_color_code_cns | |
372 TFT_color_code_cns: ; color-code CNS values (CNS in hi:lo [%]) | |
560 | 373 btfss hi,int_invalid_flag ; is the invalid flag set? |
374 bra TFT_color_code_cns_1 ; NO | |
582 | 375 bcf hi,int_invalid_flag ; YES - clear invalid flag |
604 | 376 bcf hi,int_warning_flag ; clear warning flag (it may be set) |
582 | 377 bcf hi,int_attention_flag ; clear attention flag (it may be set) |
378 bra TFT_disabled_color ; set to disabled color and return | |
628 | 379 TFT_color_code_cns_1: |
560 | 380 btfss hi,int_warning_flag ; is the warning flag set? |
381 bra TFT_color_code_cns_2 ; NO | |
604 | 382 bcf hi,int_warning_flag ; YES - clear warning flag |
383 bcf hi,int_attention_flag ; - clear attention flag (it may be set) | |
623 | 384 bra TFT_warning_color ; - set to warning color and return |
560 | 385 TFT_color_code_cns_2: |
582 | 386 btfss hi,int_attention_flag ; is the attention flag set? |
604 | 387 bra TFT_memo_color ; NO - set to memo color and return |
582 | 388 bcf hi,int_attention_flag ; YES - clear attention flag |
604 | 389 bra TFT_attention_color ; - set to attention color and return |
560 | 390 |
0 | 391 |
392 TFT_color_code_gf: | |
623 | 393 ; with int_O_lead_supersat, the upper byte is solely used for the flags |
582 | 394 ; and not for the value, thus there is no need to clear the flags |
395 btfsc hi,int_invalid_flag ; is the invalid flag set? | |
396 bra TFT_disabled_color ; YES - set to disabled color and return | |
397 btfsc hi,int_warning_flag ; NO - is the warning flag set? | |
623 | 398 bra TFT_warning_color ; YES - set to warning color and return |
582 | 399 btfsc hi,int_attention_flag ; NO - is the attention flag set? |
400 bra TFT_attention_color ; YES - set to attention color and return | |
604 | 401 bra TFT_memo_color ; NO - set to memo color and return |
582 | 402 |
403 | |
404 TFT_color_code_ppo2: ; color-code ppO2 values (ppO2 in hi:lo [cbar]) by its warning flags | |
560 | 405 btfss hi,int_warning_flag ; is the warning flag set? |
406 bra TFT_color_code_ppo2_1 ; NO | |
582 | 407 bcf hi,int_warning_flag ; YES - clear warning flag |
408 bcf hi,int_attention_flag ; clear attention flag (it may be set) | |
409 bcf hi,int_high_flag ; clear high warning flag (it may be set) | |
410 bcf hi,int_low_flag ; clear low warning flag (it may be set) | |
623 | 411 bra TFT_warning_color ; warn in warning color |
560 | 412 TFT_color_code_ppo2_1: |
582 | 413 btfss hi,int_attention_flag ; is the attention flag set? |
414 bra TFT_color_code_ppo2_2 ; NO | |
415 bcf hi,int_attention_flag ; YES - clear attention flag (it may be set) | |
416 bcf hi,int_high_flag ; clear high warning flag (it may be set) | |
417 bcf hi,int_low_flag ; clear low warning flag (it may be set) | |
608 | 418 bra TFT_attention_color ; set to attention color and return |
582 | 419 TFT_color_code_ppo2_2: |
420 bcf hi,int_high_flag ; clear high warning flag (it may be set) | |
421 bcf hi,int_low_flag ; clear low warning flag (it may be set) | |
604 | 422 bra TFT_memo_color ; set to memo color and return |
560 | 423 |
623 | 424 ;============================================================================= |
425 | |
426 IFDEF _ccr_pscr | |
560 | 427 |
582 | 428 TFT_color_code_ppo2_hud: ; color-code ppO2 values (ppO2 in --:lo [cbar]) by its value |
604 | 429 movff char_O_deco_info,WREG ; get the deco info vector |
628 | 430 btfss WREG,deco_mode ; are we in deco? |
560 | 431 bra TFT_color_code_ppo2_hud_a ; NO - load normal max value as threshold |
432 movff char_I_ppO2_max_deco,WREG ; YES - load deco value as threshold | |
433 bra TFT_color_code_ppo2_hud_b | |
582 | 434 TFT_color_code_ppo2_hud_a: |
623 | 435 movff char_I_ppO2_max_work,WREG ; ppO2 max while in working phase |
582 | 436 TFT_color_code_ppo2_hud_b: |
437 cpfsgt lo ; lo > threshold? | |
438 bra TFT_color_code_ppo2_hud1 ; NO - continue with checking for ppO2 low | |
623 | 439 bra TFT_warning_color ; YES - set warning color and return |
0 | 440 TFT_color_code_ppo2_hud1: |
560 | 441 movff opt_dive_mode,WREG ; 0=OC, 1=CC, 2=Gauge, 3=Apnea, 4=PSCR |
442 decfsz WREG,F ; now: 0=CC, 1=Gauge, 2=Apnea, 3=PSCR | |
443 bra TFT_color_code_ppo2_hud_nocc; not CCR... | |
623 | 444 btfsc bailout_mode |
560 | 445 bra TFT_color_code_ppo2_hud_nocc; is bailout, hence not loop mode... |
446 movff char_I_ppO2_min_loop,WREG ; ppO2 min loop mode color coding | |
447 bra TFT_color_code_ppo2_hud_cont | |
448 TFT_color_code_ppo2_hud_nocc: | |
449 movff char_I_ppO2_min,WREG ; PPO2 min for all other modes | |
450 TFT_color_code_ppo2_hud_cont: | |
582 | 451 cpfslt lo ; lo < char_I_ppO2_min? |
604 | 452 bra TFT_memo_color ; NO - set memo color and return... |
623 | 453 bra TFT_warning_color ; Yes - set warning color and return |
454 | |
455 ENDIF ; _ccr_pscr | |
456 | |
457 ;============================================================================= | |
582 | 458 |
459 TFT_color_code_battery: ; color-code the battery display, with battery percent in lo | |
631 | 460 btfsc battery_low_condition ; battery low condition detected? |
623 | 461 bra TFT_warning_color ; YES - set to warning color and return |
604 | 462 bra TFT_memo_color ; NO - set to memo color and return |
582 | 463 |
464 | |
465 global TFT_color_code_gas | |
466 TFT_color_code_gas: ; color-code the output according to gas number (1-6) in WREG | |
467 movwf up ; copy gas number (1-6) to up | |
468 movlw color_white ; Default color | |
469 dcfsnz up,F | |
604 | 470 movlw color_white ; color for gas 1 |
582 | 471 dcfsnz up,F |
604 | 472 movlw color_green ; color for gas 2 |
582 | 473 dcfsnz up,F |
604 | 474 movlw color_red ; color for gas 3 |
582 | 475 dcfsnz up,F |
604 | 476 movlw color_yellow ; color for gas 4 |
582 | 477 dcfsnz up,F |
604 | 478 movlw color_cyan ; color for gas 5 |
582 | 479 dcfsnz up,F |
604 | 480 movlw color_pink ; color for gas 6 |
481 goto TFT_set_color ; set color... | |
582 | 482 |
0 | 483 |
484 ; **************************************************************************** | |
485 | |
582 | 486 global TFT_show_OC_startgas_surface |
604 | 487 TFT_show_OC_startgas_surface: ; show first gas and "OSTC2-like" active gases |
582 | 488 ; Show first gas |
489 WIN_SMALL surf_decotype_column+.1,surf_decotype_row+.30 | |
604 | 490 call get_first_gas_to_WREG ; get first gas (1-5) into WREG |
560 | 491 decf WREG,W ; 1-5 -> 0-4 |
582 | 492 movwf PRODL |
604 | 493 call gaslist_strcat_gas ; input: PRODL : gas number (0..4), Output: Text appended into buffer pointed by FSR2. |
582 | 494 STRCAT_PRINT "" |
495 ; Show boxes | |
496 WIN_TOP surf_decotype_row+.30+.25 | |
497 WIN_LEFT surf_decotype_boxes_left1+.1 | |
498 rcall TFT_disabled_color | |
499 movff opt_gas_type+0,hi ; 0=Disabled, 1=First, 2=Travel, 3=Deco | |
500 tstfsz hi | |
501 rcall TFT_standard_color | |
502 STRCPY_PRINT "1" | |
503 decfsz hi,F ; Type = 1 (First)? | |
604 | 504 bra DISP_active_gas_surfmode3 ; NO - skip box |
582 | 505 WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left1, surf_decotype_boxes_left1+.8 ;top, bottom, left, right |
234
57155164faad
Show OSTC2-like active gas boxes in surface mode
heinrichsweikamp
parents:
231
diff
changeset
|
506 DISP_active_gas_surfmode3: |
582 | 507 rcall TFT_disabled_color |
508 movff opt_gas_type+1,hi ; 0=Disabled, 1=First, 2=Travel, 3=Deco | |
509 tstfsz hi | |
510 rcall TFT_standard_color | |
511 WIN_LEFT surf_decotype_boxes_left2+.1 | |
512 STRCPY_PRINT "2" | |
513 decfsz hi,F ; Type = 1 (First)? | |
604 | 514 bra DISP_active_gas_surfmode4 ; NO - skip box |
582 | 515 WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left2, surf_decotype_boxes_left2+.8 ;top, bottom, left, right |
234
57155164faad
Show OSTC2-like active gas boxes in surface mode
heinrichsweikamp
parents:
231
diff
changeset
|
516 DISP_active_gas_surfmode4: |
582 | 517 rcall TFT_disabled_color |
518 movff opt_gas_type+2,hi ; 0=Disabled, 1=First, 2=Travel, 3=Deco | |
519 tstfsz hi | |
520 rcall TFT_standard_color | |
521 WIN_LEFT surf_decotype_boxes_left3+.1 | |
522 STRCPY_PRINT "3" | |
523 decfsz hi,F ; Type = 1 (First)? | |
604 | 524 bra DISP_active_gas_surfmode5 ; NO - skip box |
582 | 525 WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left3, surf_decotype_boxes_left3+.8 ;top, bottom, left, right |
234
57155164faad
Show OSTC2-like active gas boxes in surface mode
heinrichsweikamp
parents:
231
diff
changeset
|
526 DISP_active_gas_surfmode5: |
582 | 527 rcall TFT_disabled_color |
528 movff opt_gas_type+3,hi ; 0=Disabled, 1=First, 2=Travel, 3=Deco | |
529 tstfsz hi | |
530 rcall TFT_standard_color | |
531 WIN_LEFT surf_decotype_boxes_left4+.1 | |
532 STRCPY_PRINT "4" | |
533 decfsz hi,F ; Type = 1 (First)? | |
604 | 534 bra DISP_active_gas_surfmode6 ; NO - skip box |
582 | 535 WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left4, surf_decotype_boxes_left4+.8 ;top, bottom, left, right |
234
57155164faad
Show OSTC2-like active gas boxes in surface mode
heinrichsweikamp
parents:
231
diff
changeset
|
536 DISP_active_gas_surfmode6: |
582 | 537 rcall TFT_disabled_color |
538 movff opt_gas_type+4,hi ; 0=Disabled, 1=First, 2=Travel, 3=Deco | |
539 tstfsz hi | |
540 rcall TFT_standard_color | |
541 WIN_LEFT surf_decotype_boxes_left5+.1 | |
542 STRCPY_PRINT "5" | |
604 | 543 rcall TFT_standard_color ; reset color |
544 decfsz hi,F ; type = 1 (First)? | |
545 bra DISP_active_gas_surfmode7 ; NO - done | |
582 | 546 WIN_FRAME_STD surf_decotype_boxes_top, surf_decotype_boxes_bottom, surf_decotype_boxes_left5, surf_decotype_boxes_left5+.8 ;top, bottom, left, right |
604 | 547 DISP_active_gas_surfmode7: |
548 return ; done | |
582 | 549 |
550 | |
551 global TFT_show_color_schemes | |
560 | 552 TFT_show_color_schemes: ; update the color schemes |
623 | 553 bsf divemode ; switch to dive mode |
582 | 554 call TFT_divemask_color |
555 WIN_TINY .12,.40 | |
556 STRCAT_TEXT_PRINT tDepth | |
557 WIN_TINY .62,.40 | |
558 STRCAT_TEXT_PRINT tMaxDepth | |
559 WIN_TINY .122,.40 | |
560 STRCAT_TEXT_PRINT tDivetime | |
561 | |
562 ; Show some demo screen | |
563 | |
564 ; Depth demo | |
604 | 565 call TFT_memo_color |
566 WIN_MEDIUM .3,.54 | |
623 | 567 MOVLI .5172,mpr |
50 | 568 bsf leftbind |
569 bsf ignore_digit4 | |
604 | 570 output_16 ; full meters in big font |
50 | 571 bcf leftbind |
604 | 572 STRCAT_PRINT "" ; display full meters |
573 WIN_SMALL .25,.66 | |
623 | 574 MOVLI .5172,mpr |
582 | 575 PUTC "." |
50 | 576 movlw d'4' |
577 movwf ignore_digits | |
604 | 578 bsf ignore_digit5 ; (flag will be cleared by output_16) |
631 | 579 output_16dp d'0' ; .1m in SMALL font |
604 | 580 STRCAT_PRINT "" ; display decimeters |
582 | 581 |
582 ; Max. Depth demo | |
604 | 583 WIN_MEDIUM .64,.54 |
631 | 584 bsf ignore_digit4 ; no 0.1 m |
582 | 585 bsf leftbind |
623 | 586 MOVLI .6349,mpr |
50 | 587 output_16 |
604 | 588 STRCAT_PRINT "" ; display full meters |
582 | 589 bcf leftbind |
50 | 590 ; .1m in SMALL font |
582 | 591 WIN_SMALL .87,.66 |
592 PUTC "." | |
50 | 593 movlw d'4' |
594 movwf ignore_digits | |
604 | 595 bsf ignore_digit5 ; (flag will be cleared by output_16) |
582 | 596 bsf leftbind |
623 | 597 MOVLI .6349,mpr |
631 | 598 output_16dp d'0' |
604 | 599 STRCAT_PRINT "" ; display decimeters |
582 | 600 bcf leftbind |
601 | |
602 ; Divetime demo | |
623 | 603 SMOVSS rtc_year,rtc_latched_year ; ISR-safe 6 byte copy of date and time |
604 movff rtc_latched_mins,lo | |
582 | 605 clrf hi |
606 WIN_MEDIUM .103, .54 | |
607 output_16_3 ; limit to 999 and display only (0-999) | |
604 | 608 STRCAT_PRINT "" ; show minutes in large font |
582 | 609 WIN_SMALL .139, .66 ; left position for two sec figures |
610 PUTC ':' | |
50 | 611 bsf leftbind |
623 | 612 movff rtc_latched_secs,lo |
50 | 613 output_99x |
582 | 614 bcf leftbind |
604 | 615 STRCAT_PRINT "" ; show seconds in small font |
582 | 616 |
623 | 617 bcf divemode ; terminate dive mode again |
50 | 618 return |
619 | |
604 | 620 |
623 | 621 global TFT_show_divemode_mask |
622 TFT_show_divemode_mask: ; display mask in dive mode | |
623 call TFT_divemask_color ; set color | |
624 | |
625 ; depth | |
626 WIN_TINY dm_mask_depth_column,dm_mask_depth_row ; position for "Depth" | |
627 btfss alt_layout_active ; alternative layout active? | |
628 bra TFT_divemode_mask_depth_text ; NO | |
629 WIN_TINY dm_mask_depth_column_alt,dm_mask_depth_row ; YES - alternative position for "Depth" | |
630 TFT_divemode_mask_depth_text: | |
631 STRCAT_TEXT_PRINT tDepth ; print "Depth" | |
632 | |
633 ; avg or max depth | |
634 btfsc alt_layout_active ; alternative layout active? | |
635 bra TFT_divemode_mask_avg_max_alt ; YES | |
636 | |
637 WIN_TINY dm_mask_maxdepth_col_nvsi,dm_mask_maxdepth_row ; default position for "max.Depth"/"avg.Depth" | |
638 TSTOSS opt_vsigraph ; graphical VSI bar enabled? | |
639 bra TFT_divemode_mask_max_avg_pos ; NO - keep position | |
640 WIN_TINY dm_mask_maxdepth_col,dm_mask_maxdepth_row ; YES - adopt position | |
641 TFT_divemode_mask_max_avg_pos: | |
642 btfsc FLAG_apnoe_mode ; in apnea mode? | |
643 bra TFT_divemode_mask_max_text ; YES - always draw max depth | |
644 TSTOSS opt_2ndDepthDisp ; NO - shall draw avg depth instead of max depth? | |
645 bra TFT_divemode_mask_max_text ; NO - print "max.Depth" | |
646 STRCAT_TEXT_PRINT tAvgDepth ; YES - print "avg.Depth" | |
647 bra TFT_divemode_mask_time_pos ; - continue with dive time | |
648 TFT_divemode_mask_max_text: | |
649 STRCAT_TEXT_PRINT tMaxDepth ; print "max.Depth" | |
650 bra TFT_divemode_mask_time_pos ; continue with dive time | |
651 TFT_divemode_mask_avg_max_alt: | |
652 btfss FLAG_gauge_mode ; in gauge mode? | |
653 bra TFT_divemode_mask_time_pos ; NO - continue with dive time | |
654 WIN_TINY dm_gauge_max_depth_text_col,dm_gauge_max_depth_text_row ; YES - set position | |
655 STRCAT_TEXT_PRINT tMaxDepth ; - print "max.Depth" | |
656 WIN_TINY dm_gauge_avg_depth_text_col,dm_gauge_avg_depth_text_row ; - set position | |
657 STRCAT_TEXT_PRINT tDiveTotalAvg ; - print "Total Avg" | |
658 ;bra TFT_divemode_mask_time_pos ; - continue with dive time | |
659 | |
660 ; dive time | |
661 TFT_divemode_mask_time_pos: | |
662 WIN_TINY dm_mask_divetime_column,dm_mask_divetime_row ; position for "Divetime" | |
663 TFT_divemode_mask_time_text: | |
664 STRCAT_TEXT_PRINT tDivetime ; print "Divetime" | |
665 btfss FLAG_apnoe_mode ; in apnea mode? | |
666 bra TFT_standard_color ; NO - done | |
667 WIN_TINY dm_total_apnoe_text_col,dm_total_apnoe_text_row; YES - set position | |
668 STRCPY_TEXT_PRINT tApnoeTotal ; - print "Total" | |
669 bra TFT_standard_color ; - done | |
315
4f83470dcece
VSIbar #3: remaining changes for the split style bar
Janos Kovacs <kovjanos@gmail.com>
parents:
310
diff
changeset
|
670 |
307
14719662fb95
Merged Screen layout work #4 into VSItextv2
Janos Kovacs <kovjanos@gmail.com>
parents:
303
diff
changeset
|
671 ;========================================================================= |
14719662fb95
Merged Screen layout work #4 into VSItextv2
Janos Kovacs <kovjanos@gmail.com>
parents:
303
diff
changeset
|
672 |
623 | 673 global TFT_velocity_show |
674 TFT_velocity_show: | |
675 rcall TFT_memo_color ; set default color | |
676 btfsc neg_flag_velocity ; descending? | |
677 rcall TFT_velocity_set_color ; NO - set color for text dependent on speed and set threshold for VSI graph | |
678 rcall TFT_velocity_num ; show the numerical VSI | |
604 | 679 TSTOSS opt_vsigraph ; graphical VSI bar enabled? |
623 | 680 bra TFT_standard_color ; NO - done |
681 btfsc neg_flag_velocity ; YES - in ascent? | |
682 bra TFT_velocity_graph_show ; YES - show the graph | |
683 bra TFT_velocity_graph_clear_1 ; NO - clear the graph | |
398
1f2e35f5a5aa
BUGFIX: Make sure SP1 is always selected on start in Auto-SP mode
heinrichsweikamp
parents:
394
diff
changeset
|
684 |
1f2e35f5a5aa
BUGFIX: Make sure SP1 is always selected on start in Auto-SP mode
heinrichsweikamp
parents:
394
diff
changeset
|
685 TFT_speed_table: |
582 | 686 ; use a depth-dependent ascent rate warning |
687 ; depth(ft): <20 >20 >40 >60 >75 >88 >101 >115 >128 >144 >164 | |
688 ; speed(ft/min): 23 26 29 33 36 43 49 56 59 62 66 | |
689 ; depth(m): <=6 >6 >12 >18 >23 >27 >31 >35 >39 >44 >50 | |
690 ; speed(m/min): 7 8 9 10 11 13 15 17 18 19 20 (warning) | |
307
14719662fb95
Merged Screen layout work #4 into VSItextv2
Janos Kovacs <kovjanos@gmail.com>
parents:
303
diff
changeset
|
691 ; speed(m/min): 5 6 7 8 8 10 12 13 14 15 15 (attention) |
398
1f2e35f5a5aa
BUGFIX: Make sure SP1 is always selected on start in Auto-SP mode
heinrichsweikamp
parents:
394
diff
changeset
|
692 |
623 | 693 ; < depth (m), warning speed, attention speed, unused |
582 | 694 DB .6,.7,.5,.0 |
695 DB .12,.8,.6,.0 | |
696 DB .18,.9,.7,.0 | |
697 DB .23,.10,.8,.0 | |
698 DB .27,.11,.8,.0 | |
699 DB .31,.13,.10,.0 | |
700 DB .35,.15,.12,.0 | |
701 DB .39,.17,.13,.0 | |
702 DB .44,.18,.14,.0 | |
703 DB .50,.19,.15,.0 | |
704 DB .200,.20,.15,.0 | |
705 | |
623 | 706 TFT_velocity_set_color: ; set color based on speed table or use static thresholds, with divA+0 = m/min |
707 bsf aux_flag ; for alternative layout: default is to show numerical VSI | |
582 | 708 ; check if old/new ascend logic is used |
631 | 709 TSTOSS opt_vsitext ; 0=standard, 1=dynamic |
582 | 710 bra TFT_velocity_set_color_static ; static ascend rate limit |
711 | |
712 ; point to speed table | |
713 movlw LOW (TFT_speed_table-.3) | |
714 movwf TBLPTRL | |
715 movlw HIGH (TFT_speed_table-.3) | |
716 movwf TBLPTRH | |
717 movlw UPPER (TFT_speed_table-.3) | |
718 movwf TBLPTRU | |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
719 |
623 | 720 TFT_velocity_set_color_next: |
582 | 721 TBLRD*+ ; 3 dummy reads |
722 TBLRD*+ | |
723 TBLRD*+ | |
604 | 724 TBLRD*+ ; get speed threshold |
623 | 725 movf depth_meter,W ; current depth in m |
604 | 726 cpfsgt TABLAT ; threshold > current depth ? |
623 | 727 bra TFT_velocity_set_color_next ; NO - try next |
604 | 728 |
729 TBLRD*+ ; get warning speed threshold | |
623 | 730 movf TABLAT,W ; ... |
604 | 731 movwf divA+1 ; copy for graph routine |
623 | 732 cpfslt divA+0 ; actual vertical speed smaller than warning threshold? |
733 bra TFT_warning_color ; NO - set warning color (and return) | |
604 | 734 TBLRD*+ ; get attention speed threshold |
623 | 735 movf TABLAT,W ; ... |
736 cpfslt divA+0 ; actual vertical speed smaller than attention threshold? | |
604 | 737 bra TFT_attention_color ; NO - set attention color and return |
623 | 738 bcf aux_flag ; YES - don't show in alternative layout |
739 bra TFT_memo_color ; - set memo color and return | |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
740 |
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
741 TFT_velocity_set_color_static: |
623 | 742 movlw color_code_velocity_warn_high ; threshold for warning in m/min |
604 | 743 movwf divA+1 ; copy for graph routine |
623 | 744 cpfslt divA+0 ; actual vertical speed smaller than warning threshold? |
745 bra TFT_warning_color ; NO - set warning color (and return) | |
746 movlw color_code_velocity_attn_high ; threshold for attention in m/min | |
747 cpfslt divA+0 ; actual vertical speed smaller than attention threshold? | |
604 | 748 bra TFT_attention_color ; NO - set attention color and return |
623 | 749 bcf aux_flag ; YES - don't show in alternative layout |
750 bra TFT_memo_color ; - set memo color and return | |
751 | |
752 TFT_velocity_num: | |
753 btfsc alt_layout_active ; in alternative layout? | |
754 bra TFT_velocity_num_alt ; YES | |
755 ; NO - set position | |
756 WIN_SMALL dm_velocity_text_col_norm, dm_velocity_text_row_norm | |
757 TFT_velocity_num_com: | |
758 bsf velocity_active_num ; set numerical velocity as shown | |
759 TSTOSS opt_units ; - 0=meter, 1=feet | |
760 bra TFT_velocity_num_metric ; 0 - meter | |
761 ;bra TFT_velocity_num_imperial ; 1 - feet | |
762 | |
763 TFT_velocity_num_imperial: | |
0 | 764 movff divA+0,WREG ; divA+0 = m/min |
623 | 765 mullw .100 ; PROD = mbar/min |
766 MOVII PRODL,mpr ; copy to hi:lo | |
631 | 767 call convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
623 | 768 tstfsz hi ; > 255 ? |
769 setf lo ; YES - set lo to 255 | |
770 movlw '-' ; load coding for minus sign | |
771 btfsc neg_flag_velocity ; ascending? | |
772 movlw '+' ; YES - replace with coding for plus sign | |
773 movwf POSTINC2 ; put sign into output buffer | |
774 output_99 ; print rate | |
775 STRCAT_TEXT tVelImperial ; print unit | |
776 bra TFT_velocity_num_finish ; do finishing tasks | |
777 | |
778 TFT_velocity_num_metric: | |
0 | 779 movff divA+0,lo ; divA+0 = m/min |
623 | 780 movlw '-' ; load coding for minus sign |
781 btfsc neg_flag_velocity ; ascending? | |
782 movlw '+' ; YES - replace with coding for plus sign | |
783 movwf POSTINC2 ; put sign into output buffer | |
784 output_99 ; print rate | |
785 STRCAT_TEXT tVelMetric ; print unit | |
786 ;bra TFT_velocity_num_finish ; do finishing tasks | |
787 | |
788 TFT_velocity_num_finish: | |
789 btfss alt_layout_active ; in alternative layout? | |
790 bra TFT_velocity_num_finish_1 ; NO | |
791 movlw "'" ; load encoding of minute sign | |
792 movff WREG,buffer+4 ; put it after m (meter) / f (feet) | |
793 clrf WREG ; load string terminator | |
794 movff WREG,buffer+5 ; terminate string after minute sign | |
795 TFT_velocity_num_finish_1: | |
796 STRCAT_PRINT "" ; finalize output | |
797 bcf win_invert ; end inverse printing | |
798 return ; done | |
799 | |
800 TFT_velocity_num_alt: | |
801 btfsc dive_main_menu ; is the dive mode menu shown? | |
802 return ; YES - abort | |
803 btfss neg_flag_velocity ; NO - in ascent? | |
804 bcf aux_flag ; NO - clear aux flag | |
805 btfsc aux_flag ; - above attention or warning threshold? | |
806 bsf win_invert ; YES - print inverse | |
807 ; - set position | |
808 WIN_SMALL dm_velocity_text_col_alt, dm_velocity_text_row_alt | |
809 bra TFT_velocity_num_com ; - continue with common part | |
810 | |
811 | |
812 TFT_velocity_graph_show: ; with speed in divA+0 (m/min) | |
813 btfsc alt_layout_active ; in alternative layout? | |
814 bra TFT_standard_color ; YES - done (not implemented) | |
815 | |
816 btfsc velocity_active_vsi ; was the graphical VSI shown before? | |
817 bra TFT_velocity_graph_1 ; YES - no need to redraw the framework box | |
818 bsf velocity_active_vsi ; NO - remember it is shown as of now | |
819 ; - draw the framework box | |
820 rcall TFT_divemask_color_dive ; - color -> WREG | |
821 WIN_FRAME_COLOR dm_velocity_graph_top+.00, dm_velocity_graph_bot-.00, dm_velocity_graph_lft, dm_velocity_graph_rgt | |
822 rcall TFT_divemask_color_dive ; - color -> WREG | |
823 WIN_FRAME_COLOR dm_velocity_graph_top+.10, dm_velocity_graph_bot-.10, dm_velocity_graph_lft, dm_velocity_graph_rgt | |
824 rcall TFT_divemask_color_dive ; - color -> WREG | |
825 WIN_FRAME_COLOR dm_velocity_graph_top+.20, dm_velocity_graph_bot-.20, dm_velocity_graph_lft, dm_velocity_graph_rgt | |
826 rcall TFT_divemask_color_dive ; - color -> WREG | |
827 WIN_FRAME_COLOR dm_velocity_graph_top+.30, dm_velocity_graph_bot-.30, dm_velocity_graph_lft, dm_velocity_graph_rgt | |
828 | |
829 TFT_velocity_graph_1: | |
830 movff divA+0,hi ; copy ascend speed (in m/min) to hi | |
582 | 831 movff divA+1,xA+0 ; m/min for warning level (upper two blocks) |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
832 clrf xA+1 |
623 | 833 MOVLI .5,xB ; threshold for color warning (5 color normal + 2 color warning) |
604 | 834 call div16x16 ; xC = xA / xB with xA as remainder |
582 | 835 ; xC+0 holds step size in m/min (e.g. =3 for 15m/min warning threshold) |
604 | 836 movff hi,xA+0 ; velocity in m/min |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
837 clrf xA+1 |
604 | 838 movff xC+0,xB+0 ; step size |
399
db25f2028074
CHANGE: New segmented speed graph in divemode
heinrichsweikamp
parents:
398
diff
changeset
|
839 clrf xB+1 |
604 | 840 call div16x16 ; xC = xA / xB with xA as remainder |
623 | 841 |
842 movff xC+0,lo ; copy amount of segments to show to lo | |
843 incf lo,F | |
844 dcfsnz lo,F | |
845 bra DISP_graph_vel_0_fill | |
846 dcfsnz lo,F | |
847 bra DISP_graph_vel_1_fill | |
848 dcfsnz lo,F | |
849 bra DISP_graph_vel_2_fill | |
850 dcfsnz lo,F | |
851 bra DISP_graph_vel_3_fill | |
852 dcfsnz lo,F | |
853 bra DISP_graph_vel_4_fill | |
854 dcfsnz lo,F | |
855 bra DISP_graph_vel_5_fill | |
856 dcfsnz lo,F | |
857 bra DISP_graph_vel_6_fill | |
858 ;bra DISP_graph_vel_7_fill | |
859 | |
860 DISP_graph_vel_7_fill: | |
861 rcall TFT_warnings_color_dive ; color -> WREG | |
862 WIN_BOX_COLOR dm_velocity_graph_top+.2, dm_velocity_graph_top+.8, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
863 DISP_graph_vel_6_fill: | |
604 | 864 rcall TFT_warnings_color_dive ; color -> WREG |
623 | 865 WIN_BOX_COLOR dm_velocity_graph_top+.12, dm_velocity_graph_top+.18, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right |
866 DISP_graph_vel_5_fill: | |
604 | 867 rcall TFT_attention_color_dive ; color -> WREG |
623 | 868 WIN_BOX_COLOR dm_velocity_graph_top+.22, dm_velocity_graph_top+.28, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right |
869 DISP_graph_vel_4_fill: | |
870 rcall TFT_standard_color_dive ; color -> WREG | |
871 WIN_BOX_COLOR dm_velocity_graph_top+.32, dm_velocity_graph_top+.38, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
872 DISP_graph_vel_3_fill: | |
873 rcall TFT_standard_color_dive ; color -> WREG | |
874 WIN_BOX_COLOR dm_velocity_graph_top+.42, dm_velocity_graph_top+.48, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
875 DISP_graph_vel_2_fill: | |
876 rcall TFT_standard_color_dive ; color -> WREG | |
877 WIN_BOX_COLOR dm_velocity_graph_top+.52, dm_velocity_graph_top+.58, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
878 DISP_graph_vel_1_fill: | |
604 | 879 rcall TFT_standard_color_dive ; color -> WREG |
623 | 880 WIN_BOX_COLOR dm_velocity_graph_top+.62, dm_velocity_graph_top+.68, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right |
881 DISP_graph_vel_0_fill: | |
882 | |
883 movff xC+0,lo ; copy amount of segments to show to lo | |
884 incf lo,F | |
885 dcfsnz lo,F | |
886 bra DISP_graph_vel_0_clear | |
887 dcfsnz lo,F | |
888 bra DISP_graph_vel_1_clear | |
889 dcfsnz lo,F | |
890 bra DISP_graph_vel_2_clear | |
891 dcfsnz lo,F | |
892 bra DISP_graph_vel_3_clear | |
893 dcfsnz lo,F | |
894 bra DISP_graph_vel_4_clear | |
895 dcfsnz lo,F | |
896 bra DISP_graph_vel_5_clear | |
897 dcfsnz lo,F | |
898 bra DISP_graph_vel_6_clear | |
899 bra DISP_graph_vel_7_clear | |
900 | |
901 DISP_graph_vel_0_clear: | |
902 WIN_BOX_BLACK dm_velocity_graph_top+.62, dm_velocity_graph_top+.68, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
903 DISP_graph_vel_1_clear: | |
904 WIN_BOX_BLACK dm_velocity_graph_top+.52, dm_velocity_graph_top+.58, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
905 DISP_graph_vel_2_clear: | |
906 WIN_BOX_BLACK dm_velocity_graph_top+.42, dm_velocity_graph_top+.48, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
907 DISP_graph_vel_3_clear: | |
908 WIN_BOX_BLACK dm_velocity_graph_top+.32, dm_velocity_graph_top+.38, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
909 DISP_graph_vel_4_clear: | |
910 WIN_BOX_BLACK dm_velocity_graph_top+.22, dm_velocity_graph_top+.28, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
911 DISP_graph_vel_5_clear: | |
912 WIN_BOX_BLACK dm_velocity_graph_top+.12, dm_velocity_graph_top+.18, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
913 DISP_graph_vel_6_clear: | |
914 WIN_BOX_BLACK dm_velocity_graph_top+.2, dm_velocity_graph_top+.8, dm_velocity_graph_lft+.2, dm_velocity_graph_rgt-.2 ;top, bottom, left, right | |
915 DISP_graph_vel_7_clear: | |
916 bra TFT_standard_color ; done | |
604 | 917 |
326
d21b172d5a7a
VSIbar #4: VSI settings submenu, graph option, logbook offset and compass calib. menu exit fix
Janos Kovacs <kovjanos@gmail.com>
parents:
321
diff
changeset
|
918 |
315
4f83470dcece
VSIbar #3: remaining changes for the split style bar
Janos Kovacs <kovjanos@gmail.com>
parents:
310
diff
changeset
|
919 global TFT_velocity_clear |
4f83470dcece
VSIbar #3: remaining changes for the split style bar
Janos Kovacs <kovjanos@gmail.com>
parents:
310
diff
changeset
|
920 TFT_velocity_clear: |
623 | 921 btfss velocity_active_num ; was the numerical VSI shown in last cycle? |
922 bra TFT_velocity_clear_graph ; NO - no need to clear it, continue with graphical VSI | |
923 TFT_velocity_clear_num_1: | |
924 bcf velocity_active_num ; YES - clear flag | |
925 btfsc alt_layout_active ; - in alternative layout? | |
926 bra TFT_velocity_clear_num_alt ; YES | |
927 ;bra TFT_velocity_clear_num_norm ; NO | |
928 | |
929 TFT_velocity_clear_num_norm: ; clear normal numerical area | |
930 WIN_BOX_BLACK dm_velocity_text_row_norm, dm_velocity_text_bot_norm, dm_velocity_text_col_norm, dm_velocity_text_rgt_norm ; top, bottom, left, right | |
931 bra TFT_velocity_clear_graph ; continue with graphical VSI | |
932 | |
933 TFT_velocity_clear_num_alt: ; clear alternative numerical area | |
934 btfsc dive_main_menu ; is the dive mode menu shown? | |
935 bra TFT_velocity_clear_graph ; YES - skip | |
936 ; NO - clear area | |
937 WIN_BOX_BLACK dm_velocity_text_row_alt, dm_velocity_text_bot_alt, dm_velocity_text_col_alt, dm_velocity_text_rgt_alt ; top, bottom, left, right | |
938 ;bra TFT_velocity_clear_graph ; continue with graphical VSI | |
939 | |
398
1f2e35f5a5aa
BUGFIX: Make sure SP1 is always selected on start in Auto-SP mode
heinrichsweikamp
parents:
394
diff
changeset
|
940 TFT_velocity_clear_graph: |
623 | 941 btfss velocity_active_vsi ; was the graphical VSI shown in last cycle? |
942 bra TFT_standard_color ; NO - no need to clear it, done | |
943 TFT_velocity_graph_clear_1: | |
944 bcf velocity_active_vsi ; YES - clear flag | |
945 btfsc alt_layout_active ; - in alternative layout? | |
946 bra TFT_standard_color ; YES - not implemented | |
947 ;bra TFT_velocity_clear_graph_alt ; YES - code provision for future implementation | |
948 ;bra TFT_velocity_clear_graph_norm ; NO | |
949 | |
950 TFT_velocity_clear_graph_norm ; clear normal graph area | |
951 WIN_BOX_BLACK dm_velocity_graph_top, dm_velocity_graph_bot, dm_velocity_graph_lft, dm_velocity_graph_rgt ; top, bottom, left, right | |
952 bra TFT_standard_color ; done | |
0 | 953 |
307
14719662fb95
Merged Screen layout work #4 into VSItextv2
Janos Kovacs <kovjanos@gmail.com>
parents:
303
diff
changeset
|
954 ;========================================================================= |
14719662fb95
Merged Screen layout work #4 into VSItextv2
Janos Kovacs <kovjanos@gmail.com>
parents:
303
diff
changeset
|
955 |
582 | 956 global TFT_clear_divemode_menu |
0 | 957 TFT_clear_divemode_menu: |
604 | 958 WIN_BOX_BLACK dm_menu_row-.2, dm_menu_lower, dm_menu_left, dm_menu_right ; top, bottom, left, right - starts 2 pixel higher to completely wipe away the temperature display |
0 | 959 return |
960 | |
560 | 961 |
623 | 962 global TFT_clear_deco_data |
963 TFT_clear_deco_data: | |
964 btfsc dive_main_menu ; is the dive mode menu shown? | |
965 return ; YES - abort | |
966 ; NO - clear deco data area (alternative stop depth makes upper-left most corner) | |
967 WIN_BOX_BLACK dm_decostop_row_alt_depth, dm_3rdrow_bot, dm_decostop_col_alt_depth, dm_3rdrow_rgt ; top, bottom, left, right | |
968 return ; - done | |
969 | |
970 | |
971 global TFT_show_ndl_mask | |
972 TFT_show_ndl_mask: | |
973 btfsc dive_main_menu ; is the dive mode menu shown? | |
974 return ; YES - abort | |
975 call TFT_divemask_color ; NO - set text color | |
976 ; - set position | |
582 | 977 WIN_STD dm_ndl_text_column, dm_ndl_text_row |
623 | 978 STRCPY_TEXT_PRINT tNDL ; - print "NDL" |
628 | 979 btfss deco_region ; - was the dive within deco stops region? |
980 bra TFT_standard_color ; NO - done | |
981 btfsc safety_stop_active ; YES - safety stop shown? | |
982 bra TFT_standard_color ; YES - done | |
983 TFT_show_slow_reminder: | |
984 call TFT_attention_color ; NO - set color | |
985 ; - set position | |
986 WIN_STD dm_safetystop_text_column+.5,dm_safetystop_text_row+.5 | |
987 STRCPY_TEXT tSlow ; - print "SLOW" reminder | |
988 STRCAT_PRINT 0x94 ; - append an up-arrow | |
989 bra TFT_standard_color ; - done | |
623 | 990 |
991 | |
992 global TFT_show_tts | |
993 TFT_show_tts: | |
994 btfsc dive_main_menu ; is the dive mode menu shown? | |
995 return ; YES - abort | |
996 call TFT_memo_color ; NO - default to memo color | |
997 MOVII int_O_TTS_norm,mpr ; - get the TTS | |
998 btfsc hi,int_invalid_flag ; - is the invalid flag set? | |
999 call TFT_disabled_color ; YES - use disabled color | |
631 | 1000 bcf hi,int_invalid_flag ; - clear the invalid flag if applicable |
623 | 1001 btfss alt_layout_active ; - in alternative layout? |
1002 bra TFT_display_tts_999x ; NO | |
1003 MOVII mpr, sub_a ; YES - copy TTS to sub_a | |
1004 MOVLI .100,sub_b ; - load 100 into sub_b | |
1005 call cmpU16 ; - sub_a - sub_b = TTS - 100 | |
1006 btfss neg_flag ; - TTS >= 100 ? | |
1007 bra TFT_display_tts_999 ; YES | |
1008 ;bra TFT_display_tts_99 ; NO | |
1009 | |
1010 TFT_display_tts_99: | |
1011 btfsc tts_greater_99 ; was TTS > 99 mins last time? | |
1012 rcall TFT_display_tts_clear ; YES - clear remains from TTS > 99 | |
1013 ; set output position | |
1014 WIN_MEDIUM dm_tts_value_col_99, dm_tts_value_row | |
1015 output_99 ; display 0...99 | |
1016 STRCAT_PRINT "'" ; print "'" | |
1017 bcf tts_greater_99 ; last TTS shown was <= 99 mins | |
1018 bra TFT_standard_color ; done | |
1019 | |
1020 TFT_display_tts_999: ; set position | |
1021 WIN_MEDIUM dm_tts_value_col_999, dm_tts_value_row | |
1022 output_16_3 ; display 0...999 | |
1023 STRCAT_PRINT "" ; finalize output (no "'" here - not enough space available) | |
1024 bsf tts_greater_99 ; last TTS shown was > 99 mins | |
1025 bra TFT_standard_color ; done | |
1026 | |
1027 TFT_display_tts_999x: ; set position | |
1028 WIN_MEDIUM dm_tts_value_col_999x, dm_tts_value_row | |
1029 output_16_3 ; display 0...999 | |
1030 STRCAT_PRINT "'" ; print "'" | |
1031 bra TFT_standard_color ; done | |
1032 | |
1033 TFT_display_tts_clear: ; clear remains from TTS > 99 | |
1034 WIN_BOX_BLACK dm_tts_value_row, dm_tts_value_row+.31, dm_tts_value_col_999, dm_tts_value_col_99 ; top, bottom, left, right | |
1035 call TFT_memo_color ; restore default memo color | |
1036 movff int_O_TTS_norm+1,WREG ; get the high byte of the TTS | |
1037 btfsc WREG,int_invalid_flag ; is the invalid flag set? | |
1038 call TFT_disabled_color ; YES - restore disabled color | |
1039 return ; done | |
1040 | |
1041 | |
1042 global TFT_show_ndl | |
1043 TFT_show_ndl: | |
1044 btfsc dive_main_menu ; is the dive mode menu shown? | |
1045 return ; YES - abort | |
631 | 1046 call TFT_memo_color ; NO - set color |
1047 movff int_O_NDL_norm+1,lo ; - get high byte of NDL time in normal plan | |
1048 btfsc lo,int_invalid_flag ; - is the invalid flag set? | |
1049 call TFT_disabled_color ; YES - switch to disabled color | |
1050 movff int_O_NDL_norm+0,lo ; - get low byte of NDL time in normal plan | |
628 | 1051 btfsc deco_locked ; - was the dive in deco? |
1052 bra TFT_show_ndl_norm ; YES - use normal layout | |
1053 btfsc alt_layout_active ; NO - alternative layout active? | |
1054 bra TFT_show_ndl_alt ; YES - use alternative layout | |
1055 ;bra TFT_show_ndl_norm ; NO - use normal layout | |
623 | 1056 |
1057 TFT_show_ndl_norm: ; set position | |
1058 WIN_MEDIUM dm_ndl_value_col_norm,dm_ndl_value_row_norm | |
1059 output_8 ; display 0...240 | |
628 | 1060 TFT_show_ndl_exit_1: |
623 | 1061 STRCAT_PRINT "'" ; print minutes symbol |
628 | 1062 TFT_show_ndl_exit_2: |
1063 goto TFT_standard_color ; done | |
623 | 1064 |
1065 TFT_show_ndl_alt: | |
1066 btfsc safety_stop_active ; is the safety stop active? | |
1067 bra TFT_show_ndl_alt_safety ; YES | |
1068 ; clear potential remains from NDL normal and set position | |
1069 WIN_BOX_BLACK dm_ndl_value_row_norm, dm_3rdrow_bot, dm_ndl_value_col_norm, dm_ndl_value_col_alt ; top, bottom, left, right | |
1070 WIN_LARGE dm_ndl_value_col_alt, dm_ndl_value_row_alt | |
1071 output_99 ; display 0...99 | |
1072 STRCAT_PRINT "" ; finalize output | |
628 | 1073 bra TFT_show_ndl_exit_2 ; done |
623 | 1074 |
1075 TFT_show_ndl_alt_safety: | |
1076 WIN_MEDIUM dm_ndl_value_col_norm,dm_ndl_value_row_norm | |
1077 PUTC " " ; fill first digit position | |
1078 output_99 ; display 0...99 | |
628 | 1079 bra TFT_show_ndl_exit_1 ; print minutes symbol and done |
623 | 1080 |
1081 | |
1082 global TFT_divemode_sign_show | |
1083 TFT_divemode_sign_show: | |
1084 btfsc alt_layout_active ; alternative layout active? | |
1085 bra TFT_divemode_sign_show_alt ; YES | |
1086 ;bra TFT_divemode_sign_show_norm ; NO | |
1087 | |
1088 TFT_divemode_sign_show_norm: | |
1089 WIN_TOP dm_sign_row_norm ; set row position | |
1090 WIN_LEFT dm_sign_col_norm ; set column position | |
1091 bra TFT_divemode_sign_show_com ; continue with common part | |
1092 | |
1093 TFT_divemode_sign_show_alt: | |
1094 btfsc dive_main_menu ; is the dive mode menu shown? | |
1095 return ; YES - abort | |
1096 btfsc sign_shown ; NO - sign already shown? | |
1097 bra TFT_divemode_sign_show_alt_1; YES - no need to clear area again | |
1098 btfsc bailout_mode ; NO - in bailout? | |
1099 bra TFT_divemode_sign_show_alt_1; YES - no need to clear the area | |
631 | 1100 ; NO - clear area from "bar" label and loop mode if applicable |
623 | 1101 WIN_BOX_BLACK dm_active_dil_row, dm_3rdrow_bot, dm_active_sp_label_col, dm_sign_rgt_alt ; top, bottom, left, right |
1102 TFT_divemode_sign_show_alt_1: | |
1103 WIN_TOP dm_sign_row_alt ; - set row position | |
1104 WIN_LEFT dm_sign_col_alt ; - set column position | |
1105 ;bra TFT_divemode_sign_show_com ; - continue with common part | |
1106 | |
1107 TFT_divemode_sign_show_com: | |
1108 bsf sign_shown ; flag that the advice/attention/warning sign is shown | |
1109 btfsc message_warning ; do we have a warning? | |
1110 bra TFT_divemode_sign_show_warn ; YES - show warning sign | |
1111 btfsc message_attention ; NO - do we have an attention? | |
1112 bra TFT_divemode_sign_show_att ; YES - show attention sign | |
1113 btfsc message_advice ; NO - do we have an advice message? | |
1114 bra TFT_divemode_sign_show_adv ; YES - show advice sign | |
1115 return ; NO - false alarm | |
1116 | |
1117 | |
1118 TFT_divemode_sign_color_warn: ; custom colors table for dive_warning2 icon - warning | |
1119 db .4, 0 ; #colors, spare | |
1120 dw 0x0000 ; color 0x00: outside black | |
1121 dw 0xff80 ; color 0x01: triangle yellow | |
1122 dw 0xff80 ; color 0x02: exclamation mark yellow | |
1123 dw 0xf800 ; color 0x03: inside red | |
1124 | |
1125 TFT_divemode_sign_color_adv: ; custom colors table for dive_warning2 icon - advice | |
1126 db .4, 0 ; #colors, spare | |
1127 dw 0x0000 ; color 0x00: outside black | |
1128 dw 0xffff ; color 0x01: triangle white | |
1129 dw 0xffff ; color 0x02: exclamation mark white | |
1130 dw 0x0780 ; color 0x03: inside green | |
1131 | |
1132 TFT_divemode_sign_show_warn: | |
1133 TFT_WRITE_PROM_IMAGE_CUST_COLOR TFT_divemode_sign_color_warn; set custom colors for warning | |
1134 TFT_WRITE_PROM_IMAGE_BY_LABEL dive_warning2_block ; show sign | |
1135 return ; done | |
1136 | |
1137 TFT_divemode_sign_show_att: | |
1138 TFT_WRITE_PROM_IMAGE_BY_LABEL dive_warning2_block ; show sign (with default colors) | |
1139 return ; done | |
1140 | |
1141 TFT_divemode_sign_show_adv: | |
1142 TFT_WRITE_PROM_IMAGE_CUST_COLOR TFT_divemode_sign_color_adv ; set custom colors for advice | |
1143 TFT_WRITE_PROM_IMAGE_BY_LABEL dive_warning2_block ; show sign | |
1144 return ; done | |
1145 | |
1146 | |
1147 global TFT_divemode_sign_clear | |
1148 TFT_divemode_sign_clear: | |
1149 btfss sign_shown ; is the advice/attention/warning sign shown? | |
1150 return ; NO - done | |
1151 bcf sign_shown ; YES - clear advice/attention/warning sign area and its flag | |
1152 btfsc alt_layout_active ; - alternative layout active? | |
1153 bra TFT_divemode_sign_clear_alt ; - YES | |
1154 ;bra TFT_divemode_sign_clear_norm; - NO | |
1155 | |
1156 TFT_divemode_sign_clear_norm: | |
1157 WIN_BOX_BLACK dm_sign_row_norm, dm_sign_bot_norm, dm_sign_col_norm, dm_sign_rgt_norm ; top, bottom, left, right | |
1158 return ; done | |
1159 | |
1160 TFT_divemode_sign_clear_alt: | |
1161 WIN_BOX_BLACK dm_sign_row_alt, dm_sign_bot_alt, dm_sign_col_alt, dm_sign_rgt_alt ; top, bottom, left, right | |
1162 return ; done | |
1163 | |
1164 | |
1165 global TFT_show_deco_mask | |
1166 TFT_show_deco_mask: | |
1167 bcf safety_stop_active ; flag safety stop is not shown any more TODO: needed? | |
1168 btfsc dive_main_menu ; is the dive mode menu shown? | |
1169 return ; YES - abort | |
1170 btfsc alt_layout_active ; NO - in alternative layout? | |
1171 bra TFT_show_deco_mask_alt ; YES | |
1172 ;bra TFT_show_deco_mask_norm ; NO | |
1173 | |
1174 TFT_show_deco_mask_norm: | |
1175 WIN_STD dm_tts_text_col_norm, dm_tts_text_row_norm ; set text position | |
1176 bra TFT_show_deco_mask_common ; continue with common part | |
1177 | |
1178 TFT_show_deco_mask_alt: | |
1179 WIN_TINY dm_tts_text_col_alt, dm_tts_text_row_alt ; set text position | |
1180 STRCPY "Stop/" ; print "Stop/" | |
1181 ;bra TFT_show_deco_mask_common ; continue with common part | |
1182 | |
1183 TFT_show_deco_mask_common: | |
1184 call TFT_divemask_color ; set text color | |
1185 STRCAT_TEXT_PRINT tTTS ; print "TTS" | |
1186 bra TFT_display_exit_1 ; done | |
1187 | |
1188 | |
1189 TFT_display_deco_depth: ; output depth (stored in lo) to POSTINC2 with "m" or "ft" | |
1190 TSTOSS opt_units ; get unit (0=m, 1=ft) | |
1191 bra TFT_display_deco_depth_m ; 0 - meter | |
1192 ;bra TFT_display_deco_depth_ft ; 1 - feet | |
1193 | |
1194 TFT_display_deco_depth_ft: | |
1195 call convert_meter_to_feet ; convert value in lo from meters to feet | |
1196 output_16_3 ; output stop depth (000-999) | |
1197 return ; done | |
1198 | |
1199 TFT_display_deco_depth_m: | |
1200 output_99 ; output stop depth | |
1201 STRCAT_TEXT tMeters ; print unit | |
1202 return ; done | |
1203 | |
1204 | |
1205 global TFT_show_deco | |
1206 TFT_show_deco: | |
1207 btfsc dive_main_menu ; is the dive mode menu shown? | |
1208 return ; YES - abort | |
1209 | |
1210 call TFT_color_code_stop ; color-code output | |
1211 movff char_O_deco_depth,lo ; get depth of first stop in meters | |
1212 | |
1213 TSTOSC opt_units ; get unit (0=m, 1=ft) | |
1214 bra TFT_show_deco_norm ; 1 - ft can only be displayed in normal layout due to space required for 3 digit depth | |
1215 | |
1216 btfsc alt_layout_active ; in alternative layout? | |
1217 bra TFT_show_deco_alt ; YES | |
1218 ;bra TFT_show_deco_norm ; NO | |
1219 | |
1220 TFT_show_deco_norm: ; set position for combined depth and time | |
1221 WIN_MEDIUM dm_decostop_col_norm, dm_decostop_row_norm | |
1222 rcall TFT_display_deco_depth ; output depth (stored in lo) to POSTINC2 with "m" or "ft" | |
1223 PUTC ' ' ; put a space char between depth and time | |
1224 bra TFT_display_deco_common ; continue with common part | |
1225 | |
1226 TFT_show_deco_alt: ; set position for depth | |
1227 WIN_LARGE dm_decostop_col_alt_depth, dm_decostop_row_alt_depth | |
1228 output_99 ; output stop depth (2 digits, usable for meters only) | |
1229 STRCAT_PRINT "" ; finalize output | |
1230 ; set position for time | |
1231 WIN_MEDIUM dm_decostop_col_alt_time, dm_decostop_row_alt_time | |
1232 call TFT_memo_color ; back to memo color | |
1233 bcf win_invert ; back to non-inverted output | |
1234 ;bra TFT_display_deco_common ; continue with common part | |
1235 | |
1236 TFT_display_deco_common: | |
1237 movff char_O_deco_time,lo ; get stop time of the first stop in minutes | |
628 | 1238 output_99DD ; print minutes or double dots if null |
623 | 1239 STRCAT_PRINT "'" ; add minutes sign |
1240 bcf win_invert ; back to non-inverted output | |
1241 TFT_display_exit_1: | |
582 | 1242 goto TFT_standard_color ; and return... |
604 | 1243 |
1244 | |
1245 global TFT_decoplan_mask ; mask for deco plan | |
1246 TFT_decoplan_mask: | |
582 | 1247 call TFT_divemask_color |
604 | 1248 WIN_TINY dm_custom_decoplan_title_column, dm_custom_decoplan_title_row |
582 | 1249 STRCPY_TEXT_PRINT tDiveDecoplan |
604 | 1250 return |
1251 | |
623 | 1252 |
604 | 1253 global TFT_decoplan ; data for deco plan - stops 2 - 7 (stop 1 is shown in the main screen) |
1254 TFT_decoplan: | |
1255 lfsr FSR0,char_O_deco_depth ; load base address of stops table | |
1256 clrf ex ; will be used for auxiliary flags | |
1257 call TFT_memo_color ; set default output color | |
560 | 1258 movff char_O_deco_gas+0,lo ; get flag for invalid deco data |
1259 btfsc lo,char_invalid_flag ; is the invalid flag set? | |
1260 call TFT_disabled_color ; YES - set to disabled color | |
604 | 1261 ; 2nd stop |
1262 WIN_SMALL dm_cust_dstop_2nd_stop_column, dm_cust_dstop_2nd_stop_row | |
1263 rcall TFT_decoplan_helper | |
1264 ; 3rd stop | |
1265 WIN_SMALL dm_cust_dstop_3rd_stop_column, dm_cust_dstop_3rd_stop_row | |
1266 rcall TFT_decoplan_helper | |
1267 ; 4th stop | |
1268 bsf ex,4 ; flag we are on 4th screen position | |
1269 WIN_SMALL dm_cust_dstop_4th_stop_column, dm_cust_dstop_4th_stop_row | |
1270 rcall TFT_decoplan_helper | |
1271 bcf ex,4 ; clear 4th position flag again | |
1272 ; 5th stop | |
1273 WIN_SMALL dm_cust_dstop_5th_stop_column, dm_cust_dstop_5th_stop_row | |
1274 rcall TFT_decoplan_helper | |
1275 ; 6th stop | |
1276 WIN_SMALL dm_cust_dstop_6th_stop_column, dm_cust_dstop_6th_stop_row | |
1277 rcall TFT_decoplan_helper | |
1278 ; 7th stop | |
1279 WIN_SMALL dm_cust_dstop_7th_stop_column, dm_cust_dstop_7th_stop_row | |
1280 rcall TFT_decoplan_helper | |
1281 bra TFT_display_exit_1 ; set standard color and return... | |
1282 | |
1283 TFT_decoplan_helper: | |
1284 btfsc ex,0 ; no more stops to show? | |
1285 bra TFT_decoplan_helper_1 ; YES - skip checking next entry - it will be empty, too | |
1286 movff PREINC0,lo ; NO - advance pointer to get the depth of the 2nd, 3rd, 4th, ... stop | |
1287 tstfsz lo ; is the stop depth = 0, i.e. no stop entry? | |
1288 bra TFT_decoplan_helper_3 ; NO - show stop data | |
1289 TFT_decoplan_helper_1: ; no more stop table entries | |
1290 bsf ex,0 ; flag that there are no more stop table entries | |
1291 btfss ex,4 ; are we on the 4th screen position? | |
1292 bra TFT_decoplan_helper_2 ; NO - normal handling on this position | |
1293 btfsc ex,1 ; YES - special handling, has any stop been shown? | |
1294 bra TFT_decoplan_helper_2 ; YES - print normal blanking | |
1295 STRCPY_PRINT " ---- " ; NO - print a "no stops" indication (blanking potential previous content, too) | |
1296 return | |
1297 TFT_decoplan_helper_2: ; no more stop table entries, blank potential previous content | |
1298 STRCPY_PRINT " " ; wipe screen position by printing 7 spaces | |
1299 return | |
1300 TFT_decoplan_helper_3: | |
623 | 1301 rcall TFT_display_deco_depth ; output depth (stored in lo) to POSTINC2 |
1302 PUTC " " ; put a space char between depth and time | |
604 | 1303 movlw NUM_STOPS ; offset between arrays holding depths and durations |
1304 movff PLUSW0,lo ; get duration of the current stop | |
628 | 1305 output_99dd ; print duration, prints double dots if duration is zero |
604 | 1306 STRCAT_PRINT "'" ; append symbol for minutes and print to screen |
1307 bsf ex,1 ; flag that a stop was shown | |
1308 return | |
560 | 1309 |
0 | 1310 |
623 | 1311 global TFT_safety_stop_clear |
1312 TFT_safety_stop_clear: | |
1313 btfsc dive_main_menu ; is the dive mode menu shown? | |
1314 return ; YES - abort | |
1315 btfss safety_stop_active ; NO - is the safety stop shown? | |
1316 return ; NO - done, nothing to do | |
1317 ; YES - clear safety stop area | |
1318 WIN_BOX_BLACK dm_safetystop_row, dm_safetystop_bot, dm_safetystop_text_column, dm_safetystop_rgt ; top, bottom, left, right | |
1319 bcf safety_stop_active ; - safety stop not shown any more | |
628 | 1320 btfsc deco_region ; - was the dive within deco stops region? |
1321 bra TFT_show_slow_reminder ; YES - show "SLOW" reminder | |
1322 return ; NO - done | |
623 | 1323 |
1324 | |
1325 global TFT_safety_stop_show | |
1326 TFT_safety_stop_show: | |
1327 btfsc dive_main_menu ; is the dive mode menu shown? | |
1328 return ; YES - abort | |
1329 btfsc safety_stop_active ; NO - is the safety stop shown already? | |
1330 bra TFT_safety_stop_show_time ; YES - just update the time | |
1331 ; NO - clear area that may be polluted by alternative NDL | |
1332 WIN_BOX_BLACK dm_safetystop_row, dm_tts_value_row, dm_ndl_value_col_alt, dm_safetystop_rgt ; top, bottom, left, right | |
1333 call TFT_divemask_color ; - set color for text | |
628 | 1334 bsf safety_stop_active ; - flag safety stop is shown now |
623 | 1335 ; - set position for text |
604 | 1336 WIN_STD dm_safetystop_text_column, dm_safetystop_text_row |
628 | 1337 STRCPY_PRINT "Stop " ; - print "Stop" with a trailing space to wipe away potential other remains |
623 | 1338 TFT_safety_stop_show_time: |
1339 call TFT_attention_color ; set color for time | |
1340 ; set position for time | |
1341 WIN_MEDIUM dm_safetystop_column, dm_safetystop_row | |
1342 movff safety_stop_countdown,lo ; get remaining time in seconds, low byte, from safety stop timer | |
1343 clrf hi ; set remaining time in seconds, high byte, to zero | |
1344 call convert_time ; convert hi:lo in seconds to minutes (up:hi) and seconds (lo) | |
1345 movff lo,up ; save seconds in up | |
1346 movff hi,lo ; move minutes to lo | |
1347 bsf leftbind ; activate left-alignment | |
1348 output_8 ; print minutes | |
1349 bcf leftbind ; deactivate left-alignment | |
1350 PUTC ':' ; print ":" | |
1351 movff up,lo ; move seconds to lo | |
1352 output_99x ; print seconds (2 digits with leading zero) | |
1353 STRCAT_PRINT "" ; finalize output | |
1354 bra TFT_display_exit_1 ; done | |
604 | 1355 |
1356 | |
1357 global TFT_avr_stopwatch_mask ; mask for average depth and stopwatch | |
1358 TFT_avr_stopwatch_mask: | |
582 | 1359 call TFT_divemask_color |
623 | 1360 |
1361 IFNDEF _min_depth_option | |
1362 | |
604 | 1363 WIN_TINY dm_custom_avr_stop_column1+.2,dm_custom_avr_stop_title_row |
628 | 1364 TSTOSS opt_2ndDepthDisp ; show avg depth instead of max depth in main screen? |
604 | 1365 bra TFT_avr_stopwatch_mask_1 ; NO - draw avg depth in custom view then |
628 | 1366 btfss alt_layout_active ; YES - in alternative layout? |
1367 bra TFT_avr_stopwatch_mask_max ; NO - show max depth | |
1368 ;bra TFT_avr_stopwatch_mask_avg ; YES - show avg depth | |
1369 TFT_avr_stopwatch_mask_avg: | |
1370 STRCPY_TEXT_PRINT tDiveTotalAvg ; mask for average depth | |
1371 bra TFT_avr_stopwatch_mask_2 ; continue | |
604 | 1372 TFT_avr_stopwatch_mask_1: |
628 | 1373 btfss alt_layout_active ; YES - in alternative layout? |
1374 bra TFT_avr_stopwatch_mask_avg ; NO - show avg depth | |
1375 ;bra TFT_avr_stopwatch_mask_max ; YES - show max depth | |
1376 TFT_avr_stopwatch_mask_max: | |
1377 STRCPY_TEXT_PRINT tMaxDepth ; mask for maximum depth | |
1378 ;bra TFT_avr_stopwatch_mask_2 ; continue | |
604 | 1379 TFT_avr_stopwatch_mask_2: |
1380 WIN_TINY dm_custom_avr_stop_column2+.3,dm_custom_avr_stop_title_row | |
582 | 1381 STRCPY_TEXT_PRINT tDiveStopwatch |
604 | 1382 WIN_TINY dm_custom_avr_stop_column3-.8,dm_custom_avr_stop_title_row |
582 | 1383 STRCPY_TEXT_PRINT tDiveStopAvg |
604 | 1384 bra TFT_display_exit_1 |
1385 | |
623 | 1386 ELSE |
1387 | |
1388 WIN_TINY dm_custom_avr_stop_column1+.2,dm_custom_avr_stop_title_row | |
1389 STRCPY_PRINT "Max.Depth" | |
1390 WIN_TINY dm_custom_avr_stop_column2+.3,dm_custom_avr_stop_title_row | |
1391 STRCPY_PRINT "Avg.Depth" | |
1392 WIN_TINY dm_custom_avr_stop_column3-.8,dm_custom_avr_stop_title_row | |
1393 STRCPY_PRINT "Min.Depth" | |
1394 bra TFT_display_exit_1 | |
1395 | |
1396 ENDIF | |
1397 | |
604 | 1398 |
631 | 1399 global TFT_avr_stopwatch ; dive mode custom view: average depth and stopwatch |
604 | 1400 TFT_avr_stopwatch: |
1401 call TFT_memo_color | |
1402 | |
623 | 1403 IFNDEF _min_depth_option |
1404 | |
604 | 1405 ; total average depth or max depth |
1406 WIN_MEDIUM dm_custom_avr_stop_column1,dm_custom_avr_stop_row | |
628 | 1407 TSTOSS opt_2ndDepthDisp ; show average depth instead of maximum depth in main screen? |
1408 | |
1409 bra TFT_avr_stopwatch_1 ; NO - draw avg depth in custom view then | |
1410 btfss alt_layout_active ; YES - in alternative layout? | |
1411 bra TFT_avr_stopwatch_max ; NO - show max depth | |
1412 ;bra TFT_avr_stopwatch_avg ; YES - show avg depth | |
1413 TFT_avr_stopwatch_avg: | |
631 | 1414 MOVII pressure_rel_avg_total,mpr ; get total dive average pressure into hi:lo |
628 | 1415 bra TFT_avr_stopwatch_2 ; continue |
1416 TFT_avr_stopwatch_1: | |
1417 btfss alt_layout_active ; YES - in alternative layout? | |
1418 bra TFT_avr_stopwatch_avg ; NO - show avg depth | |
1419 ;bra TFT_avr_stopwatch_max ; YES - show max depth | |
1420 TFT_avr_stopwatch_max: | |
631 | 1421 MOVII pressure_rel_max_cached,mpr ; get maximum pressure into hi:lo |
628 | 1422 ;bra TFT_avr_stopwatch_2 ; continue |
1423 TFT_avr_stopwatch_2: | |
631 | 1424 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] |
604 | 1425 TSTOSS opt_units ; 0=m, 1=ft |
1426 bra TFT_update_avr_stopwatch1_metric ; 0 - metric | |
623 | 1427 TFT_update_avr_stopwatch1_imp: ; 1 - imperial |
631 | 1428 call convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
1429 output_16_3 ; yxz | |
604 | 1430 bra TFT_update_avr_stopwatch2 |
1431 TFT_update_avr_stopwatch1_metric: | |
631 | 1432 bsf leftbind |
604 | 1433 bsf ignore_digit5 ; no cm (flag will be cleared by output_16) |
1434 output_16dp .3 ; yxz.a | |
1435 PUTC " " ; wipe out remains from last output | |
1436 clrf WREG | |
1437 movff WREG,buffer+.4 ; limit string length to 4 = 3 digits + 1 half-size decimal dot | |
1438 TFT_update_avr_stopwatch2: | |
1439 STRCAT_PRINT "" | |
1440 | |
1441 ; stopped average depth | |
1442 WIN_MEDIUM dm_custom_avr_stop_column3,dm_custom_avr_stop_row | |
631 | 1443 MOVII pressure_rel_avg_trip,mpr ; get the resettable average pressure |
1444 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] | |
604 | 1445 TSTOSS opt_units ; 0=m, 1=ft |
1446 bra TFT_update_avr_stopwatch2_metric ; 0 - metric | |
623 | 1447 TFT_update_avr_stopwatch2_imp: ; 1 - imperial |
631 | 1448 call convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
1449 output_16_3 ; yxz | |
604 | 1450 bra TFT_update_avr_stopwatch3 |
1451 TFT_update_avr_stopwatch2_metric: | |
631 | 1452 bsf leftbind |
604 | 1453 bsf ignore_digit5 ; no cm (flag will be cleared by output_16) |
582 | 1454 output_16dp .3 ; yxz.a |
604 | 1455 PUTC " " ; wipe out remains from last output |
589
8a7d2d8bcd33
limit string length to 4 digits/chars in average depth
heinrichsweikamp
parents:
587
diff
changeset
|
1456 clrf WREG |
604 | 1457 movff WREG,buffer+.4 ; limit string length to 4 = 3 digits + 1 half-size decimal dot |
1458 TFT_update_avr_stopwatch3: | |
623 | 1459 STRCAT_PRINT "" ; finalize output |
1460 | |
1461 ELSE | |
1462 | |
1463 ; resettable maximum depth - needs ISR-safe copy! | |
1464 WIN_MEDIUM dm_custom_avr_stop_column1,dm_custom_avr_stop_row ; column 0 | |
1465 call TFT_memo_color | |
631 | 1466 SMOVII pressure_rel_max_trip,mpr ; get resettable maximum pressure |
623 | 1467 rcall TFT_avr_stopwatch_helper |
1468 | |
1469 ; resettable average depth | |
1470 WIN_MEDIUM dm_custom_avr_stop_column2-.1,dm_custom_avr_stop_row ; column 54 - 1 = 53 | |
1471 call TFT_attention_color | |
631 | 1472 MOVII pressure_rel_avg_trip,mpr ; get resettable average pressure |
623 | 1473 rcall TFT_avr_stopwatch_helper |
1474 | |
1475 ; resettable minimum depth - needs ISR safe copy! | |
1476 WIN_MEDIUM dm_custom_avr_stop_column3-.12,dm_custom_avr_stop_row ; column 118 - 12 = 106 | |
1477 call TFT_memo_color | |
631 | 1478 SMOVII pressure_rel_min_trip,mpr ; get resettable minimum pressure |
623 | 1479 rcall TFT_avr_stopwatch_helper |
1480 | |
1481 ; done | |
1482 bra TFT_display_exit_2 | |
1483 | |
1484 TFT_avr_stopwatch_helper: | |
631 | 1485 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] |
623 | 1486 output_16dp .3 ; yxz.ab |
1487 PUTC " " ; wipe out remains from last output | |
1488 clrf WREG | |
1489 movff WREG,buffer+.5 ; limit string length to 5 = 4 digits + 1 half-size decimal dot | |
582 | 1490 STRCAT_PRINT "" |
623 | 1491 return |
1492 | |
1493 ENDIF | |
1494 | |
1495 ; stopped dive time (will also be used by compass custom view) | |
604 | 1496 WIN_MEDIUM dm_custom_avr_stop_column2,dm_custom_avr_stop_row |
1497 TFT_update_stopwatch: ; jump-in point for stopped dive time in compass custom view | |
623 | 1498 MOVII divesecs_avg_trip,mpr ; get the resettable dive time (stopwatch) |
1499 call convert_time ; convert hi:lo in seconds to minutes (up:hi) and seconds (lo) | |
604 | 1500 movlw .100 ; display layout will change if minutes become >= 100 |
1501 cpfslt hi ; minutes < 100 ? | |
1502 bra TFT_update_stopwatch_2 ; NO - display hours:minutes | |
628 | 1503 bcf aux_flag ; will print minutes : seconds |
604 | 1504 TFT_update_stopwatch_1: |
1505 movf hi,W ; exchange lo and hi | |
1506 movff lo,hi ; ... | |
1507 movwf lo ; ... | |
628 | 1508 bcf leftbind ; include leading spaces |
1509 output_99 ; output minutes or hours ( 0 - 99) | |
1510 movlw ":" ; load standard separator | |
1511 btfsc aux_flag ; will print hours : minutes ? | |
1512 movlw "'" ; YES - swap to alternative separator | |
1513 movwf POSTINC2 ; print separator | |
604 | 1514 movff hi,lo ; restore lo |
1515 output_99x ; output seconds or minutes | |
1516 movlw .5 | |
1517 call TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
1518 clrf WREG | |
1519 movff WREG,buffer+.5 ; limit to 5 chars | |
1520 STRCAT_PRINT "" | |
631 | 1521 bra TFT_display_exit_2 ; clear leftbind and return |
604 | 1522 TFT_update_stopwatch_2: |
1523 movff hi,lo ; transfer minutes (low byte) to lo | |
1524 movff up,hi ; transfer minutes (high byte) to hi | |
623 | 1525 call convert_time ; convert hi:lo in minutes to hours (up:hi) and minutes (lo) |
628 | 1526 bsf aux_flag ; will print hours : minutes |
604 | 1527 bra TFT_update_stopwatch_1 |
560 | 1528 |
1529 | |
1530 global TFT_CNS_mask | |
1531 TFT_CNS_mask: | |
582 | 1532 call TFT_divemask_color |
604 | 1533 WIN_TINY dm_custom_cns3_column1, dm_custom_cns3_title_row |
582 | 1534 STRCPY_TEXT_PRINT tCNSsurf |
604 | 1535 WIN_TINY dm_custom_cns3_column2, dm_custom_cns3_title_row |
631 | 1536 |
1537 IFDEF _cave_mode | |
1538 btfss cave_mode ; cave mode switched on? | |
1539 bra TFT_CNS_mask_1 ; NO | |
1540 STRCPY_TEXT_PRINT tCNScave ; YES - print cave TTS label | |
1541 bra TFT_CNS_mask_3 ; - continue with 3rd column | |
1542 ENDIF | |
1543 | |
1544 TFT_CNS_mask_1: | |
604 | 1545 btfsc FLAG_oc_mode ; in OC mode? |
631 | 1546 bra TFT_CNS_mask_2 ; YES - print fTTS label |
623 | 1547 btfsc bailout_mode ; in bailout? |
631 | 1548 bra TFT_CNS_mask_2 ; YES - print fTTS label (label will be printed, but a fTTS will actually not be calculated) |
1549 TSTOSS opt_calc_gasvolume ; bailout volume calculation requested? | |
1550 bra TFT_CNS_mask_2 ; NO - print fTTS label | |
604 | 1551 STRCPY_TEXT_PRINT tCNSBO ; YES - print bailout label |
631 | 1552 bra TFT_CNS_mask_3 ; - continue with 3rd column |
1553 TFT_CNS_mask_2: ; OC or bailout | |
604 | 1554 STRCPY_TEXT_PRINT tCNSfTTS ; print fTTS label |
631 | 1555 TFT_CNS_mask_3: |
604 | 1556 WIN_TINY dm_custom_cns3_column3, dm_custom_cns3_title_row |
631 | 1557 STRCPY_TEXT_PRINT tCNSnow ; print CNS now label |
604 | 1558 bra TFT_display_exit_2 |
1559 | |
582 | 1560 |
560 | 1561 global TFT_CNS |
1562 TFT_CNS: | |
604 | 1563 bsf leftbind |
560 | 1564 ; CNS at end of normal dive |
604 | 1565 WIN_STD dm_custom_cns3_column1+.3,dm_custom_cns3_row |
623 | 1566 MOVII int_O_CNS_norm,mpr ; get CNS at end of dive in normal plan |
582 | 1567 call TFT_color_code_cns |
604 | 1568 output_16_3 ; output as xxx |
582 | 1569 STRCAT_PRINT "% " |
560 | 1570 ; fTTS / Bailout CNS, if enabled |
604 | 1571 WIN_STD dm_custom_cns3_column2+.2,dm_custom_cns3_row |
623 | 1572 btfsc bailout_mode ; in bailout? |
604 | 1573 bra TFT_CNS_3 ; YES - show "---" |
631 | 1574 TSTOSS opt_calc_gasvolume ; NO - bailout volume calculation requested? |
604 | 1575 bra TFT_CNS_1 ; NO - continue checking fTTS extra time |
1576 btfss FLAG_oc_mode ; YES - in OC mode? | |
1577 bra TFT_CNS_2 ; NO - show CNS% | |
1578 TFT_CNS_1: ; not in bailout, no volume calculation, and/or in OC mode | |
1579 TSTOSS char_I_extra_time ; fTTS extra time configured? | |
1580 bra TFT_CNS_3 ; NO - show "---" | |
623 | 1581 TFT_CNS_2: ; YES - show CNS% |
1582 MOVII int_O_CNS_alt,mpr ; get CNS at end of dive in alternative plan | |
1583 call TFT_color_code_cns ; color-code the CNS value | |
604 | 1584 output_16_3 ; output as xxx |
582 | 1585 STRCAT_PRINT "% " |
560 | 1586 bra TFT_CNS_4 |
1587 TFT_CNS_3: | |
631 | 1588 IFDEF _cave_mode |
1589 btfss cave_mode ; cave mode switched on? | |
1590 bra TFT_CNS_3a ; NO - show dashes | |
1591 btfsc backtrack_entire_full ; YES - cave mode shut down due to storage fully used up? | |
1592 bra TFT_CNS_3a ; YES - show dashes | |
1593 btfss dive_turned ; NO - dive turned? | |
1594 bra TFT_CNS_2 ; NO - show cave CNS | |
1595 ;bra TFT_CNS_3a ; YES - show dashes | |
1596 ENDIF | |
1597 TFT_CNS_3a: | |
604 | 1598 call TFT_memo_color |
582 | 1599 STRCPY_PRINT "--- " |
560 | 1600 TFT_CNS_4: |
1601 ; current CNS | |
604 | 1602 WIN_STD dm_custom_cns3_column3+.3,dm_custom_cns3_row |
623 | 1603 MOVII int_O_CNS_current,mpr ; get current CNS |
582 | 1604 call TFT_color_code_cns |
604 | 1605 output_16_3 ; output as xxx |
582 | 1606 STRCAT_PRINT "%" |
604 | 1607 TFT_display_exit_2: |
1608 bcf leftbind | |
1609 goto TFT_standard_color ; and return... | |
1610 | |
631 | 1611 ;============================================================================= |
1612 | |
1613 IFDEF _cave_mode | |
1614 | |
1615 global TFT_cave_tts_mask ; mask for cave mode data | |
1616 TFT_cave_tts_mask: | |
1617 call TFT_divemask_color | |
1618 WIN_TINY dm_custom_cave_title_column1,dm_custom_cave_title_row | |
1619 STRCPY_TEXT_PRINT tCaveStops | |
1620 WIN_TINY dm_custom_cave_title_column2,dm_custom_cave_title_row | |
1621 STRCPY_TEXT_PRINT tCaveTTS | |
1622 WIN_TINY dm_custom_cave_title_column3,dm_custom_cave_title_row | |
1623 STRCPY_TEXT_PRINT tCaveRuntime | |
1624 bra TFT_display_exit_2 | |
1625 | |
1626 | |
1627 global TFT_cave_tts ; dive mode custom view: cave TTS | |
1628 TFT_cave_tts: | |
1629 ; total time of all stops | |
1630 WIN_MEDIUM dm_custom_cave_data_column1,dm_custom_cave_data_row ; column 8 | |
1631 call TFT_memo_color ; set default color | |
1632 btfss cave_mode ; cave mode switched on? | |
1633 bra TFT_cave_1b ; NO - print dashes | |
1634 MOVII int_O_TST_norm,mpr ; YES - get normal plan total stops time | |
1635 btfss mpr+1,int_not_yet_computed ; - not yet computed? | |
1636 bra TFT_cave_1a ; NO - continue | |
1637 call TFT_disabled_color ; YES - switch to disabled color | |
1638 bra TFT_cave_1b ; - print dashes | |
1639 TFT_cave_1a: | |
1640 btfsc mpr+1,int_invalid_flag ; stops time invalid? | |
1641 call TFT_disabled_color ; YES - switch to disabled color | |
1642 bcf mpr+1,int_invalid_flag ; clear invalid flag if applicable | |
1643 movf mpr+0,W ; copy low byte of stops time to WREG | |
1644 iorwf mpr+1,W ; ior with high byte of stops time | |
1645 bz TFT_cave_1b ; print dashes if stops time is zero | |
1646 output_16_3 ; output as xxx | |
1647 STRCAT_PRINT "'" ; print minutes symbol | |
1648 bra TFT_cave_2 ; continue | |
1649 TFT_cave_1b: | |
1650 STRCAT_PRINT ",-,-,-," ; print 3 dashes (',' produces a half-width space) | |
1651 TFT_cave_2: | |
1652 ; cave TTS | |
1653 WIN_MEDIUM dm_custom_cave_data_column2,dm_custom_cave_data_row ; column 60 | |
1654 call TFT_memo_color ; set default color | |
1655 btfsS cave_mode ; cave mode switched on? | |
1656 bra TFT_cave_2b ; NO - print dashes | |
1657 MOVII int_O_TTS_norm,mpr ; YES - get normal plan total time to surface | |
1658 btfss mpr+1,int_not_yet_computed ; - not yet computed? | |
1659 bra TFT_cave_2a ; NO - continue | |
1660 call TFT_disabled_color ; YES - switch to disabled color | |
1661 bra TFT_cave_2b ; - print dashes | |
1662 TFT_cave_2a: | |
1663 btfsc mpr+1,int_invalid_flag ; TTS invalid? | |
1664 call TFT_disabled_color ; YES - switch to disabled color | |
1665 bcf mpr+1,int_invalid_flag ; clear invalid flag if applicable | |
1666 output_16_3 ; output as xxx | |
1667 STRCAT_PRINT "'" ; print minutes symbol | |
1668 bra TFT_cave_3 ; continue | |
1669 TFT_cave_2b: | |
1670 STRCAT_PRINT ",-,-,-," ; print 3 dashes (',' produces a half-width space) | |
1671 TFT_cave_3: | |
1672 ; estimated total runtime | |
1673 WIN_MEDIUM dm_custom_cave_data_column3,dm_custom_cave_data_row ; column 114 | |
1674 ; ; keep color from cave TTS | |
1675 btfss cave_mode ; cave mode switched on? | |
1676 bra TFT_cave_3b ; NO - print dashes | |
1677 SMOVII counted_divetime_mins,mpr ; YES - ISR safe copy of counted dive time to MPR | |
1678 movff int_O_TTS_norm+0,WREG ; - get TTS, low byte, into WREG | |
1679 addwf mpr+0,F ; - add TTS, low byte, to dive time in MPR | |
1680 movff int_O_TTS_norm+1,WREG ; - get TTS, high byte, into WREG | |
1681 btfsc WREG,int_not_yet_computed ; - not yet computed? | |
1682 bra TFT_cave_3b ; YES - print dashes | |
1683 bcf WREG,int_invalid_flag ; NO - clear invalid flag if applicable | |
1684 addwfc mpr+1,F ; - add TTS, high byte, to dive time in MPR | |
1685 output_16_3 ; - output as xxx | |
1686 STRCAT_PRINT "'" ; - print minutes symbol | |
1687 bra TFT_display_exit_2 ; - done | |
1688 TFT_cave_3b: | |
1689 STRCAT_PRINT ",-,-,-," ; print 3 dashes (',' produces a half-width space) | |
1690 bra TFT_display_exit_2 ; done | |
1691 | |
1692 | |
1693 global TFT_cave_waypoints | |
1694 TFT_cave_waypoints: | |
1695 ; title row | |
1696 WIN_TINY .70,dm_custom_cave_title_row;adjust column to display position of current waypoint | |
1697 call TFT_divemask_color ; select color | |
1698 btfss cave_mode ; cave mode switched on? | |
1699 bra TFT_cave_waypoints_3 ; NO - do not show any marker (any more) | |
1700 btfss dive_turned ; YES - dive turned? | |
1701 bra TFT_cave_waypoints_1 ; NO - print marker on right side | |
1702 bra TFT_cave_waypoints_2 ; YES - print marker in the middle | |
1703 TFT_cave_waypoints_1: | |
1704 movlw .12 ; start with 12 space chars | |
1705 call TFT_fillup_with_spaces ; fill buffer with space chars | |
1706 TFT_cave_waypoints_2: | |
1707 STRCAT "<=====" ; print marker symbol | |
1708 TFT_cave_waypoints_3: | |
1709 movlw .18 ; set overall number of chars | |
1710 call TFT_fillup_with_spaces ; fill buffer with space chars | |
1711 STRCAT_PRINT "" ; finalize output | |
1712 ; data row | |
1713 btfsc cave_mode ; cave mode switched on? | |
1714 bra TFT_cave_waypoints_4 ; YES - show graphics | |
1715 WIN_STD .0,dm_custom_cave_data_row ; NO - show "Cave Mode off" text | |
1716 call TFT_attention_color ; - select attention color | |
1717 STRCPY " " ; - print 2 space chars | |
1718 STRCAT_TEXT tCaveMode ; - print "Cave Mode" | |
1719 PUTC " " ; - print a space char | |
1720 STRCAT_TEXT tOff ; - print "off" | |
1721 movlw .17 ; - set max number of chars | |
1722 call TFT_fillup_with_spaces ; - fill up FSR2 with spaces (total string length in #WREG) | |
1723 STRCAT_PRINT "" ; - finalize output | |
1724 return ; - done | |
1725 TFT_cave_waypoints_4: | |
1726 WIN_MEDIUM .0,dm_custom_cave_data_row; start in column 0 | |
1727 call TFT_memo_color ; select default color | |
1728 tstfsz DM_flags_cavereq ; any pending cave mode requests? | |
1729 call TFT_disabled_color ; YES - switch to disabled color | |
1730 ; 1st section: previous waypoint number or beginning line | |
1731 movlw .1 ; load a one into WREG | |
1732 cpfsgt backtrack_waypoint_num ; current waypoint number > 1 ? | |
1733 bra TFT_cave_waypoints_5 ; NO - print line segment only | |
1734 STRCAT ",-," ; YES - print one dash | |
1735 movff backtrack_waypoint_num,lo ; - copy current waypoint number to lo | |
1736 decf lo,F ; - create previous waypoint number | |
1737 output_99 ; - print previous waypoint number in two digit format | |
1738 STRCAT "," ; - print a half-space | |
1739 bra TFT_cave_waypoints_6 ; - continue with next section | |
1740 TFT_cave_waypoints_5: | |
1741 STRCAT ",-,-----" ; print line segment | |
1742 TFT_cave_waypoints_6: | |
1743 ; 2nd section: solid line | |
1744 STRCAT "---" ; print a solid line | |
1745 ; 3rd section: current waypoint number, turn point symbol or line segment | |
1746 tstfsz backtrack_waypoint_num ; does a current waypoint exist? | |
1747 bra TFT_cave_waypoints_8 ; YES - print its number or the turn point symbol | |
1748 btfss dive_turned ; NO - dive turned? | |
1749 bra TFT_cave_waypoints_7 ; NO - print a separated line segment | |
1750 STRCAT "------" ; YES - print a continuous line | |
1751 bra TFT_cave_waypoints_10 ; - continue with next section | |
1752 TFT_cave_waypoints_7: | |
1753 STRCAT ",----," ; print a separated line segment | |
1754 bra TFT_cave_waypoints_10 ; continue with next section | |
1755 TFT_cave_waypoints_8: | |
1756 STRCAT "," ; print a half-width space | |
1757 movff backtrack_waypoint_num,lo ; copy current waypoint number to lo | |
1758 movf backtrack_waypoint_turn,W ; copy turn point number to WREG | |
1759 cpfseq lo ; current waypoint = turn point ? | |
1760 bra TFT_cave_waypoints_9 ; NO - show waypoint number | |
1761 STRCAT_PRINT "--|, " ; YES - print end-of-line symbol, clear remaining output and finalize output | |
1762 return ; - done | |
1763 TFT_cave_waypoints_9: | |
1764 movff backtrack_waypoint_num,lo ; copy current waypoint number to lo | |
1765 output_99 ; print current waypoint number in two digit format | |
1766 STRCAT "," ; print a half-space | |
1767 TFT_cave_waypoints_10: | |
1768 ; 4th section: solid line | |
1769 STRCAT "---" ; print a solid line | |
1770 ; 5th section: next waypoint number or end of line symbol | |
1771 incf backtrack_waypoint_num,W ; load WREG with next waypoint number | |
1772 cpfseq backtrack_waypoint_turn ; next waypoint number = turn point number ? | |
1773 btfsc waypoint_reached_last ; NO - is the current waypoint the last waypoint? | |
1774 bra TFT_cave_waypoints_11 ; YES / YES - print end-of-line symbol | |
1775 STRCAT "," ; NO - print a half-space | |
1776 incf backtrack_waypoint_num,W ; - (re)load WREG with next waypoint number | |
1777 movwf lo ; NO - copy next waypoint number to lo | |
1778 output_99 ; - print next waypoint number in two digit format | |
1779 STRCAT_PRINT "" ; - finalize output | |
1780 return ; - done | |
1781 TFT_cave_waypoints_11: | |
1782 STRCAT_PRINT "---|," ; print end-of-line symbol and finalize output | |
1783 return ; done | |
1784 | |
1785 ENDIF | |
604 | 1786 |
623 | 1787 ;============================================================================= |
1788 | |
1789 IFDEF _external_sensor | |
1790 | |
604 | 1791 global TFT_ppo2_sensors_mask ; mask for ppO2 sensors |
1792 TFT_ppo2_sensors_mask: | |
582 | 1793 call TFT_divemask_color |
604 | 1794 WIN_TINY dm_custom_hud_sensor1_column+.4,dm_custom_hud_title_row |
582 | 1795 STRCPY_TEXT_PRINT tDiveHudMask1 |
604 | 1796 WIN_TINY dm_custom_hud_sensor2_column+.3,dm_custom_hud_title_row |
582 | 1797 STRCPY_TEXT_PRINT tDiveHudMask2 |
604 | 1798 WIN_TINY dm_custom_hud_sensor3_column+.2,dm_custom_hud_title_row |
582 | 1799 STRCPY_TEXT_PRINT tDiveHudMask3 |
604 | 1800 bra TFT_display_exit_2 |
1801 | |
1802 | |
1803 global TFT_ppo2_sensors ; data for ppO2 sensors | |
1804 TFT_ppo2_sensors: | |
560 | 1805 ; |
1806 ; Definition of the output: | |
1807 ; | |
582 | 1808 ; sensorX use voting o2 |
1809 ; _calibrated _O2 _logic _ppo2 Output Color | |
1810 ; _ok _sensorX _sensorX _sensorX | |
560 | 1811 ;----------------------------------------------------------------------------------------------- |
604 | 1812 ; 0 -/- -/- -/- "----" TFT_memo_color |
582 | 1813 ; 1 0 -/- = 0 o2_ppo2_sensorX TFT_attention_color |
1814 ; 1 0 -/- > 0 o2_ppo2_sensorX TFT_disabled_color | |
1815 ; 1 1 0 -/- o2_ppo2_sensorX TFT_color_code_ppo2_hud + win_invert | |
1816 ; 1 1 1 -/- o2_ppo2_sensorX TFT_color_code_ppo2_hud | |
560 | 1817 ; |
582 | 1818 bsf leftbind |
560 | 1819 ; sensor 1 |
582 | 1820 btfsc sensor1_calibrated_ok ; valid calibration? |
604 | 1821 bra TFT_update_hud1b ; YES |
1822 btfsc sensor1_active ; valid HUD data for this sensor | |
1823 bra TFT_update_hud1b ; YES | |
1824 | |
560 | 1825 ; no valid calibration |
604 | 1826 WIN_STD dm_custom_hud_sensor1_column+.7, dm_custom_hud_row+.5 |
1827 call TFT_memo_color | |
582 | 1828 STRCPY_PRINT "---" |
1829 bra TFT_update_hud2a ; continue with sensor 2 | |
560 | 1830 TFT_update_hud1b: |
1831 ; sensor has a valid calibration | |
604 | 1832 WIN_MEDIUM dm_custom_hud_sensor1_column,dm_custom_hud_row |
623 | 1833 movff sensor1_ppO2,lo ; load ppO2 value into transfer storage for output |
582 | 1834 clrf hi ; |
560 | 1835 btfsc use_O2_sensor1 ; in use? |
604 | 1836 bra TFT_update_hud1d ; YES |
560 | 1837 ; valid calibration, but not in use |
623 | 1838 tstfsz lo ; sensor value = 0? |
560 | 1839 bra TFT_update_hud1c ; no |
1840 ; valid calibration, not in use and value = 0 | |
582 | 1841 call TFT_attention_color ; output in yellow |
560 | 1842 bra TFT_update_hud1e |
1843 TFT_update_hud1c: | |
1844 ; sensor has valid calibration, is not in use and has a value > 0 | |
582 | 1845 call TFT_disabled_color ; output in light blue |
560 | 1846 bra TFT_update_hud1e |
1847 TFT_update_hud1d: | |
1848 ; sensor has valid calibration and is in use | |
582 | 1849 call TFT_color_code_ppo2_hud ; With ppO2 [cbar] in lo |
623 | 1850 btfsc voting_logic_sensor1 ; sensor value agrees with values of other sensors? |
604 | 1851 bra TFT_update_hud1e ; YES |
560 | 1852 ; valid calibration, in use, but value does not agree with other sensors |
582 | 1853 bsf win_invert ; invert output |
1854 TFT_update_hud1e: | |
560 | 1855 ; all coloring is set up now, let's write the value to the display! |
582 | 1856 output_16dp .3 ; x.xx bar |
1857 STRCAT_PRINT "" | |
1858 bcf win_invert | |
560 | 1859 |
1860 TFT_update_hud2a: ; sensor 2 | |
582 | 1861 btfsc sensor2_calibrated_ok ; valid calibration? |
604 | 1862 bra TFT_update_hud2b ; YES |
1863 btfsc sensor2_active ; valid HUD data for this sensor | |
1864 bra TFT_update_hud2b ; YES | |
560 | 1865 ; no valid calibration |
604 | 1866 WIN_STD dm_custom_hud_sensor2_column+.7, dm_custom_hud_row+.5 |
1867 call TFT_memo_color | |
582 | 1868 STRCPY_PRINT "---" |
1869 bra TFT_update_hud3a ; continue with sensor 3 | |
560 | 1870 TFT_update_hud2b: |
1871 ; sensor has a valid calibration | |
604 | 1872 WIN_MEDIUM dm_custom_hud_sensor2_column,dm_custom_hud_row |
623 | 1873 movff sensor2_ppO2,lo ; load ppO2 value into transfer storage for output |
582 | 1874 clrf hi ; |
560 | 1875 btfsc use_O2_sensor2 ; in use? |
604 | 1876 bra TFT_update_hud2d ; YES |
560 | 1877 ; valid calibration, but not in use |
623 | 1878 tstfsz lo ; sensor value = 0? |
604 | 1879 bra TFT_update_hud2c ; NO |
560 | 1880 ; valid calibration, not in use and value = 0 |
582 | 1881 call TFT_attention_color ; output in yellow |
560 | 1882 bra TFT_update_hud2e |
1883 TFT_update_hud2c: | |
1884 ; sensor has valid calibration, is not in use and has a value > 0 | |
582 | 1885 call TFT_disabled_color ; output in light blue |
560 | 1886 bra TFT_update_hud2e |
1887 TFT_update_hud2d: | |
1888 ; sensor has valid calibration and is in use | |
582 | 1889 call TFT_color_code_ppo2_hud ; With ppO2 [cbar] in lo |
623 | 1890 btfsc voting_logic_sensor2 ; sensor value agrees with values of other sensors? |
604 | 1891 bra TFT_update_hud2e ; YES |
560 | 1892 ; valid calibration, in use, but value does not agree with other sensors |
582 | 1893 bsf win_invert ; invert output |
1894 TFT_update_hud2e: | |
560 | 1895 ; all coloring is set up now, let's write the value to the display! |
582 | 1896 output_16dp .3 ; x.xx bar |
1897 STRCAT_PRINT "" | |
1898 bcf win_invert | |
560 | 1899 |
1900 TFT_update_hud3a: ; sensor 3 | |
582 | 1901 btfsc sensor3_calibrated_ok ; valid calibration? |
604 | 1902 bra TFT_update_hud3b ; YES |
1903 btfsc sensor3_active ; valid HUD data for this sensor | |
1904 bra TFT_update_hud3b ; YES | |
560 | 1905 ; no valid calibration |
604 | 1906 WIN_STD dm_custom_hud_sensor3_column+.7, dm_custom_hud_row+.5 |
1907 call TFT_memo_color | |
582 | 1908 STRCPY_PRINT "---" |
1909 bra TFT_update_hud4 ; done | |
560 | 1910 TFT_update_hud3b: |
1911 ; sensor has a valid calibration | |
604 | 1912 WIN_MEDIUM dm_custom_hud_sensor3_column,dm_custom_hud_row |
623 | 1913 movff sensor3_ppO2,lo ; load ppO2 value into transfer storage for output |
582 | 1914 clrf hi ; |
560 | 1915 btfsc use_O2_sensor3 ; in use? |
604 | 1916 bra TFT_update_hud3d ; YES |
560 | 1917 ; valid calibration, but not in use |
623 | 1918 tstfsz lo ; sensor value = 0? |
604 | 1919 bra TFT_update_hud3c ; NO |
560 | 1920 ; valid calibration, not in use and value = 0 |
582 | 1921 call TFT_attention_color ; output in yellow |
560 | 1922 bra TFT_update_hud3e |
1923 TFT_update_hud3c: | |
1924 ; sensor has valid calibration, is not in use and has a value > 0 | |
582 | 1925 call TFT_disabled_color ; output in light blue |
560 | 1926 bra TFT_update_hud3e |
1927 TFT_update_hud3d: | |
1928 ; sensor has valid calibration and is in use | |
582 | 1929 call TFT_color_code_ppo2_hud ; With ppO2 [cbar] in lo |
623 | 1930 btfsc voting_logic_sensor3 ; sensor value agrees with values other sensors? |
604 | 1931 bra TFT_update_hud3e ; YES |
560 | 1932 ; valid calibration, in use, but value does not agree with other sensors |
582 | 1933 bsf win_invert ; invert output |
1934 TFT_update_hud3e: | |
560 | 1935 ; all coloring is set up now, let's write the value to the display! |
582 | 1936 output_16dp .3 ; x.xx bar |
1937 STRCAT_PRINT "" | |
1938 bcf win_invert | |
1939 | |
560 | 1940 TFT_update_hud4: ; closure |
604 | 1941 bra TFT_display_exit_3 |
1942 | |
1943 | |
623 | 1944 global TFT_surface_sensor ; update O2 sensor data in surface mode |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1945 TFT_surface_sensor: |
582 | 1946 bsf leftbind |
1947 WIN_SMALL surf_hud_sensor1_column,surf_hud_sensor1_row | |
560 | 1948 btfsc sensor1_calibrated_ok |
604 | 1949 bra TFT_surface_sensor1 ; YES |
1950 btfsc sensor1_active ; valid HUD data for this sensor | |
1951 bra TFT_surface_sensor1 ; YES | |
582 | 1952 call TFT_standard_color |
1953 STRCPY_PRINT "--- " | |
604 | 1954 bra TFT_surface_sensor2 ; skip sensor 1 |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1955 TFT_surface_sensor1: |
623 | 1956 movff sensor1_ppO2,lo |
604 | 1957 call TFT_color_code_ppo2_hud ; with ppO2 [cbar] in lo |
582 | 1958 clrf hi |
560 | 1959 bsf leftbind |
582 | 1960 output_16dp .3 ; x.xx bar |
1961 bcf leftbind | |
1962 STRCAT_PRINT "" | |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1963 TFT_surface_sensor2: |
582 | 1964 WIN_SMALL surf_hud_sensor2_column,surf_hud_sensor2_row |
560 | 1965 btfsc sensor2_calibrated_ok |
604 | 1966 bra TFT_surface_sensor3 ; YES |
1967 btfsc sensor2_active ; valid HUD data for this sensor | |
1968 bra TFT_surface_sensor3 ; YES | |
582 | 1969 call TFT_standard_color |
1970 STRCPY_PRINT "--- " | |
604 | 1971 bra TFT_surface_sensor4 ; skip sensor 2 |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1972 TFT_surface_sensor3: |
623 | 1973 movff sensor2_ppO2,lo |
604 | 1974 call TFT_color_code_ppo2_hud ; with ppO2 [cbar] in lo |
582 | 1975 clrf hi |
560 | 1976 bsf leftbind |
582 | 1977 output_16dp .3 ; x.xx bar |
1978 bcf leftbind | |
1979 STRCAT_PRINT "" | |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1980 TFT_surface_sensor4: |
582 | 1981 WIN_SMALL surf_hud_sensor3_column,surf_hud_sensor3_row |
560 | 1982 btfsc sensor3_calibrated_ok |
604 | 1983 bra TFT_surface_sensor5 ; YES |
1984 btfsc sensor3_active ; valid HUD data for this sensor | |
1985 bra TFT_surface_sensor5 ; YES | |
582 | 1986 call TFT_standard_color |
1987 STRCPY_PRINT "--- " | |
604 | 1988 bra TFT_surface_sensor6 ; skip sensor 3 |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1989 TFT_surface_sensor5: |
623 | 1990 movff sensor3_ppO2,lo |
604 | 1991 call TFT_color_code_ppo2_hud ; with ppO2 [cbar] in lo |
582 | 1992 clrf hi |
560 | 1993 bsf leftbind |
582 | 1994 output_16dp .3 ; x.xx bar |
1995 bcf leftbind | |
1996 STRCAT_PRINT "" | |
188
ebc28381f17d
NEW: Show Bailout Gas List in Surface mode (CCR Modes)
heinrichsweikamp
parents:
187
diff
changeset
|
1997 TFT_surface_sensor6: |
604 | 1998 TFT_display_exit_3: |
582 | 1999 bcf leftbind |
2000 goto TFT_standard_color ; and return... | |
2001 | |
2002 | |
604 | 2003 global TFT_sensor_mV |
2004 TFT_sensor_mV: | |
582 | 2005 bsf leftbind |
604 | 2006 |
582 | 2007 WIN_SMALL surf_mV_sensor_column,surf_mV_sensor1_row |
623 | 2008 SMOVII sensor1_mv,mpr ; in 0.1mV steps |
582 | 2009 STRCAT "1: " |
604 | 2010 rcall TFT_sensor_mV_helper |
2011 | |
582 | 2012 WIN_SMALL surf_mV_sensor_column,surf_mV_sensor2_row |
623 | 2013 SMOVII sensor2_mv,mpr ; in 0.1mV steps |
582 | 2014 STRCAT "2: " |
604 | 2015 rcall TFT_sensor_mV_helper |
582 | 2016 |
2017 WIN_SMALL surf_mV_sensor_column,surf_mV_sensor3_row | |
623 | 2018 SMOVII sensor3_mv,mpr ; in 0.1mV steps |
582 | 2019 STRCAT "3: " |
604 | 2020 rcall TFT_sensor_mV_helper |
623 | 2021 bcf leftbind |
628 | 2022 |
2023 WIN_SMALL surf_mV_sensor_column,surf_mV_sensor3_row+.24 ; 4th row | |
2024 btfss s8_digital_avail ; do we have a digital S8 interface? | |
2025 bra TFT_sensor_mV_optical_analog | |
2026 STRCAT_PRINT "Digital" | |
2027 bra TFT_display_exit_3 | |
2028 TFT_sensor_mV_optical_analog: | |
2029 btfss ir_power ; do we have a optical digital interface? | |
2030 bra TFT_sensor_mV_analog | |
2031 STRCAT_PRINT "Optical" | |
2032 bra TFT_display_exit_3 | |
2033 TFT_sensor_mV_analog: ; -> optical | |
2034 STRCAT_PRINT "Analog" | |
604 | 2035 bra TFT_display_exit_3 |
2036 | |
2037 TFT_sensor_mV_helper: | |
582 | 2038 output_16dp .4 ; xxx.y mV |
2039 STRCAT_PRINT "mV " | |
604 | 2040 return |
582 | 2041 |
2042 | |
2043 global TFT_sensor_surface_warning | |
535
cf68fe0c3002
NEW: Show a warning for each sensor if the sensor is end-of-life after calibration (Less then 8mV in Air at sea level)
heinrichsweikamp
parents:
533
diff
changeset
|
2044 TFT_sensor_surface_warning: |
623 | 2045 call TFT_warning_color |
560 | 2046 btfss sensor1_calibrated_ok ; do not show end of lifetime arrow if sensor failed calibration at all |
2047 bra TFT_sensor_mV2 | |
582 | 2048 movff opt_x_s1+1,lo ; into bank1 |
604 | 2049 movf lo,W ; when opt_x_s1 > 255 the sensor will just give 8 mV at a ppO2 of 0.21 any more |
582 | 2050 bz TFT_sensor_mV2 ; the sensor is not too bad yet for a warning |
2051 WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor1_row-.5 | |
2052 STRCPY_PRINT "\xb8" ; mark sensor as being at end of lifetime | |
535
cf68fe0c3002
NEW: Show a warning for each sensor if the sensor is end-of-life after calibration (Less then 8mV in Air at sea level)
heinrichsweikamp
parents:
533
diff
changeset
|
2053 TFT_sensor_mV2: |
560 | 2054 btfss sensor2_calibrated_ok ; do not show end of lifetime arrow if sensor failed calibration at all |
2055 bra TFT_sensor_mV3 | |
582 | 2056 movff opt_x_s2+1,lo ; into bank1 |
604 | 2057 movf lo,W ; when opt_x_s2 > 255 the sensor will just give 8 mV at a ppO2 of 0.21 any more |
582 | 2058 bz TFT_sensor_mV3 ; the sensor is not too bad yet for a warning |
2059 WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor2_row-.5 | |
2060 STRCPY_PRINT "\xb8" ; mark sensor as being at end of lifetime | |
535
cf68fe0c3002
NEW: Show a warning for each sensor if the sensor is end-of-life after calibration (Less then 8mV in Air at sea level)
heinrichsweikamp
parents:
533
diff
changeset
|
2061 TFT_sensor_mV3: |
560 | 2062 btfss sensor3_calibrated_ok ; do not show end of lifetime arrow if sensor failed calibration at all |
2063 bra TFT_sensor_mV4 | |
582 | 2064 movff opt_x_s3+1,lo ; into bank1 |
604 | 2065 movf lo,W ; when opt_x_s3 > 255 the sensor will just give 8 mV at a ppO2 of 0.21 any more |
582 | 2066 bz TFT_sensor_mV4 ; the sensor is not too bad yet for a warning |
2067 WIN_SMALL surf_mV_sensor_status_column,surf_mV_sensor3_row-.5 | |
2068 STRCPY_PRINT "\xb8" ; mark sensor as being at end of lifetime | |
535
cf68fe0c3002
NEW: Show a warning for each sensor if the sensor is end-of-life after calibration (Less then 8mV in Air at sea level)
heinrichsweikamp
parents:
533
diff
changeset
|
2069 TFT_sensor_mV4: |
604 | 2070 bra TFT_display_exit_3 |
582 | 2071 |
2072 | |
2073 global TFT_menu_calibrate | |
2074 TFT_menu_calibrate: ; update mV data in calibration menu | |
623 | 2075 btfss s8_digital_avail ; do we have a digital S8 interface? |
2076 bra TFT_menu_calibrate_analog ; NO - use analog | |
2077 btfss trigger_S8_data_update ; YES - new data frame received? | |
2078 bra TFT_menu_calibrate_common ; NO - use old values... | |
2079 bcf trigger_S8_data_update ; YES - clear update flag | |
2080 call compute_mvolts_for_all_sensors ; - compute mV values from received data frame | |
2081 bra TFT_menu_calibrate_common ; - continue with common part | |
560 | 2082 TFT_menu_calibrate_analog: |
623 | 2083 call get_analog_inputs ; read mV values from analog inputs |
560 | 2084 TFT_menu_calibrate_common: |
582 | 2085 call TFT_attention_color ; show in yellow |
623 | 2086 bsf leftbind ; align to the left |
582 | 2087 WIN_SMALL surf_menu_sensor1_column,surf_menu2_sensor1_row |
623 | 2088 SMOVII sensor1_mv,mpr ; in 0.1mV steps |
582 | 2089 output_16dp .4 ; xxx.y mV |
2090 STRCAT_PRINT "mV " | |
2091 WIN_SMALL surf_menu_sensor2_column,surf_menu2_sensor2_row | |
623 | 2092 SMOVII sensor2_mv,mpr ; in 0.1mV steps |
582 | 2093 output_16dp .4 ; xxx.y mV |
2094 STRCAT_PRINT "mV " | |
2095 WIN_SMALL surf_menu_sensor3_column,surf_menu2_sensor3_row | |
623 | 2096 SMOVII sensor3_mv,mpr ; in 0.1mV steps |
582 | 2097 output_16dp .4 ; xxx.y mV |
2098 STRCAT_PRINT "mV " | |
631 | 2099 TSTOSS opt_s8_mode ; =0: analog, =1: digital RS232 |
2100 bra TFT_display_exit_3 ; analog - done | |
2101 ; also imprint HUD battery voltage | |
2102 WIN_TINY .20,.209 ; digital | |
2103 STRCPY "HUD Batt: " ; print label | |
2104 SMOVII hud_battery_mv,mpr ; get HUD battery voltage | |
2105 output_16dp .2 ; print as -x.yyy | |
2106 STRCAT_PRINT "V " ; finalize output | |
2107 bra TFT_display_exit_3 ; done | |
582 | 2108 |
623 | 2109 ENDIF ; _external_sensor |
2110 | |
2111 ;============================================================================= | |
2112 | |
2113 global TFT_time_surfmode | |
2114 TFT_time_surfmode: | |
604 | 2115 WIN_SMALL surf_clock_column+.7,surf_clock_row |
628 | 2116 TFT_clock2: ; called from dive mode clock |
582 | 2117 call TFT_standard_color |
623 | 2118 SMOVSS rtc_year,rtc_latched_year ; ISR-safe 6 byte copy of date and time |
2119 movff rtc_latched_hour,lo | |
0 | 2120 output_99 |
2121 movlw ':' | |
623 | 2122 movff rtc_latched_secs,lo |
2123 btfss lo,0 ; blinking every second | |
0 | 2124 movlw ' ' |
2125 movwf POSTINC2 | |
623 | 2126 movff rtc_latched_mins,lo |
0 | 2127 output_99x |
2128 STRCAT_PRINT "" | |
2129 return | |
2130 | |
623 | 2131 |
0 | 2132 global TFT_show_time_date_menu |
623 | 2133 global TFT_show_time_date_menu_fast |
0 | 2134 TFT_show_time_date_menu: |
623 | 2135 SMOVSS rtc_year,rtc_latched_year ; ISR-safe 6 byte copy of current date & time |
2136 TFT_show_time_date_menu_fast: | |
2137 WIN_SMALL .20,.40 ; column, row - keep clear of the cursor area on the left! | |
582 | 2138 call TFT_standard_color |
623 | 2139 movff rtc_latched_hour,lo |
0 | 2140 output_99 |
2141 PUTC ':' | |
623 | 2142 movff rtc_latched_mins,lo |
0 | 2143 output_99x |
2144 PUTC ':' | |
623 | 2145 movff rtc_latched_secs,lo |
0 | 2146 output_99x |
623 | 2147 STRCAT " " |
631 | 2148 movff rtc_latched_year, lo |
623 | 2149 movff rtc_latched_month,hi |
631 | 2150 movff rtc_latched_day, up |
623 | 2151 call TFT_convert_date ; convert into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 |
0 | 2152 STRCAT_PRINT " " |
2153 return | |
560 | 2154 |
0 | 2155 ;============================================================================= |
2156 | |
604 | 2157 global TFT_surface_decosettings ; show all deco settings |
41 | 2158 TFT_surface_decosettings: |
560 | 2159 ; Deco Mode |
41 | 2160 call TFT_standard_color |
560 | 2161 WIN_SMALL surf_gaslist_column,surf_gaslist_row |
582 | 2162 STRCAT_PRINT "ZH-L16" |
631 | 2163 movff char_I_model,WREG |
582 | 2164 iorwf WREG |
2165 bnz TFT_surface_decosettings1 | |
560 | 2166 ; Display ZH-L16 sat/desat model |
582 | 2167 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) |
2168 lfsr FSR2,buffer | |
2169 movff char_I_desaturation_multiplier,lo | |
2170 bsf leftbind | |
2171 output_8 | |
2172 STRCAT "%/" | |
2173 movff char_I_saturation_multiplier,lo | |
2174 output_8 | |
2175 STRCAT_PRINT "%" | |
2176 bra TFT_surface_decosettings2 | |
2177 ; Display ZH-L16-GF low/high model | |
41 | 2178 TFT_surface_decosettings1: |
582 | 2179 TEXT_SMALL surf_gaslist_column+.43,surf_gaslist_row,tZHL16GF |
2180 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) | |
623 | 2181 STRCPY_TEXT tGF ; GF: |
560 | 2182 movff opt_GF_low,lo |
582 | 2183 output_99x |
2184 STRCAT "/" | |
560 | 2185 movff opt_GF_high,lo |
582 | 2186 output_99x |
2187 STRCAT_PRINT "" | |
2188 TFT_surface_decosettings2: ; fTTS | |
2189 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2) | |
631 | 2190 STRCPY_TEXT tFTTSSurf |
582 | 2191 movff char_I_extra_time,lo |
2192 bsf leftbind | |
2193 output_8 | |
2194 STRCAT_TEXT_PRINT tMinutes | |
2195 ; Last Stop | |
2196 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
604 | 2197 STRCPY_TEXT tLastDecostopSurf |
560 | 2198 movff opt_last_stop,lo |
582 | 2199 output_8 |
2200 STRCAT_TEXT_PRINT tMeters | |
2201 ; Salinity | |
2202 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4) | |
631 | 2203 STRCPY_TEXT tDvSalinitySurf |
582 | 2204 movff opt_salinity,lo |
2205 output_8 | |
2206 bcf leftbind | |
2207 STRCAT_TEXT_PRINT tPercent | |
2208 return | |
0 | 2209 |
582 | 2210 |
631 | 2211 global TFT_divetimeout |
55 | 2212 TFT_divetimeout: |
631 | 2213 call TFT_set_message_window ; set row and column for the message |
604 | 2214 tstfsz WREG ; is there room for the message? |
631 | 2215 return ; NO - skip message in this cycle |
604 | 2216 call TFT_memo_color |
2217 STRCPY 0x94 ; "End of dive" symbol | |
582 | 2218 movff opt_diveTimeout,WREG ; in [min] |
2219 mullw .60 | |
623 | 2220 MOVII PRODL, sub_a ; in seconds |
2221 MOVII dive_timeout_timer,sub_b | |
582 | 2222 call subU16 ; sub_c = sub_a - sub_b (with UNSIGNED values) |
623 | 2223 MOVII sub_c,mpr |
2224 call convert_time ; convert hi:lo in minutes to hours (up:hi) and minutes (lo) | |
2225 movf hi,W ; swap lo and hi | |
2226 movff lo,hi ; ... | |
2227 movwf lo ; ... | |
55 | 2228 output_99x |
582 | 2229 PUTC ':' |
623 | 2230 movff hi,lo ; copy hi to lo |
55 | 2231 output_99x |
623 | 2232 movlw dm_warning_length ; dive mode string length |
604 | 2233 call TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
55 | 2234 STRCAT_PRINT "" |
582 | 2235 bcf win_invert |
55 | 2236 return |
2237 | |
623 | 2238 |
2239 global TFT_show_ftts | |
2240 TFT_show_ftts: | |
631 | 2241 call TFT_set_message_window ; set row and column for the message |
604 | 2242 tstfsz WREG ; is there room for the message? |
631 | 2243 return ; NO - skip message in this cycle |
2244 bsf leftbind ; print with alignment to the left | |
2245 IFDEF _cave_mode | |
2246 btfss cave_mode ; cave mode switched on? | |
2247 bra TFT_display_ftts_2 ; NO - classic open water TTS | |
2248 btfss dive_turned ; YES - dive turned? | |
2249 bra TFT_display_ftts_1 ; NO - cTTS from current position | |
2250 STRCPY "WP" ; YES - print waypoint mark | |
2251 movf backtrack_waypoint_num,W ; - copy current waypoint number to WREG | |
2252 cpfseq backtrack_waypoint_turn ; - current waypoint = turn point ? | |
2253 bra TFT_display_ftts_0 ; NO - print waypoint number | |
2254 STRCAT "-| " ; YES - print turn point symbol | |
2255 bra TFT_display_ftts_5 ; - continue with TTS | |
2256 TFT_display_ftts_0: | |
2257 movwf lo ; copy current waypoint number to lo | |
2258 output_99 ; print waypoint number | |
2259 PUTC " " ; append a space char | |
2260 bra TFT_display_ftts_5 ; continue with TTS | |
2261 TFT_display_ftts_1: | |
2262 STRCPY "cTTS " ; print cave TTS label followed by a space | |
2263 bra TFT_display_ftts_5 ; continue with TTS | |
2264 ENDIF ; _cave_mode | |
2265 TFT_display_ftts_2: | |
2266 btfsc FLAG_oc_mode ; in OC mode? | |
2267 bra TFT_display_ftts_3 ; YES - print fTTS label | |
2268 TSTOSS opt_calc_gasvolume ; NO - bailout volume calculation requested? | |
2269 bra TFT_display_ftts_3 ; NO - print fTTS label | |
2270 STRCPY "B/O" ; YES - print bailout label | |
2271 bra TFT_display_ftts_4 ; - continue | |
2272 TFT_display_ftts_3: ; OC or CCR/pSCR but no bailout volume calculation | |
582 | 2273 STRCPY "@+" ; print fTTS label |
631 | 2274 TFT_display_ftts_4: |
2275 movff char_I_extra_time,lo ; get fTTS delay time | |
604 | 2276 output_8 ; print fTTS delay time |
2277 PUTC ":" ; ":" | |
631 | 2278 TFT_display_ftts_5: |
623 | 2279 MOVII int_O_TTS_alt,mpr ; get alternative TTS |
604 | 2280 call TFT_memo_color ; set memo color |
2281 btfss hi,int_invalid_flag ; is the invalid flag set? | |
631 | 2282 bra TFT_display_ftts_6 ; NO - keep memo color |
604 | 2283 bcf hi,int_invalid_flag ; YES - clear flag |
2284 call TFT_disabled_color ; - switch to disabled color | |
631 | 2285 TFT_display_ftts_6: |
2286 btfsc hi,int_not_yet_computed ; is the not-yet-computed flag set? | |
2287 bra TFT_display_ftts_8 ; YES - show dashes | |
2288 IFDEF _cave_mode | |
2289 btfsc cave_mode ; cave mode switched on? | |
2290 bra TFT_display_ftts_7 ; YES - take shortcut | |
2291 ENDIF | |
2292 movff int_O_TST_alt+1,WREG ; get high byte of the alternative total stops time | |
2293 btfsc WREG,int_is_zero ; total stops time = zero ? | |
2294 bra TFT_display_ftts_9 ; YES - show "NDL" | |
2295 btfsc WREG,deco_zone ; NO - fTTS <= TTS ? | |
2296 call TFT_advice_color ; YES - set to advice color (green) | |
2297 TFT_display_ftts_7: | |
623 | 2298 output_16 ; print ascent time |
2299 PUTC "'" ; print minutes symbol | |
631 | 2300 bra TFT_display_ftts_10 ; continue |
2301 TFT_display_ftts_8: | |
2302 STRCAT "---" ; print "---" for not computed | |
2303 bra TFT_display_ftts_10 ; continue | |
2304 TFT_display_ftts_9: | |
2305 STRCAT_TEXT tNDL ; print "NDL" | |
2306 TFT_display_ftts_10: | |
604 | 2307 movlw dm_warning_length ; dive mode string length |
2308 call TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
631 | 2309 STRCAT_PRINT "" ; finalize output |
604 | 2310 bcf leftbind ; clear left alignment |
2311 goto TFT_standard_color ; ...and return | |
0 | 2312 |
2313 | |
2314 ;============================================================================= | |
560 | 2315 |
2316 global TFT_temp_surfmode | |
0 | 2317 TFT_temp_surfmode: |
582 | 2318 call TFT_divemask_color |
2319 WIN_SMALL surf_temp_column+3*8,surf_temp_row | |
2320 TSTOSS opt_units ; 0=°C, 1=°F | |
560 | 2321 bra TFT_temp_surfmode_metric |
582 | 2322 STRCAT_TEXT tLogTunitF ; °F |
560 | 2323 bra TFT_temp_surfmode_common |
0 | 2324 TFT_temp_surfmode_metric: |
582 | 2325 STRCAT_TEXT tLogTunitC ; °C |
552
af84c45429fd
BUGFIX: Display of negative (?C) water temperatures
heinrichsweikamp
parents:
551
diff
changeset
|
2326 TFT_temp_surfmode_common: |
560 | 2327 STRCAT_PRINT "" |
582 | 2328 WIN_SMALL surf_temp_column,surf_temp_row |
604 | 2329 call TFT_memo_color |
560 | 2330 bra TFT_temp_common |
582 | 2331 |
2332 | |
623 | 2333 global TFT_show_temp_divemode |
2334 TFT_show_temp_divemode: | |
2335 btfsc dive_options_menu ; is the pre-menu shown? | |
2336 return ; YES - abort | |
2337 btfsc dive_main_menu ; is the dive mode menu shown? | |
2338 return ; YES - abort, no update of temperature now | |
2339 btfsc better_gas_blinking ; blinking better gas? | |
2340 return ; YES - abort, no update of temperature now | |
2341 btfsc better_dil_blinking ; blinking better diluent? | |
2342 return ; YES - abort, no update of temperature now | |
2343 | |
2344 WIN_SMALL dm_temp_column,dm_temp_row ; set position | |
2345 call TFT_memo_color ; set color | |
2346 movlw index_compass_dm ; index of compass custom view | |
2347 cpfseq active_customview ; compass shown in custom view? | |
2348 bra TFT_temp_common ; NO - proceed with temperature | |
631 | 2349 goto TFT_update_stopwatch ; YES - show resettable dive time instead of temperature |
552
af84c45429fd
BUGFIX: Display of negative (?C) water temperatures
heinrichsweikamp
parents:
551
diff
changeset
|
2350 TFT_temp_common: |
623 | 2351 SMOVII temperature_cur,mpr ; ISR-safe 2 byte copy of current temperature to hi:lo |
2352 TSTOSC opt_units ; 0=°C, 1=°F | |
2353 call convert_celsius_to_fahrenheit ; 1 - convert value in lo:hi from Celsius to Fahrenheit | |
2354 rcall TFT_convert_signed_16bit ; convert lo:hi into signed-short and adds '-' to POSTINC2 if required | |
560 | 2355 btfsc neg_flag ; is the temperature negative? |
2356 bra TFT_temp_common_2 ; YES - the minus sign has already been written | |
604 | 2357 ; temp is positive, is it less than 10°C ? |
582 | 2358 tstfsz hi |
623 | 2359 bra TFT_temp_common_1 ; > 25.5°C, skip here |
560 | 2360 movlw .100 |
2361 cpfslt lo | |
623 | 2362 bra TFT_temp_common_1 ; > 10.0°C, skip here |
560 | 2363 bsf leftbind |
631 | 2364 output_16dp d'4' ; x.y°C |
560 | 2365 bcf leftbind |
604 | 2366 bra TFT_temp_common_3 ; done |
623 | 2367 TFT_temp_common_1: |
560 | 2368 PUTC " " ; NO - write a space instead of the minus sign |
552
af84c45429fd
BUGFIX: Display of negative (?C) water temperatures
heinrichsweikamp
parents:
551
diff
changeset
|
2369 TFT_temp_common_2: |
604 | 2370 bsf ignore_digit5 ; ignore decimal (flag will be cleared by output_16) |
560 | 2371 output_16_3 ; output 0-999 without decimal -> writes ' ' - 99 |
582 | 2372 movff buffer+2,lo ; get output from unit position |
2373 movlw " " ; load code of the space character | |
560 | 2374 cpfseq lo ; is there a space sign on the unit position? (happens between +1 and -1) |
2375 bra TFT_temp_common_3 ; NO | |
2376 movff WREG,buffer+0 ; YES - replace potential minus sign with a space (temps from -0.9° to -0.1° else would appear as '- 0') | |
2377 movlw "0" ; load code of the zero character | |
2378 movff WREG,buffer+2 ; replace space with a zero | |
552
af84c45429fd
BUGFIX: Display of negative (?C) water temperatures
heinrichsweikamp
parents:
551
diff
changeset
|
2379 TFT_temp_common_3: |
560 | 2380 btfss divemode ; are we in dive mode? |
2381 bra TFT_temp_common_5 ; NO - no unit to append | |
2382 TSTOSS opt_units ; YES - check unit type: 0=°C, 1=°F | |
2383 bra TFT_temp_common_4 ; go metric | |
2384 STRCAT_TEXT tLogTunitF ; append °F | |
2385 bra TFT_temp_common_5 | |
552
af84c45429fd
BUGFIX: Display of negative (?C) water temperatures
heinrichsweikamp
parents:
551
diff
changeset
|
2386 TFT_temp_common_4: |
582 | 2387 STRCAT_TEXT tLogTunitC ; append °C |
552
af84c45429fd
BUGFIX: Display of negative (?C) water temperatures
heinrichsweikamp
parents:
551
diff
changeset
|
2388 TFT_temp_common_5: |
560 | 2389 STRCAT_PRINT "" ; output to screen |
623 | 2390 TFT_temp_common_6: |
2391 goto TFT_standard_color ; done | |
2392 | |
582 | 2393 |
0 | 2394 ;============================================================================= |
560 | 2395 |
623 | 2396 global TFT_show_menu_cursor_divemode |
2397 TFT_show_menu_cursor_divemode: | |
582 | 2398 WIN_BOX_BLACK dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item1_column-.8, dm_menu_item1_column-.1 |
2399 WIN_BOX_BLACK dm_menu_row+.1, dm_menu_lower-.1, dm_menu_item4_column-.8, dm_menu_item4_column-.1 | |
2400 call TFT_standard_color | |
2401 | |
2402 movlw dm_menu_item1_column-.8 | |
623 | 2403 btfsc menu_pos_cur,2 ; > 3 ? |
604 | 2404 movlw dm_menu_item4_column-.8 ; YES |
2405 movwf win_leftx2 | |
2406 | |
623 | 2407 movff menu_pos_cur,lo ; copy menu position |
582 | 2408 movlw dm_menu_item6_row |
2409 dcfsnz lo,F | |
2410 movlw dm_menu_item1_row | |
2411 dcfsnz lo,F | |
2412 movlw dm_menu_item2_row | |
2413 dcfsnz lo,F | |
2414 movlw dm_menu_item3_row | |
2415 dcfsnz lo,F | |
2416 movlw dm_menu_item4_row | |
2417 dcfsnz lo,F | |
2418 movlw dm_menu_item5_row | |
604 | 2419 movwf win_top |
582 | 2420 movlw FT_SMALL |
604 | 2421 movwf win_font |
582 | 2422 STRCPY_PRINT "\xb7" ; print cursor |
2423 return | |
145
e3ac5b2021bc
NEW: Setpoint-Fallback option for external O2 sensor failure
heinrichsweikamp
parents:
139
diff
changeset
|
2424 |
623 | 2425 ;============================================================================= |
2426 | |
2427 global TFT_show_active_gas_divemode | |
2428 TFT_show_active_gas_divemode: ; display gas (OC) or setpoint/ppO2 & gas (CCR, pSCR) | |
2429 btfsc dive_main_menu ; is the dive mode menu shown? | |
2430 return ; YES - abort | |
604 | 2431 btfsc FLAG_apnoe_mode ; in apnoe mode? |
623 | 2432 return ; YES - done |
604 | 2433 btfsc FLAG_gauge_mode ; in gauge mode? |
623 | 2434 return ; YES - done |
2435 | |
2436 IFDEF _ccr_pscr | |
2437 btfsc FLAG_oc_mode ; in OC mode? | |
2438 bra TFT_active_gas ; YES - show OC gas | |
2439 ;bra TFT_active_sp ; NO - show setpoint and diluent | |
2440 | |
2441 TFT_active_sp: | |
2442 btfss bailout_mode ; in bailout? | |
2443 bra TFT_active_sp_loop ; NO | |
2444 ;bra TFT_active_sp_bailout ; YES | |
2445 | |
2446 TFT_active_sp_bailout: | |
604 | 2447 WIN_SMALL dm_active_dil_column, dm_active_dil_row |
623 | 2448 call TFT_attention_color ; - set color |
2449 STRCPY_TEXT_PRINT tDiveBailout ; - print "Bailout" | |
2450 bra TFT_active_gas ; - continue showing OC bailout gas | |
2451 | |
2452 TFT_active_sp_loop: | |
2453 MOVII int_O_breathed_ppO2,mpr ; copy ppO2 [cbar] to hi:lo | |
2454 call TFT_color_code_ppo2 ; color-code the output by the ppO2 of the loop gas mixture | |
2455 btfss timebase_1sec ; on even second? | |
2456 bra TFT_active_sp_print ; YES - print ppO2 with normal rendering | |
2457 btfsc sp_fallback ; NO - check if in fallback condition | |
2458 bra TFT_active_sp_fallback ; YES - process fallback case | |
582 | 2459 movff int_O_breathed_ppO2+1,WREG ; NO - get flags again (have been cleared in hi:lo by TFT_color_code_ppo2 meanwhile) |
2460 btfss WREG,int_warning_flag ; warning flag set? | |
623 | 2461 bra TFT_active_sp_print ; NO - ppO2 is ok, print ppO2 with normal rendering |
2462 bra TFT_active_sp_invers ; YES - print with inverse rendering | |
2463 TFT_active_sp_fallback: ; set up fallback case | |
2464 call TFT_attention_color ; set color to yellow | |
2465 TFT_active_sp_invers: ; blinking common part | |
2466 bsf win_invert ; print in inverse | |
2467 TFT_active_sp_print: ; set position | |
2468 WIN_MEDIUM dm_active_gas_sp_value_col, dm_active_gas_sp_value_row | |
2469 bsf leftbind ; print left-aligned | |
2470 output_16dp .3 ; print ppO2 as x.xx | |
2471 bcf leftbind ; back to right alignment | |
2472 STRCAT_PRINT "" ; finalize output | |
2473 bcf win_invert ; end inverse printing | |
2474 | |
2475 btfsc sign_shown ; advice/attention/warning sign shown? | |
2476 bra TFT_active_diluent ; YES - skip display of "bar" and loop mode | |
2477 | |
2478 btfsc velocity_active_vsi ; graphical vertical speed indicator shown? | |
2479 bra TFT_active_diluent ; YES - skip display of "bar" and loop mode | |
2480 | |
2481 TFT_active_sp_label: | |
2482 WIN_STD dm_active_sp_label_col, dm_active_sp_label_row | |
2483 call TFT_memo_color ; select memo color | |
2484 STRCAT "bar" ; print "bar" | |
2485 IFDEF _external_sensor | |
2486 movff opt_ccr_mode,WREG ; get setpoint mode =0: Fixed SP, =1: Sensor, =2: Auto SP | |
2487 sublw .1 ; opt_ccr_mode = 1 (Sensor) ? | |
2488 bnz TFT_active_sp_label_1 ; NO - skip | |
628 | 2489 btfsc alt_layout_active ; YES - in alternative layout? |
2490 bra TFT_active_sp_label_1 ; YES - no space available for the "*" | |
2491 PUTC "*" ; NO - add "*" | |
623 | 2492 TFT_active_sp_label_1: |
2493 ENDIF | |
2494 STRCAT_PRINT "" ; finalize output | |
2495 | |
2496 TFT_active_loop_mode: | |
2497 WIN_TINY dm_active_sp_label_col, dm_active_dil_row+.3 | |
2498 call TFT_memo_color ; set memo color | |
2499 btfsc FLAG_ccr_mode ; in CCR mode? | |
2500 bra TFT_active_loop_mode_ccr ; YES - print CCR label | |
2501 btfsc FLAG_pscr_mode ; in pSCR mode? | |
2502 bra TFT_active_loop_mode_pscr ; YES - print pSCR label | |
2503 bra TFT_active_diluent ; NO to both - should not happen | |
2504 TFT_active_loop_mode_ccr: | |
2505 STRCPY_TEXT_PRINT tDvCCR ; print "CCR" | |
2506 bra TFT_active_diluent ; continue with diluent | |
2507 TFT_active_loop_mode_pscr: | |
2508 STRCPY_TEXT_PRINT tDvPSCR ; print "pSCR" | |
2509 ;bra TFT_active_diluent ; continue with diluent | |
2510 | |
2511 TFT_active_diluent: | |
2512 MOVII int_O_pure_ppO2,mpr ; get ppO2 [cbar] into hi:lo | |
2513 call TFT_color_code_ppo2 ; color-code the output | |
2514 btfss better_dil_available ; better diluent available? | |
2515 bra TFT_active_diluent_show ; NO - print in normal rendering | |
2516 btg better_dil_blinking ; YES - toggle blink bit... | |
2517 btfss better_dil_blinking ; blink now? | |
2518 bra TFT_active_diluent_show ; NO - print in normal rendering | |
2519 call TFT_attention_color ; YES - print in yellow color | |
2520 bsf win_invert ; - print in inverse | |
2521 TFT_active_diluent_show: | |
560 | 2522 WIN_SMALL dm_active_dil_column, dm_active_dil_row |
623 | 2523 bra TFT_active_dil_gas_common ; continue with common part |
2524 ENDIF ; _ccr_pscr | |
2525 | |
2526 TFT_active_gas: | |
2527 MOVII int_O_breathed_ppO2,mpr ; copy ppO2 [cbar] into hi:lo | |
2528 call TFT_color_code_ppo2 ; color-code the output | |
2529 btfss better_gas_available ; better gas available? | |
2530 bra TFT_active_gas_print ; NO - print in normal rendering | |
2531 btg better_gas_blinking ; YES - toggle blink bit | |
2532 btfss better_gas_blinking ; blink now? | |
2533 bra TFT_active_gas_print ; NO - print in normal rendering | |
2534 call TFT_attention_color ; YES - blink in yellow | |
2535 bsf win_invert ; print in inverse | |
2536 TFT_active_gas_print: | |
2537 WIN_STD dm_active_gas_sp_value_col, dm_active_sp_label_row | |
2538 TFT_active_dil_gas_common: | |
582 | 2539 movff char_I_O2_ratio,lo ; lo now stores O2 in % |
623 | 2540 IFDEF _helium |
582 | 2541 movff char_I_He_ratio,hi ; hi now stores He in % |
623 | 2542 ELSE |
2543 clrf hi ; set hi to zero (no He) | |
2544 ENDIF | |
2545 call gaslist_show_mix ; print "Nxlo", "Txlo/hi", "Air" or "O2" | |
2546 STRCAT_PRINT "" ; finalize output | |
2547 bcf win_invert ; end inverse printing | |
2548 goto TFT_standard_color ; done | |
2549 | |
2550 ;============================================================================= | |
2551 | |
2552 global TFT_decotype_surface | |
2553 TFT_decotype_surface: | |
582 | 2554 WIN_STD surf_decotype_column,surf_decotype_row |
2555 WIN_COLOR color_lightblue | |
623 | 2556 movff opt_dive_mode,lo ; 0=OC, 1=CCR, 2=Gauge, 3=Apnoe, 4=pSCR |
2557 tstfsz lo ; in OC mode? | |
2558 bra TFT_decotype_surface_2 ; NO | |
2559 TFT_decotype_surface_1: | |
604 | 2560 STRCAT_TEXT_PRINT tDvOC ; OC |
582 | 2561 bra TFT_display_decotype_exit |
623 | 2562 TFT_decotype_surface_2: |
2563 decfsz lo,F ; in CCR mode? | |
2564 bra TFT_decotype_surface_3 ; NO | |
2565 IFDEF _ccr_pscr | |
2566 STRCAT_TEXT_PRINT tDvCC ; YES | |
582 | 2567 call TFT_standard_color |
113 | 2568 WIN_TINY surf_decotype_column+.18,surf_decotype_row+.12 |
623 | 2569 TSTOSS opt_ccr_mode ; > 0, i.e. not Fixed SP ? |
2570 bra TFT_display_decotype_cc_fixed ; NO - fixed then | |
2571 IFDEF _external_sensor | |
2572 ; Sensor or Auto SP mode | |
2573 movff opt_ccr_mode,WREG ; =0: Fixed SP, =1: Sensor, =2: Auto SP | |
2574 sublw .2 ; mode = Auto SP ? | |
2575 bz TFT_display_decotype_cc_auto ; YES | |
2576 STRCPY_TEXT tCCRModeSensor ; NO - Sensor | |
2577 bra TFT_display_decotype_cc_common ; | |
2578 ENDIF ; _external_sensor | |
337
508d7fb98b34
cleanup menu, add "Auto SP" option (Not working yet), minor layout change in compass menu
heinrichsweikamp
parents:
333
diff
changeset
|
2579 TFT_display_decotype_cc_auto: |
582 | 2580 STRCPY_TEXT tCCRModeAutoSP ; Auto SP |
2581 bra TFT_display_decotype_cc_common | |
113 | 2582 TFT_display_decotype_cc_fixed: |
604 | 2583 STRCPY_TEXT tCCRModeFixedSP ; fixed SP |
113 | 2584 TFT_display_decotype_cc_common: |
582 | 2585 clrf WREG |
2586 movff WREG,buffer+.8 ; limit string length to 8 | |
2587 STRCAT_PRINT "" | |
2588 bra TFT_display_decotype_exit | |
623 | 2589 ENDIF ; _ccr_pscr |
2590 TFT_decotype_surface_3: | |
2591 decfsz lo,F ; in gauge mode? | |
2592 bra TFT_decotype_surface_4 ; NO | |
2593 TFT_decotype_surface_3_1: ; YES | |
2594 STRCAT_TEXT_PRINT tDvGauge | |
582 | 2595 bra TFT_display_decotype_exit |
623 | 2596 TFT_decotype_surface_4: |
2597 decfsz lo,F ; in apnea mode? | |
2598 bra TFT_decotype_surface_5 ; NO | |
2599 TFT_decotype_surface_4_1: ; YES | |
2600 STRCAT_TEXT_PRINT tDvApnea | |
582 | 2601 bra TFT_display_decotype_exit |
623 | 2602 TFT_decotype_surface_5: |
2603 STRCAT_TEXT_PRINT tDvPSCR ; last but not least: must be pSCR then | |
0 | 2604 TFT_display_decotype_exit: |
582 | 2605 goto TFT_standard_color ; and return... |
2606 | |
2607 | |
623 | 2608 global TFT_decotype_logbook |
2609 TFT_decotype_logbook: ; used from logbook and from deco calculator (simulator.asm) | |
2610 bsf aux_flag ; default to dive with deco calculation | |
2611 tstfsz lo ; lo holds 0=OC, 1=CCR, 2=Gauge, 3=Apnea, 4=pSCR, in OC mode? | |
2612 bra TFT_decotype_logbook_1_2 ; NO | |
2613 bra TFT_decotype_surface_1 ; YES - OC | |
2614 TFT_decotype_logbook_1_2: | |
2615 decfsz lo,F ; in CCR mode? | |
2616 bra TFT_decotype_logbook_1_3 ; NO | |
2617 STRCAT_TEXT_PRINT tDvCC ; YES - print "CCR" | |
2618 bra TFT_display_decotype_exit ; - done | |
2619 TFT_decotype_logbook_1_3: | |
2620 decfsz lo,F ; in gauge mode? | |
2621 bra TFT_decotype_logbook_1_4 ; NO | |
2622 bcf aux_flag ; YES - dive without deco data | |
2623 bra TFT_decotype_surface_3_1 ; - gauge | |
2624 TFT_decotype_logbook_1_4: | |
2625 decfsz lo,F ; in apnea mode? | |
2626 bra TFT_decotype_logbook_1_5 ; NO | |
2627 bcf aux_flag ; YES - dive without deco data | |
2628 bra TFT_decotype_surface_4_1 ; - apnea | |
2629 TFT_decotype_logbook_1_5: | |
2630 bra TFT_decotype_surface_5 ; last but not least: must be pSCR then | |
116
737d6f488729
show decomode in logbook and simulator w/o sensor type
heinrichsweikamp
parents:
113
diff
changeset
|
2631 |
0 | 2632 ;============================================================================= |
2633 | |
623 | 2634 IFDEF _ccr_pscr |
2635 | |
604 | 2636 global TFT_splist_surfmode ; show setpoint list |
0 | 2637 TFT_splist_surfmode: |
623 | 2638 bsf short_gas_descriptions ; use short versions of gaslist_strcat_gas_cd and gaslist_strcat_setpoint |
604 | 2639 bcf better_gas_hint ; do not mark the best gas/diluent (to be used in dive mode only) |
582 | 2640 ;SP 1 |
2641 WIN_SMALL surf_gaslist_column,surf_gaslist_row | |
2642 clrf PRODL | |
604 | 2643 call gaslist_strcat_setpoint ; show SP#+1 of PRODL# |
582 | 2644 STRCAT_PRINT "" |
2645 ;SP 2 | |
2646 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) | |
2647 movlw .1 | |
2648 movwf PRODL | |
604 | 2649 call gaslist_strcat_setpoint ; show SP#+1 of PRODL# |
582 | 2650 STRCAT_PRINT "" |
2651 ;SP 3 | |
2652 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2) | |
2653 movlw .2 | |
2654 movwf PRODL | |
604 | 2655 call gaslist_strcat_setpoint ; show SP#+1 of PRODL# |
582 | 2656 STRCAT_PRINT "" |
2657 ;SP 4 | |
2658 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
2659 movlw .3 | |
2660 movwf PRODL | |
604 | 2661 call gaslist_strcat_setpoint ; show SP#+1 of PRODL# |
582 | 2662 STRCAT_PRINT "" |
2663 ;SP 5 | |
2664 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4) | |
2665 movlw .4 | |
2666 movwf PRODL | |
604 | 2667 call gaslist_strcat_setpoint ; show SP#+1 of PRODL# |
582 | 2668 STRCAT_PRINT "" |
2669 bcf leftbind | |
2670 return | |
0 | 2671 |
623 | 2672 ENDIF |
2673 | |
2674 ;============================================================================= | |
2675 | |
0 | 2676 global TFT_gaslist_surfmode |
604 | 2677 TFT_gaslist_surfmode: ; displays gas list |
623 | 2678 bsf short_gas_descriptions ; use short versions of gaslist_strcat_gas_cd and gaslist_strcat_setpoint |
604 | 2679 bcf better_gas_hint ; do not mark the best gas/diluent (to be used in dive mode only) |
582 | 2680 ;Gas 1 |
2681 WIN_SMALL surf_gaslist_column,surf_gaslist_row | |
2682 clrf PRODL | |
604 | 2683 call gaslist_strcat_gas_cd ; append gas description of gas #PRODL (0-4) to current string |
582 | 2684 STRCAT_PRINT "" |
2685 ;Gas 2 | |
2686 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1) | |
2687 movlw .1 | |
2688 movwf PRODL | |
604 | 2689 call gaslist_strcat_gas_cd ; append gas description of gas #PRODL (0-4) to current string |
582 | 2690 STRCAT_PRINT "" |
2691 ;Gas 3 | |
2692 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2) | |
2693 movlw .2 | |
2694 movwf PRODL | |
604 | 2695 call gaslist_strcat_gas_cd ; append gas description of gas #PRODL (0-4) to current string |
582 | 2696 STRCAT_PRINT "" |
2697 ;Gas 4 | |
2698 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
2699 movlw .3 | |
2700 movwf PRODL | |
604 | 2701 call gaslist_strcat_gas_cd ; append gas description of gas #PRODL (0-4) to current string |
582 | 2702 STRCAT_PRINT "" |
2703 ;Gas 5 | |
2704 WIN_SMALL surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.4) | |
2705 movlw .4 | |
2706 movwf PRODL | |
604 | 2707 call gaslist_strcat_gas_cd ; append gas description of gas #PRODL (0-4) to current string |
582 | 2708 STRCAT_PRINT "" |
2709 bcf leftbind | |
604 | 2710 bcf win_invert ; clear flag for inverted output |
582 | 2711 return |
0 | 2712 |
623 | 2713 ;============================================================================= |
2714 | |
2715 IFDEF _ccr_pscr | |
2716 | |
0 | 2717 global TFT_dillist_surfmode |
604 | 2718 TFT_dillist_surfmode: ; displays diluent list |
623 | 2719 bsf is_diluent_menu ; enable using diluents |
2720 rcall TFT_gaslist_surfmode ; use OC gas routine | |
2721 bcf is_diluent_menu ; disable using diluents | |
582 | 2722 return |
0 | 2723 |
623 | 2724 ENDIF |
2725 | |
300
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2726 ;================================================================== |
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2727 |
623 | 2728 global TFT_show_depth |
2729 TFT_show_depth: | |
631 | 2730 MOVII pressure_rel_cur_cached,mpr ; copy relative pressure to MPR |
2731 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] | |
623 | 2732 call TFT_color_code_depth ; set warning / attention flags and color-code the output |
2733 rcall TFT_depth_blink ; control animation (blinking) | |
2734 rcall TFT_depth_position_m_ft ; set output position | |
2735 | |
2736 TSTOSS opt_units ; 0=m, 1=ft ? | |
2737 bra TFT_depth_metric ; 0 - metric | |
2738 ;bra TFT_depth_imperial ; 1 - imperial | |
2739 | |
2740 TFT_depth_imperial: | |
2741 MOVLI .30,sub_a ; display 0 ft if shallower than 30 cm | |
2742 MOVII mpr,sub_b | |
2743 call cmpU16 ; compare (sub_a - sub_b) | |
2744 btfss neg_flag ; depth shallower than 30 cm ? | |
2745 bra depth_0_feet ; YES - print a zero directly | |
631 | 2746 call convert_cm_to_feet ; NO - convert value in hi:lo from [cm] to [feet] |
2747 output_16_3 ; - feet in large or huge font | |
623 | 2748 STRCAT_PRINT "" ; - finalize output |
2749 TFT_depth_imperial_1: | |
2750 bcf win_invert ; - reset invert flag | |
2751 bra TFT_depth_exit ; - show target depth if in simulator mode and return | |
2752 | |
2753 depth_0_feet: | |
631 | 2754 STRCAT_PRINT " 0" ; print a zero directly |
623 | 2755 bra TFT_depth_imperial_1 ; continue with common part |
0 | 2756 |
2757 TFT_depth_metric: | |
623 | 2758 ; full meters |
2759 MOVLI .9999,sub_a ; 9999 mbar = 99.99 m | |
2760 MOVII mpr, sub_b ; current depth | |
2761 call cmpU16 ; compare (sub_a - sub_b) | |
2762 btfsc neg_flag ; current depth < 100 meter ? | |
2763 bra TFT_depth_metric_100m ; NO - current depth >= 100 meter | |
2764 | |
2765 btfsc cur_depth_greater_100m ; was the current depth >= 100 meter during last call? | |
2766 rcall TFT_depth_box_black ; YES - clear depth area | |
2767 bcf cur_depth_greater_100m ; current depth is now < 100 meter | |
2768 | |
2769 MOVLI .999,sub_a ; 999 mbar = 9.99 meter | |
2770 MOVII mpr, sub_b ; current depth | |
2771 call cmpU16 ; compare (sub_a - sub_b) | |
2772 movlw ' ' ; load coding of a space char | |
2773 btfss neg_flag ; current depth < 10 meter ? | |
2774 movwf POSTINC2 ; YES - print a leading space char | |
2775 | |
2776 MOVLI .99,sub_a ; 99 mbar = 99 cm | |
2777 MOVII mpr,sub_b ; current depth | |
2778 call cmpU16 ; compare (sub_a - sub_b) | |
2779 btfss neg_flag ; current depth < 1 meter ? | |
2780 bra TFT_depth_metric_0m ; YES - (1) | |
2781 bsf ignore_digit4 ; NO - show depth in full meters, i.e. ignore digits 4 and 5 | |
2782 bsf leftbind ; - print left-aligned | |
2783 output_16 ; - print depth | |
2784 bcf leftbind ; - reset alignment | |
2785 bra TFT_depth_metric_com ; - continue with common part | |
2786 TFT_depth_metric_0m: | |
2787 STRCAT "0" ; (1) - print a zero directly | |
2788 TFT_depth_metric_com: | |
2789 STRCAT_PRINT "" ; finalize output | |
2790 | |
2791 ; decimeters | |
2792 rcall TFT_depth_position_dm ; set output position | |
2793 PUTC "." ; print a decimal point | |
2794 MOVLI .30,sub_a ; 30 mbar = 0.3 meter | |
2795 MOVII mpr,sub_b ; current depth | |
2796 call cmpU16 ; compare (sub_a - sub_b) | |
2797 btfss neg_flag ; current depth < 0.3 meter ? | |
2798 bra depth_0_decimeter ; YES - (2) | |
2799 movlw d'4' ; NO - omit leading digits holding the meters | |
2800 movwf ignore_digits ; - ... | |
2801 bsf ignore_digit5 ; - omit last digit holding the centimeters | |
2802 output_16dp d'0' ; - print decimeters only | |
2803 STRCAT_PRINT "" ; - finalize output | |
2804 bcf win_invert ; - reset invert flag | |
2805 bra TFT_depth_exit ; - show target depth if in simulator mode and return | |
2806 depth_0_decimeter: | |
2807 STRCAT_PRINT "0" ; (2) - print a zero directly and finalize output | |
2808 bcf win_invert ; - reset invert flag | |
2809 bra TFT_depth_exit ; - show target depth if in simulator mode and return | |
2810 | |
2811 TFT_depth_metric_100m: ; show full meters only | |
2812 btfss cur_depth_greater_100m ; was the current depth >= 100 meter during last call? | |
2813 rcall TFT_depth_box_black ; NO - clear depth area | |
2814 bsf cur_depth_greater_100m ; depth is >= 100 meter now | |
2815 bsf ignore_digit4 ; show depth in full meters, i.e. ignore digits 4 and 5 | |
2816 bsf leftbind ; print left-aligned | |
2817 output_16 ; print depth | |
2818 bcf leftbind ; reset alignment | |
2819 STRCAT_PRINT "" ; finalize output | |
2820 bcf win_invert ; reset invert flag | |
631 | 2821 bra TFT_depth_exit ; show target depth if in simulator mode and return |
0 | 2822 |
300
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2823 TFT_depth_blink: |
631 | 2824 TSTOSS opt_depth_warn ; 0=standard, 1=blink |
623 | 2825 return ; standard, done |
2826 btfsc depth_warn_att_last ; was there a warning or attention on the depth in the previous cycle? | |
2827 bra TFT_depth_blink_prev ; YES | |
2828 btfsc depth_warning ; NO - do we have a depth warning now? | |
2829 bra TFT_depth_blink_new ; YES - so we have a warning now but not previously | |
2830 btfsc depth_attention ; NO - do we have a depth attention now? | |
2831 bra TFT_depth_blink_new ; YES - so we have attention now but not previously | |
2832 bra TFT_depth_blink_none ; NO - no warning in previous cycle, no warning now, reset all flags | |
2833 | |
2834 TFT_depth_blink_prev: | |
2835 ; we had a warning or attention in previous cycle, check if we still have a warning or attention | |
2836 btfsc depth_warning ; do we still have a warning? | |
2837 bra TFT_depth_blink_prev_1 ; YES | |
2838 btfsc depth_attention ; NO - do we still have an attention? | |
2839 bra TFT_depth_blink_prev_1 ; YES | |
2840 ; we had a warning or attention before, but not now any more - clear depth area from previous color | |
2841 rcall TFT_depth_box_black ; NO - clear depth area | |
2842 ;bra TFT_depth_blink_none ; - reset all flags | |
2843 | |
2844 TFT_depth_blink_none: | |
2845 bcf win_invert ; print non-inverted | |
2846 bcf depth_inverse_last ; memorize depth was printed in normal | |
2847 bcf depth_warn_att_last ; memorize there was no warning or attention | |
2848 goto TFT_memo_color ; select memo color and return | |
2849 | |
2850 TFT_depth_blink_prev_1: | |
2851 ; we had a warning or attention in previous cycle, and we still have a warning or attention | |
2852 btfss depth_inverse_last ; was the depth printed in inverse last time? | |
2853 bra TFT_depth_blink_set ; NO - print in inverse now | |
2854 bra TFT_depth_blink_reset ; YES - print in normal now | |
2855 | |
2856 TFT_depth_blink_new: | |
2857 ; we had no warning or attention in previous cycle, but now | |
2858 bsf depth_warn_att_last ; memorize that the depth had a warning or attention | |
2859 ;bra TFT_depth_blink_set ; start with inverse display | |
300
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2860 |
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2861 TFT_depth_blink_set: |
623 | 2862 ; fill the area with respective color |
2863 call TFT_attention_color_dive ; select attention color as default | |
2864 btfsc depth_warning ; do we have a warning? | |
2865 call TFT_warnings_color_dive ; YES - replace with warning color | |
2866 rcall TFT_depth_box_color ; color depth area | |
2867 bsf win_invert ; print in inverse | |
2868 bsf depth_inverse_last ; memorize depth was printed in inverse | |
2869 return ; done | |
300
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2870 |
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2871 TFT_depth_blink_reset: |
623 | 2872 ; fill the area with black color |
2873 rcall TFT_depth_box_black ; clear depth area | |
2874 bcf win_invert ; print non-inverted | |
2875 bcf depth_inverse_last ; memorize depth was printed in normal | |
2876 return ; done | |
2877 | |
2878 | |
2879 TFT_depth_position_m_ft: | |
2880 btfsc alt_layout_active ; alternative layout active? | |
2881 bra TFT_depth_position_m_ft_alt ; YES - (1) | |
2882 WIN_LARGE dm_depth_col_large,dm_depth_row_large ; NO - normal layout | |
2883 return ; - done | |
2884 TFT_depth_position_m_ft_alt: | |
2885 WIN_HUGE dm_depth_col_huge, dm_depth_row_huge ; (1) - alternative layout | |
2886 return ; - done | |
2887 | |
2888 TFT_depth_position_dm: | |
2889 btfsc alt_layout_active ; alternative layout active? | |
2890 bra TFT_depth_position_dm_alt ; YES - (1) | |
2891 WIN_MEDIUM dm_depth_dm_col_medium, dm_depth_dm_row_medium ; NO - normal layout | |
2892 return ; - done | |
2893 TFT_depth_position_dm_alt: | |
2894 WIN_LARGE dm_depth_dm_col_large, dm_depth_dm_row_large ; (1) - alternative layout | |
2895 return ; - done | |
2896 | |
2897 TFT_depth_box_black: | |
2898 clrf WREG ; select black color | |
2899 TFT_depth_box_color: | |
2900 movff win_color1,mpr+2 ; backup output color | |
2901 movff win_color2,mpr+3 ; ... | |
2902 btfsc alt_layout_active ; alternative layout active? | |
2903 bra TFT_depth_box_alt ; YES - (1) | |
2904 WIN_BOX_COLOR dm_depth_row_large,dm_depth_bot_large,dm_depth_col_large,dm_depth_rgt_large ; NO - top, bottom, left, right | |
2905 bra TFT_depth_box_exit ; - continue with common part | |
2906 TFT_depth_box_alt: | |
2907 WIN_BOX_COLOR dm_mask_depth_row, dm_depth_bot_huge, dm_depth_col_huge, dm_depth_rgt_huge ; (1) - full meters area | |
2908 TFT_depth_box_exit: | |
2909 movff mpr+2,win_color1 ; restore output color | |
2910 movff mpr+3,win_color2 ; ... | |
2911 return ; done | |
2912 | |
2913 TFT_depth_exit: | |
2914 btfss alt_layout_active ; alternative layout active? | |
2915 bra TFT_depth_exit_1 ; NO | |
2916 btfsc depth_inverse_last ; YES - was last output in inverse mode? | |
2917 bra TFT_depth_exit_1 ; YES | |
2918 call TFT_divemask_color ; NO - set color | |
2919 WIN_TINY dm_mask_depth_column_alt,dm_mask_depth_row ; - set position | |
2920 STRCAT_TEXT_PRINT tDepth ; - restore "Depth" title | |
2921 TFT_depth_exit_1: | |
2922 btfss sensor_override_active ; pressure sensor override active (simulator mode)? | |
2923 goto TFT_standard_color ; NO - done | |
2924 ;bra TFT_depth_target ; YES - show target depth | |
2925 | |
2926 TFT_depth_target: ; show simulated target depth | |
2927 call TFT_attention_color ; select attention color | |
2928 TSTOSS opt_units ; check unit selection (0=m or 1=ft) | |
2929 bra TFT_depth_target_metric ; 0 - metric | |
2930 ;bra TFT_depth_target_imperial ; 1 - imperial | |
2931 | |
2932 TFT_depth_target_imperial: | |
2933 btfsc alt_layout_active ; alternative layout active? | |
2934 bra TFT_depth_target_imperial_alt ; YES | |
2935 ;bra TFT_depth_target_imperial_norm ; NO | |
2936 | |
2937 TFT_depth_target_imperial_norm: | |
2938 WIN_TINY dm_mask_depth_column+.40,dm_mask_depth_row ; position right of depth label | |
2939 bra TFT_depth_target_imperial_com ; continue with common part | |
2940 | |
2941 TFT_depth_target_imperial_alt: | |
2942 WIN_TINY dm_mask_depth_column+.62,dm_mask_depth_row+.20 ; position within last digit | |
2943 ;bra TFT_depth_target_imperial_com ; continue with common part | |
2944 | |
2945 TFT_depth_target_imperial_com: | |
2946 movff simulatormode_depth,lo ; copy target depth to lo | |
2947 call convert_meter_to_feet ; convert value in lo from meters to feet | |
2948 output_16_3 ; display only last three digits from a 16 bit value (0-999) | |
2949 STRCAT_PRINT "ft" ; finalize output | |
2950 goto TFT_standard_color ; done | |
2951 | |
2952 TFT_depth_target_metric: | |
2953 btfsc alt_layout_active ; alternative layout active? | |
2954 bra TFT_depth_target_metric_alt ; YES | |
2955 ;bra TFT_depth_target_metric_norm ; NO | |
2956 | |
2957 TFT_depth_target_metric_norm: | |
2958 WIN_TINY dm_mask_depth_column+.38,dm_mask_depth_row+.22 ; position right of full meters, above decimal | |
2959 bra TFT_depth_target_metric_com ; continue with common part | |
2960 | |
2961 TFT_depth_target_metric_alt: | |
2962 WIN_TINY dm_mask_depth_column+.65,dm_mask_depth_row+.20 ; position right of full meters, above decimal | |
2963 ;bra TFT_depth_target_metric_com ; continue with common part | |
2964 | |
2965 TFT_depth_target_metric_com: | |
2966 movff simulatormode_depth,lo ; copy target depth to lo | |
2967 output_8 ; display number | |
2968 STRCAT_PRINT "m" ; finalize output | |
2969 goto TFT_standard_color ; done | |
300
5ad479f2a868
Merged Screen layout mod #1 into Screen layout work #3
Janos Kovacs <kovjanos@gmail.com>
parents:
275
diff
changeset
|
2970 |
0 | 2971 ;============================================================================= |
2972 | |
582 | 2973 global TFT_custom_text |
604 | 2974 TFT_custom_text: ; show the custom text |
2975 lfsr FSR0, opt_name ; source | |
2976 WIN_SMALL surf_customtext_column,surf_customtext_row1 ; 1st row | |
2977 rcall TFT_custom_text_2 ; show up to 12 chars and print | |
2978 incfsz lo,F ; was lo=255? | |
2979 return ; NO - all done | |
2980 lfsr FSR0, opt_name+.12 ; source | |
2981 WIN_SMALL surf_customtext_column,surf_customtext_row2 ; 2nd row | |
2982 rcall TFT_custom_text_2 ; show up to 12 chars and print | |
2983 incfsz lo,F ; was lo=255? | |
2984 return ; NO - all done | |
2985 lfsr FSR0, opt_name+.24 ; source | |
2986 WIN_SMALL surf_customtext_column,surf_customtext_row3 ; 3rd row | |
2987 rcall TFT_custom_text_2 ; show up to 12 chars and print | |
2988 incfsz lo,F ; was lo=255? | |
2989 return ; NO - all done | |
2990 lfsr FSR0, opt_name+.36 ; source | |
2991 WIN_SMALL surf_customtext_column,surf_customtext_row4 ; 4th row | |
2992 rcall TFT_custom_text_2 ; show up to 12 chars and print | |
2993 incfsz lo,F ; was lo=255? | |
2994 return ; NO - all done | |
2995 lfsr FSR0, opt_name+.48 ; source | |
2996 WIN_SMALL surf_customtext_column,surf_customtext_row5 ; 5th row | |
623 | 2997 ;bra TFT_custom_text_2 ; show up to 12 chars, print and return... |
0 | 2998 |
2999 TFT_custom_text_2: | |
582 | 3000 lfsr FSR2, buffer ; destination |
3001 movlw .12 | |
3002 movwf lo ; length/line | |
0 | 3003 TFT_custom_text_3: |
604 | 3004 movf POSTINC0,W ; get byte |
3005 bz TFT_custom_text_4 ; end if NULL | |
3006 movwf POSTINC2 ; NO - copy | |
3007 decfsz lo,F ; max length reached ? | |
3008 bra TFT_custom_text_3 ; NO - loop | |
582 | 3009 setf lo ; lo=255 -> more to come |
0 | 3010 TFT_custom_text_4: |
604 | 3011 clrf POSTINC2 ; mark end of string |
582 | 3012 goto aa_wordprocessor ; print and return |
0 | 3013 |
3014 | |
3015 ;============================================================================= | |
560 | 3016 |
623 | 3017 global TFT_pres_surfmode |
3018 TFT_pres_surfmode: | |
604 | 3019 WIN_SMALL surf_press_column+.8,surf_press_row |
0 | 3020 call TFT_standard_color |
623 | 3021 SMOVII pressure_abs, sub_a ; make ISR-safe 2 byte copy of current absolute pressure to sub_a |
3022 MOVII pressure_abs_ref,sub_b ; copy absolute pressure from 30 minutes ago to sub_b | |
3023 MOVII sub_a,mpr ; store current pressure also in hi:lo for output | |
560 | 3024 call subU16 ; sub_c = sub_a - sub_b |
604 | 3025 btfsc neg_flag ; pressure lower? |
623 | 3026 rcall update_surf_press2 ; YES - swap arguments |
3027 tstfsz sub_c+1 ; > 255 mbar difference? | |
604 | 3028 bra update_surf_press_common ; YES - display |
623 | 3029 movlw .11 ; 10 mbar noise suppression margin |
0 | 3030 subwf sub_c+0,W |
3031 btfsc STATUS,C | |
604 | 3032 bra update_surf_press_common ; YES - display |
623 | 3033 MOVII pressure_abs_ref,mpr ; NO - overwrite with stable value |
0 | 3034 update_surf_press_common: |
3035 output_16 | |
560 | 3036 ; Show only 4 digits |
0 | 3037 movff buffer+1,buffer+0 |
3038 movff buffer+2,buffer+1 | |
3039 movff buffer+3,buffer+2 | |
3040 movff buffer+4,buffer+3 | |
3041 movlw 0x00 | |
3042 movff WREG,buffer+4 | |
582 | 3043 STRCAT_PRINT "" |
3044 call TFT_divemask_color | |
604 | 3045 WIN_SMALL surf_press_column+(4+1)*8,surf_press_row |
3046 STRCPY_TEXT_PRINT tMBAR ; mbar (hPa) | |
0 | 3047 return |
3048 | |
3049 update_surf_press2: | |
623 | 3050 MOVII sub_a,sub_b |
3051 MOVII pressure_abs_ref,sub_a | |
604 | 3052 goto subU16 ; sub_c = sub_a - sub_b and return... |
0 | 3053 |
3054 ;============================================================================= | |
3055 | |
623 | 3056 global TFT_batt_surfmode |
3057 TFT_batt_surfmode: | |
3058 ; color-code according to battery percent | |
3059 movff batt_percent,lo | |
604 | 3060 clrf hi |
623 | 3061 call TFT_color_code_battery |
3062 | |
3063 ; set up charging indicator and temperature warning | |
3064 clrf WREG ; default to no indication/warning | |
3065 btfsc cc_active ; charging in CC mode? | |
3066 movlw color_yellow ; YES - set output color to yellow | |
3067 btfsc cv_active ; charging in CV mode? | |
3068 movlw color_green ; YES - set output color to green | |
3069 btfsc battery_overtemp ; battery over-temperature detector tripped? | |
3070 movlw color_red ; YES - set output color to red | |
3071 tstfsz WREG ; any indicator or warning active? | |
3072 bsf win_invert ; YES - set output to inverse | |
3073 tstfsz WREG ; any indicator or warning active (asked again)? | |
3074 call TFT_set_color ; YES - set color | |
3075 | |
604 | 3076 WIN_SMALL batt_percent_column+.2,batt_percent_row |
3077 output_16_3 ; display only last three digits from a 16 bit value (0-999) | |
3078 STRCAT_PRINT "% " | |
582 | 3079 bcf win_invert |
0 | 3080 call TFT_standard_color |
604 | 3081 WIN_TINY batt_voltage_column+.15,batt_voltage_row |
3082 movff battery_type,lo ; =0: 1.5V, =1: 3.6V Saft, =2: LiIon 3.7V/0.8Ah, =3: LiIon 3.7V/3.1Ah, =4: LiIon 3.7V/2.3Ah | |
477
44b8a826b314
NEW: Show battery type in surface mode next to battery voltage
heinrichsweikamp
parents:
475
diff
changeset
|
3083 PUTC "T" |
582 | 3084 bsf leftbind |
3085 output_8 | |
3086 PUTC ":" | |
623 | 3087 MOVII batt_voltage,mpr |
631 | 3088 output_16dp .2 ; print as -x.yyy |
0 | 3089 bcf leftbind |
3090 PUTC 'V' | |
477
44b8a826b314
NEW: Show battery type in surface mode next to battery voltage
heinrichsweikamp
parents:
475
diff
changeset
|
3091 movff buffer+8,buffer+6 |
0 | 3092 movlw 0x00 |
604 | 3093 movff WREG,buffer+7 ; only "x.yV" |
582 | 3094 STRCAT_PRINT "" |
0 | 3095 return |
3096 | |
3097 ;update_battery_debug: | |
3098 ; call TFT_standard_color | |
3099 ; WIN_TINY .70,.0 | |
3100 ; movff battery_gauge+5,xC+3 | |
3101 ; movff battery_gauge+4,xC+2 | |
3102 ; movff battery_gauge+3,xC+1 | |
3103 ; movff battery_gauge+2,xC+0 | |
3104 ; ; battery_gauge:6 is nAs | |
3105 ; ; devide through 65536 | |
3106 ; ; devide through 152 | |
3107 ; ; Result is 0.01Ah in xC+1:xC+0 | |
623 | 3108 ; MOVLI .152,xB |
3109 ; call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder | |
0 | 3110 ; bsf leftbind |
623 | 3111 ; MOVII xC,mpr |
0 | 3112 ; output_16 |
623 | 3113 ; STRCAT_PRINT "x.01Ah" |
0 | 3114 ; bcf leftbind |
3115 ; return | |
582 | 3116 |
0 | 3117 ;============================================================================= |
3118 | |
3119 global TFT_convert_signed_16bit | |
3120 TFT_convert_signed_16bit: | |
623 | 3121 bcf neg_flag ; clear flag for negative number by default |
3122 btfss hi,7 ; negative number? | |
3123 return ; NO - done | |
3124 ; YES | |
3125 bsf neg_flag ; set flag for negative number | |
3126 PUTC '-' ; display a minus sign ("-") | |
3127 comf hi ; complement hi:lo | |
582 | 3128 negf lo |
3129 btfsc STATUS,C | |
3130 incf hi | |
604 | 3131 return ; done |
0 | 3132 |
3133 ;============================================================================= | |
631 | 3134 ; input: lo year |
3135 ; hi month | |
3136 ; up day | |
3137 ; | |
3138 ; output format by option opt_dateformat: | |
3139 ; 0: MMDDYY | |
3140 ; 1: DDMMYY | |
3141 ; 2: YYMMDD | |
3142 ; | |
0 | 3143 global TFT_convert_date |
631 | 3144 TFT_convert_date: ; convert into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in output buffer |
3145 movff opt_dateformat,EEDATA ; get format (EEDATA used as temp here) | |
3146 tstfsz EEDATA ; shall use format 0 ? | |
3147 bra TFT_convert_date_1 ; NO - check for format 1 or 2 | |
3148 ; YES - use format 0: MMDDYY | |
3149 movff lo,hy ; - backup year to hy | |
3150 movff hi,lo ; - copy month to lo | |
3151 movff up,hi ; - copy day to hi | |
3152 movff hy,up ; - copy year to up | |
3153 bra TFT_convert_date_common ; - start output | |
582 | 3154 TFT_convert_date_1: |
631 | 3155 decfsz EEDATA,F ; shall use format 1 ? |
3156 bra TFT_convert_date_common ; NO - use format 2: YYMMDD - can print directly | |
3157 ; YES - use format 1: DDMMYY | |
3158 movff lo,hy ; - backup year to hy | |
3159 movff up,lo ; - copy day to lo | |
3160 movff hy,up ; - copy year to up | |
3161 | |
582 | 3162 TFT_convert_date_common: |
631 | 3163 bsf leftbind ; start left-alignment |
3164 output_99x ; print lo | |
3165 PUTC '.' ; print spacing dot | |
3166 movff hi,lo ; print hi | |
3167 output_99x ; ... | |
3168 PUTC '.' ; print spacing dot | |
3169 movff up,lo ; print up | |
3170 output_99x ; ... | |
3171 bcf leftbind ; end left-alignment | |
3172 return ; done | |
3173 | |
0 | 3174 |
3175 ;============================================================================= | |
631 | 3176 ; show date by month & day |
3177 ; | |
3178 ; input: lo year (not used here) | |
3179 ; hi month | |
3180 ; up day | |
3181 ; | |
3182 ; output format by option opt_dateformat: | |
3183 ; 0: MMDD(YY) | |
3184 ; 1: DDMM(YY) | |
3185 ; 2: (YY)MMDD | |
3186 ; | |
0 | 3187 global TFT_convert_date_short |
631 | 3188 TFT_convert_date_short: ; convert into "DD/MM" or "MM/DD" or "MM/DD" into output buffer |
3189 movff opt_dateformat,EEDATA ; get format (EEDATA used as temp here) | |
3190 tstfsz EEDATA ; shall use format 0 ? | |
3191 bra TFT_convert_date_short2 ; NO - check for format 1 or 2 | |
3192 TFT_convert_date_short1: ; YES - use format 0: MMDD | |
3193 movff hi,lo ; - copy month to lo | |
3194 movff up,hi ; - copy day to hi | |
3195 bra TFT_convert_date_short3 ; - start output | |
3196 TFT_convert_date_short2: | |
3197 decfsz EEDATA,F ; format 1 ? | |
3198 bra TFT_convert_date_short1 ; NO - use format 2: MMDD (here its like format 0) | |
3199 ; YES - use format 1: DDMM | |
3200 movff up,lo ; - copy day to lo, | |
3201 ; - month is already in hi | |
3202 TFT_convert_date_short3: | |
3203 bsf leftbind ; start left-alignment | |
3204 output_99x ; print lo | |
3205 PUTC '.' ; print spacing dot | |
3206 movff hi,lo ; print hi | |
3207 output_99x ; ... | |
3208 bcf leftbind ; end left-alignment | |
3209 return ; done | |
0 | 3210 |
3211 ;============================================================================= | |
3212 | |
623 | 3213 global TFT_date_surfmode |
3214 TFT_date_surfmode: | |
3215 WIN_SMALL surf_date_column,surf_date_row | |
0 | 3216 call TFT_standard_color |
623 | 3217 SMOVSS rtc_year,rtc_latched_year ; ISR-safe 6 byte copy of date and time |
631 | 3218 movff rtc_latched_year, lo |
623 | 3219 movff rtc_latched_month,hi |
631 | 3220 movff rtc_latched_day, up |
623 | 3221 call TFT_convert_date ; convert into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 |
0 | 3222 STRCAT_PRINT "" |
3223 return | |
3224 | |
3225 ;============================================================================= | |
3226 | |
623 | 3227 global TFT_show_max_depth |
3228 TFT_show_max_depth: | |
3229 btfsc alt_layout_active ; alternative layout active? | |
3230 bra TFT_show_max_depth_alt ; YES | |
3231 | |
582 | 3232 WIN_MEDIUM dm_max_depth_column_nvsi, dm_max_depth_row |
604 | 3233 TSTOSS opt_vsigraph ; graphical VSI bar enabled? |
623 | 3234 bra TFT_show_max_depth_1 ; NO - keep position |
3235 ; YES - adopt output position | |
3236 WIN_MEDIUM dm_max_depth_column, dm_max_depth_row | |
3237 | |
3238 TFT_show_max_depth_1: | |
3239 btfsc FLAG_apnoe_mode ; in apnoe mode? | |
3240 bra TFT_max_depth_apnoe ; YES - different handling in apnoe mode | |
3241 | |
3242 TSTOSS opt_2ndDepthDisp ; show average depth instead of max depth? | |
3243 bra TFT_max_depth_current ; NO - show max depth | |
3244 ;bra TFT_avg_depth_current ; YES - show avg depth | |
3245 | |
3246 TFT_avg_depth_current: | |
631 | 3247 MOVII pressure_rel_avg_total,mpr ; YES - get total dive average pressure |
623 | 3248 bra TFT_max_depth_common ; - continue with common part |
3249 | |
3250 TFT_max_depth_apnoe: | |
3251 btfss apnoe_at_surface ; apnoe mode, at the surface? | |
3252 bra TFT_max_depth_current ; NO - show max depth of current dive | |
631 | 3253 MOVII apnoe_max_pressure,mpr ; YES - get max pressure of all dives so far |
623 | 3254 bra TFT_max_depth_common ; - continue with common part |
3255 | |
3256 TFT_max_depth_current: | |
631 | 3257 MOVII pressure_rel_max_cached,mpr ; get the "normal" max pressure |
623 | 3258 ;bra TFT_max_depth_common ; continue with common part |
3259 | |
3260 TFT_max_depth_common: | |
631 | 3261 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] |
604 | 3262 TSTOSS opt_units ; 0=m or 1=ft ? |
3263 bra TFT_max_depth_metric ; 0 - use metric version | |
623 | 3264 ;bra TFT_max_depth_imperial ; 1 - use imperial version |
3265 | |
3266 TFT_max_depth_imperial: | |
631 | 3267 call convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
623 | 3268 call TFT_memo_color ; set output color |
3269 output_16_3 ; print depth | |
3270 bra TFT_max_depth_finish ; finish output | |
3271 | |
604 | 3272 TFT_max_depth_metric: |
623 | 3273 MOVLI .9999,sub_a ; 9999 mbar = 99.99 m |
3274 MOVII mpr, sub_b ; depth, also used to back-up hi:lo | |
3275 call cmpU16 ; sub_a - sub_b = 99.99 - depth | |
3276 btfsc neg_flag ; depth < 100 meter ? | |
3277 bra TFT_max_depth_greater_100m ; NO - greater than 100 m | |
3278 ;bra TFT_max_depth_shallower_100m; YES - shallower than 100 m | |
3279 | |
3280 TFT_max_depth_shallower_100m: | |
3281 btfss max_depth_greater_100m ; was depth >= 100 m during last call? | |
3282 bra TFT_max_depth_metric_show ; NO - show depth | |
3283 bcf max_depth_greater_100m ; YES - clear flag, last depth shown now not > 99.84 m anymore | |
3284 bra TFT_max_depth_clear ; - clear depth area | |
3285 | |
3286 TFT_max_depth_greater_100m: | |
3287 btfsc max_depth_greater_100m ; was depth >= 100 m during last call? | |
3288 bra TFT_max_depth_metric_show ; YES - show depth | |
3289 bsf max_depth_greater_100m ; NO - set flag, last depth shown now > 99.84 m | |
3290 ;bra TFT_max_depth_clear ; - clear depth area | |
3291 | |
3292 TFT_max_depth_clear: | |
3293 WIN_BOX_BLACK dm_max_depth_row, dm_max_depth_bot, dm_max_depth_column, dm_max_depth_rgt ; top, bottom, left, right | |
3294 ;bra TFT_max_depth_metric_show | |
3295 | |
3296 TFT_max_depth_metric_show: | |
3297 call TFT_memo_color ; set output color | |
3298 btfss max_depth_greater_100m ; depth to show >= 100 m ? | |
3299 bra TFT_max_depth_metric_m_dm ; NO - show meters and decimeters | |
3300 bsf ignore_digit4 ; YES - crop decimeters and centimeters | |
3301 bsf leftbind ; - print left-aligned | |
3302 output_16 ; - print depth | |
3303 bra TFT_max_depth_finish ; - finish output | |
3304 | |
3305 TFT_max_depth_metric_m_dm: | |
3306 MOVLI .999,sub_a ; load 9.99 meter | |
3307 call cmpU16 ; sub_a - sub_b = 9.99 - depth | |
3308 movlw ' ' ; load a space character | |
3309 btfss neg_flag ; depth shallower than 10 meter ? | |
3310 movwf POSTINC2 ; YES - add the space character | |
3311 MOVLI .99,sub_a ; load 0.99 m | |
3312 call cmpU16 ; sub_a - sub_b = 0.99 m - depth | |
3313 btfss neg_flag ; depth shallower than 1 meter ? | |
3314 bra TFT_max_depth_metric_zero ; YES - manually display a zero | |
3315 bsf ignore_digit4 ; NO - crop decimeters and centimeters | |
604 | 3316 bsf leftbind ; - align left |
3317 output_16 ; - display full meters | |
623 | 3318 STRCAT_PRINT "" ; - finalize output |
3319 bra TFT_max_depth_metric_dm ; - continue with decimeters | |
3320 | |
3321 TFT_max_depth_metric_zero: | |
3322 STRCAT_PRINT "0" ; print a zero | |
3323 ;bra TFT_max_depth_metric_dm ; continue with decimeters | |
3324 | |
3325 TFT_max_depth_metric_dm: | |
604 | 3326 WIN_SMALL dm_max_depth_dm_column_nvsi, dm_max_depth_dm_row |
3327 TSTOSS opt_vsigraph ; graphical VSI bar enabled? | |
623 | 3328 bra TFT_max_depth_metric_dm_1 ; NO - keep position |
3329 ; YES - adopt position | |
3330 WIN_SMALL dm_max_depth_dm_column, dm_max_depth_dm_row | |
3331 TFT_max_depth_metric_dm_1: | |
604 | 3332 PUTC "." ; print decimal point |
623 | 3333 MOVII sub_b,mpr ; restore depth in hi:lo |
3334 movlw d'4' ; crop leading 4 digits (don't show the full meters) | |
3335 movwf ignore_digits ; ... | |
3336 bsf ignore_digit5 ; crop last digit (no centimeters, flag will be cleared by output_16) | |
3337 bsf leftbind ; print left-aligned | |
3338 output_16dp d'0' ; print decimal | |
3339 TFT_max_depth_finish: | |
3340 STRCAT_PRINT "" ; finalize output | |
3341 bcf leftbind ; back to default right alignment | |
3342 goto TFT_standard_color ; done | |
3343 | |
3344 | |
3345 TFT_show_max_depth_alt: | |
3346 btfsc FLAG_apnoe_mode ; in apnoe mode? | |
3347 bra TFT_show_apnoe_max_depth ; YES - use apnoe surface output also in alternative dive mode screen | |
3348 btfsc FLAG_gauge_mode ; NO - in gauge mode? | |
3349 bra TFT_show_gauge_max_avg_depth; YES - show both, max and avg depth | |
3350 return ; NO - nothing to do | |
3351 | |
3352 TFT_show_gauge_max_avg_depth: | |
3353 call TFT_memo_color ; set color | |
3354 WIN_MEDIUM dm_gauge_max_depth_col, dm_gauge_max_depth_row ; set position for max depth | |
3355 rcall TFT_show_gauge_max_depth ; show max depth | |
3356 call TFT_memo_color ; set color | |
3357 WIN_MEDIUM dm_gauge_avg_depth_col, dm_gauge_avg_depth_row ; set position for avg depth | |
631 | 3358 MOVII pressure_rel_avg_total,mpr ; get average pressure into hi:lo |
623 | 3359 bra TFT_show_gauge_depth ; show avg depth and return |
3360 | |
3361 | |
3362 global TFT_show_apnoe_max_depth | |
3363 TFT_show_apnoe_max_depth: | |
3364 ; title | |
3365 WIN_TINY dm_apnoe_last_max_depth_text_col, dm_apnoe_last_max_depth_text_row | |
3366 call TFT_divemask_color | |
3367 btfsc alt_layout_active ; alternative layout active? | |
3368 bra TFT_show_apnoe_max_depth_alt ; YES | |
3369 STRCPY_TEXT_PRINT tApnoeMax ; NO - print "Last Descent" | |
3370 bra TFT_show_apnoe_max_depth_com ; - continue with common part | |
3371 TFT_show_apnoe_max_depth_alt: | |
3372 STRCPY_TEXT_PRINT tMaxDepth ; print "Max.Depth" | |
3373 TFT_show_apnoe_max_depth_com: | |
3374 ; value | |
3375 WIN_MEDIUM dm_apnoe_last_max_depth_column, dm_apnoe_last_max_depth_row | |
3376 call TFT_memo_color | |
3377 TFT_show_gauge_max_depth: | |
631 | 3378 MOVII pressure_rel_max_cached,mpr ; get max pressure into hi:lo |
3379 ;bra TFT_show_gauge_depth ; show max depth and return | |
3380 | |
623 | 3381 TFT_show_gauge_depth: |
631 | 3382 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] |
623 | 3383 TSTOSS opt_units ; 0=m, 1=ft |
3384 bra TFT_display_apnoe_last_m_metric ; 0 - metric | |
3385 TFT_display_apnoe_last_max_imp: ; 1 - imperial | |
631 | 3386 call convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
623 | 3387 output_16 |
3388 bra TFT_max_depth_finish ; finish output | |
3389 TFT_display_apnoe_last_m_metric: | |
3390 bsf ignore_digit5 ; do not display centimeters (flag will be cleared by output_16) | |
3391 output_16dp d'3' | |
3392 bra TFT_max_depth_finish ; finish output | |
0 | 3393 |
3394 ;============================================================================= | |
560 | 3395 |
623 | 3396 global TFT_show_divetime |
3397 TFT_show_divetime: | |
3398 call TFT_memo_color ; set color | |
3399 SMOVTT counted_divetime_mins,mpr ; ISR-safe 3 byte copy of minutes:2 (mpr+1:mpr+0) and seconds (mpr+2) | |
3400 btfsc show_only_divemins ; shall suppress display of seconds? | |
3401 bra TFT_show_divetime_min_only ; YES - show minutes only | |
3402 movlw .99 ; NO - load 99 | |
3403 cpfsgt mpr+0 ; - dive time > 99 minutes ? | |
3404 bra TFT_show_divetime_min_sec ; NO - show min:sec | |
3405 bsf show_only_divemins ; YES - set flag to suppress the display of seconds for the rest of the dive | |
3406 btfsc alt_layout_active ; - in alternative layout? | |
3407 bra TFT_show_divetime_clear_alt ; YES - clear min:sec area of alternative layout | |
3408 ;bra TFT_show_divetime_clear_norm ; NO - clear min:sec area of normal layout | |
3409 | |
3410 TFT_show_divetime_clear_norm: | |
3411 WIN_BOX_BLACK dm_divetime_row, dm_divetime_bot_medium, dm_divetime_col_medium, dm_divetime_rgt ;top, bottom, left, right | |
3412 bra TFT_show_divetime_min_only_norm ; show minutes only | |
3413 | |
3414 TFT_show_divetime_clear_alt: | |
3415 WIN_BOX_BLACK dm_divetime_row, dm_divetime_bot_large, dm_divetime_col_large, dm_divetime_rgt ;top, bottom, left, right | |
3416 bra TFT_show_divetime_min_only_alt ; show minutes only | |
3417 | |
3418 TFT_show_divetime_min_sec: | |
3419 ; show the minutes | |
3420 btfsc alt_layout_active ; in alternative layout? | |
3421 bra TFT_show_divetime_min_alt ; YES | |
3422 ;bra TFT_show_divetime_min_norm ; NO | |
3423 | |
3424 TFT_show_divetime_min_norm: | |
3425 WIN_MEDIUM dm_divetime_col_medium, dm_divetime_row | |
3426 bra TFT_show_divetime_min_com ; continue with common part | |
3427 | |
3428 TFT_show_divetime_min_alt: | |
3429 WIN_LARGE dm_divetime_col_large, dm_divetime_row | |
3430 ;bra TFT_show_divetime_min_com ; continue with common part | |
3431 | |
3432 TFT_show_divetime_min_com: | |
3433 output_99 ; displays only last two digits from a 8 bit value (0-99) | |
3434 STRCAT_PRINT "" ; finalize output | |
3435 | |
3436 ; show the seconds | |
3437 btfsc alt_layout_active ; in alternative layout? | |
3438 bra TFT_show_divetime_sec_alt ; YES | |
3439 ;bra TFT_show_divetime_sec_norm ; NO | |
3440 | |
3441 TFT_show_divetime_sec_norm: | |
3442 WIN_SMALL dm_divetime_sec_col_small, dm_divetime_sec_row_small | |
3443 bra TFT_show_divetime_sec_com ; continue with common part | |
3444 | |
3445 TFT_show_divetime_sec_alt: | |
3446 WIN_MEDIUM dm_divetime_sec_col_medium, dm_divetime_sec_row_medium | |
3447 ;bra TFT_show_divetime_sec_com ; continue with common part | |
3448 | |
3449 TFT_show_divetime_sec_com: | |
3450 PUTC ':' ; print separator char | |
3451 movff mpr+2,lo ; copy seconds to lo | |
3452 bsf leftbind ; activate left-alignment | |
3453 output_99x ; displays only last two figures from a 8 bit value with leading zero (00-99) | |
3454 bcf leftbind ; deactivate left-alignment | |
3455 bra TFT_divemins_exit ; continue with common part | |
3456 | |
3457 TFT_show_divetime_min_only: | |
3458 btfsc alt_layout_active ; in alternative layout? | |
3459 bra TFT_show_divetime_min_only_alt ; YES | |
3460 ;bra TFT_show_divetime_min_only_norm ; NO | |
3461 | |
3462 TFT_show_divetime_min_only_norm: | |
3463 WIN_MEDIUM dm_divetime_minonly_col_medium, dm_divetime_row | |
3464 output_16_4 ; print minutes (4 digits) | |
3465 bra TFT_divemins_exit ; continue with common part | |
3466 | |
3467 TFT_show_divetime_min_only_alt: | |
3468 WIN_LARGE dm_divetime_minonly_col_large, dm_divetime_row | |
3469 output_16_3 ; print minutes (3 digits) | |
3470 ;bra TFT_divemins_exit ; continue with common part | |
3471 | |
604 | 3472 TFT_divemins_exit: |
623 | 3473 STRCAT_PRINT "" ; finalize output |
3474 goto TFT_standard_color ; and return... | |
0 | 3475 |
3476 ;============================================================================= | |
560 | 3477 |
623 | 3478 global TFT_show_apnoe_surface |
3479 TFT_show_apnoe_surface: | |
582 | 3480 call TFT_divemask_color |
3481 WIN_TINY dm_apnoe_surface_time_text_col, dm_apnoe_surface_time_text_row | |
3482 STRCPY_TEXT_PRINT tApnoeSurface | |
604 | 3483 call TFT_memo_color |
582 | 3484 WIN_MEDIUM dm_apnoe_surface_time_column, dm_apnoe_surface_time_row |
623 | 3485 SMOVII apnoe_surface_mins,mpr ; ISR-safe copy of minutes to lo and seconds to hi |
0 | 3486 output_8 |
582 | 3487 PUTC ':' |
623 | 3488 movff hi,lo ; copy seconds to lo |
0 | 3489 output_99x |
623 | 3490 bra TFT_display_apnoe_exit ; and return... |
3491 | |
3492 | |
3493 global TFT_show_apnoe_times | |
3494 TFT_show_apnoe_times: ; descent dive time | |
3495 ; current dive time | |
604 | 3496 call TFT_memo_color |
623 | 3497 WIN_MEDIUM dm_divetime_apnoe_col, dm_divetime_apnoe_row |
3498 SMOVII apnoe_dive_mins,mpr ; ISR-safe copy of minutes to lo and seconds to hi | |
3499 output_99 ; display 0-99 | |
3500 STRCAT_PRINT "" ; show minutes | |
3501 WIN_SMALL dm_divetime_apnoe_secs_col, dm_divetime_apnoe_secs_row ; left position for two sec figures | |
582 | 3502 PUTC ':' |
0 | 3503 bsf leftbind |
623 | 3504 movff hi,lo ; copy seconds to lo |
0 | 3505 output_99x |
623 | 3506 STRCAT_PRINT "" ; show seconds |
3507 ; overall dive time | |
3508 WIN_MEDIUM dm_apnoe_total_divetime_col, dm_apnoe_total_divetime_row | |
3509 SMOVTT counted_divetime_mins,mpr ; ISR-safe 3 byte copy of minutes:2 and seconds | |
582 | 3510 clrf hi |
604 | 3511 bcf leftbind |
623 | 3512 output_16_3 ; displays only last three figures from a 16 bit value (0-999) |
3513 STRCAT_PRINT "" ; show minutes in large font | |
3514 WIN_SMALL dm_apnoe_total_divetime_secs_col, dm_apnoe_total_divetime_secs_row ; left position for two sec figures | |
582 | 3515 PUTC ':' |
38 | 3516 bsf leftbind |
623 | 3517 movff up,lo ; copy minutes from up to lo |
38 | 3518 output_99x |
604 | 3519 TFT_display_apnoe_exit: |
3520 STRCAT_PRINT "" | |
582 | 3521 bcf leftbind |
623 | 3522 goto TFT_standard_color ; and return... |
3523 | |
3524 | |
3525 global TFT_clear_apnoe_surface | |
3526 TFT_clear_apnoe_surface: | |
3527 ; clear surface data | |
3528 WIN_BOX_BLACK dm_apnoe_last_max_depth_text_row, .239, dm_apnoe_last_max_depth_column, .159 ; top, bottom, left, right | |
3529 goto TFT_standard_color ; and return... | |
3530 | |
3531 | |
3532 ;----------------------------------------------------------------------------- | |
604 | 3533 ; check if firmware is within expiry period, will return aux_flag set if not |
3534 | |
3535 check_expiry: ; check if it is time for a firmware update | |
631 | 3536 SMOVSS rtc_year,rtc_latched_year; ISR-safe 6 byte copy of date and time |
623 | 3537 movff rtc_latched_day,lo ; get current day |
3538 movff rtc_latched_month,hi ; get current month | |
3539 movff rtc_latched_year,up ; get current year | |
604 | 3540 bsf aux_flag ; set firmware as expired by default |
3541 movlw firmware_expire_year ; start with checking year | |
623 | 3542 cpfsgt up ; current year > expiry year ? |
604 | 3543 bra check_expiry_Y ; NO - continue checks |
3544 return ; YES - expired | |
3545 check_expiry_Y: | |
623 | 3546 cpfseq up ; current year = expiry year ? |
604 | 3547 bra check_expiry_ok ; NO - must be < then, OK whatever month & day |
3548 movlw firmware_expire_month ; YES - continue checking month | |
623 | 3549 cpfsgt hi ; current month > expiry month ? |
604 | 3550 bra check_expiry_M ; NO - continue checks |
3551 return ; YES - expired | |
3552 check_expiry_M: | |
623 | 3553 cpfseq hi ; current month = expiry month ? |
604 | 3554 bra check_expiry_ok ; NO - must be < then, OK whatever day |
3555 movlw firmware_expire_day ; YES - continue checking day | |
623 | 3556 cpfsgt lo ; current day > expiry day ? |
604 | 3557 bra check_expiry_ok ; NO - must be <= then, OK |
3558 return ; YES - expired | |
3559 check_expiry_ok: | |
3560 bcf aux_flag | |
582 | 3561 return |
604 | 3562 |
623 | 3563 ;----------------------------------------------------------------------------- |
604 | 3564 ; append firmware BETA status to current string, including color-coding |
3565 | |
3566 global TFT_cat_beta_release | |
3567 TFT_cat_beta_release: ; entry point for printing "Release" / "Beta #" | |
3568 bsf aux_flag | |
3569 bra TFT_cat_beta_common | |
3570 TFT_cat_beta_rel: ; entry point for printing "Rel." / "B. #" | |
3571 bcf aux_flag | |
3572 TFT_cat_beta_common: | |
623 | 3573 IFDEF _DEBUG |
3574 btfss aux_flag ; shall show long version? | |
3575 bra TFT_cat_debug_short ; NO - show short version | |
3576 STRCAT "DEBUG" ; YES - show long version | |
3577 goto TFT_warning_color ; - set color | |
3578 TFT_cat_debug_short: | |
3579 STRCAT "DBG." ; show short version | |
3580 goto TFT_warning_color ; set color | |
604 | 3581 ELSE |
631 | 3582 movlw fw_version_beta ; =0: release, =1: beta 1, =2: beta 2, ... |
604 | 3583 movwf lo ; copy to lo |
3584 tstfsz lo ; release version? | |
3585 bra TFT_cat_beta_1 ; NO - must be beta version then | |
3586 btfss aux_flag ; YES - shall show long version? | |
3587 bra TFT_cat_beta_2 ; NO - show short version | |
3588 rcall check_expiry ; YES - check expiry date | |
3589 btfsc aux_flag ; - within expiry date? | |
3590 bra TFT_cat_beta_4 ; NO - give update cue | |
623 | 3591 STRCAT "Release" ; YES - print "Release" |
604 | 3592 return ; - done |
3593 TFT_cat_beta_1: | |
3594 btfss aux_flag ; shall show long version? | |
3595 bra TFT_cat_beta_3 ; NO - show short version | |
3596 STRCAT "Beta " ; YES - show long version | |
3597 TFT_cat_beta_1a: | |
3598 bsf leftbind | |
3599 output_8 ; print beta version number | |
3600 bcf leftbind | |
3601 goto TFT_attention_color ; and return | |
3602 TFT_cat_beta_2 | |
3603 STRCAT "Rel." ; short version for "Release" | |
582 | 3604 return |
604 | 3605 TFT_cat_beta_3 |
3606 STRCAT "B." ; short version for "Beta" | |
3607 bra TFT_cat_beta_1a ; append beta version number | |
3608 TFT_cat_beta_4 | |
3609 STRCAT "update!" ; print update cue | |
3610 goto TFT_attention_color ; and return | |
628 | 3611 ENDIF ; ELSE / _DEBUG |
623 | 3612 |
3613 ;----------------------------------------------------------------------------- | |
3614 ; show firmware update message | |
3615 ; | |
3616 ; all text outputs are hard-coded since language switching | |
3617 ; has not yet been initialized when this code is executed | |
3618 | |
3619 global show_fw_mesg_update | |
3620 global show_fw_mesg_kept | |
3621 show_fw_mesg_update: | |
3622 call TFT_standard_color | |
3623 ; show update message | |
3624 WIN_SMALL .20,.100 | |
3625 STRCPY_PRINT "Update successful!" | |
3626 ; show firmware version | |
3627 WIN_SMALL .20,.140 | |
3628 STRCPY "New Firmware: " | |
3629 bra show_fw_mesg_common | |
3630 show_fw_mesg_kept: | |
3631 call TFT_standard_color | |
3632 ; show reboot message | |
3633 WIN_SMALL .60,.100 | |
3634 STRCPY_PRINT "Reboot" | |
3635 ; show firmware version | |
3636 WIN_SMALL .30,.140 | |
3637 STRCPY "Firmware: " | |
3638 show_fw_mesg_common: | |
3639 rcall TFT_cat_firmware ; show firmware version x.y and color-code + invert if outdated | |
3640 STRCAT_PRINT "" ; finalize output | |
3641 bcf win_invert ; back to normal (non inverted) output | |
3642 ; show firmware beta status | |
3643 call TFT_standard_color ; color to use if it is a release version | |
3644 WIN_SMALL .60,.180 | |
3645 rcall TFT_cat_beta_release ; show "Release" or "BETA" + issue | |
3646 STRCAT_PRINT "" ; finalize output | |
3647 goto TFT_standard_color ; reset color and return | |
3648 | |
3649 ;----------------------------------------------------------------------------- | |
3650 ; show serial and firmware version for comm mode | |
3651 | |
3652 global TFT_show_serial_and_firmware | |
3653 global TFT_show_firmware | |
3654 TFT_show_serial_and_firmware: | |
3655 STRCPY "#" | |
3656 call TFT_cat_serial | |
3657 STRCAT " " | |
628 | 3658 STRCAT "v" |
623 | 3659 TFT_show_firmware: |
3660 call TFT_cat_firmware ; will set win_invert if outdated | |
3661 STRCAT " " | |
3662 call TFT_cat_beta_release | |
3663 STRCAT_PRINT "" | |
3664 bcf win_invert ; clear win_invert | |
3665 goto TFT_standard_color ; ...and return | |
3666 | |
3667 ;----------------------------------------------------------------------------- | |
628 | 3668 ; For the Information menu: append total dives |
3669 | |
3670 global info_menu_total_dives | |
3671 info_menu_total_dives: | |
631 | 3672 lfsr FSR1,tTotalDives ; locate text |
3673 call strcat_text ; print text | |
628 | 3674 TFT_cat_total_dives: |
631 | 3675 call eeprom_total_dives_read ; read total number of dives |
3676 bsf leftbind ; print left-aligned | |
3677 output_16 ; print number of total dives | |
3678 bcf leftbind ; quit left-aligned | |
3679 return ; done | |
3680 | |
628 | 3681 ;----------------------------------------------------------------------------- |
623 | 3682 ; append firmware version to current string, including color-coding |
3683 | |
3684 global TFT_cat_firmware | |
3685 TFT_cat_firmware: | |
631 | 3686 movlw fw_version_major |
623 | 3687 movwf lo |
3688 bsf leftbind | |
628 | 3689 output_8 ; print major in 1 or 2 digit format |
623 | 3690 PUTC '.' |
631 | 3691 movlw fw_version_minor |
623 | 3692 movwf lo |
3693 output_99x ; print minor in two digit format | |
3694 bcf leftbind | |
3695 rcall check_expiry ; sets aux_flag if expired | |
3696 btfss aux_flag ; expired? | |
3697 return ; NO | |
3698 bsf win_invert ; YES - print in inverse | |
3699 goto TFT_attention_color ; - print in attention color (and return) | |
3700 | |
3701 ;----------------------------------------------------------------------------- | |
631 | 3702 ; For the Information menu: firmware version and creation date |
604 | 3703 |
3704 global info_menu_firmware | |
3705 info_menu_firmware: | |
631 | 3706 lfsr FSR1,tFirmware ; select label text |
3707 call strcat_text ; print label | |
3708 rcall TFT_cat_firmware ; print firmware version | |
3709 PUTC " " ; print a dot | |
3710 rcall TFT_cat_beta_rel ; print beta/release | |
3711 STRCAT_PRINT "" ; finalize output | |
3712 return ; done | |
3713 | |
3714 global info_menu_fw_cration_date | |
3715 info_menu_fw_cration_date: | |
3716 lfsr FSR1,tFirmwareDate ; select label text | |
3717 call strcat_text ; print label | |
3718 movlw firmware_creation_year ; get firmware creation year | |
3719 movwf lo ; copy to lo | |
3720 movlw firmware_creation_month ; get firmware creation month | |
3721 movwf hi ; copy to hi | |
3722 movlw firmware_creation_day ; get firmware creation day | |
3723 movwf up ; copy to up | |
3724 call TFT_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 | |
3725 return ; done | |
604 | 3726 |
623 | 3727 ;----------------------------------------------------------------------------- |
604 | 3728 ; For the Information menu: firmware version of the RX processor |
3729 | |
3730 IFDEF _rx_functions | |
623 | 3731 |
604 | 3732 global info_menu_firmware_rx |
623 | 3733 global TFT_print_firmware_rx |
604 | 3734 info_menu_firmware_rx: |
3735 lfsr FSR1,tFirmware_rx | |
3736 call strcat_text | |
623 | 3737 TFT_print_firmware_rx: |
3738 movff rx_firmware_cur_major,lo | |
604 | 3739 bsf leftbind |
3740 output_8 | |
3741 PUTC '.' | |
623 | 3742 movff rx_firmware_cur_minor,lo |
604 | 3743 output_8 |
3744 bcf leftbind | |
3745 return | |
623 | 3746 |
604 | 3747 ENDIF |
0 | 3748 |
3749 ;----------------------------------------------------------------------------- | |
628 | 3750 ; For the Information menu: serial number |
560 | 3751 |
582 | 3752 global info_menu_serial |
623 | 3753 global TFT_cat_serial |
0 | 3754 info_menu_serial: |
631 | 3755 lfsr FSR1,tSerial ; locate text |
3756 call strcat_text ; print text | |
0 | 3757 TFT_cat_serial: |
631 | 3758 call eeprom_serial_number_read ; read OSTC serial number |
3759 bsf leftbind ; start left-alignment | |
3760 output_16 ; print serial number | |
3761 bcf leftbind ; end left-alignment | |
3762 return ; done | |
0 | 3763 |
3764 ;----------------------------------------------------------------------------- | |
628 | 3765 ; For the Information menu: hardware / software configuration |
3766 | |
3767 global info_menu_config | |
3768 info_menu_config: | |
631 | 3769 lfsr FSR1,tHardware ; locate text |
3770 call strcat_text ; print text | |
3771 call I2C_init_compass ; start compass | |
3772 movf HW_descriptor,W ; copy hardware descriptor to WREG | |
3773 output_hex ; print as hex | |
3774 PUTC "-" ; print a separator | |
3775 movf HW_variants,W ; copy hardware variants to WREG | |
3776 output_hex ; print as hex | |
3777 PUTC "-" ; print a separator | |
3778 movlw SW_CONF ; get software configuration | |
3779 output_hex ; print as hex | |
582 | 3780 return |
0 | 3781 |
628 | 3782 |
623 | 3783 ;----------------------------------------------------------------------------- |
628 | 3784 ; For the Information menu: battery voltage |
623 | 3785 |
582 | 3786 global info_menu_battery_volts |
62 | 3787 info_menu_battery_volts: |
582 | 3788 lfsr FSR1,tBatteryV |
3789 call strcat_text | |
623 | 3790 MOVII batt_voltage,mpr |
62 | 3791 bsf leftbind |
631 | 3792 output_16dp .2 ; print as -x.yyy |
582 | 3793 STRCAT "V(T" |
631 | 3794 movff battery_type,lo ; =0:1.5V, =1:3.6V Saft, =2:LiIon 3.7V/0.8Ah, =3:LiIon 3.7V/3.1Ah, =4: LiIon 3.7V/2.3Ah |
582 | 3795 output_8 |
3796 bcf leftbind | |
3797 PUTC ")" | |
3798 return | |
3799 | |
631 | 3800 |
3801 ;----------------------------------------------------------------------------- | |
3802 ; For the Information menu: sensor C1 and C5 values | |
3803 | |
3804 global info_menu_sensor_calib | |
3805 info_menu_sensor_calib: | |
3806 lfsr FSR1,tSensorC ; locate label | |
3807 call strcat_text ; print label | |
3808 movff C1+1,WREG ; get C1, high byte | |
3809 output_hex ; print C1, high byte | |
3810 movff C1+0,WREG ; get C1, low byte | |
3811 output_hex ; print C1, low byte | |
3812 PUTC "-" ; print a separator | |
3813 movff C5+1,WREG ; get C5, high byte | |
3814 output_hex ; print C5, high byte | |
3815 movff C5+0,WREG ; get C5, low byte | |
3816 output_hex ; print C5, low byte | |
3817 return ; done | |
3818 | |
3819 | |
3820 ;----------------------------------------------------------------------------- | |
3821 ; For the Information menu: sensor depth correction | |
3822 | |
3823 global info_menu_sensor_offset | |
3824 info_menu_sensor_offset: | |
3825 lfsr FSR1,tSensorD ; locate label | |
3826 call strcat_text ; print label | |
3827 movff opt_pressure_adjust,WREG ; get pressure sensor offset | |
3828 btfsc WREG,7 ; value negative? | |
3829 bra info_menu_sensor_offset_1 ; YES | |
3830 PUTC "+" ; NO - print plus sign | |
3831 bra info_menu_sensor_offset_2 ; - continue with common part | |
3832 info_menu_sensor_offset_1: | |
3833 PUTC "-" ; print a minus sign | |
3834 negf WREG ; negate WREG | |
3835 info_menu_sensor_offset_2: | |
3836 PUTC " " ; print a space | |
3837 bsf leftbind ; start left-bind printing | |
3838 output_8 ; print value | |
3839 bcf leftbind ; end left-bind printing | |
3840 PUTC " " ; print a space | |
3841 lfsr FSR1,tMBAR ; locate unit | |
3842 call strcat_text ; print unit | |
3843 return ; done | |
3844 | |
3845 | |
623 | 3846 ;----------------------------------------------------------------------------- |
628 | 3847 ; For the Information menu: uptime |
623 | 3848 |
582 | 3849 global info_menu_uptime |
453
b4f28ab23b87
NEW: Show Uptime (Time since last firmware boot) in information menu
heinrichsweikamp
parents:
444
diff
changeset
|
3850 info_menu_uptime: |
582 | 3851 lfsr FSR1,tUptime |
3852 call strcat_text | |
631 | 3853 SMOVQQ uptime,xC ; ISR-safe copy of uptime:4 to xC:4 |
623 | 3854 |
3855 info_menu_uptime_com: | |
631 | 3856 MOVLI .3600,xB ; one hour = 3600s |
3857 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder -> xC+1:xC+0 holds full hours | |
623 | 3858 MOVII xC,xA |
631 | 3859 MOVLI .24,xB ; one day = 24 hours |
3860 call div16x16 ; xC:2 = xA:2 / xB:2 with xA as remainder -> xC+1:xC+0 holds full days, xA holds full hours | |
3861 MOVII xC,mpr ; copy full days into hi:lo | |
582 | 3862 bsf leftbind |
3863 output_16 | |
3864 PUTC "d" | |
631 | 3865 movff xA+0,lo ; full hours |
582 | 3866 output_8 |
3867 PUTC "h" | |
3868 bcf leftbind | |
631 | 3869 return ; done |
604 | 3870 |
628 | 3871 ;----------------------------------------------------------------------------- |
604 | 3872 |
623 | 3873 IFDEF _compass |
3874 | |
582 | 3875 global menu_cal_x |
3876 menu_cal_x: | |
604 | 3877 lfsr FSR0,compass_CX_f |
582 | 3878 lfsr FSR1,tCalX |
604 | 3879 bra menu_cal_common |
582 | 3880 |
3881 global menu_cal_y | |
3882 menu_cal_y: | |
604 | 3883 lfsr FSR0,compass_CY_f |
582 | 3884 lfsr FSR1,tCalY |
604 | 3885 bra menu_cal_common |
3886 | |
582 | 3887 global menu_cal_z |
3888 menu_cal_z: | |
604 | 3889 lfsr FSR0,compass_CZ_f |
582 | 3890 lfsr FSR1,tCalZ |
623 | 3891 ;bra menu_cal_common |
3892 | |
604 | 3893 menu_cal_common: |
582 | 3894 call strcat_text |
604 | 3895 movff POSTINC0,lo |
3896 movff POSTINC0,hi | |
623 | 3897 call TFT_convert_signed_16bit ; convert lo:hi into signed-short and adds '-' to POSTINC2 if required |
582 | 3898 bsf leftbind |
3899 output_16 | |
3900 bcf leftbind | |
3901 return | |
544
64a45f203144
NEW: Show Compass calibration results in Compass menu
heinrichsweikamp
parents:
535
diff
changeset
|
3902 |
623 | 3903 ENDIF ; _compass |
3904 | |
453
b4f28ab23b87
NEW: Show Uptime (Time since last firmware boot) in information menu
heinrichsweikamp
parents:
444
diff
changeset
|
3905 |
0 | 3906 ;----------------------------------------------------------------------------- |
3907 ; ppO2 menu | |
560 | 3908 |
0 | 3909 global divesets_ppo2_min |
3910 divesets_ppo2_min: | |
582 | 3911 lfsr FSR1,tPPO2MIN |
3912 call strcat_text | |
560 | 3913 movff char_I_ppO2_min,lo |
582 | 3914 movlw ppo2_warning_low_default |
3915 bra divesets_ppo2_common | |
560 | 3916 |
623 | 3917 |
3918 IFDEF _ccr_pscr | |
3919 | |
560 | 3920 global divesets_ppo2_min_cc |
3921 divesets_ppo2_min_cc: | |
3922 lfsr FSR1,tPPO2MINCC | |
3923 call strcat_text | |
3924 movff char_I_ppO2_min_loop,lo | |
582 | 3925 movlw ppo2_warning_loop_default |
3926 bra divesets_ppo2_common | |
3927 | |
623 | 3928 ENDIF |
3929 | |
582 | 3930 global divesets_ppo2_max |
3931 divesets_ppo2_max: | |
3932 lfsr FSR1,tPPO2Max | |
3933 call strcat_text | |
623 | 3934 movff char_I_ppO2_max_work,lo |
582 | 3935 movlw ppo2_warning_high_default |
560 | 3936 bra divesets_ppo2_common |
582 | 3937 |
3938 global divesets_ppo2_max_deco | |
3939 divesets_ppo2_max_deco: | |
3940 lfsr FSR1,tPPO2DECO | |
3941 call strcat_text | |
3942 movff char_I_ppO2_max_deco,lo | |
3943 movlw ppo2_warning_deco_default | |
3944 ;bra divesets_ppo2_common | |
3945 | |
3946 divesets_ppo2_common: | |
604 | 3947 movwf up ; save default value |
582 | 3948 clrf hi |
3949 bsf leftbind | |
3950 output_16dp d'3' | |
3951 bcf leftbind | |
3952 lfsr FSR1,tbar | |
3953 call strcat_text | |
604 | 3954 movf up,W ; default value |
3955 cpfseq lo ; current value | |
3956 bra divesets_ppo2_common2 ; not default, add * | |
3957 return ; default, done | |
582 | 3958 divesets_ppo2_common2: |
3959 PUTC "*" | |
604 | 3960 return ; done |
560 | 3961 |
3962 ;============================================================================= | |
582 | 3963 |
623 | 3964 global TFT_clear_message_window |
3965 TFT_clear_message_window: | |
3966 btfss divemode ; in dive mode? | |
3967 bra TFT_clear_message_window_surf ; NO - clear surface mode area | |
3968 ;bra TFT_clear_message_window_dive ; YES - clear dive mode area | |
3969 | |
3970 TFT_clear_message_window_dive: | |
3971 btfsc alt_layout_active ; in alternative layout? | |
3972 bra TFT_clear_message_window_dive_2 ; YES - clear dive mode area, 2nd row only | |
3973 ; NO - clear dive mode area, both rows | |
582 | 3974 WIN_BOX_BLACK dm_warning_row, dm_warning_bot, dm_warning_column, dm_warning_rgt ; top, bottom, left, right |
623 | 3975 return ; - done |
3976 | |
3977 TFT_clear_message_window_surf: | |
582 | 3978 WIN_BOX_BLACK surf_warning1_row, surf_warning2_row+.24, surf_warning1_column, surf_warning1_column+.76 ; top, bottom, left, right |
623 | 3979 return ; done |
3980 | |
3981 | |
3982 global TFT_clear_message_window_row2 | |
3983 TFT_clear_message_window_row2: | |
3984 btfss divemode ; in dive mode? | |
3985 bra TFT_clear_message_window_surf_2 ; NO - clear surface mode area, 2nd row only | |
3986 ;bra TFT_clear_message_window_dive_2 ; YES - clear dive mode area, 2nd row only | |
3987 | |
3988 TFT_clear_message_window_dive_2: | |
582 | 3989 WIN_BOX_BLACK dm_warning2_row, dm_warning2_bot, dm_warning2_column, dm_warning2_rgt ; top, bottom, left, right |
623 | 3990 bcf message_2nd_row_used ; - 2nd row is clear now |
3991 return ; - done | |
3992 | |
3993 TFT_clear_message_window_surf_2: | |
582 | 3994 WIN_BOX_BLACK surf_warning2_row, surf_warning2_row+.24, surf_warning2_column, surf_warning2_column+.76 ; top, bottom, left, right |
623 | 3995 bcf message_2nd_row_used ; 2nd row is clear now |
3996 return ; done | |
3997 | |
582 | 3998 |
3999 global TFT_fillup_with_spaces | |
604 | 4000 TFT_fillup_with_spaces: ; fill up FSR2 with spaces (total string length in #WREG) |
582 | 4001 movwf lo ; save max. string length into lo |
604 | 4002 movf FSR2L,W ; get current string length |
582 | 4003 subwf lo,F ; lo-WREG |
4004 btfsc STATUS,N ; longer then #lo already? | |
604 | 4005 return ; YES - done |
4006 tstfsz lo ; zero? | |
4007 bra TFT_fillup_with_spaces2 ; NO | |
4008 return ; YES - done | |
582 | 4009 TFT_fillup_with_spaces2: |
604 | 4010 PUTC " " ; add one space |
4011 decfsz lo,F ; all done? | |
4012 bra TFT_fillup_with_spaces2 ; NO - loop | |
4013 return ; YES - done | |
582 | 4014 |
4015 ;============================================================================= | |
4016 | |
0 | 4017 global TFT_desaturation_time |
4018 TFT_desaturation_time: | |
631 | 4019 rcall TFT_set_message_window ; set row and column for the message |
604 | 4020 tstfsz WREG ; is there room for the message? |
631 | 4021 return ; NO - skip message in this cycle |
604 | 4022 call TFT_memo_color |
0 | 4023 STRCPY "Desat:" |
623 | 4024 MOVII int_O_desaturation_time,mpr |
4025 call convert_time ; convert hi:lo in minutes to hours (up:hi) and minutes (lo) | |
4026 movf lo,W ; swap hi and lo | |
4027 movff hi,lo ; ... | |
4028 movwf hi ; ... | |
631 | 4029 output_99x ; print hours |
4030 PUTC ':' ; print ":" | |
4031 movff hi,lo ; print minutes... | |
4032 output_99x ; ... in two digits, leading zero | |
604 | 4033 movlw surf_warning_length ; only use surface string length |
4034 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
560 | 4035 STRCAT_PRINT "" |
0 | 4036 return |
4037 | |
560 | 4038 |
0 | 4039 global TFT_nofly_time |
4040 TFT_nofly_time: | |
631 | 4041 rcall TFT_set_message_window ; set row and column for the message |
604 | 4042 tstfsz WREG ; is there room for the message? |
631 | 4043 return ; NO - skip message in this cycle |
604 | 4044 call TFT_memo_color |
560 | 4045 movff char_I_altitude_wait,WREG |
4046 tstfsz WREG | |
4047 bra TFT_nofly_time_1 | |
0 | 4048 STRCPY "NoFly:" |
560 | 4049 bra TFT_nofly_time_2 |
4050 TFT_nofly_time_1: | |
4051 STRCPY "NoAlt:" | |
4052 TFT_nofly_time_2: | |
623 | 4053 MOVII int_O_nofly_time,mpr |
4054 call convert_time ; convert hi:lo in minutes to hours (up:hi) and minutes (lo) | |
4055 movf lo,W ; swap hi and lo | |
4056 movff hi,lo ; ... | |
4057 movwf hi ; ... | |
604 | 4058 output_99x ; hours |
560 | 4059 PUTC ':' |
604 | 4060 movff hi,lo ; minutes |
0 | 4061 output_99x |
604 | 4062 movlw surf_warning_length ; only use surface string length |
4063 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
582 | 4064 STRCAT_PRINT "" |
0 | 4065 return |
4066 | |
560 | 4067 ;============================================================================= |
4068 | |
582 | 4069 global TFT_warning_agf |
0 | 4070 TFT_warning_agf: |
631 | 4071 rcall TFT_set_message_window ; set row and column for the message |
604 | 4072 tstfsz WREG ; is there room for the message? |
631 | 4073 return ; NO - skip message in this cycle |
582 | 4074 call TFT_attention_color |
4075 STRCPY_TEXT tDiveaGF_active ; "aGF!" | |
623 | 4076 movlw dm_warning_length ; dive mode string length |
604 | 4077 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
582 | 4078 STRCAT_PRINT "" |
604 | 4079 bra TFT_warn_att_info_exit ; and return... |
4080 | |
0 | 4081 |
582 | 4082 global TFT_warning_fallback |
604 | 4083 TFT_warning_fallback: ; show fallback warning |
631 | 4084 rcall TFT_set_message_window ; set row and column for the message |
604 | 4085 tstfsz WREG ; is there room for the message? |
631 | 4086 return ; NO - skip message in this cycle |
623 | 4087 call TFT_warning_color |
560 | 4088 STRCPY_TEXT tDiveFallback ; "Fallback!" |
623 | 4089 movlw dm_warning_length ; dive mode string length |
604 | 4090 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
4091 STRCAT_PRINT "" | |
4092 bra TFT_warn_att_info_exit ; and return... | |
4093 | |
623 | 4094 ;============================================================================= |
604 | 4095 |
4096 IFDEF _rx_functions | |
4097 | |
4098 global TFT_advice_switch | |
4099 TFT_advice_switch: | |
631 | 4100 rcall TFT_set_message_window ; set row and column for the message |
604 | 4101 tstfsz WREG ; is there room for the message? |
631 | 4102 return ; NO - skip message in this cycle |
604 | 4103 call TFT_advice_color |
4104 STRCPY_TEXT tswap ; "Swap Tank" | |
623 | 4105 movlw dm_warning_length ; dive mode string length |
604 | 4106 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
4107 STRCAT_PRINT "" | |
4108 bra TFT_warn_att_info_exit ; and return... | |
4109 | |
4110 global TFT_attention_transmitter | |
4111 TFT_attention_transmitter: | |
631 | 4112 rcall TFT_set_message_window ; set row and column for the message |
604 | 4113 tstfsz WREG ; is there room for the message? |
631 | 4114 return ; NO - skip message in this cycle |
604 | 4115 call TFT_attention_color |
4116 STRCPY_TEXT tTransmitter ; "P.Transm." | |
623 | 4117 movlw dm_warning_length ; dive mode string length |
604 | 4118 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
582 | 4119 STRCAT_PRINT "" |
604 | 4120 bra TFT_warn_att_info_exit ; and return... |
4121 | |
4122 global TFT_attention_pres_reading | |
4123 global TFT_warning_pres_reading | |
4124 TFT_attention_pres_reading: ; entry point for attention | |
4125 call TFT_attention_color ; use attention color | |
4126 bra TFT_common_pres_reading ; continue with common code | |
4127 TFT_warning_pres_reading: ; entry point for warning | |
623 | 4128 call TFT_warning_color ; use warnings color |
604 | 4129 ;bra TFT_common_pres_reading ; continue with common code |
4130 TFT_common_pres_reading: | |
631 | 4131 rcall TFT_set_message_window ; set row and column for the message |
604 | 4132 tstfsz WREG ; is there room for the message? |
631 | 4133 return ; NO - skip message in this cycle |
604 | 4134 STRCPY_TEXT tPressure ; "Tank Pres" |
623 | 4135 movlw dm_warning_length ; dive mode string length |
604 | 4136 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
4137 STRCAT_PRINT "" | |
4138 bra TFT_warn_att_info_exit ; and return... | |
4139 | |
4140 global TFT_attention_sac | |
4141 TFT_attention_sac: | |
631 | 4142 rcall TFT_set_message_window ; set row and column for the message |
604 | 4143 tstfsz WREG ; is there room for the message? |
631 | 4144 return ; NO - skip message in this cycle |
623 | 4145 MOVII int_O_SAC_measured,mpr ; copy measured SAC rate to hi:lo |
604 | 4146 call TFT_color_code_tank_pres_sac; color-code the output |
4147 STRCPY_TEXT tSAC ; "SAC", needs to be exactly 3 chars long | |
4148 STRCAT ": " ; ": " | |
4149 output_16_3 ; print as xxx | |
4150 PUTC " " ; print a dummy char to have string termination at the correct place | |
4151 movff buffer+.7,buffer+.8 ; move decimal digit one position to the right | |
4152 movlw "." ; load coding of a decimal point | |
4153 movff WREG,buffer+.7 ; place it before decimal digit | |
4154 STRCAT_PRINT "" ; dump buffer to screen | |
4155 bra TFT_warn_att_info_exit ; and return... | |
4156 | |
623 | 4157 ENDIF ; _rx_functions |
4158 | |
4159 ;============================================================================= | |
560 | 4160 |
4161 global TFT_info_deco | |
623 | 4162 TFT_info_deco ; show info when decompression obligation is steady or decreasing |
631 | 4163 rcall TFT_set_message_window ; set row and column for the message |
604 | 4164 tstfsz WREG ; is there room for the message? |
631 | 4165 return ; NO - skip message in this cycle |
623 | 4166 call TFT_advice_color ; YES - actually it is a memo, but we break the rules here and display in advice color (green) |
4167 STRCPY_TEXT tDecoInfo ; - write "Deco Zone" | |
4168 movlw dm_warning_length ; - select dive mode string length | |
4169 rcall TFT_fillup_with_spaces ; - fill up FSR2 with spaces (total string length in #WREG) | |
4170 STRCAT_PRINT "" ; - print buffer | |
4171 bra TFT_warn_att_info_exit ; - and return... | |
4172 | |
4173 ;============================================================================= | |
604 | 4174 |
4175 IFDEF _cave_mode | |
4176 | |
4177 global TFT_info_cave_mode | |
4178 TFT_info_cave_mode: | |
631 | 4179 rcall TFT_set_message_window ; set row and column for the message |
604 | 4180 tstfsz WREG ; is there room for the message? |
631 | 4181 return ; NO - skip message in this cycle |
604 | 4182 call TFT_memo_color ; YES - set memo color |
631 | 4183 bsf win_invert ; - print in inverse |
4184 STRCPY_TEXT tCaveMode ; - write "Cave Mode" | |
4185 movlw dm_warning_length ; - select dive mode string length | |
4186 rcall TFT_fillup_with_spaces ; - fill up FSR2 with spaces (total string length in #WREG) | |
4187 STRCAT_PRINT "" ; - print buffer | |
4188 bcf win_invert ; - end inverse printing | |
4189 bra TFT_warn_att_info_exit ; - and return... | |
4190 | |
4191 | |
4192 global TFT_cave_shutdown_attention | |
4193 TFT_cave_shutdown_attention: | |
4194 rcall TFT_set_message_window ; set row and column for the message | |
604 | 4195 tstfsz WREG ; is there room for the message? |
631 | 4196 return ; NO - skip message in this cycle |
4197 call TFT_attention_color ; YES - set warning color | |
4198 bra TFT_cave_shutdown_common ; - continue with common part | |
4199 | |
4200 | |
4201 global TFT_cave_shutdown_warning | |
4202 TFT_cave_shutdown_warning: | |
4203 rcall TFT_set_message_window ; set row and column for the message | |
604 | 4204 tstfsz WREG ; is there room for the message? |
631 | 4205 return ; NO - skip message in this cycle |
623 | 4206 call TFT_warning_color ; YES - set warning color |
631 | 4207 ;bra TFT_cave_shutdown_common ; - continue with common part |
4208 | |
4209 TFT_cave_shutdown_common: | |
4210 STRCPY_TEXT tCaveModeShutdown ; write "X-Cave-X" | |
4211 movlw dm_warning_length ; select dive mode string length | |
4212 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
4213 STRCAT_PRINT "" ; print buffer | |
604 | 4214 bra TFT_warn_att_info_exit ; and return... |
4215 | |
623 | 4216 ENDIF ; _cave_mode |
4217 | |
4218 ;============================================================================= | |
4219 | |
631 | 4220 global TFT_warning_saturation |
4221 TFT_warning_saturation | |
4222 rcall TFT_set_message_window ; set row and column for the message | |
604 | 4223 tstfsz WREG ; is there room for the message? |
631 | 4224 return ; NO - skip message in this cycle |
623 | 4225 MOVII int_O_lead_supersat,mpr ; bank-safe copy of leading tissue's supersaturation |
604 | 4226 call TFT_color_code_gf ; color-code output |
623 | 4227 ; STRCPY "GF: " ; the two spaces are on purpose to align the output with other warnings' outputs |
4228 STRCPY_TEXT tSAT ; print "Sat:" | |
4229 PUTC " " ; add a space to align the output with other warnings' outputs | |
582 | 4230 bsf leftbind |
623 | 4231 output_8 ; print value of lo only, int_O_lead_supersat is limited to 255 |
582 | 4232 PUTC "%" |
623 | 4233 movlw dm_warning_length ; dive mode string length |
4234 btfss divemode ; in dive mode? | |
604 | 4235 movlw surf_warning_length ; NO - use surface string length |
4236 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
582 | 4237 STRCAT_PRINT "" |
4238 bcf leftbind | |
4239 bcf win_invert | |
604 | 4240 TFT_warn_att_info_exit: |
582 | 4241 goto TFT_standard_color ; and return... |
560 | 4242 |
4243 | |
4244 global TFT_warning_mbubbles | |
4245 TFT_warning_mbubbles: | |
631 | 4246 rcall TFT_set_message_window ; set row and column for the message |
604 | 4247 tstfsz WREG ; is there room for the message? |
631 | 4248 return ; NO - skip message in this cycle |
560 | 4249 call TFT_attention_color ; set attention color as default |
4250 movff char_O_deco_warnings,WREG ; bank-safe copy for deco warnings | |
631 | 4251 btfsc WREG,mbubble_warning ; are we in the micro bubbles zone right now? |
623 | 4252 call TFT_warning_color ; YES - reconfigure to warning color |
560 | 4253 STRCPY_TEXT tMicroBubbles |
623 | 4254 movlw dm_warning_length ; dive mode string length |
4255 btfss divemode ; in dive mode? | |
582 | 4256 movlw surf_warning_length ; NO - use surface string length |
604 | 4257 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
582 | 4258 STRCAT_PRINT "" |
604 | 4259 bra TFT_warn_att_info_exit ; and return... |
560 | 4260 |
4261 | |
4262 global TFT_warning_outside | |
4263 TFT_warning_outside: | |
631 | 4264 rcall TFT_set_message_window ; set row and column for the message |
604 | 4265 tstfsz WREG ; is there room for the message? |
631 | 4266 return ; NO - skip message in this cycle |
560 | 4267 call TFT_attention_color |
4268 movff char_O_deco_warnings,WREG ; bank-safe copy for deco warnings | |
4269 btfsc WREG,outside_warning ; are we outside the ZH-L16 model right now? | |
623 | 4270 call TFT_warning_color ; YES - reconfigure to warning color |
582 | 4271 STRCPY "X-ZHL16-X" |
623 | 4272 movlw dm_warning_length ; dive mode string length |
4273 btfss divemode ; in dive mode? | |
582 | 4274 movlw surf_warning_length ; NO - use surface string length |
604 | 4275 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
582 | 4276 STRCAT_PRINT "" |
604 | 4277 bra TFT_warn_att_info_exit ; and return... |
560 | 4278 |
4279 | |
623 | 4280 global TFT_warning_depth |
4281 TFT_warning_depth: | |
631 | 4282 rcall TFT_set_message_window ; set row and column for the message |
623 | 4283 tstfsz WREG ; is there room for the message? |
631 | 4284 return ; NO - skip message in this cycle |
623 | 4285 call TFT_warning_color |
4286 STRCPY_TEXT tMaxDepth ; "max.Depth" | |
4287 movlw dm_warning_length ; dive mode string length | |
4288 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
4289 STRCAT_PRINT "" | |
4290 bra TFT_warn_att_info_exit ; and return... | |
4291 | |
4292 | |
631 | 4293 global TFT_warning_gas_needs |
4294 TFT_warning_gas_needs: | |
4295 rcall TFT_set_message_window ; set row and column for the message | |
604 | 4296 tstfsz WREG ; is there room for the message? |
631 | 4297 return ; NO - skip message in this cycle |
623 | 4298 call TFT_warning_color ; YES - set warning color |
4299 bra TFT_warning_gas_needs_com ; - continue with common part | |
4300 | |
631 | 4301 global TFT_attention_gas_needs |
4302 TFT_attention_gas_needs: | |
4303 rcall TFT_set_message_window ; set row and column for the message | |
604 | 4304 tstfsz WREG ; is there room for the message? |
631 | 4305 return ; NO - skip message in this cycle |
623 | 4306 call TFT_attention_color ; YES - set attention color |
4307 ;bra TFT_warning_gas_needs_com ; - continue with common part | |
4308 | |
560 | 4309 TFT_warning_gas_needs_com: |
623 | 4310 STRCPY_TEXT tGasNeedsWarn ; print "Gas Needs" |
4311 movlw dm_warning_length ; dive mode string length | |
4312 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
4313 STRCAT_PRINT "" ; finalize output | |
604 | 4314 bra TFT_warn_att_info_exit ; and return... |
560 | 4315 |
623 | 4316 ;============================================================================= |
4317 | |
4318 IFDEF _helium | |
560 | 4319 |
4320 global TFT_warning_IBCD | |
4321 TFT_warning_IBCD: | |
631 | 4322 rcall TFT_set_message_window ; set row and column for the message |
604 | 4323 tstfsz WREG ; is there room for the message? |
631 | 4324 return ; NO - skip message in this cycle |
560 | 4325 call TFT_attention_color ; select attention color as default |
4326 STRCPY_TEXT tIBCD ; "IBCD N2He" | |
623 | 4327 movlw dm_warning_length ; dive mode string length |
4328 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
582 | 4329 STRCAT_PRINT "" |
604 | 4330 bra TFT_warn_att_info_exit ; and return... |
4331 | |
623 | 4332 ENDIF |
4333 | |
4334 ;============================================================================= | |
604 | 4335 |
4336 global TFT_warning_no_BO_gas | |
4337 TFT_warning_no_BO_gas: | |
631 | 4338 rcall TFT_set_message_window ; set row and column for the message |
604 | 4339 tstfsz WREG ; is there room for the message? |
631 | 4340 return ; NO - skip message in this cycle |
623 | 4341 call TFT_warning_color ; select warning color |
4342 STRCPY_TEXT tnoBOgas ; print "-B/O-Gas-" | |
4343 movlw dm_warning_length ; dive mode string length | |
4344 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
4345 STRCAT_PRINT "" ; finalize output | |
604 | 4346 bra TFT_warn_att_info_exit ; and return... |
4347 | |
4348 | |
4349 global TFT_advice_gas_change | |
4350 TFT_advice_gas_change: | |
631 | 4351 rcall TFT_set_message_window ; set row and column for the message |
604 | 4352 tstfsz WREG ; is there room for the message? |
631 | 4353 return ; NO - skip message in this cycle |
604 | 4354 call TFT_advice_color ; set advice color |
4355 STRCPY_TEXT tgaschange ; "Change?" | |
623 | 4356 movlw dm_warning_length ; dive mode string length |
4357 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
604 | 4358 STRCAT_PRINT "" |
4359 bra TFT_warn_att_info_exit ; and return... | |
582 | 4360 |
623 | 4361 ;============================================================================= |
4362 | |
4363 IFDEF _external_sensor | |
582 | 4364 |
4365 global TFT_warning_sensor_disagree | |
631 | 4366 TFT_warning_sensor_disagree: |
4367 rcall TFT_set_message_window ; set row and column for the message | |
604 | 4368 tstfsz WREG ; is there room for the message? |
631 | 4369 return ; NO - skip message in this cycle |
623 | 4370 call TFT_warning_color |
582 | 4371 STRCPY_TEXT tSensorDisagree ; "Sensors<>" |
623 | 4372 movlw dm_warning_length ; dive mode string length |
4373 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
582 | 4374 STRCAT_PRINT "" |
604 | 4375 bra TFT_warn_att_info_exit ; and return... |
560 | 4376 |
623 | 4377 ENDIF ; _external_sensor |
582 | 4378 |
560 | 4379 ;============================================================================= |
582 | 4380 |
631 | 4381 TFT_set_message_window: ; sets the row and column for the current message |
582 | 4382 ; ignore warning (now)? |
623 | 4383 decf message_counter,W ; load (message counter - 1) into WREG |
4384 bcf STATUS,C ; clear carry bit | |
4385 btfss alt_layout_active ; in alternative layout? | |
4386 rrcf WREG,W ; NO - divide (message_counter-1) by 2 to get the page of the message | |
4387 cpfseq message_page ; page of the message = current page ? | |
4388 retlw .255 ; NO - do not show in this cycle (message window is not defined) | |
4389 btfss divemode ; YES - in dive mode? | |
4390 bra TFT_set_message_window_sf ; NO - setup for surface mode | |
4391 ;bra TFT_set_message_window_dm ; YES - setup for dive mode | |
4392 | |
4393 ; Dive Mode | |
4394 TFT_set_message_window_dm: | |
4395 btfsc alt_layout_active ; in alternative layout? | |
4396 bra TFT_set_message_window_dm_row2 ; YES - alternative layout only uses 2nd row | |
4397 btfss message_counter,0 ; NO - is the message number uneven? | |
4398 bra TFT_set_message_window_dm_row2 ; NO - use 2nd row | |
4399 ;bra TFT_set_message_window_dm_row1 ; YES - use 1st row | |
4400 | |
4401 TFT_set_message_window_dm_row1: | |
4402 WIN_SMALL dm_warning1_column, dm_warning1_row ; set output position | |
4403 bcf message_2nd_row_used ; flag that the 2nd does not contain a message yet | |
4404 retlw .0 ; show in this cycle (message window is defined) | |
4405 | |
4406 TFT_set_message_window_dm_row2: | |
4407 WIN_SMALL dm_warning2_column, dm_warning2_row ; set output position | |
4408 bsf message_2nd_row_used ; flag that the 2nd row contains a message now | |
4409 retlw .0 ; show in this cycle (message window is defined) | |
4410 | |
4411 ; Surface Mode | |
4412 TFT_set_message_window_sf: | |
4413 btfss message_counter,0 ; is the message counter uneven? | |
4414 bra TFT_set_message_window_sf_row2 ; NO - use 2nd row | |
4415 ;bra TFT_set_message_window_sf_row1 ; YES - use 1st row | |
4416 | |
4417 TFT_set_message_window_sf_row1: | |
4418 WIN_SMALL surf_warning1_column,surf_warning1_row ; set output position | |
4419 bcf message_2nd_row_used ; flag that the 2nd row does not contain a message yet | |
4420 retlw .0 ; show in this cycle (message window is defined) | |
4421 | |
4422 TFT_set_message_window_sf_row2: | |
4423 WIN_SMALL surf_warning2_column,surf_warning2_row ; set output position | |
4424 bsf message_2nd_row_used ; flag that the 2nd row contains a message now | |
4425 retlw .0 ; show in this cycle (message window is defined) | |
4426 | |
4427 | |
4428 global TFT_msg_batt_percent_divemode | |
4429 TFT_msg_batt_percent_divemode: | |
631 | 4430 rcall TFT_set_message_window ; set row and column for the message |
604 | 4431 tstfsz WREG ; is there room for the message? |
631 | 4432 return ; NO - skip message in this cycle |
604 | 4433 movff batt_percent,lo ; get battery percent |
4434 call TFT_color_code_battery ; color-code battery percent | |
582 | 4435 STRCPY "Batt:" |
0 | 4436 bsf leftbind |
4437 output_8 | |
4438 bcf leftbind | |
582 | 4439 PUTC "%" |
623 | 4440 movlw dm_warning_length ; dive mode string length |
4441 btfss divemode ; in dive mode? | |
604 | 4442 movlw surf_warning_length ; NO - use surface string length |
4443 rcall TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) | |
582 | 4444 STRCAT_PRINT "" |
4445 bcf win_invert | |
604 | 4446 bra TFT_custview_exit1 ; and return... |
4447 | |
4448 | |
4449 global TFT_gf_factors_mask ; mask for GF factors | |
4450 TFT_gf_factors_mask: | |
582 | 4451 call TFT_divemask_color |
608 | 4452 WIN_TINY dm_custom_gf_column1,dm_custom_gf_title_row |
582 | 4453 STRCPY_TEXT_PRINT tGFactors |
608 | 4454 WIN_TINY dm_custom_gf_column3,dm_custom_gf_title_row |
582 | 4455 STRCPY_TEXT_PRINT taGFactors |
608 | 4456 ; Show GF (static) |
4457 call TFT_disabled_color ; default to disabled color | |
623 | 4458 btfss use_aGF ; shall use alternative GF factors? |
608 | 4459 call TFT_memo_color ; NO - switch to memo color |
604 | 4460 WIN_STD dm_custom_gf_column1, dm_custom_gf_row |
582 | 4461 bsf leftbind |
608 | 4462 movff opt_GF_low,lo ; get normal GF low |
4463 output_8 ; print normal GF low | |
4464 PUTC "/" ; print "/" | |
4465 movff opt_GF_high,lo ; get normal GF high | |
4466 output_8 ; print normal GF high | |
4467 STRCAT_PRINT "" ; finish output | |
4468 ; Show aGF (static) | |
4469 call TFT_memo_color ; default to memo color | |
4470 TSTOSS opt_enable_aGF ; are alternative GF factors enabled? | |
4471 bra TFT_gf_factors_mask_3 ; NO - show "---" and return | |
4472 ; YES - show aGF and which one is active | |
604 | 4473 WIN_STD dm_custom_gf_column2, dm_custom_gf_row |
623 | 4474 btfss use_aGF ; shall use aGF? |
608 | 4475 bra TFT_gf_factors_mask_1 ; NO - print "<- " |
4476 STRCPY_PRINT " ->" ; YES - print " ->" | |
4477 bra TFT_gf_factors_mask_2 ; - continue with common part | |
4478 TFT_gf_factors_mask_1: | |
4479 STRCPY_PRINT "<- " ; (NO) - print "<- " | |
4480 TFT_gf_factors_mask_2: ; common part | |
623 | 4481 btfss use_aGF ; shall use aGF? |
608 | 4482 call TFT_disabled_color ; NO - switch to disabled color |
4483 WIN_STD dm_custom_gf_column3, dm_custom_gf_row | |
4484 movff opt_aGF_low,lo ; get aGF low | |
4485 output_8 ; print | |
4486 PUTC "/" ; print "/" | |
4487 movff opt_aGF_high,lo ; get aGF high | |
4488 output_8 ; print | |
4489 STRCAT_PRINT "" ; finish output | |
4490 bra TFT_custview_exit1 ; done | |
4491 TFT_gf_factors_mask_3: | |
4492 WIN_STD dm_custom_gf_column3+.10, dm_custom_gf_row | |
582 | 4493 STRCPY_PRINT "---" |
608 | 4494 bra TFT_custview_exit1 ; done |
604 | 4495 |
4496 | |
4497 global TFT_ceiling_GF_tissue_mask ; mask for ceiling, current GF and tissues | |
4498 TFT_ceiling_GF_tissue_mask: | |
4499 call TFT_divemask_color | |
4500 WIN_TINY dm_custom_ceiling_column+.2,dm_custom_ceiling_title_row | |
4501 STRCPY_TEXT_PRINT tCeiling | |
4502 WIN_TINY dm_custom_tissue_title_column, dm_custom_tissue_title_row | |
4503 STRCPY_TEXT_PRINT tDiveTissues | |
608 | 4504 WIN_TINY dm_custom_gf_column1+.5, dm_custom_gf_title_row |
604 | 4505 STRCPY_TEXT_PRINT tGFInfo |
4506 bra TFT_custview_exit1 ; and return... | |
4507 | |
4508 | |
4509 global TFT_ceiling_GF_tissue ; data for ceiling, current GF and tissues | |
4510 TFT_ceiling_GF_tissue: | |
4511 WIN_MEDIUM dm_custom_ceiling_column,dm_custom_ceiling_row | |
631 | 4512 MOVII int_O_ceiling,mpr ; get ceiling in [mbar] relative pressure |
4513 call TFT_color_code_ceiling ; color-code the output (also strips off flags) | |
4514 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] | |
604 | 4515 TSTOSS opt_units ; 0=m, 1=ft |
4516 bra TFT_ceiling_tissue_cGF_m | |
631 | 4517 call convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
4518 output_16_3 ; yxz | |
604 | 4519 bra TFT_ceiling_tissue_cGF0 |
4520 TFT_ceiling_tissue_cGF_m: | |
631 | 4521 bsf leftbind |
604 | 4522 bsf ignore_digit5 ; no cm (flag will be cleared by output_16) |
4523 output_16dp .3 ; yxz.a | |
631 | 4524 bcf leftbind |
604 | 4525 TFT_ceiling_tissue_cGF0: |
4526 STRCAT_PRINT " " | |
4527 ; Show tissue diagram | |
623 | 4528 call TFT_dive_tissues ; show tissue pressure diagram |
4529 ; Show current supersaturation | |
604 | 4530 WIN_MEDIUM dm_custom_clock_column+.3, dm_custom_gf_row |
623 | 4531 MOVII int_O_lead_supersat,mpr ; bank-safe copy of leading tissue's supersaturation |
604 | 4532 call TFT_color_code_gf ; color-code output |
623 | 4533 output_8 ; need to print lo only, int_O_lead_supersat value is limited to 255 |
604 | 4534 STRCAT_PRINT "" |
4535 WIN_STD dm_custom_clock_column+.40, dm_custom_gf_row+.5 | |
4536 STRCAT_PRINT "%" ; % is printed in color set by TFT_color_code_gf, too | |
4537 TFT_custview_exit1: | |
4538 bcf leftbind | |
4539 goto TFT_standard_color ; and return... | |
4540 | |
4541 | |
4542 global TFT_clock_batt_surfpress_mask ; mask for clock, battery and surface pressure | |
4543 TFT_clock_batt_surfpress_mask: | |
582 | 4544 call TFT_divemask_color |
4545 WIN_TINY dm_custom_clock_column, dm_custom_clock_title_row | |
604 | 4546 STRCPY_TEXT_PRINT tTime ; "Time" |
4547 WIN_TINY dm_custom_battery_column, dm_custom_battery_title_row | |
4548 STRCPY_TEXT_PRINT tBattery ; "Battery" | |
4549 WIN_TINY dm_custom_surfpres_column+.8, dm_custom_surfpres_title_row | |
4550 STRCPY_TEXT_PRINT tSurface ; "Surface" | |
623 | 4551 ; Show configured Surface Pressure (done in mask, because it's static during the dive) |
604 | 4552 call TFT_standard_color |
4553 WIN_SMALL dm_custom_surfpres_column, dm_custom_surfpres_row | |
623 | 4554 MOVII pressure_surf,mpr |
604 | 4555 output_16 |
4556 PUTC ' ' | |
4557 STRCAT_TEXT_PRINT tMBAR ; mbar (hPa) | |
4558 bra TFT_custview_exit1 ; and return... | |
4559 | |
4560 | |
4561 global TFT_clock_batt_surfpress ; data for clock, battery and surface pressure | |
4562 TFT_clock_batt_surfpress: | |
4563 ; Update Clock | |
582 | 4564 WIN_SMALL dm_custom_clock_column, dm_custom_clock_row |
604 | 4565 call TFT_standard_color |
623 | 4566 SMOVSS rtc_year,rtc_latched_year ; ISR-safe 6 byte copy of date and time |
4567 movff rtc_latched_hour,lo | |
604 | 4568 output_99 |
4569 PUTC ':' | |
623 | 4570 movff rtc_latched_mins,lo |
604 | 4571 output_99x |
4572 PUTC ":" | |
623 | 4573 movff rtc_latched_secs,lo |
604 | 4574 output_99x |
4575 STRCAT_PRINT "" | |
623 | 4576 ; Show Battery Volt |
604 | 4577 call TFT_memo_color |
4578 WIN_SMALL dm_custom_battery_column, dm_custom_battery_volt_row | |
623 | 4579 MOVII batt_voltage,mpr |
582 | 4580 bsf leftbind |
631 | 4581 output_16dp .2 ; print as -x.yyy |
582 | 4582 PUTC 'V' |
4583 movff buffer+5,buffer+4 | |
4584 movlw 0x00 | |
604 | 4585 movff WREG,buffer+5 ; only "x.yzV" |
582 | 4586 STRCAT_PRINT "" |
623 | 4587 ; Show Battery Percent |
4588 WIN_SMALL dm_custom_battery_column+.7, dm_custom_battery_percent_row | |
4589 movff batt_percent,lo ; get battery percent | |
4590 call TFT_color_code_battery ; color-code battery percent | |
4591 output_8 | |
4592 STRCAT "% " | |
4593 movlw 0x00 | |
4594 movff WREG,buffer+4 ; only "xxx%" | |
4595 STRCAT_PRINT "" | |
604 | 4596 ; Surface pressure is shown in mask because it is static |
4597 bra TFT_custview_exit1 ; and return... | |
4598 | |
623 | 4599 ;============================================================================= |
4600 | |
4601 IFDEF _ccr_pscr | |
604 | 4602 |
4603 global TFT_pscr_info_mask ; mask for pSCR info | |
4604 TFT_pscr_info_mask: | |
623 | 4605 rcall TFT_show_ppo2_mask |
582 | 4606 call TFT_divemask_color |
604 | 4607 WIN_TINY dm_custom_pscr_drop_column, dm_custom_pscr_title_row |
582 | 4608 STRCPY_TEXT_PRINT tPSCR_O2_drop |
604 | 4609 WIN_TINY dm_custom_pscr_ratio_column, dm_custom_pscr_title_row |
582 | 4610 STRCPY_TEXT_PRINT tPSCR_lungratio |
604 | 4611 bra TFT_custview_exit1 ; and return... |
4612 | |
623 | 4613 |
604 | 4614 global TFT_pscr_info ; data for pSCR info |
482
c0ee33f1f399
New customview #12 for PSCR mode shows ppO2, O2 drop and lung ratio
heinrichsweikamp
parents:
480
diff
changeset
|
4615 TFT_pscr_info: |
582 | 4616 ;show ppO2 |
604 | 4617 WIN_MEDIUM dm_custom_ppo2_column,dm_custom_ppo2_row |
623 | 4618 MOVII int_O_pSCR_ppO2,mpr ; copy pSCR ppO2 to hi:lo |
604 | 4619 call TFT_color_code_ppo2 ; color-code output |
560 | 4620 bsf leftbind |
604 | 4621 output_16dp .3 ; x.xx bar |
582 | 4622 bcf leftbind |
4623 STRCAT_PRINT "" | |
604 | 4624 ; Show drop |
4625 WIN_STD dm_custom_pscr_drop_column+.11,dm_custom_pscr_row | |
4626 call TFT_memo_color | |
560 | 4627 movff char_I_PSCR_drop,lo |
582 | 4628 bsf leftbind |
4629 output_8 | |
4630 STRCAT_PRINT "%" | |
4631 ; Show lung ratio | |
604 | 4632 WIN_STD dm_custom_pscr_ratio_column+.5,dm_custom_pscr_row |
582 | 4633 movff char_I_PSCR_lungratio,lo |
4634 bsf leftbind | |
4635 STRCPY "1/" | |
4636 output_8 | |
4637 STRCAT_PRINT "" | |
604 | 4638 bra TFT_custview_exit1 ; and return... |
4639 | |
623 | 4640 ENDIF ; _ccr_psrc |
4641 | |
4642 ;============================================================================= | |
604 | 4643 |
631 | 4644 global TFT_gas_needs_mask ; mask for gas needs ascent |
4645 TFT_gas_needs_mask: | |
604 | 4646 WIN_TINY dm_custom_gas_column_title, dm_custom_gas_mask_row |
582 | 4647 call TFT_divemask_color |
604 | 4648 IFDEF _cave_mode |
4649 movff char_O_deco_info,WREG ; get the deco info vector | |
4650 btfss WREG,gas_needs_cave ; are the gas needs calculated for cave mode? | |
4651 bra TFT_gas_needs_mask_ascent_1 ; NO - show as direct ascent needs | |
4652 bsf gas_needs_mode_last ; YES - remember last results were for cave mode | |
4653 STRCPY_TEXT tGasNeedsCaveMode ; - "Gas Needs Cave Mode" | |
4654 bra TFT_gas_needs_mask_ascent_2 | |
4655 TFT_gas_needs_mask_ascent_1: | |
4656 bcf gas_needs_mode_last ; remember last results were for direct ascent | |
4657 STRCPY_TEXT tGasNeedsAscent ; "Gas Needs Ascent" | |
4658 TFT_gas_needs_mask_ascent_2: | |
4659 ELSE | |
4660 STRCPY_TEXT tGasNeedsAscent ; "Gas Needs Ascent" | |
4661 ENDIF | |
631 | 4662 movff char_O_deco_info,WREG ; get the deco info vector |
4663 btfss WREG,gas_needs_fTTS ; are the gas needs calculated for fTTS? | |
4664 bra TFT_gas_needs_mask_ascent_3 ; NO - continue | |
4665 STRCAT " fTTS" ; YES - append fTTS marking | |
4666 TFT_gas_needs_mask_ascent_3: | |
604 | 4667 STRCAT_PRINT " (bar)" ; " (bar)" |
4668 bra TFT_custview_exit1 ; and return... | |
4669 | |
4670 | |
631 | 4671 global TFT_gas_needs ; data for gas needs ascent |
4672 TFT_gas_needs: ; LIMITATION: there is only space for 4 gases on the screen - if 5 gases have a pres_need > 0, then only the first 4 will be shown! | |
604 | 4673 IFDEF _cave_mode |
4674 movff char_O_deco_info,WREG ; get deco info vector | |
4675 btfss WREG,gas_needs_cave ; are the gas needs calculated for cave mode? | |
4676 bra TFT_gas_needs_ascent_1 ; NO - continue below... | |
4677 btfsc gas_needs_mode_last ; YES - were the last results calculated for cave mode? | |
4678 bra TFT_gas_needs_ascent_3 ; YES - mask still valid | |
4679 bra TFT_gas_needs_ascent_2 ; NO - redraw mask | |
4680 TFT_gas_needs_ascent_1: | |
4681 btfss gas_needs_mode_last ; NO - were the last results calculated for direct ascent? | |
4682 bra TFT_gas_needs_ascent_3 ; YES - mask still valid | |
4683 ;bra TFT_gas_needs_ascent_2 ; NO - redraw mask | |
4684 TFT_gas_needs_ascent_2: | |
631 | 4685 rcall TFT_gas_needs_mask ; redraw mask |
604 | 4686 TFT_gas_needs_ascent_3: |
4687 ENDIF | |
4688 clrf up ; initialize gas index (0-4) | |
4689 WIN_SMALL dm_custom_gas_column1+.5,dm_custom_gas_row1 | |
4690 rcall TFT_gas_needs_helper | |
4691 WIN_SMALL dm_custom_gas_column1+.5,dm_custom_gas_row2 | |
4692 rcall TFT_gas_needs_helper | |
4693 WIN_SMALL dm_custom_gas_column2+.5,dm_custom_gas_row1 | |
4694 rcall TFT_gas_needs_helper | |
4695 WIN_SMALL dm_custom_gas_column2+.5,dm_custom_gas_row2 | |
4696 rcall TFT_gas_needs_helper | |
631 | 4697 bra TFT_custview_exit2 ; and return... |
560 | 4698 |
4699 TFT_gas_needs_helper: | |
604 | 4700 call TFT_memo_color |
560 | 4701 movlw .5 ; number of gases |
4702 cpfslt up ; check if all gases have been processed | |
604 | 4703 bra TFT_gas_needs_helper_1 ; YES - clear display area |
4704 movf up,W ; NO - get gas number and check if need of that gas is > 0 | |
4705 rlncf WREG,W ; multiply by 2 | |
4706 incf WREG,W ; add 1 to address high byte | |
623 | 4707 lfsr FSR1,int_O_gas_need_pres ; load base of gas needs in pressure |
4708 movff PLUSW1,hi ; read HIGH(int_O_gas_need_pres[up]) | |
560 | 4709 btfss hi,int_is_zero ; check flag for pres_need == 0 |
604 | 4710 bra TFT_gas_needs_helper_2 ; NO - print gas type and pressure needed |
4711 incf up,F ; YES - increment to next gas... | |
560 | 4712 bra TFT_gas_needs_helper ; ...and try the next gas |
4713 TFT_gas_needs_helper_1: ; no gases to show anymore, clear display area from potential remains of last invocation | |
582 | 4714 STRCAT_PRINT " ---- " ; overwrite outdated stuff if screen position is not needed |
560 | 4715 return |
4716 TFT_gas_needs_helper_2: ; output gas type and pressure needed | |
582 | 4717 movf up,W ; get gas number (0-4) to WREG |
4718 lfsr FSR1,opt_gas_O2_ratio ; read opt_gas_O2_ratio[WREG] | |
4719 movff PLUSW1,lo ; copy result to lo | |
4720 lfsr FSR1,opt_gas_He_ratio ; read opt_gas_He_ratio[WREG] | |
4721 movff PLUSW1,hi ; copy result to hi | |
623 | 4722 call gaslist_show_mix ; print "Air", "O2", "21/35", etc. |
604 | 4723 PUTC ':' ; ":" |
582 | 4724 movf up,W ; get gas number (0-4) to WREG |
604 | 4725 rlncf WREG,W ; multiply by 2 |
623 | 4726 lfsr FSR1,int_O_gas_need_pres ; load base of gas needs in pressure |
4727 movff PLUSW1,lo ; read LOW(int_O_gas_need_pres[up]) | |
604 | 4728 incf WREG,W ; add 1 to address high byte |
623 | 4729 movff PLUSW1,hi ; read HIGH(int_O_gas_need_pres[up]) |
582 | 4730 btfsc hi,int_attention_flag ; check if attention flag is set (pres_need > pres_fill * threshold) |
623 | 4731 call TFT_attention_color ; YES - print gas need in attention color |
604 | 4732 btfsc hi,int_warning_flag ; check if warning flag is set (pres_need > pres_fill) |
623 | 4733 call TFT_warning_color ; YES - print gas need in warning color |
4734 movff int_O_gas_need_pres+1,WREG ; get HIGH(int_O_gas_need_pres[0]) which holds flag for invalid data | |
560 | 4735 btfsc WREG,int_invalid_flag ; check if invalid data flag is set |
623 | 4736 call TFT_disabled_color ; YES - print gas need in disabled color |
4737 bcf hi,int_attention_flag ; clear flag for attention | |
4738 bcf hi,int_warning_flag ; clear flag for warning | |
4739 bcf hi,int_high_flag ; clear flag for > 999 bar | |
604 | 4740 bcf hi,int_invalid_flag ; clear flag for invalid data (will actually only be set with 1st gas) |
582 | 4741 output_16_3 ; limit to 999 and display only (0-999) |
560 | 4742 STRCAT_PRINT " " ; adds a space to overwrite any potential remains of earlier outputs |
4743 incf up,F ; increment to next gas | |
631 | 4744 return ; done |
582 | 4745 |
4746 | |
623 | 4747 global TFT_show_ppo2_mask ; helper function for several custom views |
4748 TFT_show_ppo2_mask: | |
582 | 4749 call TFT_divemask_color |
623 | 4750 IFDEF _ccr_pscr |
582 | 4751 btfss FLAG_ccr_mode ; in CCR mode? |
4752 bra TFT_mask_ppo2a ; NO - continue checking for pSCR and OC | |
623 | 4753 btfsc bailout_mode ; YES - in bailout? |
4754 bra TFT_mask_ppo2b ; YES | |
604 | 4755 WIN_TINY dm_custom_ppo2_column-.2,dm_custom_ppo2_title_row ; tuned position for longer text (-8 = on leftmost edge of display) |
623 | 4756 STRCPY_TEXT_PRINT tppO2Dil ; NO - print "ppO2(Dil)" |
4757 bra TFT_custview_exit2 ; - and return... | |
560 | 4758 TFT_mask_ppo2a: |
582 | 4759 btfss FLAG_pscr_mode ; in pSCR mode? |
4760 bra TFT_mask_ppo2b ; NO - continue with OC mode (or bailout) | |
623 | 4761 btfsc bailout_mode ; YES - in bailout? |
4762 bra TFT_mask_ppo2b ; YES | |
604 | 4763 WIN_TINY dm_custom_ppo2_column-.2,dm_custom_ppo2_title_row ; tuned position for longer text (-8 = on leftmost edge of display) |
623 | 4764 STRCPY_TEXT_PRINT tppO2Mix ; NO - print "ppO2(Mix)" |
4765 bra TFT_custview_exit2 ; - and return... | |
4766 ENDIF | |
560 | 4767 TFT_mask_ppo2b: ; OC mode or bailout |
604 | 4768 WIN_TINY dm_custom_ppo2_column-.2, dm_custom_ppo2_title_row ; normal position |
582 | 4769 STRCPY_TEXT_PRINT tppO2 ; in all other modes |
604 | 4770 bra TFT_custview_exit2 ; and return... |
582 | 4771 |
4772 | |
628 | 4773 global TFT_ppo2_ead_end_cns_mask ; mask for ppO2, END/EAD and CNS / gas density |
560 | 4774 TFT_ppo2_ead_end_cns_mask: |
582 | 4775 call TFT_divemask_color |
628 | 4776 WIN_TINY dm_custom_ppo2_column-.2, dm_custom_ppo2_title_row |
4777 STRCPY_TEXT_PRINT tppO2 | |
4778 WIN_TINY dm_custom_ead_column, dm_custom_eadend_title_row | |
582 | 4779 STRCPY_TEXT_PRINT tDiveEAD_END |
628 | 4780 IFDEF _helium |
4781 WIN_TINY dm_custom_cns_column-.5, dm_custom_eadend_title_row | |
4782 STRCPY_TEXT_PRINT tGasDensity | |
4783 ELSE | |
4784 WIN_TINY dm_custom_cns_column, dm_custom_cns_title_row | |
582 | 4785 STRCPY_TEXT_PRINT tCNS2 |
628 | 4786 ENDIF |
604 | 4787 bra TFT_custview_exit2 ; and return... |
4788 | |
4789 | |
628 | 4790 global TFT_ppo2_ead_end_cns ; data for ppO2, END/EAD and CNS / gas density |
471
9edb1359ce43
NEW: New Customview 11 in dive mode shows ppO2, EAD/END and CNS
heinrichsweikamp
parents:
466
diff
changeset
|
4791 TFT_ppo2_ead_end_cns: |
608 | 4792 ; Show ppO2 |
4793 WIN_MEDIUM dm_custom_ppo2_column, dm_custom_ppo2_row | |
623 | 4794 MOVII int_O_breathed_ppO2,mpr ; copy ppO2 of the currently breathed gas to hi:lo |
608 | 4795 call TFT_color_code_ppo2 ; color-code output |
4796 bsf leftbind | |
4797 output_16dp .3 ; x.xx bar | |
4798 bcf leftbind | |
4799 STRCAT_PRINT "" | |
4800 call TFT_standard_color | |
582 | 4801 ; Show END/EAD |
4802 WIN_SMALL dm_custom_ead_column, dm_custom_ead_row | |
4803 STRCPY_TEXT tEAD ; EAD: | |
631 | 4804 MOVII int_O_EAD_pres,mpr ; copy EAD in [mbar] to MPR |
4805 rcall TFT_end_ead_common ; convert to depth, print and limit to 8 chars | |
582 | 4806 WIN_SMALL dm_custom_end_column, dm_custom_end_row |
4807 STRCPY_TEXT tEND ; END: | |
631 | 4808 MOVII int_O_END_pres,mpr ; copy END in [mbar] to MPR |
4809 rcall TFT_end_ead_common ; convert to depth, print and limit to 8 chars | |
628 | 4810 IFDEF _helium |
4811 ; Show Gas Density | |
4812 WIN_MEDIUM dm_custom_cns_column-.5, dm_custom_cns_row | |
4813 MOVII int_O_gas_density,mpr ; get current gas density | |
4814 call TFT_color_code_cns_1 ; color-code output | |
4815 bsf leftbind ; print left-aligned | |
4816 movlw .2 ; suppress first and second digit | |
4817 movwf ignore_digits ; ... | |
631 | 4818 output_16dp .2 ; print as -x.yyy |
628 | 4819 bcf leftbind ; back to normal alignment |
4820 STRCAT_PRINT "" ; finalize output | |
4821 ELSE | |
582 | 4822 ; Show CNS |
604 | 4823 WIN_STD dm_custom_cns_column+.3, dm_custom_cns_row |
623 | 4824 MOVII int_O_CNS_current,mpr ; get current CNS |
604 | 4825 call TFT_color_code_cns ; color-code CNS output |
582 | 4826 bsf leftbind |
604 | 4827 output_16_3 ; displays only 0...999 |
582 | 4828 bcf leftbind |
4829 STRCAT_PRINT "%" | |
628 | 4830 ENDIF |
604 | 4831 TFT_custview_exit2: |
582 | 4832 goto TFT_standard_color ; and return... |
623 | 4833 |
631 | 4834 TFT_end_ead_common: |
4835 call convert_pres_to_depth ; convert pressure in [mbar] to depth in [cm] | |
623 | 4836 TSTOSS opt_units ; 0=Meter, 1=Feet |
631 | 4837 bra TFT_end_ead_common_metric ; 0: meter |
4838 ;bra TFT_end_ead_common_imperial ; 1: feet | |
4839 | |
604 | 4840 TFT_end_ead_common_imperial: |
631 | 4841 call convert_cm_to_feet ; convert depth in [cm] to depth in [feet] |
4842 output_16_3 ; print as xyz | |
604 | 4843 bra TFT_end_ead_common_exit |
631 | 4844 |
0 | 4845 TFT_end_ead_common_metric: |
631 | 4846 bsf ignore_digit4 ; no decimals (flag will be cleared by output_16) |
4847 output_16dp .3 ; print as yxz.-- | |
4848 movlw 'm' ; hard-coded unit | |
4849 movff WREG,buffer+.7 ; place the unit onto the decimal point | |
4850 ;bra TFT_end_ead_common_exit | |
4851 | |
0 | 4852 TFT_end_ead_common_exit: |
631 | 4853 STRCAT_PRINT "" ; finalize output |
4854 return ; done | |
582 | 4855 |
623 | 4856 ;============================================================================= |
4857 | |
4858 IFDEF _ccr_pscr | |
582 | 4859 |
604 | 4860 global TFT_sensor_check_mask ; mask for sensor check |
413
12e85930d95c
NEW: New Customview shows ppO2(O2) and ppO2(Diluent) during CCR mode
heinrichsweikamp
parents:
412
diff
changeset
|
4861 TFT_sensor_check_mask: |
582 | 4862 call TFT_divemask_color |
604 | 4863 WIN_TINY dm_custom_s_check_title_column, dm_custom_s_check_title_row |
582 | 4864 STRCPY_TEXT_PRINT tSensorCheck |
604 | 4865 WIN_TINY dm_custom_ppO2_column, dm_custom_s_check_title_row |
582 | 4866 STRCPY_TEXT_PRINT tppO2O2 |
604 | 4867 WIN_TINY dm_custom_ppDil_column, dm_custom_s_check_title_row |
582 | 4868 STRCPY_TEXT_PRINT tppO2Dil |
604 | 4869 bra TFT_sensor_check_exit ; and return... |
4870 | |
4871 | |
4872 global TFT_sensor_check ; data for sensor check | |
413
12e85930d95c
NEW: New Customview shows ppO2(O2) and ppO2(Diluent) during CCR mode
heinrichsweikamp
parents:
412
diff
changeset
|
4873 TFT_sensor_check: |
582 | 4874 ; Show ppO2 of O2 in this depth |
604 | 4875 WIN_MEDIUM dm_custom_ppO2_column, dm_custom_s_check_row |
623 | 4876 MOVII int_O_O2_ppO2,mpr ; copy ppO2 of pure O2 to hi:lo |
582 | 4877 call TFT_color_code_ppo2 ; color-code output |
560 | 4878 bsf leftbind |
582 | 4879 output_16dp .3 ; x.xx bar |
4880 bcf leftbind | |
4881 STRCAT_PRINT "" | |
4882 ; Show ppO2 of the diluent in this depth | |
604 | 4883 WIN_MEDIUM dm_custom_ppDil_column, dm_custom_s_check_row |
623 | 4884 MOVII int_O_pure_ppO2,mpr ; copy ppO2 of pure gas to hi:lo |
582 | 4885 call TFT_color_code_ppo2 ; color-code output |
560 | 4886 bsf leftbind |
582 | 4887 output_16dp .3 ; x.xx bar |
4888 bcf leftbind | |
4889 STRCAT_PRINT "" | |
604 | 4890 TFT_sensor_check_exit: |
4891 bra TFT_custview_exit2 ; and return... | |
560 | 4892 |
623 | 4893 ENDIF ; _ccr_pscr |
4894 | |
560 | 4895 ;============================================================================= |
413
12e85930d95c
NEW: New Customview shows ppO2(O2) and ppO2(Diluent) during CCR mode
heinrichsweikamp
parents:
412
diff
changeset
|
4896 |
582 | 4897 global TFT_surface_lastdive |
503
4542d03f748a
NEW: Last Dive customviews in surface mode with divetime, depth and interval
heinrichsweikamp
parents:
490
diff
changeset
|
4898 TFT_surface_lastdive: |
582 | 4899 WIN_TINY surf_gaslist_column,surf_gaslist_row+.5 |
604 | 4900 STRCAT_TEXT_PRINT tLastDive ; "Last Dive:" |
582 | 4901 WIN_TINY surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.1)+.5 |
604 | 4902 STRCAT_TEXT_PRINT tDivetime ; "Divetime:" |
582 | 4903 WIN_TINY surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.2)+.5 |
623 | 4904 STRCAT_TEXT_PRINT tMaxDepth ; "Max.Depth" |
4905 WIN_TINY surf_gaslist_column,surf_gaslist_row+(surf_gaslist_spacing*.3)+.5 | |
4906 STRCAT_TEXT_PRINT tAvgDepth ; "Average" | |
4907 | |
582 | 4908 WIN_SMALL surf_gaslist_column+.48,surf_gaslist_row |
623 | 4909 SMOVII int_O_desaturation_time,mpr ; ISR-safe copy of the desaturation time |
4910 movf mpr+0,W ; get low byte into WREG | |
4911 iorwf mpr+1,W ; inclusive-or with high byte, check if desaturation time is zero | |
582 | 4912 bz TFT_surface_lastdive_1 ; YES - show last dive time |
623 | 4913 ; NO - show surface interval |
629 | 4914 SMOVII surface_interval_mins,mpr ; - ISR-safe copy of surface interval in minutes |
623 | 4915 call convert_time ; - convert hi:lo in minutes to hours (up:hi) and minutes (lo) |
4916 movf hi,W ; - swap hi and lo | |
4917 movff lo,hi ; ... | |
4918 movwf lo ; ... | |
4919 bsf leftbind ; | |
4920 output_99x ; | |
4921 PUTC 'h' ; | |
4922 movff hi,lo ; | |
4923 output_99x ; | |
4924 STRCAT_PRINT "m " ; | |
4925 bra TFT_surface_lastdive_2 ; | |
560 | 4926 TFT_surface_lastdive_1: |
631 | 4927 SMOVQQ surface_interval_secs,xC ; ISR-safe copy of surface_interval_secs:4 to xC:4 |
623 | 4928 call info_menu_uptime_com ; use part of info_menu_uptime to convert and display in days and hours |
631 | 4929 STRCAT_PRINT "" ; finalize output |
560 | 4930 TFT_surface_lastdive_2: |
582 | 4931 WIN_SMALL surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.1) |
623 | 4932 MOVII lastdive_duration,mpr ; get duration of last dive, minutes |
4933 bsf leftbind ; print without leading spaces | |
4934 output_16 ; dive time minutes | |
4935 PUTC ":" ; | |
4936 movff lastdive_duration+2,lo ; get duration of last dive, seconds | |
4937 output_99x ; print seconds | |
4938 rcall TFT_surface_common ; finalize output | |
4939 TFT_surface_lastdive_3: | |
582 | 4940 WIN_SMALL surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.2) |
631 | 4941 MOVII lastdive_maxdepth,mpr ; get max depth of last dive |
623 | 4942 bsf leftbind ; print without leading spaces |
4943 TSTOSS opt_units ; 0=Meter, 1=Feet | |
4944 bra TFT_surface_lastdive_metric ; 0 - metric | |
4945 rcall TFT_surface_imperial ; 1 - imperial | |
4946 bra TFT_surface_lastdive_4 ; - continue | |
4947 TFT_surface_lastdive_metric: | |
4948 rcall TFT_surface_metric ; print depth in meters | |
4949 TFT_surface_lastdive_4: | |
4950 WIN_SMALL surf_gaslist_column+.48,surf_gaslist_row+(surf_gaslist_spacing*.3) | |
631 | 4951 MOVII lastdive_avgdepth,mpr ; get avg depth of last dive |
623 | 4952 bsf leftbind ; print without leading spaces |
4953 TSTOSS opt_units ; 0=Meter, 1=Feet | |
4954 bra TFT_surface_metric ; 0 - metric and return | |
4955 ;bra TFT_surface_imperial ; 1 - imperial and return | |
4956 | |
4957 TFT_surface_imperial: | |
631 | 4958 rcall convert_cm_to_feet ; convert value in hi:lo from [cm] to [feet] |
582 | 4959 output_16_3 ; limit to 999 and display only (0-999) |
623 | 4960 STRCAT_TEXT tFeets1 ; "ft" |
4961 bra TFT_surface_common ; finalize output | |
631 | 4962 |
623 | 4963 TFT_surface_metric: |
604 | 4964 bsf ignore_digit5 ; no cm (flag will be cleared by output_16) |
623 | 4965 movlw .1 ; no 1000 meters |
4966 movwf ignore_digits ; ... | |
582 | 4967 output_16dp .3 ; xxx.y |
623 | 4968 STRCAT_TEXT tMeters ; "m" |
631 | 4969 ;bra TFT_surface_common ; finalize output |
4970 | |
623 | 4971 TFT_surface_common: |
4972 STRCAT_PRINT "" ; finalize output | |
4973 bcf leftbind ; clear left-alignment | |
4974 return ; done | |
560 | 4975 |
4976 ;============================================================================= | |
582 | 4977 |
4978 global TFT_surface_tissues | |
623 | 4979 TFT_surface_tissues: ; show tissue diagram in surface mode |
4980 | |
4981 ; draw outer frame | |
4982 WIN_FRAME_STD surf_tissue_diagram_top, surf_tissue_diagram_bottom, surf_tissue_diagram_left, surf_tissue_diagram_right | |
4983 | |
4984 ;---- draw labels --------------------------------- ; | |
4985 | |
4986 call TFT_standard_color | |
582 | 4987 WIN_SMALL surf_tissue_N2_column,surf_tissue_N2_row |
623 | 4988 IFDEF _helium |
631 | 4989 btfss tissue_graphic_layout ; shall N2 and He? |
4990 bra TFT_surface_tissues_1 ; NO - print "Tissues" | |
4991 STRCPY_TEXT_PRINT tN2 ; YES - print "N2" | |
582 | 4992 WIN_SMALL surf_tissue_He_column,surf_tissue_He_row |
631 | 4993 STRCPY_TEXT_PRINT tHe ; - print "He" |
4994 bra TFT_surface_tissues_2 ; - continue with common part | |
623 | 4995 ENDIF |
631 | 4996 |
623 | 4997 TFT_surface_tissues_1: |
4998 STRCPY_TEXT_PRINT tDiveTissues ; print "Tissues" | |
631 | 4999 |
623 | 5000 TFT_surface_tissues_2: |
5001 ;---- draw scale ---------------------------------- ; | |
582 | 5002 movlw color_deepblue |
623 | 5003 call TFT_set_color |
5004 | |
5005 SCALELINE macro x | |
5006 WIN_FRAME_COLOR16 surf_tissue_diagram_top+.23,surf_tissue_diagram_bottom-.4,surf_tissue_diagram_left+.4+x,surf_tissue_diagram_left+.4+x | |
5007 endm | |
5008 | |
5009 SCALELINE .0 | |
5010 SCALELINE .8 | |
5011 SCALELINE .16 | |
5012 SCALELINE .24 | |
5013 SCALELINE .32 | |
5014 SCALELINE .40 | |
5015 SCALELINE .48 | |
5016 SCALELINE .56 | |
5017 SCALELINE .64 | |
5018 SCALELINE .72 | |
5019 SCALELINE .80 | |
5020 | |
5021 ;---- common initialization for Tissue Pressures and Saturation ---------- | |
0 | 5022 movlw .1 |
623 | 5023 movwf win_height ; hight of the bargraph (0-239) |
5024 movlw surf_tissue_diagram_left+.4 ; left start position for N2 bars | |
5025 movwf win_leftx2 ; column left (0-159) | |
5026 movlw surf_tissue_diagram_right-surf_tissue_diagram_left-.4 ; get max width for N2 bars (78 pixel) | |
5027 movwf win_width+0 ; set width of the bar box | |
5028 clrf win_width+1 ; ... | |
5029 movlw color_white ; color for tissues not exceeding surface max pressure | |
5030 movwf ex ; store in ex | |
5031 movlw color_red ; color for tissues exceeding surface max pressure | |
5032 movwf ul ; store in ul | |
5033 bcf aux_flag ; draw tissue pressures by default | |
5034 | |
5035 ;---- Draw combined or N2 Tissue Pressures--------- ; | |
5036 lfsr FSR2,char_O_tissue_pressure ; load base address of combined pressures by default | |
5037 IFDEF _helium | |
631 | 5038 btfsc tissue_graphic_layout ; shall show N2+He ? |
5039 lfsr FSR2,char_O_tissue_pres_N2 ; YES - replace with base address of N2 pressures | |
623 | 5040 ENDIF |
631 | 5041 btfsc tissue_graphic_mode ; in logbook mode? |
5042 lfsr FSR2,header_buffer+index_tissue_pres_total ; YES - replace with base address from logbook | |
623 | 5043 movlw d'16' |
5044 movwf lo ; tissue counter, 16 tissues | |
5045 clrf hi ; row counter | |
5046 TFT_surf_tissues_N2_loop: | |
5047 movlw surf_tissue_diagram_top+.23 ; surface mode top start position N2 | |
5048 rcall TFT_surf_tissues_bargraph ; show one tissue | |
5049 movlw .2 ; bargraph spacing | |
5050 addwf hi,F ; increment row counter | |
5051 decfsz lo,F ; decrement tissue counter, done? | |
5052 bra TFT_surf_tissues_N2_loop ; NO - loop | |
5053 IFDEF _helium | |
631 | 5054 btfsc tissue_graphic_layout ; shall show N2+He ? |
5055 bra TFT_surface_tissues_3 ; YES - show He tissue pressures | |
623 | 5056 ENDIF |
5057 | |
5058 ;---- Draw Tissue Saturations --------------------- ; | |
5059 lfsr FSR2,char_O_tissue_saturation ; load base address of tissue supersaturation | |
631 | 5060 btfsc tissue_graphic_mode ; in logbook mode? |
5061 lfsr FSR2,header_buffer+index_tissue_supersat ; YES - replace with base address from logbook | |
0 | 5062 movlw d'16' |
623 | 5063 movwf lo ; tissue counter, 16 tissues |
5064 clrf hi ; row counter | |
5065 movlw color_grey ; color for tissue saturation | |
5066 movwf ex ; store in ex | |
5067 ; movlw color_yellow ; 2nd color is not used by tissue saturation | |
5068 ; movwf ul ; ... | |
5069 bsf aux_flag ; draw tissue saturation | |
5070 TFT_surf_tissues_sat_loop: | |
5071 movlw surf_tissue_diagram_top+.23+.57 ; surface mode top start position saturations | |
5072 rcall TFT_surf_tissues_bargraph ; draw tissue bargraph | |
5073 movlw .2 ; bargraph spacing | |
5074 addwf hi,F ; increment row counter | |
5075 decfsz lo,F ; decrement tissue counter, done? | |
5076 bra TFT_surf_tissues_sat_loop ; NO - loop | |
5077 | |
5078 ;---- common Part for vertical lines--------------- ; | |
5079 movlw surf_tissue_diagram_top+.23+.57 ; get top position | |
5080 movwf win_top ; set top position (0-239) | |
5081 movlw .30 ; get hight | |
5082 movwf win_height ; set height | |
5083 movlw .1 ; get width | |
5084 movwf win_width+0 ; set width, low byte | |
5085 clrf win_width+1 ; set width, high byte | |
5086 | |
5087 ;---- Print 100% Line ----------------------------- ; | |
5088 movlw surf_tissue_diagram_left+.4+.64 ; get left position | |
5089 movwf win_leftx2 ; set left position (0-159) | |
5090 movlw color_red ; color for 100% line | |
5091 call TFT_set_color ; set color | |
5092 call TFT_box ; draw line | |
5093 | |
5094 ; GF factors enabled? | |
631 | 5095 btfss tissue_graphic_gf ; GF factors enabled? |
623 | 5096 bra TFT_surface_tissues_4 ; NO - continue with CNS |
5097 | |
5098 ;---- Print GF low Line -------------------------- ; | |
5099 movlw surf_tissue_diagram_left+.4 ; get left base position | |
5100 movwf win_leftx2 ; set left base position (0-159) | |
5101 movff opt_GF_low,WREG ; get GF low in 0.01 % | |
631 | 5102 btfsc tissue_graphic_mode ; in logbook mode? |
5103 movff header_buffer+index_gf_lo_hi+0,WREG ; YES - replace by GF low from logbook | |
623 | 5104 mullw .164 ; multiply with 164 |
5105 movf PRODH,W ; divide by 256 -> resulting scale factor is 164/256 = 0.640625 | |
5106 addwf win_leftx2,F ; add to base position | |
5107 movlw color_green ; color for 100% line | |
5108 call TFT_set_color ; set color | |
5109 call TFT_box ; draw line | |
5110 | |
5111 ;---- Print GF high Line -------------------------- ; | |
5112 movlw surf_tissue_diagram_left+.4 ; get left base position | |
5113 movwf win_leftx2 ; set left base position (0-159) | |
5114 movff opt_GF_high,WREG ; get GF high in 0.01 % | |
631 | 5115 btfsc tissue_graphic_mode ; in logbook mode? |
5116 movff header_buffer+index_gf_lo_hi+1,WREG ; YES - replace by GF high from logbook | |
623 | 5117 mullw .164 ; multiply with 164 |
5118 movf PRODH,W ; divide by 256 -> resulting scale factor is 164/256 = 0.640625 | |
5119 addwf win_leftx2,F ; add to base position | |
5120 movlw color_yellow ; color for 100% line | |
5121 call TFT_set_color ; set color | |
5122 call TFT_box ; draw line | |
5123 bra TFT_surface_tissues_4 ; continue with CNS | |
5124 | |
5125 IFDEF _helium | |
5126 TFT_surface_tissues_3: | |
5127 ;---- Draw He Tissue Pressures--------------------- ; | |
5128 movlw surf_tissue_diagram_left+.4+.16 ; start position for He bars | |
5129 movwf win_leftx2 ; column left (0-159) | |
5130 movlw surf_tissue_diagram_right-surf_tissue_diagram_left-.4-.16 ; max width for He bars | |
5131 movwf win_width+0 ; set total width of the bar box | |
5132 clrf win_width+1 ; ... | |
5133 lfsr FSR2,char_O_tissue_pres_He ; load base address of He pressures | |
0 | 5134 movlw d'16' |
623 | 5135 movwf lo ; tissue counter, 16 tissues |
5136 clrf hi ; row counter | |
5137 TFT_surf_tissues_He_loop: | |
5138 movlw surf_tissue_diagram_top+.23+.57 ; surface mode top start position He | |
5139 rcall TFT_surf_tissues_bargraph ; show one tissue | |
5140 movlw .2 ; bargraph spacing | |
5141 addwf hi,F ; increment row counter | |
5142 decfsz lo,F ; decrement tissue counter, done? | |
5143 bra TFT_surf_tissues_He_loop ; NO - loop | |
5144 ENDIF | |
5145 | |
5146 TFT_surface_tissues_4: | |
631 | 5147 btfss tissue_graphic_cns ; shall show CNS value? |
5148 goto TFT_standard_color ; NO - done | |
5149 | |
623 | 5150 ; ---- Draw CNS% ---------------------------------- ; |
5151 WIN_SMALL surf_tissue_He_column+.22,surf_tissue_He_row ; position in-between tissue bars | |
5152 MOVII int_O_CNS_current,mpr ; get current CNS | |
5153 call TFT_color_code_cns ; color-code CNS value | |
5154 STRCPY_TEXT tCNS2 ; "CNS:" | |
560 | 5155 bsf leftbind |
623 | 5156 output_16_3 ; display only 0...999 |
560 | 5157 bcf leftbind |
5158 STRCAT_PRINT "%" | |
623 | 5159 goto TFT_standard_color ; and return... |
5160 | |
5161 TFT_surf_tissues_bargraph: | |
5162 addwf hi,W ; add row number to start position | |
5163 movwf win_top ; set as row top (0-239) | |
5164 movff POSTINC2,up ; get tissue value | |
5165 movf ex,W ; default color | |
5166 btfsc up,7 ; check if flag in bit 7 is set | |
5167 movf ul,W ; YES - switch to 2nd color | |
5168 call TFT_set_color ; set bargraph bar color | |
5169 bcf up,7 ; clear flag bit | |
5170 btfss aux_flag ; drawing saturations? | |
5171 rlncf up,F ; NO - multiply with 2 (previously cleared bit 7 will be rotated to bit 0) | |
5172 incf up,W ; add 1 for a minimum visible bar (He-bars could be invisible else-wise) | |
5173 movwf win_bargraph ; set length of the bargraph | |
5174 goto TFT_box ; draw bargraph and return | |
5175 | |
0 | 5176 |
5177 ;============================================================================= | |
631 | 5178 ; Draw saturation graph in dive mode custom view |
5179 ; | |
623 | 5180 TFT_dive_tissues: |
631 | 5181 |
5182 ;---- draw outer frame | |
582 | 5183 call TFT_standard_color |
604 | 5184 WIN_FRAME_COLOR16 dm_custom_tissue_diagram_top, dm_custom_tissue_diagram_bottom, dm_custom_tissue_diagram_left, .159 ; outer frame |
5185 | |
5186 ;---- clear area showing leading tissue number as it may not be printed over | |
5187 WIN_BOX_BLACK dm_custom_tissue_diagram_top+.16, dm_custom_tissue_diagram_top+.16+.10, dm_custom_tissue_diagram_left+.32, dm_custom_tissue_diagram_left+.32+.8 ; top, bottom, left, right | |
0 | 5188 |
631 | 5189 TFT_dive_tissues_1: |
623 | 5190 ;---- common initialization for Tissue Pressures and Saturation ---------- |
0 | 5191 movlw .1 |
623 | 5192 movwf win_height ; hight of the bargraph (0-239) |
5193 movlw dm_custom_tissue_diagram_left+.3 ; get dive mode left start position | |
5194 movwf win_leftx2 ; set column left (0-159) | |
5195 movlw .159-dm_custom_tissue_diagram_left-.4 ; get max width | |
5196 movwf win_width+0 ; set width (low byte) | |
5197 clrf win_width+1 ; high byte of with is always zero | |
5198 movlw color_cyan ; color for tissues with decreasing pressure | |
5199 movwf ex ; store in ex | |
5200 movlw color_orange ; color for tissues with increasing pressure | |
5201 movwf ul ; store in ul | |
5202 | |
5203 ;---- Draw combined or N2 Tissue Pressures -------- ; | |
5204 lfsr FSR2,char_O_tissue_pressure ; load base address of combined pressures by default | |
5205 IFDEF _helium | |
631 | 5206 btfsc tissue_graphic_layout ; shall show N2+He ? |
5207 lfsr FSR2,char_O_tissue_pres_N2 ; YES - load base address of N2 pressures | |
623 | 5208 ENDIF |
5209 movlw d'16' | |
5210 movwf lo ; tissue counter, 16 tissues | |
5211 clrf hi ; row counter | |
5212 TFT_dive_tissues_N2_loop: | |
5213 movlw dm_custom_tissue_diagram_top+.3 ; dive mode top start position N2 | |
5214 rcall TFT_dive_tissues_bargraph ; draw tissue bargraph | |
5215 incf hi,F ; increment row counter | |
5216 decfsz lo,F ; decrement tissue counter, done? | |
5217 bra TFT_dive_tissues_N2_loop ; NO - loop | |
5218 IFDEF _helium | |
631 | 5219 btfsc tissue_graphic_layout ; shall show N2+He ? |
5220 bra TFT_dive_tissues_3 ; YES - show He tissue pressures | |
623 | 5221 ENDIF |
5222 | |
5223 ;---- Draw Tissue Saturations --------------------- ; | |
5224 lfsr FSR2,char_O_tissue_saturation ; load base address of tissue supersaturation | |
0 | 5225 movlw d'16' |
623 | 5226 movwf lo ; tissue counter, 16 tissues |
5227 clrf hi ; row counter | |
5228 movlw color_grey ; color for tissue saturation, alternative: color_lightblue | |
5229 movwf ex ; store in ex | |
5230 ; movlw color_yellow ; 2nd color is not used by tissue saturation | |
5231 ; movwf ul ; ... | |
5232 TFT_dive_tissues_sat_loop: | |
5233 movlw dm_custom_tissue_diagram_top+.3+.22 ; dive mode top start position saturations | |
5234 rcall TFT_dive_tissues_bargraph ; draw tissue bargraph | |
5235 incf hi,F ; increment row counter | |
5236 decfsz lo,F ; decrement tissue counter, done? | |
5237 bra TFT_dive_tissues_sat_loop ; NO - loop | |
5238 | |
5239 ;---- common Part for vertical lines--------------- ; | |
5240 movlw dm_custom_tissue_diagram_top+.3+.22 ; get top position | |
5241 movwf win_top ; set top position (0-239) | |
5242 movlw .15 ; get hight | |
5243 movwf win_height ; set height | |
5244 movlw .1 ; get width | |
5245 movwf win_width+0 ; set width, low byte | |
5246 clrf win_width+1 ; set width, high byte | |
5247 | |
5248 ;---- Print 100% Line ----------------------------- ; | |
5249 movlw dm_custom_tissue_diagram_left+.3+.33 ; get left position | |
5250 movwf win_leftx2 ; set left position (0-159) | |
5251 movlw color_red ; color for 100% line | |
5252 call TFT_set_color ; set color | |
5253 call TFT_box ; draw line | |
5254 | |
5255 ; GF factors enabled? | |
631 | 5256 btfss tissue_graphic_gf ; shall show GF lines? |
623 | 5257 bra TFT_dive_tissues_4 ; NO - continue with number of leading tissue |
5258 | |
5259 ;---- Print GF low Line -------------------------- ; | |
5260 movlw dm_custom_tissue_diagram_left+.3 ; get left base position | |
5261 movwf win_leftx2 ; set left base position (0-159) | |
5262 movff char_I_GF_Low_percentage,WREG ; get GF low in 0.01 % | |
5263 mullw .82 ; multiply with 82 | |
5264 movf PRODH,W ; divide by 256 -> resulting scale factor is 82/256 = 0.3203125 | |
5265 addwf win_leftx2,F ; add to base position | |
5266 movlw color_green ; color for 100% line | |
5267 call TFT_set_color ; set color | |
5268 call TFT_box ; draw line | |
5269 | |
5270 ;---- Print GF high Line -------------------------- ; | |
5271 movlw dm_custom_tissue_diagram_left+.3 ; get left base position | |
5272 movwf win_leftx2 ; set left base position (0-159) | |
5273 movff char_I_GF_High_percentage,WREG ; get GF high in 0.01 % | |
5274 mullw .82 ; multiply with 82 | |
5275 movf PRODH,W ; divide by 256 -> resulting scale factor is 82/256 = 0.3203125 | |
5276 addwf win_leftx2,F ; add to base position | |
5277 movlw color_yellow ; color for 100% line | |
5278 call TFT_set_color ; set color | |
5279 call TFT_box ; draw line | |
5280 bra TFT_dive_tissues_4 ; continue with number of leading tissue | |
5281 | |
5282 IFDEF _helium | |
5283 TFT_dive_tissues_3: | |
5284 ;---- Draw He Tissues Pressures ------------------- ; | |
631 | 5285 lfsr FSR2,char_O_tissue_pres_He ; load base address of He pressures |
623 | 5286 movlw dm_custom_tissue_diagram_left+.3+.4 ; get dive mode left start position for He bars |
5287 movwf win_leftx2 ; set column left (0-159) | |
5288 movlw .159-dm_custom_tissue_diagram_left-.4-.4 ; get max width for He bars | |
5289 movwf win_width+0 ; set width (low byte) | |
5290 clrf win_width+1 ; ... | |
0 | 5291 movlw d'16' |
623 | 5292 movwf lo ; tissue counter, 16 tissues |
5293 clrf hi ; row counter | |
5294 TFT_dive_tissues_He_loop: | |
5295 movlw dm_custom_tissue_diagram_top+.3+.22 ; dive mode top start position H2 | |
5296 rcall TFT_dive_tissues_bargraph ; draw tissue bargraph | |
5297 incf hi,F ; increment row counter | |
5298 decfsz lo,F ; decrement tissue counter, done? | |
631 | 5299 bra TFT_dive_tissues_He_loop ; NO - loop |
623 | 5300 ENDIF |
5301 | |
5302 TFT_dive_tissues_4: | |
5303 ;---- Print Number of leading Tissue -------------- ; TODO: some flicker due to overwriting by tissue bars | |
5304 movff int_O_lead_supersat+0,WREG ; get current leading tissue's supersaturation (only low byte used for value) | |
5305 tstfsz WREG ; current supersaturation = 0 ? | |
5306 bra TFT_dive_tissues_5 ; NO - print number of leading tissue | |
604 | 5307 movff char_O_deco_info,WREG ; YES - get deco info vector |
5308 btfss WREG,deco_ceiling ; - do we have a ceiling obligation? | |
5309 goto TFT_standard_color ; NO - can ascent directly, don't print number, set standard color and return | |
5310 ; YES - print number of leading tissue | |
623 | 5311 TFT_dive_tissues_5: |
5312 movff char_O_lead_tissue,lo ; get number of leading tissue as 0-15 | |
604 | 5313 incf lo,F ; adjust to 1-16 |
5314 movlw .10 | |
5315 cpfsgt lo ; is it > 10 ? | |
623 | 5316 bra TFT_dive_tissues_6 ; NO - will output a single digit number |
604 | 5317 ; start position for a 2 digit number |
623 | 5318 WIN_TINY dm_custom_tissue_diagram_left+.32,dm_custom_tissue_diagram_top+.10 |
5319 bra TFT_dive_tissues_7 | |
5320 TFT_dive_tissues_6: | |
604 | 5321 ; start position for a 1 digit number |
623 | 5322 WIN_TINY dm_custom_tissue_diagram_left+.32+.4,dm_custom_tissue_diagram_top+.10 |
5323 TFT_dive_tissues_7: | |
604 | 5324 call TFT_standard_color ; set output color |
5325 bsf leftbind | |
623 | 5326 output_8 ; print number in left aligned, i.e. without leading zeros or spaces |
604 | 5327 bcf leftbind |
5328 STRCAT_PRINT "" ; finalize output | |
5329 return | |
0 | 5330 |
623 | 5331 TFT_dive_tissues_bargraph: |
5332 addwf hi,W ; add row number to start position | |
5333 movwf win_top ; set as row top (0-239) | |
5334 movff POSTINC2,up ; get tissue value | |
5335 movf ex,W ; default color | |
5336 btfsc up,7 ; check if flag in bit 7 is set | |
5337 movf ul,W ; YES - switch to 2nd color | |
5338 call TFT_set_color ; set bargraph bar color | |
5339 bcf up,7 ; clear flag bit | |
5340 bcf STATUS,C ; clear carry bit | |
5341 rrcf up,F ; divide by 2 | |
5342 incf up,W ; add a bit for a minimum visible bar | |
5343 movwf win_bargraph ; set bargraph bar length | |
5344 goto TFT_box ; draw bargraph and return | |
560 | 5345 |
5346 ;============================================================================= | |
55 | 5347 |
623 | 5348 global TFT_show_cns |
5349 TFT_show_cns: | |
631 | 5350 call TFT_set_message_window ; set row and column for the message |
604 | 5351 tstfsz WREG ; is there room for the message? |
631 | 5352 return ; NO - skip message in this cycle |
582 | 5353 STRCPY_TEXT tCNS ; CNS: |
623 | 5354 MOVII int_O_CNS_current,mpr ; get current CNS |
604 | 5355 call TFT_color_code_cns ; color-code CNS output |
582 | 5356 bsf leftbind |
604 | 5357 output_16_3 ; displays only 0...999 |
582 | 5358 bcf leftbind |
5359 PUTC "%" | |
623 | 5360 movlw dm_warning_length ; dive mode string length |
5361 btfss divemode ; In dive mode? | |
604 | 5362 movlw surf_warning_length ; NO - use surface string length |
623 | 5363 call TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) |
560 | 5364 STRCAT_PRINT "" |
5365 bcf win_invert | |
604 | 5366 bra TFT_custview_exit3 ; and return... |
560 | 5367 |
5368 | |
623 | 5369 global TFT_warning_eod_cns |
5370 TFT_warning_eod_cns: | |
631 | 5371 call TFT_set_message_window ; set row and column for the message |
604 | 5372 tstfsz WREG ; is there room for the message? |
631 | 5373 return ; NO - skip message in this cycle |
623 | 5374 call TFT_warning_color ; switch to warnings (red) text color |
560 | 5375 STRCPY_TEXT tCNSeod ; end-of-dive CNS warning text |
623 | 5376 movlw dm_warning_length ; dive mode string length |
5377 call TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in WREG) | |
0 | 5378 STRCAT_PRINT "" |
604 | 5379 bra TFT_custview_exit3 ; and return... |
5380 | |
5381 | |
623 | 5382 global TFT_show_ppo2_warning |
631 | 5383 TFT_show_ppo2_warning: |
5384 call TFT_set_message_window ; set row and column for the message | |
604 | 5385 tstfsz WREG ; is there room for the message? |
631 | 5386 return ; NO - skip message in this cycle |
604 | 5387 call TFT_color_code_ppo2 ; color-code output |
623 | 5388 btfsc bailout_mode ; in bailout? |
604 | 5389 bra TFT_display_diluent_2 ; YES |
582 | 5390 btfss FLAG_ccr_mode ; in CCR mode? |
5391 bra TFT_display_diluent_1 ; NO - continue with pSCR or OC | |
604 | 5392 STRCPY_TEXT tdil ; YES - print "Dil:" |
582 | 5393 bra TFT_display_diluent_3 |
560 | 5394 TFT_display_diluent_1: |
582 | 5395 btfss FLAG_pscr_mode ; in pSCR mode? |
604 | 5396 bra TFT_display_diluent_2 ; NO - continue with OC |
5397 STRCPY_TEXT tmix ; YES - print "Mix:" | |
582 | 5398 bra TFT_display_diluent_3 |
560 | 5399 TFT_display_diluent_2: |
604 | 5400 STRCPY_TEXT tppO2 ; bailout or OC mode, print "ppO2:" |
560 | 5401 TFT_display_diluent_3: |
5402 bsf leftbind | |
582 | 5403 output_16dp .3 ; x.xx bar |
5404 bcf leftbind | |
623 | 5405 movlw dm_warning_length ; dive mode string length |
604 | 5406 call TFT_fillup_with_spaces ; fill up FSR2 with spaces (total string length in #WREG) |
560 | 5407 STRCAT_PRINT "" |
604 | 5408 TFT_custview_exit3: |
560 | 5409 goto TFT_standard_color ; and return... |
582 | 5410 |
604 | 5411 |
623 | 5412 IFDEF _compass |
5413 | |
604 | 5414 global TFT_surf_set_bearing |
5415 TFT_surf_set_bearing: | |
623 | 5416 btfsc compass_menu ; is the "set bearing" selection shown? |
5417 return ; YES - return | |
5418 bsf compass_menu ; NO - set "set bearing" selection as shown | |
604 | 5419 WIN_BOX_BLACK surf_compass_bear_row,surf_warning1_row-1, surf_compass_bear_column, surf_decotype_column-.1 ; top, bottom, left, right |
5420 WIN_SMALL surf_compass_bear_column,surf_compass_bear_row | |
5421 WIN_COLOR color_yellow | |
5422 bsf win_invert | |
5423 STRCPY_TEXT_PRINT tSetHeading ; 7 chars | |
5424 bcf win_invert | |
5425 return | |
5426 | |
623 | 5427 ENDIF |
5428 | |
560 | 5429 ;============================================================================= |
582 | 5430 |
623 | 5431 global TFT_LogOffset |
5432 TFT_LogOffset: | |
5433 STRCPY_TEXT tLogOffsetValue ; print "Offset" in selected language | |
631 | 5434 call eeprom_log_offset_read ; read offset into lo:hi |
623 | 5435 ; bsf leftbind |
5436 output_16_4 ; print offset in 4 digits | |
5437 ; bcf leftbind | |
604 | 5438 return ; no "_PRINT" here... |
582 | 5439 |
560 | 5440 ;============================================================================= |
604 | 5441 ; RX Functions |
5442 | |
5443 IFDEF _rx_functions | |
5444 | |
5445 global TFT_pressures_SAC_mask ; mask for pressures and SAC | |
5446 TFT_pressures_SAC_mask: | |
5447 call TFT_divemask_color | |
5448 ; pressure reading 1 | |
5449 WIN_TINY dm_custom_tankdata_pres1_col, dm_custom_tankdata_mask_row | |
5450 movff char_I_pressure_gas+0,WREG ; =0: disabled, =1..10: gases/dils | |
5451 bcf aux_flag ; selector for disabled / need set to disabled | |
5452 call TFT_pressures_SAC_mask_helper ; print gas composition or " ---" if disabled | |
5453 ; pressure reading 2 | |
5454 WIN_TINY dm_custom_tankdata_pres2_col, dm_custom_tankdata_mask_row | |
5455 movff char_I_pressure_gas+1,WREG ; =0: need to reading 1, =1..10: gases/dils | |
5456 bsf aux_flag ; selector for disabled / need set to need | |
5457 call TFT_pressures_SAC_mask_helper ; print gas composition or "Need " if 0 | |
5458 ; SAC rate | |
5459 WIN_TINY dm_custom_tankdata_SAC_col, dm_custom_tankdata_mask_row | |
5460 STRCPY_TEXT tSAC ; "SAC | |
5461 STRCAT " (" ; ( | |
5462 STRCAT_TEXT tLitersMinute ; l/min | |
5463 STRCAT_PRINT ")" ; )" | |
5464 bra TFT_custview_exit3 ; and return... | |
5465 | |
5466 TFT_pressures_SAC_mask_helper: | |
5467 tstfsz WREG ; pressure reading assigned? | |
5468 bra TFT_dive_tankdata_mask_helper_1 ; YES - print gas composition | |
5469 btfsc aux_flag ; NO - check auxiliary flag | |
5470 bra TFT_dive_tankdata_mask_helper_2 ; 1 - print "Need " | |
5471 STRCAT_PRINT " ---" ; 0 - print " ---" | |
5472 return ; - done | |
5473 TFT_dive_tankdata_mask_helper_1: | |
5474 decf WREG,W ; (1..10) -> (0..9) | |
623 | 5475 bsf short_gas_descriptions ; just "Air", "O2" or "xx/yy" |
604 | 5476 call gaslist_strcat_gas_WREG ; print composition of gas/dil in WREG (0..9) |
5477 bra TFT_dive_tankdata_mask_helper_3 ; finish with adding "(bar)" | |
5478 TFT_dive_tankdata_mask_helper_2: | |
5479 STRCPY_TEXT tNeed ; "Need" | |
5480 TFT_dive_tankdata_mask_helper_3: | |
5481 STRCAT_PRINT "(bar)" | |
5482 return | |
5483 | |
5484 | |
5485 global TFT_pressures_SAC ; data for pressures and SAC | |
5486 TFT_pressures_SAC: | |
5487 ; check mode for second reading | |
5488 bcf aux_flag ; clear auxiliary flag by default (reading 2 is pressure) | |
5489 movff char_I_pressure_gas+1,WREG ; =0: need to reading 1, =1..10: gases/dils | |
5490 addlw .0 ; dummy operation to set status register flags | |
5491 btfsc STATUS,Z ; gas selected = 0 (i.e. no 2nd pressure reading) ? | |
5492 bsf aux_flag ; YES - set auxiliary flag (display position of reading 2 shall show need to reading 1) | |
5493 ; get data of reading 1 | |
5494 movff int_IO_pressure_value+0,lo ; copy pressure 1 to hi:lo | |
5495 movff int_IO_pressure_value+1,hi | |
5496 movff char_I_pressure_stat+0,ex ; copy status data | |
5497 ; pressure of reading 1 | |
5498 WIN_STD dm_custom_tankdata_pres1_col+.4,dm_custom_tankdata_row | |
5499 rcall TFT_pressures_SAC_helper_1 ; print pressure if available, else " ---" | |
5500 ; battery status of reading 1 | |
5501 WIN_SMALL dm_custom_hud_sensor1_column+.4+.36,dm_custom_tankdata_row | |
5502 rcall TFT_pressures_SAC_helper_2 ; print or clear down arrow as low bat indicator | |
5503 ; get data for reading 2 | |
5504 btfsc aux_flag ; shall reading 2 show need to reading 1 ? | |
5505 bra TFT_pressures_SAC_1 ; YES | |
5506 movff int_IO_pressure_value+2,lo ; NO - copy pressure 2 to hi:lo | |
623 | 5507 movff int_IO_pressure_value+3,hi |
604 | 5508 movff char_I_pressure_stat+1,ex ; - copy status data |
5509 bra TFT_pressures_SAC_2 | |
5510 TFT_pressures_SAC_1: | |
623 | 5511 MOVII int_O_pressure_need,mpr ; YES - copy need to pressure 1 to hi:lo |
604 | 5512 clrf ex ; - set status data to 0 |
5513 TFT_pressures_SAC_2: | |
5514 ; pressure of reading 2 | |
5515 WIN_STD dm_custom_tankdata_pres2_col+.2,dm_custom_tankdata_row | |
5516 rcall TFT_pressures_SAC_helper_1 ; print pressure if available, else " ---" | |
5517 ; battery status of reading 2 | |
5518 WIN_SMALL dm_custom_tankdata_pres2_col+.2+.36,dm_custom_tankdata_row | |
5519 rcall TFT_pressures_SAC_helper_2 ; print or clear down arrow as low bat indicator | |
5520 ; SAC | |
5521 WIN_STD dm_custom_tankdata_SAC_col+.6,dm_custom_tankdata_row | |
623 | 5522 MOVII int_O_SAC_measured,mpr ; copy measured SAC rate to hi:lo |
604 | 5523 btfsc hi,int_not_avail_flag ; SAC rate available? |
5524 bra TFT_pressures_SAC_4 ; NO - print " --.-" | |
5525 call TFT_color_code_tank_pres_sac ; color-code the output | |
5526 output_16_3 ; print as xxx | |
5527 PUTC " " ; print a dummy char to have the string termination at the correct place | |
5528 movff buffer+.2,buffer+.3 ; move the decimal digit one position to the right | |
5529 movlw "." ; load coding of a decimal point | |
5530 movff WREG,buffer+.2 ; place it before decimal digit | |
5531 movlw " " ; load coding of a space character | |
5532 movff buffer+.1,up ; get the character in front of the decimal point | |
5533 cpfseq up ; is it a space? | |
5534 bra TFT_pressures_SAC_3 ; NO - continue | |
5535 movlw "0" ; YES - load coding of a zero | |
5536 movff WREG,buffer+.1 ; - place a zero in front of the decimal point | |
5537 TFT_pressures_SAC_3: | |
5538 STRCAT_PRINT "" ; dump buffer to screen | |
5539 bra TFT_custview_exit3 ; and return... | |
5540 TFT_pressures_SAC_4: | |
5541 call TFT_disabled_color | |
5542 STRCAT_PRINT "--.-" ; output for no SAC data available | |
5543 bra TFT_custview_exit3 ; and return... | |
5544 | |
5545 TFT_pressures_SAC_helper_1: | |
5546 btfss hi,int_not_avail_flag ; pressure available? | |
5547 bra TFT_pressures_SAC_helper_1a ; YES - print pressure | |
5548 call TFT_disabled_color ; NO - use disabled color as default | |
628 | 5549 ; btfsc ex,char_transmitter_lost ; - transmitter lost? |
5550 ; call TFT_attention_color ; YES - use attention color | |
604 | 5551 STRCAT_PRINT " ---" ; - print " ---" |
5552 return | |
5553 TFT_pressures_SAC_helper_1a: | |
5554 btfsc hi,int_warning_flag ; out of range (signaled by warning flag)? | |
5555 bra TFT_pressures_SAC_helper_1c ; YES - special treatment | |
5556 call TFT_color_code_tank_pres_sac ; NO - color-code the output | |
5557 bsf ignore_digit5 ; - no 0.1 bar (flag will be cleared by output_16) | |
5558 movf lo,W ; | |
5559 iorwf hi,W ; - pressure value = 0 ? | |
5560 bnz TFT_pressures_SAC_helper_1b ; NO - print value | |
5561 STRCPY_PRINT " 0" ; YES - print a zero manually | |
5562 return ; - done | |
5563 TFT_pressures_SAC_helper_1b: | |
5564 output_16 ; print hi:lo | |
5565 STRCAT_PRINT "" ; dump buffer to screen | |
5566 return ; done | |
5567 TFT_pressures_SAC_helper_1c: | |
5568 call TFT_color_code_tank_pres_sac ; color-code the output (clears all flags) | |
5569 STRCPY_PRINT ">400" ; print ">400" | |
5570 return ; done | |
5571 | |
5572 TFT_pressures_SAC_helper_2: | |
5573 btfss ex,char_transmitter_low_bat ; low battery flag set? | |
5574 bra TFT_pressures_SAC_helper_2a ; NO - wipe out down arrow (low bat indicator) | |
5575 call TFT_attention_color ; YES - use attention color | |
5576 STRCPY_PRINT "\xb8" ; - print down arrow as bat low indication | |
5577 return | |
5578 TFT_pressures_SAC_helper_2a: | |
5579 STRCPY_PRINT " " ; wipe out down arrow (low bat indicator) | |
5580 return | |
5581 | |
5582 | |
5583 global TFT_menu_tank_pres | |
5584 TFT_menu_tank_pres: ; imprinting function for main menu / tank setup | |
5585 call TFT_standard_color | |
5586 ; get ID | |
5587 lfsr FSR1,opt_transmitter_id_1 ; load base address of opt_transmitter_id | |
5588 movf gaslist_gas,W ; get current gas | |
5589 rlncf WREG,W ; multiply by 2 because IDs are 2 byte in size | |
5590 movff PLUSW1,lo ; copy opt_transmitter_id+0[gaslist_gas] to lo | |
5591 incf WREG,W ; increment index | |
5592 movff PLUSW1,hi ; copy opt_transmitter_id+1[gaslist_gas] to hi | |
5593 ; show pressure | |
5594 WIN_SMALL .90, .61 ; column, row (+/- 27 per row) | |
5595 call get_pres_by_transmitter_id ; get pressure into hi:lo | |
5596 tstfsz WREG ; do we have valid tank data (WREG=0) ? | |
5597 bra TFT_menu_tank_pres_1 ; NO - transmitter not found | |
5598 call TFT_color_code_tank_pres_sac ; set output color according to flags | |
5599 bsf ignore_digit5 ; no 0.1 bar (flag will be cleared by output_16) | |
5600 output_16 | |
5601 bra TFT_menu_tank_pres_2 | |
5602 TFT_menu_tank_pres_1: | |
5603 call TFT_disabled_color | |
5604 STRCAT " ---" ; output for no pressure data available | |
5605 TFT_menu_tank_pres_2: | |
5606 STRCAT_TEXT_PRINT tbar ; " bar" | |
5607 bra TFT_custview_exit3 ; and return... | |
5608 | |
5609 | |
5610 global TFT_surface_tank_pres | |
5611 TFT_surface_tank_pres: ; show pressure reading above surface pressure | |
5612 WIN_SMALL surf_decotype_column+.6,surf_decotype_row+.30+.47 | |
623 | 5613 movff int_IO_pressure_value+0,lo ; copy pressure from 1st reading to hi:lo |
5614 movff int_IO_pressure_value+1,hi | |
604 | 5615 btfss hi,int_not_avail_flag ; pressure reading 1 available? |
5616 bra TFT_surface_tank_pres_0 ; YES | |
623 | 5617 movff int_IO_pressure_value+2,lo ; NO - copy pressure from 2nd reading to hi:lo |
5618 movff int_IO_pressure_value+3,hi | |
604 | 5619 btfsc hi,int_not_avail_flag ; - pressure reading 2 available? |
5620 bra TFT_surface_tank_pres_1 ; NO - show not avail message | |
5621 TFT_surface_tank_pres_0: ; YES - show pressure | |
5622 call TFT_color_code_tank_pres_sac ; set output color according to flags | |
5623 bsf ignore_digit5 ; no 0.1 bar (flag will be cleared by output_16) | |
5624 output_16 | |
5625 STRCAT_PRINT "" | |
5626 bra TFT_surface_tank_pres_2 | |
5627 TFT_surface_tank_pres_1: | |
5628 call TFT_disabled_color | |
5629 STRCAT_PRINT " ---" ; output for no pressure data available | |
5630 TFT_surface_tank_pres_2: | |
5631 WIN_SMALL surf_decotype_column+.38,surf_decotype_row+.30+.47 | |
5632 call TFT_divemask_color | |
5633 STRCAT_PRINT "bar" ; can not use tbar because it has a leading space | |
5634 bra TFT_custview_exit3 ; and return... | |
5635 | |
5636 | |
5637 global TFT_surface_tankdata | |
5638 TFT_surface_tankdata: | |
5639 lfsr FSR1,rx_buffer ; load base address of RX buffer | |
5640 ; bra TFT_surface_tankdata_debug ; comment in for +++ debug version +++ | |
5641 WIN_SMALL surf_customtext_column,surf_customtext_row1 | |
5642 rcall TFT_surface_tankdata_print | |
5643 WIN_SMALL surf_customtext_column,surf_customtext_row2 | |
5644 rcall TFT_surface_tankdata_print | |
5645 WIN_SMALL surf_customtext_column,surf_customtext_row3 | |
5646 rcall TFT_surface_tankdata_print | |
5647 WIN_SMALL surf_customtext_column,surf_customtext_row4 | |
5648 rcall TFT_surface_tankdata_print | |
5649 WIN_SMALL surf_customtext_column,surf_customtext_row5 | |
5650 rcall TFT_surface_tankdata_print | |
5651 return | |
5652 | |
5653 TFT_surface_tankdata_print: ; max 12 char | |
623 | 5654 call TFT_standard_color ; set color |
604 | 5655 movff POSTINC1,hi ; ID high (+0) |
5656 movff POSTINC1,lo ; ID low (+1) | |
5657 tstfsz hi ; ID high = 0 ? | |
5658 bra TFT_surface_tankdata_print_1 ; NO - slot in use | |
5659 tstfsz lo ; ID low = 0? | |
5660 bra TFT_surface_tankdata_print_1 ; NO - slot in use | |
5661 STRCAT_PRINT "---- " ; YES - mark as unused and clear rest of line from previous remains | |
5662 movf POSTINC1,W ; - dummy read (+2) to advance index | |
5663 movf POSTINC1,W ; - dummy read (+3) to advance index | |
5664 movf POSTINC1,W ; - dummy read (+4) to advance index | |
5665 bra TFT_surface_tankdata_print_3 | |
5666 TFT_surface_tankdata_print_1: | |
5667 movf hi,W ; copy ID high to WREG | |
5668 output_hex ; 2 chars | |
5669 movf lo,W ; copy ID low to WREG | |
5670 output_hex ; 2 chars (4 in total) | |
5671 movff POSTINC1,hi ; pressure high (+2) | |
5672 movff POSTINC1,lo ; pressure low (+3) | |
5673 call TFT_color_code_tank_pres_sac ; needed to clear the status flags before output | |
5674 bsf ignore_digit5 ; no 0.1 bar (flag will be cleared by output_16) | |
5675 output_16 ; 4 chars (8 in total) | |
5676 PUTC " " ; 1 char (9 in total) | |
5677 movf POSTINC1,W ; status (+4) | |
5678 andlw .7 ; mask out battery voltage | |
5679 bnz TFT_surface_tankdata_2 ; branch if battery is not completely drained | |
623 | 5680 call TFT_warning_color ; output in red |
604 | 5681 STRCAT_PRINT "XXX" ; "XXX" for low |
5682 bra TFT_surface_tankdata_print_3 | |
5683 TFT_surface_tankdata_2: | |
5684 addlw .28 ; add offset of 2.8 Volt | |
5685 movff WREG,lo ; | |
5686 output_99 ; 2 chars (11 in total) | |
5687 PUTC " " ; dummy char 1 char (12 in total) | |
5688 movff buffer+.10,buffer+.11 ; move decimal digit of battery voltage one position to the right | |
5689 movlw "." ; decimal point | |
5690 movff WREG,buffer+.10 ; place it before decimal digit | |
5691 STRCAT_PRINT "" ; print buffer to screen | |
5692 TFT_surface_tankdata_print_3: | |
5693 movf POSTINC1,W ; dummy read (+5) to advance index | |
5694 return | |
5695 | |
5696 | |
623 | 5697 ; TFT_surface_tankdata_debug: ; surface custom view debug output |
5698 ; call TFT_standard_color | |
5699 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*0 | |
5700 ; rcall TFT_surface_tankdata_debug_print | |
5701 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*1 | |
5702 ; rcall TFT_surface_tankdata_debug_print | |
5703 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*2 | |
5704 ; rcall TFT_surface_tankdata_debug_print | |
5705 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*3 | |
5706 ; rcall TFT_surface_tankdata_debug_print | |
5707 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*4 | |
5708 ; rcall TFT_surface_tankdata_debug_print | |
5709 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*5 | |
5710 ; rcall TFT_surface_tankdata_debug_print | |
5711 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*6 | |
5712 ; rcall TFT_surface_tankdata_debug_print | |
5713 ; WIN_TINY surf_customtext_column,surf_customtext_row1+.14*7 | |
5714 ; rcall TFT_surface_tankdata_debug_print | |
5715 ; return | |
5716 | |
5717 ; TFT_surface_tankdata_debug_print: | |
5718 ; movff POSTINC1,hi ; ID high (+0) | |
5719 ; movff POSTINC1,lo ; ID low (+1) | |
5720 ; output_16 | |
5721 ; PUTC "," | |
5722 ; movff POSTINC1,hi ; pressure high (+2) | |
5723 ; movff POSTINC1,lo ; pressure low (+3) | |
5724 ; call TFT_color_code_tank_pres_sac; needed to clear the status flags before output | |
5725 ; output_16 | |
5726 ; PUTC "," | |
5727 ; movff POSTINC1,lo ; status (+4) | |
5728 ; output_8 | |
5729 ; PUTC "," | |
5730 ; movff POSTINC1,lo ; date (+5) | |
5731 ; output_8 | |
5732 ; STRCAT_PRINT "" | |
5733 ; return | |
5734 | |
5735 ENDIF ; _rx_functions | |
604 | 5736 |
631 | 5737 ;============================================================================= |
5738 | |
5739 global convert_pres_to_depth | |
5740 convert_pres_to_depth: ; converts pressure in [mbar] to depth in [cm] | |
5741 btfsc sensor_override_active ; in pressure sensor override (simulator) mode? | |
5742 return ; YES - convert with factor 1.0, i.e. make [mbar] = [cm] | |
5743 | |
5744 movff opt_salinity,WREG ; get salinity setting (0 - 4 %, see option_table.asm) | |
5745 addlw d'100' ; add density of fresh water (1.00 kg/l) | |
5746 movwf up ; store salinity factor in up | |
5747 | |
5748 movlw .101+salinity_max ; load (upper limit + 1) | |
5749 cpfslt up ; current setting > upper limit? | |
5750 bra convert_fix_salinity ; YES - fix salinity setting | |
5751 | |
5752 movlw .99+salinity_min ; load (lower limit - 1) | |
5753 cpfsgt up ; current setting > lower limit? | |
5754 bra convert_fix_salinity ; YES - fix salinity setting | |
5755 | |
5756 convert_pres_to_depth_1: | |
5757 MOVII mpr, xA ; get pressure in [mbar] | |
5758 MOVLI .102,xB ; conversion factor x 100 for fresh water (1.02 cm per each 1 mbar) | |
604 | 5759 call mult16x16 ; xC:4 = xA:2 * xB:2 |
631 | 5760 movff up,xB+0 ; get salinity in [%] |
5761 clrf xB+1 ; ... | |
604 | 5762 call div32x16 ; xC:4 = xC:4 / xB:2 with xA as remainder |
631 | 5763 MOVII xC,mpr ; copy back result as depth in [cm] |
0 | 5764 return |
5765 | |
631 | 5766 convert_fix_salinity: |
5767 movlw .100 ; reset to 100%, i.e. set salinity to 0% | |
5768 movwf up ; fix value in up | |
5769 bra convert_pres_to_depth_1 ; continue | |
5770 | |
560 | 5771 ;============================================================================= |
582 | 5772 |
631 | 5773 global convert_cm_to_feet |
5774 convert_cm_to_feet: ; converts depth in [cm] to depth in [feet] | |
5775 MOVII mpr, xA ; depth in [cm] | |
5776 btfsc sensor_override_active ; in pressure sensor override (simulator) mode? | |
5777 bra convert_meter_to_feet_1 ; YES - convert with 334feet/100m | |
623 | 5778 MOVLI .328,xB ; NO - convert with 328feet/100m |
5779 bra convert_common_to_feet ; - continue with common part | |
5780 | |
5781 | |
5782 global convert_meter_to_feet | |
631 | 5783 convert_meter_to_feet: ; converts depth in [m] to depth in [feet] |
5784 movf lo,W ; depth in [m] | |
5785 mullw .100 ; factor to convert [m] to [cm] | |
5786 MOVII PRODL,xA ; copy depth in [cm] to xA | |
5787 convert_meter_to_feet_1: | |
5788 MOVLI .334, xB ; convert with 334feet/100m to have 10ft, 20ft, 30ft, ... for stop depths | |
5789 ;bra convert_common_to_feet ; continue with common part | |
5790 | |
623 | 5791 |
5792 convert_common_to_feet: | |
631 | 5793 call mult16x16 ; xC = xA * xB = depth in [cm] * 334 feet/100 m = depth in 0.0001 feet |
5794 MOVLI .10000,xB ; divide by 10000 to turn into full feet | |
623 | 5795 call div32x16 ; xC = xC / xB with xA as remainder |
5796 MOVII xC,mpr ; store result | |
5797 | |
0 | 5798 return |
5799 | |
560 | 5800 ;============================================================================= |
5801 | |
623 | 5802 global convert_celsius_to_fahrenheit ; convert value in hi:lo from Celsius to Fahrenheit |
604 | 5803 convert_celsius_to_fahrenheit: ; convert value in lo:hi from Celsius to Fahrenheit |
623 | 5804 MOVII mpr,xA ; temperature in 1/10 of °C |
5805 ADDLI .1000,xA ; add offset of 1000 to get out of any negative numbers | |
5806 ; adjust scaling: 1°C = 1.8°F: | |
5807 MOVLI .18,xB ; multiply with 18: | |
5808 call mult16x16 ; ... | |
5809 MOVLI .10,xB ; divide by 10 | |
5810 call div32x16 ; ... | |
5811 SUBLI .1480,xC ; remove offset: subtract above offset of 1000 * 1.8 = 1800 now and add 320 => subtract 1480 | |
5812 MOVII xC,mpr ; store result in hi:lo | |
582 | 5813 return |
560 | 5814 |
480
ad8acade5567
NEW: PSCR mode (Passive semi-closed rebreather)
heinrichsweikamp
parents:
477
diff
changeset
|
5815 ;============================================================================= |
560 | 5816 |
0 | 5817 END |