diff src/shared_definitions.h @ 604:ca4556fb60b9

bump to 2.99beta, work on 3.00 stable
author heinrichsweikamp
date Thu, 22 Nov 2018 19:47:26 +0100
parents b455b31ce022
children c40025d8e750
line wrap: on
line diff
--- a/src/shared_definitions.h	Thu Oct 11 21:06:29 2018 +0200
+++ b/src/shared_definitions.h	Thu Nov 22 19:47:26 2018 +0100
@@ -1,6 +1,6 @@
 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 ;
-;    shared_definitions.h							REFACTORED VERSION	V2.97
+;    shared_definitions.h							REFACTORED VERSION V2.99e
 ;
 ;    Declare variables used both in C and ASM code
 ;
@@ -17,7 +17,7 @@
 ;    You should have received a copy of the GNU General Public License
 ;    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ;
-;    Copyright (c) 2010, JD Gascuel.
+;    Copyright (c) 2010, JD Gascuel
 ;=============================================================================
 ; RATIONAL
 ;
@@ -31,7 +31,7 @@
 ; (with suitable macros) to make sure they have the same size in both language.
 ;
 ; HISTORY
-;  2011-01-20: [jDG] Creation.
+;  2011-01-20: [jDG] Creation
 ;
 ; NOTE
 ;
@@ -46,30 +46,30 @@
 
 #ifdef __18CXX
 	//------------------------------------------------------------------------
-	// C-style declarations:
-#   ifndef TEST_MAIN
-#       define VAR_UCHAR(n)      extern unsigned  char n
-#       define TAB_UCHAR(n,size) extern unsigned  char n[size]
-#       define VAR_UINT(n)       extern unsigned short n
-#       define TAB_UINT(n,size)  extern unsigned short n[size]
-#   else
-#       define VAR_UCHAR(n)      unsigned  char n
-#       define TAB_UCHAR(n,size) unsigned  char n[size]
-#       define VAR_UINT(n)       unsigned short n
-#       define TAB_UINT(n,size)  unsigned short n[size]
-#   endif
+	// C-Style Declarations:
+#	ifndef TEST_MAIN
+#		define VAR_UCHAR(n)			extern unsigned char n
+#		define TAB_UCHAR(n,size)	extern unsigned char n[size]
+#		define VAR_UINT(n)			extern unsigned short n
+#		define TAB_UINT(n,size)		extern unsigned short n[size]
+#	else
+#		define VAR_UCHAR(n)			unsigned char n
+#		define TAB_UCHAR(n,size)	unsigned char n[size]
+#		define VAR_UINT(n)			unsigned short n
+#		define TAB_UINT(n,size)		unsigned short n[size]
+#	endif
 #else
 	;-------------------------------------------------------------------------
-	; ASM-style declarations:
-#define VAR_UCHAR(n)       n    res     1
-#define TAB_UCHAR(n,size)  n    res     size
-#define VAR_UINT(n)        n    res     2
-#define TAB_UINT(n,size)   n    res     2*size
+	; ASM-Style Declarations:
+#define VAR_UCHAR(n)		n	res 1
+#define TAB_UCHAR(n,size)	n	res size
+#define VAR_UINT(n)			n	res 2
+#define TAB_UINT(n,size)	n	res 2*size
 #endif
 
 
 #ifdef xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-    Define model dimensions.
+    Define Model Dimensions
     NUM_COMP  is the number of compartiments in the Bühlmann ZH-L16 model, ie 16.
     NUM_STOPS is the maximum number of stops computed by decoplanning. 
               Note that the deepest stop is roughly limited to 3m * NUM_STOPS
@@ -78,20 +78,22 @@
                    and not reported in TTS summing.
     NUM_GAS   is the number of (potentially) active gas considered during
               ascent simulation.
+    NUM_SP    is the number of setpoints
 #endif
-#define NUM_COMP    0x10
-#define NUM_STOPS   0x20
-#define NUM_GAS     5
+#define NUM_COMP	0x10
+#define NUM_STOPS	0x20
+#define NUM_GAS		5
+#define NUM_SP		5
 
 
 #ifdef __18CXX
 	//---- BANK 3 DATA -------------------------------------------------------
