Example #1
0
    def __init__(self, prompts, newline, driver_event):
        """
        Protocol constructor.
        @param prompts A BaseEnum class containing instrument prompts.
        @param newline The newline.
        @param driver_event Driver process event callback.
        """
        NortekInstrumentProtocol.__init__(self, prompts, newline, driver_event)

        # create chunker for processing instrument samples.
        self._chunker = StringChunker(self.sieve_function)
Example #2
0
    def __init__(self, prompts, newline, driver_event):
        """
        Protocol constructor.
        @param prompts A BaseEnum class containing instrument prompts.
        @param newline The newline.
        @param driver_event Driver process event callback.
        """
        NortekInstrumentProtocol.__init__(self, prompts, newline, driver_event)

        # create chunker for processing instrument samples.
        self._chunker = StringChunker(self.sieve_function)
Example #3
0
    def _build_param_dict(self):
        NortekInstrumentProtocol._build_param_dict(self)

        self._param_dict.add_parameter(
            NortekParameterDictVal(Parameter.NUMBER_SAMPLES_PER_BURST,
                                    r'^.{%s}(.{2}).*' % str(452),
                                    lambda match : NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                    NortekProtocolParameterDict.word_to_string,
                                    regex_flags=re.DOTALL))
        self._param_dict.add_parameter(
            NortekParameterDictVal(Parameter.USER_3_SPARE,
                                    r'^.{%s}(.{2}).*' % str(460),
                                    lambda match : match.group(1),
                                    lambda string : string,
                                    visibility=ParameterDictVisibility.READ_ONLY,
                                    regex_flags=re.DOTALL))

        self._param_dict.load_strings(RESOURCE_FILE)
Example #4
0
    def __init__(self, prompts, newline, driver_event):
        """
        Protocol constructor.
        @param prompts A BaseEnum class containing instrument prompts.
        @param newline The newline.
        @param driver_event Driver process event callback.
        """
        NortekInstrumentProtocol.__init__(self, prompts, newline, driver_event)

        # create chunker for processing instrument samples.
        self._chunker = StringChunker(self.sieve_function)
        self.velocity_sync_bytes = VELOCITY_DATA_SYNC_BYTES
        self.status_particles = [
            VectorDataParticleType.CLOCK,
            VectorDataParticleType.HARDWARE_CONFIG,
            VectorDataParticleType.HEAD_CONFIG,
            VectorDataParticleType.USER_CONFIG,
        ]
        self.clock_particle = VectorDataParticleType.CLOCK
Example #5
0
    def __init__(self, prompts, newline, driver_event):
        """
        Protocol constructor.
        @param prompts A BaseEnum class containing instrument prompts.
        @param newline The newline.
        @param driver_event Driver process event callback.
        """
        NortekInstrumentProtocol.__init__(self, prompts, newline, driver_event)

        # create chunker for processing instrument samples.
        self._chunker = StringChunker(self.sieve_function)
        self.velocity_sync_bytes = VELOCITY_DATA_SYNC_BYTES
        self.status_particles = [
            VectorDataParticleType.CLOCK,
            VectorDataParticleType.HARDWARE_CONFIG,
            VectorDataParticleType.HEAD_CONFIG,
            VectorDataParticleType.USER_CONFIG
        ]
        self.clock_particle = VectorDataParticleType.CLOCK
