package edu.colostate.vchill.chill; import edu.colostate.vchill.ChillDefines; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; /** * Processor control/status information * * @author Jochen Deyke * @version 2007-05-21 */ public class ChillProcessorInfo extends ChillHeader { /** * size (in bytes) of this header (including ChillHeaderHeader, but not including extraData) */ public static final int BYTE_SIZE = ChillHeaderHeader.BYTE_SIZE + 4 * ChillDefines.INT_BYTE_SIZE + //enums 3 * ChillDefines.INT_BYTE_SIZE + //unsigned ChillDefines.FLOAT_BYTE_SIZE + 4 * ChillDefines.FLOAT_BYTE_SIZE + ChillDefines.INT_BYTE_SIZE + //unsigned 5 * ChillDefines.FLOAT_BYTE_SIZE; /** * Processing mode used by moment calculator. * 1 << ordinal to set/test processing_mode */ enum ProcMode { INDEXEDBEAM, LONGINT, DUALPRT, PHASECODE, } /** * Transmitter polarization mode */ PolarizationMode polarization_mode; /** * Signal Processing mode */ int processing_mode; //bitmask /** * Transmitter pulse type */ PulseType pulse_type; /** * Radar calibration/test type */ TestType test_type; /** * Number of cycles integrated to give one ray */ public /*unsigned*/ int integration_cycle_pulses; /** * Clutter filter used by the processor */ public /*unsigned*/ int clutter_filter_number; /** * Number of range gates to average */ public /*unsigned*/ int range_gate_averaging; /** * Beamwidth in degrees, over which to integrate in indexed beam mode */ public float indexed_beam_width_d; /** * Gate spacing (in meters), does not include effect of range avergaing */ public float gate_spacing_m; /** * PRT in microseconds */ public float prt_usec; /** * Range to start processing */ public float range_start_km; /** * Range to stop processing */ public float range_stop_km; /** * Number of gates for digitizer to acquire */ public /*unsigned*/ int max_gate; /** * Power at signal generator output in dBm, when test set is commanded to output 0dBm */ public float test_power_dbm; /** * Reserved */ public float unused1; /** * Reserved */ public float unused2; /** * Range at which test pulse is located */ public float test_pulse_range_km; /** * Length of test pulse */ public float test_pulse_length_usec; public ChillProcessorInfo() { super(new ChillHeaderHeader(ChillDefines.GEN_MOM_DATA, BYTE_SIZE)); super.extraData = new byte[0]; } /** * Constructs a header by reading initial values from a DataInput. * * @param in the DataInput to read initialization values from */ public ChillProcessorInfo(final DataInput in, final ChillHeaderHeader header) throws IOException { super(header); assert header.recordType == ChillDefines.HSK_ID_PROCESSOR_INFO; assert header.headerLength - ChillProcessorInfo.BYTE_SIZE >= 0; this.polarization_mode = PolarizationMode.values()[in.readInt()]; this.processing_mode = in.readInt(); this.pulse_type = PulseType.values()[in.readInt()]; this.test_type = TestType.values()[in.readInt()]; this.integration_cycle_pulses = in.readInt(); this.clutter_filter_number = in.readInt(); this.range_gate_averaging = in.readInt(); this.indexed_beam_width_d = in.readFloat(); this.gate_spacing_m = in.readFloat(); this.prt_usec = in.readFloat(); this.range_start_km = in.readFloat(); this.range_stop_km = in.readFloat(); this.max_gate = in.readInt(); this.test_power_dbm = in.readFloat(); this.unused1 = in.readFloat(); this.unused2 = in.readFloat(); this.test_pulse_range_km = in.readFloat(); this.test_pulse_length_usec = in.readFloat(); in.readFully(super.extraData = new byte[header.headerLength - ChillProcessorInfo.BYTE_SIZE]); } /** * Writes this header to a DataOut * * @param out the DataOutput to write values to */ public void write(final DataOutput out) throws IOException { assert header.recordType == ChillDefines.HSK_ID_PROCESSOR_INFO; assert header.headerLength == ChillProcessorInfo.BYTE_SIZE + extraData.length; super.header.write(out); out.writeInt(this.polarization_mode.ordinal()); out.writeInt(this.processing_mode); out.writeInt(this.pulse_type.ordinal()); out.writeInt(this.test_type.ordinal()); out.writeInt(this.integration_cycle_pulses); out.writeInt(this.clutter_filter_number); out.writeInt(this.range_gate_averaging); out.writeFloat(this.indexed_beam_width_d); out.writeFloat(this.gate_spacing_m); out.writeFloat(this.prt_usec); out.writeFloat(this.range_start_km); out.writeFloat(this.range_stop_km); out.writeInt(this.max_gate); out.writeFloat(this.test_power_dbm); out.writeFloat(this.unused1); out.writeFloat(this.unused2); out.writeFloat(this.test_pulse_range_km); out.writeFloat(this.test_pulse_length_usec); out.write(this.extraData); } }