-	// Gather all data C-code --> ASM-code
-	// Memory usage: 41 Bytes left
+	// Gather all Data C-Code --> ASM-Code
+	// Memory usage: 202 Byte used, 54 Byte free
 #   pragma udata overlay bank3=0x300
 #else
-	; In ASM, put the same bank, in overlay mode, at the same address
-bank3   udata_ovr  0x300
+	; in ASM, put the same bank, in overlay mode, at the same address
+bank3	udata_ovr	0x300
 #endif
 
 VAR_UINT  (int_O_desaturation_time);				// time until tissues desaturated to 5% remains, in minutes
@@ -104,13 +106,17 @@
 VAR_UINT  (int_O_normal_CNS_fraction);				// CNS% at end of dive in normal dive plan
 VAR_UINT  (int_O_alternate_CNS_fraction);			// CNS% at end of dive in alternative plan
 
-VAR_UINT  (int_O_gradient_factor);					// current gradient factor in %
+VAR_UINT  (int_O_gradient_factor);					// current gradient factor in %, 100% = on M-line of straight Buhlmann
+
+VAR_UCHAR (char_O_lead_number);						// number of the leading tissue
 
 VAR_UCHAR (char_O_nullzeit);						// remaining NDL time in minutes
 VAR_UCHAR (char_O_alternate_nullzeit);				// remaining NDL time for the alternative dive plan
 
 VAR_UCHAR (char_O_main_status);						// setup of the deco engine regarding the real tissue   computations
 VAR_UCHAR (char_O_deco_status);						// setup of the deco engine regarding the decompression computations
+VAR_UCHAR (char_O_deco_warnings);					// vector of warnings generated by the deco engine
+VAR_UCHAR (char_O_deco_info);						// vector of infos    generated by the deco engine
 
 VAR_UCHAR (char_O_EAD);								// equivalent air      depth (EAD) of breathed gas
 VAR_UCHAR (char_O_END);								// equivalent narcosis depth (END) of breathed gas
@@ -118,43 +124,46 @@
 VAR_UCHAR (char_O_first_deco_depth);				// depth of first stop (deco or gas change)
 VAR_UCHAR (char_O_first_deco_time) ;				// duration of first stop
 
-TAB_UCHAR (char_O_deco_depth, NUM_STOPS);			// stops table: depth, ...
-TAB_UCHAR (char_O_deco_time,  NUM_STOPS);			// ... duration, and
-TAB_UCHAR (char_O_deco_gas,   NUM_STOPS);			// ... gas breathed
+TAB_UCHAR (char_O_deco_depth, NUM_STOPS);			// stops table: depth, ...                       | ATTENTION: do not re-arrange these
+TAB_UCHAR (char_O_deco_time,  NUM_STOPS);			// ... duration, and                             |            three arrays relative
+TAB_UCHAR (char_O_deco_gas,   NUM_STOPS);			// ... gas breathed                              |            to each other!
 
 TAB_UCHAR (char_O_deco_time_for_log, NUM_STOPS);	// variant of the stops table for logging purpose
 
 TAB_UCHAR (char_O_tissue_N2_saturation, NUM_COMP);	// nitrogen tissue pressures for display purpose
 TAB_UCHAR (char_O_tissue_He_saturation, NUM_COMP);	// helium   tissue pressures for display purpose
 
-VAR_UCHAR (char_O_deco_warnings);					// vector of warnings generated by the deco engine
+TAB_UINT  (int_O_ascent_volumes,   NUM_GAS);		// gas volumes needed for ascent in liters
+TAB_UINT  (int_O_ascent_pres_need, NUM_GAS);		// tank pressures needed for ascent in bar
 
