updated for Nortek
authorAndreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 08 Mar 2021 07:58:53 -0500
changeset 57 5a59411306ba
parent 56 82384f531dba
child 58 78607e2e8add
updated for Nortek
RDI_PD0_IO.pl
listHdr
--- a/RDI_PD0_IO.pl
+++ b/RDI_PD0_IO.pl
@@ -1,9 +1,9 @@
 #======================================================================
 #                    R D I _ P D 0 _ I O . P L 
 #                    doc: Sat Jan 18 14:54:43 2003
-#                    dlm: Thu Mar  4 11:23:23 2021
+#                    dlm: Sat Mar  6 14:13:23 2021
 #                    (c) 2003 A.M. Thurnherr
-#					 uE-Info: 1157 0 NIL 0 0 72 2 2 4 NIL ofnI
+#					 uE-Info: 643 43 NIL 0 0 72 2 2 4 NIL ofnI
 #======================================================================
     
 # Read RDI PD0 binary data files (*.[0-9][0-9][0-9])
@@ -231,8 +231,8 @@
 #	BIN_MAPPING_ALLOWED 			bool		undefined,1
 #	HEADING_ALIGNMENT				scalar		-179.99..180 [deg]
 #	HEADING_BIAS					scalar		-179.99..180 [deg]
-#	CALCULATE_SPEED_OF_SOUND		bool		undefined,1
-#	USE_PRESSURE_SENSOR 			bool		undefined,1
+#	SSPEED_CALCULATED		bool		undefined,1
+#	SSPEED_USING_PRESS 			bool		undefined,1
 #	USE_COMPASS 					bool		undefined,1
 #	USE_PITCH_SENSOR				bool		undefined,1
 #	USE_ROLL_SENSOR 				bool		undefined,1
