Exemplo n.º 1
0
    def _create_set_output(self, parameters):
        """
        load buffer with sync byte (A5), ID byte (01), and size word (# of words in little-endian form)
        'user' configuration is 512 bytes = 256 words long = size 0x100
        """
        output = ['\xa5\x00\x00\x01']
        CHECK_SUM_SEED = 0xb58c

        for param in self.order_of_user_config:
            log.trace('_create_set_output: adding %s to list', param)
            if param == Parameter.COMMENTS:
                output.append(parameters.format(param).ljust(180, "\x00"))
            elif param == Parameter.DEPLOYMENT_NAME:
                output.append(parameters.format(param).ljust(6, "\x00"))
            elif param == Parameter.QUAL_CONSTANTS:
                output.append('\x00'.ljust(16, "\x00"))
            elif param == Parameter.VELOCITY_ADJ_TABLE:
                output.append(base64.b64decode(parameters.format(param)))
            elif param in [
                    Parameter.A1_1_SPARE, Parameter.B0_1_SPARE,
                    Parameter.B1_1_SPARE, Parameter.USER_1_SPARE,
                    Parameter.A1_2_SPARE, Parameter.B0_2_SPARE,
                    Parameter.USER_2_SPARE, Parameter.USER_3_SPARE
            ]:
                output.append(
                    self.spare_param_values.get(param).ljust(2, "\x00"))
            elif param in [
                    Parameter.WAVE_MEASUREMENT_MODE,
                    Parameter.WAVE_TRANSMIT_PULSE,
                    Parameter.WAVE_BLANKING_DISTANCE, Parameter.WAVE_CELL_SIZE,
                    Parameter.NUMBER_DIAG_SAMPLES,
                    Parameter.DYN_PERCENTAGE_POSITION
            ]:
                output.append('\x00'.ljust(2, "\x00"))
            elif param == Parameter.USER_4_SPARE:
                output.append(
                    self.spare_param_values.get(param).ljust(30, "\x00"))
            else:
                output.append(parameters.format(param))
            log.trace('_create_set_output: ADDED %s output size = %s', param,
                      len(output))

        log.debug("Created set output: %r with length: %s", output,
                  len(output))

        checksum = CHECK_SUM_SEED
        output = "".join(output)
        for word_index in range(0, len(output), 2):
            word_value = NortekProtocolParameterDict.convert_word_to_int(
                output[word_index:word_index + 2])
            checksum = (checksum + word_value) % 0x10000
        log.debug('_create_set_output: user checksum = %r', checksum)

        output += (NortekProtocolParameterDict.word_to_string(checksum))

        return output
Exemplo n.º 2
0
    def _create_set_output(self, parameters):
        """
        load buffer with sync byte (A5), ID byte (01), and size word (# of words in little-endian form)
        'user' configuration is 512 bytes = 256 words long = size 0x100
        """
        output = ['\xa5\x00\x00\x01']
        CHECK_SUM_SEED = 0xb58c

        for param in self.order_of_user_config:
            log.trace('_create_set_output: adding %s to list', param)
            if param == Parameter.COMMENTS:
                output.append(parameters.format(param).ljust(180, "\x00"))
            elif param == Parameter.DEPLOYMENT_NAME:
                output.append(parameters.format(param).ljust(6, "\x00"))
            elif param == Parameter.QUAL_CONSTANTS:
                output.append('\x00'.ljust(16, "\x00"))
            elif param == Parameter.VELOCITY_ADJ_TABLE:
                output.append(base64.b64decode(parameters.format(param)))
            elif param in [Parameter.A1_1_SPARE, Parameter.B0_1_SPARE, Parameter.B1_1_SPARE, Parameter.USER_1_SPARE,
                           Parameter.A1_2_SPARE, Parameter.B0_2_SPARE, Parameter.USER_2_SPARE, Parameter.USER_3_SPARE]:
                output.append(self.spare_param_values.get(param).ljust(2, "\x00"))
            elif param in [Parameter.WAVE_MEASUREMENT_MODE, Parameter.WAVE_TRANSMIT_PULSE, Parameter.WAVE_BLANKING_DISTANCE,
                           Parameter.WAVE_CELL_SIZE, Parameter.NUMBER_DIAG_SAMPLES, Parameter.DYN_PERCENTAGE_POSITION]:
                output.append('\x00'.ljust(2, "\x00"))
            elif param == Parameter.USER_4_SPARE:
                output.append(self.spare_param_values.get(param).ljust(30, "\x00"))
            else:
                output.append(parameters.format(param))
            log.trace('_create_set_output: ADDED %s output size = %s', param, len(output))

        log.debug("Created set output: %r with length: %s", output, len(output))

        checksum = CHECK_SUM_SEED
        output = "".join(output)
        for word_index in range(0, len(output), 2):
            word_value = NortekProtocolParameterDict.convert_word_to_int(output[word_index:word_index+2])
            checksum = (checksum + word_value) % 0x10000
        log.debug('_create_set_output: user checksum = %r', checksum)

        output += (NortekProtocolParameterDict.word_to_string(checksum))

        return output