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