-TAB_UINT  (int_O_gas_volumes,    NUM_GAS);			// gas volumes    needed in liters
-TAB_UINT  (int_O_tank_pres_need, NUM_GAS);			// tank pressures needed in bar
-VAR_UINT  (int_O_ceiling);							// ultimate ascent bound in mbar relative pressure
+VAR_UINT  (int_O_ceiling);							// ascent boundary in mbar relative pressure, calculated at GF-high
 
 VAR_UINT  (int_O_O2_ppO2);							// ppO2 of pure O2 at current depth
 VAR_UINT  (int_O_pure_ppO2);						// ppO2 of the current gas or dil if breathed pure
 VAR_UINT  (int_O_pSCR_ppO2);						// ppO2 calculated in pSCR loop
 VAR_UINT  (int_O_breathed_ppO2);					// ppO2 actually breathed (= char_O_pure_ppO2 if in OC)
 
+TAB_UINT  (int_O_pressure_need, 2);					// pressure reading, need by deco calculations, in 0.1   bar
+VAR_UINT  (int_O_sac_rate);							// SAC rate in 0.1 liter/minute
+
 
 #ifdef __18CXX
 	//---- BANK 4 DATA -------------------------------------------------------
-	// Gather all data ASM-code --> C-code
-	// Memory usage: 183 bytes left
+	// Gather all Data ASM-Code --> C-Code
+	// Memory usage: 86 Byte used, 170 byte free
 #   pragma udata overlay bank4=0x400
 #else
-	; In ASM, put the same bank, in overlay mode, at the same address
-bank4   udata_ovr  0x400
+	; in ASM, put the same bank, in overlay mode, at the same address
+bank4	udata_ovr	0x400
 #endif
 
 VAR_UINT  (int_I_pres_respiration);				// absolute pressure breathed
 VAR_UINT  (int_I_pres_surface);					// absolute pressure at surface
 
 VAR_UCHAR (char_I_current_gas);					// number of gas currently breathed (1..5 for configured gases, 6 for the manual gas)
-VAR_UCHAR (char_I_He_ratio);					// helium   ratio of the currently breathed gas
-VAR_UCHAR (char_I_O2_ratio);					// oxygen   ratio of the currently breathed gas
+VAR_UCHAR (char_I_current_gas_type);			// type of current gas: (0=Disabled), 1=First, 2=Travel/Normal, 3=Deco/-
+VAR_UCHAR (char_I_He_ratio);					// helium ratio of the currently breathed gas
+VAR_UCHAR (char_I_O2_ratio);					// oxygen ratio of the currently breathed gas
 
 VAR_UCHAR (char_I_saturation_multiplier);		// safety factor, 100 = no conservatism, 150 = 50% faster saturation
 VAR_UCHAR (char_I_desaturation_multiplier);		// safety factor, 100 = no conservatism,  66 = 50% slower desaturation 
@@ -172,20 +181,20 @@
 
 VAR_UCHAR (char_I_dive_interval);				// duration of surface break before next dive in minutes, used in simulation
 VAR_UCHAR (char_I_sim_advance_time);			// 'fast forward' of dive time, used in simulation (+5 min function)
+VAR_UCHAR (char_I_extra_time);					// extra bottom time for fTTs and delayed ascent calculation in minutes
 
 VAR_UCHAR (char_I_const_ppO2);					// ppO2 reported from sensors or by setpoint
 
-TAB_UCHAR (char_I_deco_gas_change,NUM_GAS);		// change depths of the OC gases
-TAB_UCHAR (char_I_dil_change,     NUM_GAS);		// change depths of the diluent gases. Attention: must be placed after char_I_deco_gas_change!	Remark: not used by C code, only by ASM code
-
-TAB_UCHAR (char_I_setpoint_change,NUM_GAS);		// change depth for the setpoints in meter
-TAB_UCHAR (char_I_setpoint_cbar,  NUM_GAS);		// setpoints in cbar
+TAB_UCHAR (char_I_setpoint_cbar,  NUM_SP);		// setpoints in cbar                        | ATTENTION: do not change the position of these
+TAB_UCHAR (char_I_setpoint_change,NUM_SP);		// change depth for the setpoints in meter  |            two arrays relative to each other!
 