@@ -484,7 +484,7 @@
 	$hid == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header (hid2)",$hid,0));
 	$dta->{DATA_SOURCE_ID} = $did;
 	if ($did == 0x7f) {
-		$dta->{PRODUCER} = 'TRDI ADCP';
+		$dta->{PRODUCER} = 'TRDI or Nortek ADCP';
 	} elsif (($did&0xF0) == 0xA0) {
 		$dta->{PRODUCER} = 'IMP+LADCP (Thurnherr software)';
 	} elsif (($did&0xF0) == 0xE0) {
@@ -511,7 +511,7 @@
 	} elsif ($dta->{FIXED_LEADER_BYTES} == 53) {		# old firmware: no serial numbers
 		$dta->{INSTRUMENT_TYPE} = 'Workhorse';  
 	} elsif ($dta->{FIXED_LEADER_BYTES} == 59) {		# new firmware: with serial numbers
-		$dta->{INSTRUMENT_TYPE} = 'Workhorse';
+		$dta->{INSTRUMENT_TYPE} = 'Workhorse or Signature';
 	} elsif ($dta->{FIXED_LEADER_BYTES} == 58) {		# DVL
 		$dta->{INSTRUMENT_TYPE} = 'Explorer';
 	} elsif ($dta->{FIXED_LEADER_BYTES} == 60) {		# OS75
@@ -608,21 +608,21 @@
 		($dta->{EARTH_COORDINATES} || $dta->{SHIP_COORDINATES}) ?
 			$dta->{HEADING_BIAS} / 100 : undef;
 
-	$dta->{CALCULATE_SPEED_OF_SOUND}  = 1 if ($B6 & 0x40); 
-	$dta->{USE_PRESSURE_SENSOR} 	  = 1 if ($B6 & 0x20); 
-	$dta->{USE_COMPASS} 			  = 1 if ($B6 & 0x10); 
-	$dta->{USE_PITCH_SENSOR}		  = 1 if ($B6 & 0x08); 
-	$dta->{USE_ROLL_SENSOR} 		  = 1 if ($B6 & 0x04); 
-	$dta->{USE_CONDUCTIVITY_SENSOR}   = 1 if ($B6 & 0x02); 
-	$dta->{USE_TEMPERATURE_SENSOR}	  = 1 if ($B6 & 0x01); 
+	$dta->{SSPEED_FROM_EC_SETTING}		= 1 unless ($B6 & 0x40); 	# these are the aspirations
+	$dta->{DEPTH_FROM_ED_SETTING}	   	= 1 unless ($B6 & 0x20); 
+	$dta->{HEADING_FROM_EH_SETTING}		= 1 unless ($B6 & 0x10); 
+	$dta->{PITCH_FROM_EP_SETTING}	  	= 1 unless ($B6 & 0x08); 
+	$dta->{ROLL_FROM_ER_SETTING} 		= 1 unless ($B6 & 0x04); 
+	$dta->{SALIN_FROM_ES_SETTING}		= 1 unless ($B6 & 0x02); 
+	$dta->{TEMP_FROM_ET_SETTING}  		= 1 unless ($B6 & 0x01); 
 
-	$dta->{SPEED_OF_SOUND_CALCULATED}	  = 1 if ($B7 & 0x40); 
-	$dta->{PRESSURE_SENSOR_AVAILABLE}	  = 1 if ($B7 & 0x20); 
-	$dta->{COMPASS_AVAILABLE}			  = 1 if ($B7 & 0x10); 
-	$dta->{PITCH_SENSOR_AVAILABLE}		  = 1 if ($B7 & 0x08); 
-	$dta->{ROLL_SENSOR_AVAILABLE}		  = 1 if ($B7 & 0x04); 
-	$dta->{CONDUCTIVITY_SENSOR_AVAILABLE} = 1 if ($B7 & 0x02); 
-	$dta->{TEMPERATURE_SENSOR_AVAILABLE}  = 1 if ($B7 & 0x01); 
+	$dta->{SSPEED_CALCULATED}			= 1 if ($B7 & 0x40); 		# and this is how it is in practice
+	$dta->{PRESSURE_SENSOR}				= 1 if ($B7 & 0x20); 
+	$dta->{COMPASS}			  			= 1 if ($B7 & 0x10); 
+	$dta->{PITCH_SENSOR}				= 1 if ($B7 & 0x08); 
+	$dta->{ROLL_SENSOR}		  			= 1 if ($B7 & 0x04); 
+	$dta->{CONDUCTIVITY_SENSOR} 		= 1 if ($B7 & 0x02); 
+	$dta->{TEMPERATURE_SENSOR}  		= 1 if ($B7 & 0x01); 
 
 	$dta->{DISTANCE_TO_BIN1_CENTER}  /= 100;
 	$dta->{TRANSMITTED_PULSE_LENGTH} /= 100;
@@ -631,16 +631,25 @@
 		if ($dta->{FALSE_TARGET_THRESHOLD} == 255);
 	$dta->{TRANSMIT_LAG_DISTANCE} /= 100;
 
-	if ($dta->{INSTRUMENT_TYPE} eq 'Workhorse') {
+	if ($dta->{INSTRUMENT_TYPE} eq 'Workhorse or Signature') {
 		sysread(WBRF,$buf,11) == 11 || die("$WBRcfn: $!");
 		($W1,$W2,$W3,$W4,$W5,$dta->{TRANSMIT_POWER}) = 
 			unpack('vvvvvC',$buf);
 
-		$dta->{CPU_SERIAL_NUMBER} = sprintf("%04X%04X%04X%04X",$W1,$W2,$W3,$W4);
+		if ($W1 == 0x6953 && $W2 == 0x6E67 &&
+			$W3 == 0x7461 && $W4 == 0x0075) {
+				$dta->{INSTRUMENT_TYPE} = 'Signature';
+				$dta->{TRANSMIT_POWER_MAX} = ($dta->{TRANSMIT_POWER} == 122);
+				$dta->{PRODUCER} = 'Nortek ADCP' if ($dta->{PRODUCER} eq 'TRDI or Nortek ADCP');
+		} else {
+			$dta->{INSTRUMENT_TYPE} = 'Workhorse';
+			$dta->{CPU_SERIAL_NUMBER} = sprintf("%04X%04X%04X%04X",$W1,$W2,$W3,$W4);
+			$dta->{TRANSMIT_POWER_MAX} = ($dta->{TRANSMIT_POWER} == 255);
+			$dta->{PRODUCER} = 'TRDI ADCP' if ($dta->{PRODUCER} eq 'TRDI or Nortek ADCP');
+		}
     
 		$dta->{NARROW_BANDWIDTH} = ($W5 == 1);
 		$dta->{WIDE_BANDWIDTH}	 = ($W5 == 0);
-		$dta->{TRANSMIT_POWER_HIGH} = ($dta->{TRANSMIT_POWER} == 255);
 
 		if ($dta->{FIXED_LEADER_BYTES} == 59) { 				# new style with serial number
 			sysread(WBRF,$buf,6) == 6 || die("$WBRcfn: $!");
--- a/listHdr
+++ b/listHdr
@@ -2,9 +2,9 @@
 #======================================================================
 #                    L I S T H D R 
 #                    doc: Sat Jan 18 18:41:49 2003
-#                    dlm: Thu Mar  4 09:42:59 2021
+#                    dlm: Sat Mar  6 14:19:53 2021
 #                    (c) 2003 A.M. Thurnherr
-#                    uE-Info: 134 34 NIL 0 0 72 10 2 4 NIL ofnI
+#                    uE-Info: 208 75 NIL 0 0 72 10 2 4 NIL ofnI
 #======================================================================
 
 # Print useful info from the RDI BB header
@@ -97,7 +97,8 @@
 		printf("\tINSTRUMENT_TYPE\t\t\t= %s\n",$hdr{INSTRUMENT_TYPE});
     }
 	printf("\tCPU_SERIAL_NUMBER\t\t= %s\n",$hdr{CPU_SERIAL_NUMBER})
-		if ($opt_l && ($hdr{INSTRUMENT_TYPE} ne 'Explorer'));
+		if ($opt_l && ($hdr{INSTRUMENT_TYPE} ne 'Explorer')
+				   && ($hdr{INSTRUMENT_TYPE} ne 'Signature'));
 	printf("\tFIRMWARE\t\t\t= %d.%d\n",$hdr{CPU_FW_VER},$hdr{CPU_FW_REV});
 	printf("\tBEAM_FREQUENCY\t\t\t= %.1f kHz\n",$hdr{BEAM_FREQUENCY});
 	printf("\tBEAM_ANGLE\t\t\t= %d deg\n",$hdr{BEAM_ANGLE}) if $opt_l;
@@ -107,21 +108,22 @@
 	printf("\tN_DEMODS\t\t\t= %d\n",$hdr{N_DEMODS}) if $opt_l && defined($hdr{N_DEMODS});
 	printf("\tSPEED_OF_SOUND\t\t\t= %d m/s [%s]\n",
 				$hdr{SPEED_OF_SOUND},
-				$dta->{SPEED_OF_SOUND_CALCULATED} ? 'from sensors' : 'from settings');
-	printf("\tAMBIGUITY_VELOCITY\t\t= %g m/s\n",
-				ambiguity_velocity($hdr{BEAM_FREQUENCY},$hdr{BEAM_ANGLE},$hdr{SPEED_OF_SOUND},$hdr{TRANSMIT_LAG_DISTANCE}));
+				$hdr{SSPEED_CALCULATED} ? 'using measurements' : 'from settings');
+	printf("\tAMBIGUITY_VELOCITY\t\t= %.1f m/s\n",
+				ambiguity_velocity($hdr{BEAM_FREQUENCY},$hdr{BEAM_ANGLE},$hdr{SPEED_OF_SOUND},$hdr{TRANSMIT_LAG_DISTANCE}))
+					unless ($hdr{INSTRUMENT_TYPE} eq 'Signature');
 
-	printf("\tSensors\t\t\t\t: ");
-	printf("PRESSURE ") 						if ($hdr{PRESSURE_SENSOR_AVAILABLE});
-	printf("CONDUCTIVITY ") 					if ($hdr{CONDUCTIVITY_SENSOR_AVAILABLE});
-	printf("TEMPERATURE ") 						if ($hdr{TEMPERATURE_SENSOR_AVAILABLE});
-	printf("COMPASS ") 							if ($hdr{COMPASS_AVAILABLE});
-	printf("PITCH ") 							if ($hdr{PITCH_SENSOR_AVAILABLE});
-	printf("ROLL ") 							if ($hdr{ROLL_SENSOR_AVAILABLE});
+	printf("\tEnvironmental Sensors\t\t: ");
+	printf("PRESSURE ") 						if ($hdr{PRESSURE_SENSOR});
+	printf("CONDUCTIVITY ") 					if ($hdr{CONDUCTIVITY_SENSOR});
+	printf("TEMPERATURE ") 						if ($hdr{TEMPERATURE_SENSOR});
+	printf("COMPASS ") 							if ($hdr{COMPASS});
+	printf("PITCH ") 							if ($hdr{PITCH_SENSOR});
+	printf("ROLL ") 							if ($hdr{ROLL_SENSOR});
 	print("\n");
 
 	if ($opt_l) {
-		printf("\tFlags\t\t\t\t: ");
+		printf("\tHardware Flags\t\t\t: ");
 		printf("XDUCER_HEAD_ATTACHED ") 		if ($hdr{XDUCER_HEAD_ATTACHED});
 		printf("CONVEX_BEAM_PATTERN ")			if ($hdr{CONVEX_BEAM_PATTERN});
 		printf("CONCAVE_BEAM_PATTERN ") 		if ($hdr{CONCAVE_BEAM_PATTERN});
@@ -131,18 +133,18 @@
 	if ($opt_l) {
 		print("    File Format:\n");
 #		printf("\tNUMBER_OF_DATA_TYPES\t\t= %d\n",$hdr{NUMBER_OF_DATA_TYPES});
-		printf("\tDATA_TYPES\t\t\t= @{$hdr{DATA_TYPES}}\n");
-		printf("\tFIXED_LEADER_BYTES\t\t= %3d bytes\n",$hdr{FIXED_LEADER_BYTES});
-		printf("\tENSEMBLE_BYTES\t\t\t= %3d bytes\n",$hdr{ENSEMBLE_BYTES});
-		printf("\tHEADER_BYTES\t\t\t= %3d bytes\n",$hdr{HEADER_BYTES});
-		printf("\tVARIABLE_LEADER_BYTES\t\t= %3d bytes\n",$hdr{VARIABLE_LEADER_BYTES});
-		printf("\tVELOCITY_DATA_BYTES\t\t= %3d bytes\n",$hdr{VELOCITY_DATA_BYTES})
+		printf("\tDATA_TYPES\t\t\t: @{$hdr{DATA_TYPES}}\n");
+		printf("\tFIXED_LEADER_BYTES\t\t= %4d bytes\n",$hdr{FIXED_LEADER_BYTES});
+		printf("\tENSEMBLE_BYTES\t\t\t= %4d bytes\n",$hdr{ENSEMBLE_BYTES});
+		printf("\tHEADER_BYTES\t\t\t= %4d bytes\n",$hdr{HEADER_BYTES});
+		printf("\tVARIABLE_LEADER_BYTES\t\t= %4d bytes\n",$hdr{VARIABLE_LEADER_BYTES});
+		printf("\tVELOCITY_DATA_BYTES\t\t= %4d bytes\n",$hdr{VELOCITY_DATA_BYTES})
 			if defined($hdr{VELOCITY_DATA_BYTES});
-		printf("\tCORRELATION_DATA_BYTES\t\t= %3d bytes\n",$hdr{CORRELATION_DATA_BYTES})
+		printf("\tCORRELATION_DATA_BYTES\t\t= %4d bytes\n",$hdr{CORRELATION_DATA_BYTES})
 			if defined($hdr{CORRELATION_DATA_BYTES});
-		printf("\tECHO_INTENSITY_DATA_BYTES\t= %3d bytes\n",$hdr{ECHO_INTENSITY_DATA_BYTES})
+		printf("\tECHO_INTENSITY_DATA_BYTES\t= %4d bytes\n",$hdr{ECHO_INTENSITY_DATA_BYTES})
 			if defined($hdr{ECHO_INTENSITY_DATA_BYTES});
-		printf("\tPERCENT_GOOD_DATA_BYTES\t\t= %3d bytes\n",$hdr{PERCENT_GOOD_DATA_BYTES})
+		printf("\tPERCENT_GOOD_DATA_BYTES\t\t= %4d bytes\n",$hdr{PERCENT_GOOD_DATA_BYTES})
 			if defined($hdr{PERCENT_GOOD_DATA_BYTES});
 	}
 
@@ -167,14 +169,12 @@
 	
 	if ($hdr{SPEED_OF_SOUND_CALCULATED}) {
 		print("    Speed-of-Sound Sensors Used:\n");
-		printf("\tPRESSURE_SENSOR_USED\n")	if ($hdr{PRESSURE_SENSOR_USED});
-		printf("\tCOMPASS_USED\n")			if ($hdr{COMPASS_USED});
-		printf("\tPITCH_SENSOR_USED\n")		if ($hdr{PITCH_SENSOR_USED});
-		printf("\tROLL_SENSOR_USED\n")		if ($hdr{ROLL_SENSOR_USED});
-		printf("\tCONDUCTIVITY_SENSOR_USED\n")    
-												if ($hdr{CONDUCTIVITY_SENSOR_USED});
-		printf("\tTEMPERATURE_SENSOR_USED\n")
-												if ($hdr{TEMPERATURE_SENSOR_USED});
+		printf("\tPRESSURE\n")					if ($hdr{SSPEED_USING_PRESS});
+		printf("\tCOMPASS_USED\n")				if ($hdr{COMPASS_USED});
+		printf("\tPITCH_SENSOR_USED\n")			if ($hdr{PITCH_SENSOR_USED});
+		printf("\tROLL_SENSOR_USED\n")			if ($hdr{ROLL_SENSOR_USED});
+		printf("\tCONDUCTIVITY_SENSOR_USED\n")  if ($hdr{CONDUCTIVITY_SENSOR_USED});
+		printf("\tTEMPERATURE_SENSOR_USED\n")	if ($hdr{TEMPERATURE_SENSOR_USED});
 		print("\n");
 	}
 	
@@ -205,7 +205,7 @@
 	printf("\tFlags\t\t\t\t: ");
 	printf("NARROW_BANDWIDTH ") 				if ($hdr{NARROW_BANDWIDTH});
 	printf("WIDE_BANDWIDTH ")					if ($hdr{WIDE_BANDWIDTH});
-	printf("TRANSMIT_POWER_HIGH ")				if ($hdr{TRANSMIT_POWER_HIGH});
+	printf("TRANSMIT_POWER_MAX ")				if ($hdr{TRANSMIT_POWER_MAX});
 	print("\n");
 
 	#----------------------------------------------------------------------