diff --git a/RDI_PD0_IO.pl b/RDI_PD0_IO.pl --- 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: Fri Dec 18 18:01:45 2015 +# dlm: Sat Jan 9 13:22:46 2016 # (c) 2003 A.M. Thurnherr -# uE-Info: 1106 0 NIL 0 0 72 2 2 4 NIL ofnI +# uE-Info: 70 34 NIL 0 0 72 2 2 4 NIL ofnI #====================================================================== # Read RDI BroadBand Binary Data Files (*.[0-9][0-9][0-9]) @@ -66,6 +66,8 @@ # Oct 2, 2015: - added &skip_initial_trash() # Dec 18, 2015: - added most data types to WBPofs() # - BUG: WBPens() requires round() for scaled values +# Jan 9, 2016: - BUG: WBRhdr() did not set DATA_SOURCE_ID +# - added PRODUCER # FIRMWARE VERSIONS: # It appears that different firmware versions generate different file @@ -79,13 +81,18 @@ # 16.21 WH300 (1) LDEO NBP0402 53 # 16.27 WH300 (2) Nash ? 59 -# PD0 IMP FILE FORMAT EXTENSIONS: -# - DATA_SOURCE_ID = 0xA0 | PATCHED_MASK (vs. 0x7F for TRDI PD0 files) -# PATCHED_MASK & 0x04: pitch value has been patched -# PATCHED_MASK & 0x02: roll value has been patched -# PATCHED_MASK & 0x01: heading value has been patched -# - PITCH & ROLL can be missing (0x8000 badval as in velocities) -# - HEADING can be missing (0xF000 badval, as 0x8000 is valid 327.68 heading) +# PD0 FILE FORMAT EXTENSIONS: +# +# - DATA_SOURCE_ID = 0x7F original TRDI PD0 file +# +# - DATA_SOURCE_ID = 0xA0 | PATCHED_MASK produced by IMP+LADP +# PATCHED_MASK & 0x04: pitch value has been patched +# PATCHED_MASK & 0x02: roll value has been patched +# PATCHED_MASK & 0x01: heading value has been patched +# - PITCH & ROLL can be missing (0x8000 badval as in velocities) +# - HEADING can be missing (0xF000 badval, as 0x8000 is valid 327.68 heading) +# +# - DATA_SOURCE_ID = 0xB0 produced by editPD0 # NOTES: # - RDI stores data in VAX/Intel byte order (little endian) @@ -369,7 +376,17 @@ ($hid,$did,$dta->{ENSEMBLE_BYTES},$dummy,$dta->{NUMBER_OF_DATA_TYPES}) = unpack('CCvCC',$buf); $hid == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header",$hid,0)); -## $did == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Data Source",$did,0)); # IMP uses this + $dta->{DATA_SOURCE_ID} = $did; + if ($did == 0x7f) { + $dta->{PRODUCER} = 'TRDI ADCP'; + } elsif ($did&0xF0 == 0xA0) { + $dta->{PRODUCER} = 'IMP+LADCP'; + } elsif ($did&0xF0 == 0xB0) { + $dta->{PRODUCER} = 'editPD0'; + } else { + $dta->{PRODUCER} = 'unknown'; + } + printf(STDERR "WARNING: unexpected number of data types (%d)\n", $dta->{NUMBER_OF_DATA_TYPES}) unless ($dta->{NUMBER_OF_DATA_TYPES} == 6 || @@ -630,7 +647,17 @@ sysread(WBRF,$buf,6) == 6 || last; ($hid,$did,$ens_length,$dummy,$ndt) = unpack('CCvCC',$buf); $hid == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Header",$hid,0)); -## $did == 0x7f || die(sprintf($FmtErr,$WBRcfn,"Data Source",$did,0)); + ${$E}[$ens]->{DATA_SOURCE_ID} = $did; + if ($did == 0x7f) { + ${$E}[$ens]->{PRODUCER} = 'TRDI ADCP'; + } elsif ($did&0xF0 == 0xA0) { + ${$E}[$ens]->{PRODUCER} = 'IMP+LADCP (Thurnherr software)'; + } elsif ($did&0xF0 == 0xB0) { + ${$E}[$ens]->{PRODUCER} = 'editPD0 (Thurnherr software)'; + } else { + ${$E}[$ens]->{PRODUCER} = 'unknown'; + } + ## printf(STDERR "\n$WBRcfn: WARNING: unexpected number of data types (%d, ens=$ens)\n",$ndt),last ## unless ($ndt == 6 || $ndt == 7); sysread(WBRF,$buf,2*$ndt) == 2*$ndt || die("$WBRcfn: $!"); @@ -656,8 +683,6 @@ # Variable Leader #------------------------------ - ${$E}[$ens]->{DATA_SOURCE_ID} = $did; # IMP extension - sysseek(WBRF,$start_ens+$WBRofs[1],0) || die("$WBRcfn: $!"); sysread(WBRF,$buf,4) == 4 || die("$WBRcfn: $!"); ($id,$ensNo) = unpack("vv",$buf);