-TAB_UCHAR (char_I_deco_O2_ratio,  NUM_GAS);		// oxygen ratios of the configured gases, used for deco calculations
-TAB_UCHAR (char_I_deco_He_ratio,  NUM_GAS);		// helium ratios of the configured gases, used for deco calculations
+TAB_UCHAR (char_I_deco_O2_ratio,  NUM_GAS);		// oxygen ratios of the configured gases, used for deco calc. | ATTENTION: do not change the
+TAB_UCHAR (char_I_deco_He_ratio,  NUM_GAS);		// helium ratios of the configured gases, used for deco calc. |            position of these
+TAB_UCHAR (char_I_deco_gas_type,  NUM_GAS);		// type          of the configured gases, used for deco calc. |            arrays relative to
+TAB_UCHAR (char_I_deco_gas_change,NUM_GAS);		// change depths of the configured gases, used for deco calc. |            each other!
 
-TAB_UCHAR (char_I_tank_size,      NUM_GAS);		// tank sizes, used for pressure needs calculation
-TAB_UCHAR (char_I_tank_pres_fill, NUM_GAS);		// tank fill pressures, used for generating warnings
+TAB_UCHAR (char_I_tank_size,      NUM_GAS * 2);	// tank sizes, used for pressure needs and SAC calculations
+TAB_UCHAR (char_I_tank_pres_fill, NUM_GAS * 2);	// tank fill pressures (in multiples of 10 bar), used to generate warnings
 
 VAR_UCHAR (char_I_cc_max_frac_o2);				// limiter for maximum O2% in loop
 VAR_UCHAR (char_I_PSCR_drop);					// pSCR parameter drop [%]
@@ -196,7 +205,7 @@
 VAR_UCHAR (char_I_bottom_usage);				// gas consumption during bottom part and initial ascent   in liters/minute
 VAR_UCHAR (char_I_deco_usage);					// gas consumption during deco stops and following ascents in liters/minute
 
-VAR_UCHAR (char_I_extra_time);					// extra bottom time for fTTs and delayed ascent calculation in minutes
+VAR_UCHAR (char_I_gas6_depth);					// change depth (MOD) of the manually configured gas in meters
 
 VAR_UCHAR (char_I_ppO2_max);					// warning threshold for maximum ppO2 during working phase of the dive
 VAR_UCHAR (char_I_ppO2_max_deco);				// warning threshold for maximum ppO2 during deco phase of the dive
@@ -205,3 +214,28 @@
 
 VAR_UCHAR (char_I_ascent_speed);				// ascent speed in meters/minute
 VAR_UCHAR (char_I_gas_change_time);				// extra time spent during a stop for doing a gas change, in minutes
+
+VAR_UCHAR (char_I_SAC_mode);					// SAC calculation mode
+VAR_UCHAR (char_I_max_pres_diff);				// maximum pressure difference for independent double mode
+
+TAB_UINT  (int_IO_pressure_value,2);			// pressure reading, measured pressure,         in 0.1   bar       | ATTENTION: do not change the position
+TAB_UINT  (int_I_pressure_drop, 2);				// pressure reading, average pressure drop,     in 1/160 bar/sec   | of these arrays relative to each other!
+
+TAB_UCHAR (char_I_pressure_gas, 2);				// pressure reading, associated gas (1-5) / diluent (6-10), 0 if off
+TAB_UCHAR (char_I_pressure_age, 2);				// pressure reading, age of data
+TAB_UCHAR (char_I_pressure_stat,2);				// pressure reading, transmitter status data
+
+VAR_UCHAR (char_I_backtrack_time);				// index (in minutes) of backtrack entries in char_I_backtrack_depth
+
+
+#ifdef __18CXX
+	//---- BANK 11 DATA -------------------------------------------------------
+	// Backtracking Data ASM-Code --> C-Code
+	// Memory usage: 256 Byte used, 0 byte free
+#   pragma udata overlay bank11=0xB00
+#else
+	; in ASM, put the same bank, in overlay mode, at the same address
+bank11	udata_ovr	0xB00
+#endif
+
+TAB_UCHAR (char_I_backtrack_depth, 0x100);		// recorded depths for backtracking in cave mode