Example #6
0
    def _build_param_dict(self):
        """
        Overwrite base classes method.
        Creates base class's param dictionary, then sets parameter values for those specific to this instrument.
        """
        NortekInstrumentProtocol._build_param_dict(self)

        self._param_dict.add(
            Parameter.TRANSMIT_PULSE_LENGTH,
            r'^.{%s}(.{2}).*' % str(4),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.READ_WRITE,
            display_name="Transmit Pulse Length",
            description="Pulse duration of the transmitted signal.",
            range=(1, 65535),
            default_value=2,
            units=Units.COUNTS,
            startup_param=True,
            direct_access=True)
        self._param_dict.add(
            Parameter.BLANKING_DISTANCE,
            r'^.{%s}(.{2}).*' % str(6),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.IMMUTABLE,
            display_name="Blanking Distance",
            description="Minimum sensing range of the sensor.",
            range=(1, 65535),
            default_value=16,
            units=Units.COUNTS,
            startup_param=True,
            direct_access=True)
        self._param_dict.add(Parameter.RECEIVE_LENGTH,
                             r'^.{%s}(.{2}).*' % str(8),
                             lambda match: NortekProtocolParameterDict.
                             convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Receive Length",
                             description="Length of the received pulse.",
                             range=(1, 65535),
                             default_value=7,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.TIME_BETWEEN_PINGS,
                             r'^.{%s}(.{2}).*' % str(10),
                             lambda match: NortekProtocolParameterDict.
                             convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Time Between Pings",
                             description="Length of time between each ping.",
                             default_value=44,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.TIME_BETWEEN_BURST_SEQUENCES,
                             r'^.{%s}(.{2}).*' % str(12),
                             lambda match: NortekProtocolParameterDict.
                             convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Time Between Burst Sequences",
                             description="Length of time between each burst.",
                             range=(1, 65535),
                             default_value=0,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(
            Parameter.NUMBER_PINGS,
            r'^.{%s}(.{2}).*' % str(14),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.IMMUTABLE,
            display_name="Number Pings",
            description="Number of pings in each burst sequence.",
            range=(1, 65535),
            default_value=0,
            units=Units.HERTZ,
            startup_param=True,
            direct_access=True)
        self._param_dict.add(Parameter.AVG_INTERVAL,
                             r'^.{%s}(.{2}).*' % str(16),
                             lambda match: NortekProtocolParameterDict.
                             convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Average Interval",
                             description="Interval for continuous sampling.",
                             default_value=64,
                             range=(1, 65535),
                             units=Units.SECOND,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.MEASUREMENT_INTERVAL,
                             r'^.{%s}(.{2}).*' % str(38),
                             lambda match: NortekProtocolParameterDict.
                             convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Measurement Interval",
                             description="Interval for single measurements.",
                             units=Units.SECOND,
                             default_value=600,
                             range=(0, 65535),
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(
            Parameter.DIAGNOSTIC_INTERVAL,
            r'^.{%s}(.{4}).*' % str(54),
            lambda match: NortekProtocolParameterDict.
            convert_double_word_to_int(match.group(1)),
            NortekProtocolParameterDict.double_word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.IMMUTABLE,
            display_name="Diagnostic Interval",
            description='Number of seconds between diagnostics measurements.',
            default_value=10800,
            units=Units.SECOND,
            startup_param=True,
            direct_access=True)
        self._param_dict.add(
            Parameter.ADJUSTMENT_SOUND_SPEED,
            r'^.{%s}(.{2}).*' % str(60),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.IMMUTABLE,
            display_name="Adjustment Sound Speed",
            description='User input sound speed adjustment factor.',
            default_value=16657,
            units=Units.METER + '/' + Units.SECOND,
            startup_param=True,
            direct_access=True)
        self._param_dict.add(
            Parameter.NUMBER_SAMPLES_DIAGNOSTIC,
            r'^.{%s}(.{2}).*' % str(62),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.IMMUTABLE,
            display_name="Diagnostic Samples",
            description='Number of samples in diagnostics mode.',
            default_value=1,
            startup_param=True,
            direct_access=True)
        self._param_dict.add(
            Parameter.SW_VERSION,
            r'^.{%s}(.{2}).*' % str(72),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.STRING,
            visibility=ParameterDictVisibility.READ_ONLY,
            direct_access=True,
            display_name="Software Version",
            description="Current software version installed on instrument.")
        self._param_dict.add(Parameter.SAMPLE_RATE,
                             r'^.{%s}(.{2}).*' % str(454),
                             lambda match: NortekProtocolParameterDict.
                             convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Sample Rate",
                             description="Number of samples per burst.",
                             range=(1, 65535),
                             default_value=16,
                             startup_param=True)
        self._param_dict.add(
            Parameter.ANALOG_OUTPUT_SCALE,
            r'^.{%s}(.{2}).*' % str(456),
            lambda match: NortekProtocolParameterDict.convert_word_to_int(
                match.group(1)),
            NortekProtocolParameterDict.word_to_string,
            regex_flags=re.DOTALL,
            type=ParameterDictType.INT,
            visibility=ParameterDictVisibility.IMMUTABLE,
            display_name="Analog Output Scale Factor",
            description="Scale factor used in calculating analog output.",
            default_value=6711,
            startup_param=True,
            direct_access=True)
Example #7
0
    def _build_param_dict(self):
        """
        Overwrite base classes method.
        Creates base class's param dictionary, then sets parameter values for those specific to this instrument.
        """
        NortekInstrumentProtocol._build_param_dict(self)

        self._param_dict.add(Parameter.TRANSMIT_PULSE_LENGTH,
                             r'^.{%s}(.{2}).*' % str(4),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Transmit Pulse Length",
                             description="Pulse duration of the transmitted signal.",
                             default_value=2,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.BLANKING_DISTANCE,
                             r'^.{%s}(.{2}).*' % str(6),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Blanking Distance",
                             description="Minimum sensing range of the sensor.",
                             default_value=16,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.RECEIVE_LENGTH,
                             r'^.{%s}(.{2}).*' % str(8),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Receive Length",
                             description="Length of the received pulse.",
                             default_value=7,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.TIME_BETWEEN_PINGS,
                             r'^.{%s}(.{2}).*' % str(10),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Time Between Pings",
                             description="Length of time between each ping.",
                             default_value=44,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.TIME_BETWEEN_BURST_SEQUENCES,
                             r'^.{%s}(.{2}).*' % str(12),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Time Between Burst Sequences",
                             description="Length of time between each burst.",
                             default_value=0,
                             units=Units.COUNTS,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.NUMBER_PINGS,
                             r'^.{%s}(.{2}).*' % str(14),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Number Pings",
                             description="Number of pings in each burst sequence.",
                             default_value=0,
                             units=Units.HERTZ,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.AVG_INTERVAL,
                             r'^.{%s}(.{2}).*' % str(16),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Average Interval",
                             description="Interval for continuous sampling.",
                             default_value=64,
                             units=Units.SECOND,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.MEASUREMENT_INTERVAL,
                             r'^.{%s}(.{2}).*' % str(38),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Measurement Interval",
                             description="Interval for single measurements.",
                             units=Units.SECOND,
                             default_value=600,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.DIAGNOSTIC_INTERVAL,
                             r'^.{%s}(.{4}).*' % str(54),
                             lambda match: NortekProtocolParameterDict.convert_double_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.double_word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Diagnostic Interval",
                             description='Number of seconds between diagnostics measurements.',
                             default_value=10800,
                             units=Units.SECOND,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.ADJUSTMENT_SOUND_SPEED,
                             r'^.{%s}(.{2}).*' % str(60),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Adjustment Sound Speed",
                             description='User input sound speed adjustment factor.',
                             default_value=16657,
                             units=Units.METER + '/' + Units.SECOND,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.NUMBER_SAMPLES_DIAGNOSTIC,
                             r'^.{%s}(.{2}).*' % str(62),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Diagnostic Samples",
                             description='Number of samples in diagnostics mode.',
                             default_value=1,
                             startup_param=True,
                             direct_access=True)
        self._param_dict.add(Parameter.SW_VERSION,
                             r'^.{%s}(.{2}).*' % str(72),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.STRING,
                             visibility=ParameterDictVisibility.READ_ONLY,
                             direct_access=True,
                             display_name="Software Version",
                             description="Current software version installed on instrument.")
        self._param_dict.add(Parameter.SAMPLE_RATE,
                             r'^.{%s}(.{2}).*' % str(454),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.READ_WRITE,
                             display_name="Sample Rate",
                             description="Number of samples per burst.",
                             default_value=16,
                             startup_param=True)
        self._param_dict.add(Parameter.ANALOG_OUTPUT_SCALE,
                             r'^.{%s}(.{2}).*' % str(456),
                             lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                             NortekProtocolParameterDict.word_to_string,
                             regex_flags=re.DOTALL,
                             type=ParameterDictType.INT,
                             visibility=ParameterDictVisibility.IMMUTABLE,
                             display_name="Analog Output Scale Factor",
                             description="Scale factor used in calculating analog output.",
                             default_value=6711,
                             startup_param=True,
                             direct_access=True)
Example #8
0
 def _build_cmd_dict(self):
     NortekInstrumentProtocol._build_cmd_dict(self)
     self._cmd_dict.load_strings(RESOURCE_FILE)
Example #9
0
 def chunker_sieve_function(raw_data):
     return NortekInstrumentProtocol.chunker_sieve_function(raw_data,
                                                            VECTOR_SAMPLE_STRUCTURES)
Example #10
0
 def __init__(self, prompts, newline, driver_event):
     NortekInstrumentProtocol.__init__(self, prompts, newline, driver_event)
     
     # create chunker for processing instrument samples.
     self._chunker = StringChunker(Protocol.chunker_sieve_function)
Example #11
0
    def _build_param_dict(self):
        """
        Overwrite base classes method.
        Creates base class's param dictionary, then sets parameter values for those specific to this instrument.
        """
        NortekInstrumentProtocol._build_param_dict(self)

        self._param_dict.add(Parameter.TRANSMIT_PULSE_LENGTH,
                                   r'^.{%s}(.{2}).*' % str(4),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Transmit Pulse Length",
                                   default_value=125,
                                   units=ParameterUnits.CENTIMETERS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.BLANKING_DISTANCE,
                                   r'^.{%s}(.{2}).*' % str(6),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Blanking Distance",
                                   default_value=49,
                                   units=ParameterUnits.CENTIMETERS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.RECEIVE_LENGTH,
                                   r'^.{%s}(.{2}).*' % str(8),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Receive Length",
                                   default_value=32,
                                   units=ParameterUnits.CENTIMETERS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.TIME_BETWEEN_PINGS,
                                   r'^.{%s}(.{2}).*' % str(10),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Time Between Pings",
                                   units=ParameterUnits.CENTIMETERS,
                                   default_value=437,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.TIME_BETWEEN_BURST_SEQUENCES,
                                   r'^.{%s}(.{2}).*' % str(12),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Time Between Burst Sequences",
                                   default_value=512,
                                   units=None,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.NUMBER_PINGS,
                                   r'^.{%s}(.{2}).*' % str(14),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number Pings",
                                   default_value=1,
                                   units=ParameterUnits.HERTZ,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.AVG_INTERVAL,
                                   r'^.{%s}(.{2}).*' % str(16),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Average Interval",
                                   default_value=60,
                                   units=ParameterUnits.SECONDS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.USER_NUMBER_BEAMS,
                                   r'^.{%s}(.{2}).*' % str(18),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="User Number Beams",
                                   direct_access=True,
                                   value=3)
        self._param_dict.add(Parameter.TIMING_CONTROL_REGISTER,
                                   r'^.{%s}(.{2}).*' % str(20),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Timing Control Register",
                                   direct_access=True,
                                   value=130)
        self._param_dict.add(Parameter.POWER_CONTROL_REGISTER,
                                   r'^.{%s}(.{2}).*' % str(22),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Power Control Register",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.A1_1_SPARE,
                                   r'^.{%s}(.{2}).*' % str(24),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="A1 1 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.B0_1_SPARE,
                                   r'^.{%s}(.{2}).*' % str(26),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="B0 1 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.B1_1_SPARE,
                                   r'^.{%s}(.{2}).*' % str(28),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="B1 1 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.COMPASS_UPDATE_RATE,
                                   r'^.{%s}(.{2}).*' % str(30),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Compass Update Rate",
                                   default_value=1,
                                   units=ParameterUnits.HERTZ,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.COORDINATE_SYSTEM,
                                   r'^.{%s}(.{2}).*' % str(32),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Coordinate System",
                                   description='Coordinate System (0=ENU, 1=XYZ, 2=BEAM)',
                                   default_value=2,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.NUMBER_BINS,
                                   r'^.{%s}(.{2}).*' % str(34),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number Bins",
                                   default_value=1,
                                   units=ParameterUnits.METERS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.BIN_LENGTH,
                                   r'^.{%s}(.{2}).*' % str(36),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Bin Length",
                                   default_value=7,
                                   units=ParameterUnits.SECONDS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.MEASUREMENT_INTERVAL,
                                   r'^.{%s}(.{2}).*' % str(38),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Measurement Interval",
                                   default_value=60,
                                   units=ParameterUnits.SECONDS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.DEPLOYMENT_NAME,
                                   r'^.{%s}(.{6}).*' % str(40),
                                   lambda match: NortekProtocolParameterDict.convert_bytes_to_string(match.group(1)),
                                   lambda string: string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Deployment Name",
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.WRAP_MODE,
                                   r'^.{%s}(.{2}).*' % str(46),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Wrap Mode",
                                   description='Recorder wrap mode (0=NO WRAP, 1=WRAP WHEN FULL)',
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.CLOCK_DEPLOY,
                                   r'^.{%s}(.{6}).*' % str(48),
                                   lambda match: NortekProtocolParameterDict.convert_words_to_datetime(match.group(1)),
                                   NortekProtocolParameterDict.convert_datetime_to_words,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.LIST,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Clock Deploy",
                                   description='Deployment start time.',
                                   default_value=[0, 0, 0, 0, 0, 0],
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.DIAGNOSTIC_INTERVAL,
                                   r'^.{%s}(.{4}).*' % str(54),
                                   lambda match: NortekProtocolParameterDict.convert_double_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.double_word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Diagnostic Interval",
                                   description='Number of seconds between diagnostics measurements.',
                                   default_value=11250,
                                   startup_param=True,
                                   units=ParameterUnits.SECONDS,
                                   direct_access=True)
        self._param_dict.add(Parameter.MODE,
                                   r'^.{%s}(.{2}).*' % str(58),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Mode",
                                   default_value=48,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.ADJUSTMENT_SOUND_SPEED,
                                   r'^.{%s}(.{2}).*' % str(60),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Adjustment Sound Speed",
                                   description='User input sound speed adjustment factor.',
                                   units=ParameterUnits.METERS_PER_SECOND,
                                   default_value=1525,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.NUMBER_SAMPLES_DIAGNOSTIC,
                                   r'^.{%s}(.{2}).*' % str(62),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number Samples Diagnostic",
                                   description='Samples in diagnostics mode.',
                                   default_value=20,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.NUMBER_BEAMS_CELL_DIAGNOSTIC,
                                   r'^.{%s}(.{2}).*' % str(64),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number Beams Cell Diagnostic",
                                   description='Beams/cell number to measure in diagnostics mode',
                                   default_value=1,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.NUMBER_PINGS_DIAGNOSTIC,
                                   r'^.{%s}(.{2}).*' % str(66),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number Pings Diagnostic",
                                   description='Pings in diagnostics/wave mode.',
                                   default_value=1,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.MODE_TEST,
                                   r'^.{%s}(.{2}).*' % str(68),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Mode Test",
                                   default_value=4,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.ANALOG_INPUT_ADDR,
                                   r'^.{%s}(.{2}).*' % str(70),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Analog Input Address",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.SW_VERSION,
                                   r'^.{%s}(.{2}).*' % str(72),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Software Version",
                                   default_value=13902,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.USER_1_SPARE,
                                   r'^.{%s}(.{2}).*' % str(74),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="User 1 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.VELOCITY_ADJ_TABLE,
                                   r'^.{%s}(.{180}).*' % str(76),
                                   lambda match: base64.b64encode(match.group(1)),
                                   lambda string: string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_WRITE,
                                   display_name="Velocity Adj Table",
                                   units=ParameterUnits.PARTS_PER_TRILLION,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.COMMENTS,
                                   r'^.{%s}(.{180}).*' % str(256),
                                   lambda match: NortekProtocolParameterDict.convert_bytes_to_string(match.group(1)),
                                   lambda string: string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Comments",
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.WAVE_MEASUREMENT_MODE,
                                   r'^.{%s}(.{2}).*' % str(436),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Wave Measurement Mode",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.DYN_PERCENTAGE_POSITION,
                                   r'^.{%s}(.{2}).*' % str(438),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Dyn Percentage Position",
                                   description='Percentage for wave cell positioning.',
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.WAVE_TRANSMIT_PULSE,
                                   r'^.{%s}(.{2}).*' % str(440),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Wave Transmit Pulse",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.WAVE_BLANKING_DISTANCE,
                                   r'^.{%s}(.{2}).*' % str(442),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Fixed Wave Blanking Distance",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.WAVE_CELL_SIZE,
                                   r'^.{%s}(.{2}).*' % str(444),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Wave Measurement Cell Size",
                                   default_value=0,
                                   units=ParameterUnits.METERS,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.NUMBER_DIAG_SAMPLES,
                                   r'^.{%s}(.{2}).*' % str(446),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number Diag Samples",
                                   description='Number of diagnostics/wave samples.',
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.A1_2_SPARE,
                                   r'^.{%s}(.{2}).*' % str(448),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="A1 2 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.B0_2_SPARE,
                                   r'^.{%s}(.{2}).*' % str(450),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="B0 2 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.NUMBER_SAMPLES_PER_BURST,
                                   r'^.{%s}(.{2}).*' % str(452),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   expiration=None,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Number of Samples per Burst",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.USER_2_SPARE,
                                   r'^.{%s}(.{2}).*' % str(454),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="User 2 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.ANALOG_OUTPUT_SCALE,
                                   r'^.{%s}(.{2}).*' % str(456),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Analog Output Scale Factor",
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.CORRELATION_THRESHOLD,
                                   r'^.{%s}(.{2}).*' % str(458),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Correlation Threshold",
                                   description='Correlation threshold for resolving ambiguities.',
                                   default_value=0,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.USER_3_SPARE,
                                   r'^.{%s}(.{2}).*' % str(460),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="User 3 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.TRANSMIT_PULSE_LENGTH_SECOND_LAG,
                                   r'^.{%s}(.{2}).*' % str(462),
                                   lambda match: NortekProtocolParameterDict.convert_word_to_int(match.group(1)),
                                   NortekProtocolParameterDict.word_to_string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.INT,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Transmit Pulse Length Second Lag",
                                   default_value=2,
                                   startup_param=True,
                                   direct_access=True)
        self._param_dict.add(Parameter.USER_4_SPARE,
                                   r'^.{%s}(.{30}).*' % str(464),
                                   lambda match: match.group(1).encode('hex'),
                                   lambda string: string.decode('hex'),
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.READ_ONLY,
                                   display_name="User 4 Spare",
                                   description='Not used.')
        self._param_dict.add(Parameter.QUAL_CONSTANTS,
                                   r'^.{%s}(.{16}).*' % str(494),
                                   lambda match: base64.b64encode(match.group(1)),
                                   lambda string: string,
                                   regex_flags=re.DOTALL,
                                   type=ParameterDictType.STRING,
                                   visibility=ParameterDictVisibility.IMMUTABLE,
                                   display_name="Qual Constants",
                                   description='Stage match filter constants.',
                                   startup_param=True,
                                   direct_access=True)