Ejemplo n.º 1
0
 def encode(self):
     ''' Encodes response pdu
     :returns: The encoded packet message
     '''
     result = pack_bitstring(self.bits)
     packet = struct.pack(">B", len(result)) + result
     return packet
Ejemplo n.º 2
0
    def encode(self):
        ''' Encodes response pdu

        :returns: The encoded packet message
        '''
        result = pack_bitstring(self.bits)
        packet = struct.pack(">B", len(result)) + result
        return packet
Ejemplo n.º 3
0
    def execute(self, *args):
        ''' Execute the diagnostic request on the given device

        :returns: The initialized response message
        '''
        #if _MCB.isListenOnly():
        register = pack_bitstring(_MCB.getDiagnosticRegister())
        return ReturnDiagnosticRegisterResponse(register)
Ejemplo n.º 4
0
    def execute(self, *args):
        ''' Execute the diagnostic request on the given device

        :returns: The initialized response message
        '''
        #if _MCB.isListenOnly():
        register = pack_bitstring(_MCB.getDiagnosticRegister())
        return ReturnDiagnosticRegisterResponse(register)
Ejemplo n.º 5
0
    def encode(self):
        ''' Encodes the status bits to an event message

        :returns: The encoded event message
        '''
        bits  = [False] * 3
        bits += [self.overrun, self.listen, self.broadcast, True]
        packet = pack_bitstring(bits)
        return packet
Ejemplo n.º 6
0
    def encode(self):
        ''' Encodes the status bits to an event message

        :returns: The encoded event message
        '''
        bits = [False] * 3
        bits += [self.overrun, self.listen, self.broadcast, True]
        packet = pack_bitstring(bits)
        return packet
Ejemplo n.º 7
0
    def encode(self):
        ''' Encodes write coils request

        :returns: The byte encoded message
        '''
        count   = len(self.values)
        self.byte_count = (count + 7) // 8
        packet  = struct.pack('>HHB', self.address, count, self.byte_count)
        packet += pack_bitstring(self.values)
        return packet
Ejemplo n.º 8
0
    def encode(self):
        ''' Encodes write coils request

        :returns: The byte encoded message
        '''
        count = len(self.values)
        self.byte_count = (count + 7) // 8
        packet = struct.pack('>HHB', self.address, count, self.byte_count)
        packet += pack_bitstring(self.values)
        return packet
Ejemplo n.º 9
0
    def encode(self):
        ''' Encodes the status bits to an event message

        :returns: The encoded event message
        '''
        bits = [self.read, self.slave_abort, self.slave_busy,
            self.slave_nak, self.write_timeout, self.listen]
        bits  += [True, False]
        packet = pack_bitstring(bits)
        return packet
Ejemplo n.º 10
0
    def add_bits(self, values):
        ''' Adds a collection of bits to be encoded

        If these are less than a multiple of eight,
        they will be left padded with 0 bits to make
        it so.

        :param value: The value to add to the buffer
        '''
        value = pack_bitstring(values)
        self._payload.append(value)
Ejemplo n.º 11
0
    def add_bits(self, values):
        """ Adds a collection of bits to be encoded

        If these are less than a multiple of eight,
        they will be left padded with 0 bits to make
        it so.

        :param value: The value to add to the buffer
        """
        value = pack_bitstring(values)
        self._payload.append(value)
Ejemplo n.º 12
0
    def encode(self):
        ''' Encodes the status bits to an event message

        :returns: The encoded event message
        '''
        bits = [
            self.read, self.slave_abort, self.slave_busy, self.slave_nak,
            self.write_timeout, self.listen
        ]
        bits += [True, False]
        packet = pack_bitstring(bits)
        return packet
Ejemplo n.º 13
0
    def fromCoils(coils, endian=Endian.Little):
        ''' Initialize a payload decoder with the result of
        reading a collection of coils from a modbus device.

        The coils are treated as a list of bit(boolean) values.

        :param coils: The coil results to initialize with
        :param endian: The endianess of the payload
        :returns: An initialized PayloadDecoder
        '''
        if isinstance(coils, list):
            payload = pack_bitstring(coils)
            return ModiconPayloadDecoder(payload, endian)
        raise ParameterException('Invalid collection of coils supplied')
Ejemplo n.º 14
0
    def fromCoils(klass, coils, byteorder=Endian.Little):
        """ Initialize a payload decoder with the result of
        reading a collection of coils from a modbus device.

        The coils are treated as a list of bit(boolean) values.

        :param coils: The coil results to initialize with
        :param byteorder: The endianess of the payload
        :returns: An initialized PayloadDecoder
        """
        if isinstance(coils, list):
            payload = pack_bitstring(coils)
            return klass(payload, byteorder)
        raise ParameterException('Invalid collection of coils supplied')
Ejemplo n.º 15
0
    def fromCoils(klass, coils, byteorder=Endian.Little, wordorder=Endian.Big):
        """ Initialize a payload decoder with the result of
        reading a collection of coils from a modbus device.

        The coils are treated as a list of bit(boolean) values.

        :param coils: The coil results to initialize with
        :param byteorder: The endianess of the payload
        :returns: An initialized PayloadDecoder
        """
        if isinstance(coils, list):
            payload = b''
            padding = len(coils) % 8
            if padding:    # Pad zero's
                extra = [False] * padding
                coils = extra + coils
            chunks = klass.bit_chunks(coils)
            for chunk in chunks:
                payload += pack_bitstring(chunk[::-1])
            return klass(payload, byteorder)
        raise ParameterException('Invalid collection of coils supplied')
Ejemplo n.º 16
0
    def fromCoils(klass, coils, byteorder=Endian.Little, wordorder=Endian.Big):
        """ Initialize a payload decoder with the result of
        reading a collection of coils from a modbus device.

        The coils are treated as a list of bit(boolean) values.

        :param coils: The coil results to initialize with
        :param byteorder: The endianess of the payload
        :returns: An initialized PayloadDecoder
        """
        if isinstance(coils, list):
            payload = b''
            padding = len(coils) % 8
            if padding:  # Pad zero's
                extra = [False] * padding
                coils = extra + coils
            chunks = klass.bit_chunks(coils)
            for chunk in chunks:
                payload += pack_bitstring(chunk[::-1])
            return klass(payload, byteorder)
        raise ParameterException('Invalid collection of coils supplied')
Ejemplo n.º 17
0
    def __set_bit(self, key, offset, values):
        '''

        :param key: The key prefix to use
        :param offset: The address offset to start at
        :param values: The values to set
        '''
        count = len(values)
        s = divmod(offset, self.__bit_size)[0]
        e = divmod(offset + count, self.__bit_size)[0]
        value = pack_bitstring(values)

        current = self.__get_bit_values(key, offset, count)
        current = (r or self.__bit_default for r in current)
        current = ''.join(current)
        current = current[0:offset] + value + current[offset + count:]
        final   = (current[s:s + self.__bit_size] for s in range(0, count, self.__bit_size))

        key = self.__get_prefix(key)
        request = ('%s:%s' % (key, v) for v in range(s, e + 1))
        request = dict(zip(request, final))
        self.client.mset(request)
Ejemplo n.º 18
0
 def testBitPacking(self):
     ''' Test all string <=> bit packing functions '''
     self.assertEqual(unpack_bitstring('\x55'), self.bits)
     self.assertEqual(pack_bitstring(self.bits), '\x55')
Ejemplo n.º 19
0
 def testBitPacking(self):
     ''' Test all string <=> bit packing functions '''
     self.assertEqual(unpack_bitstring('\x55'), self.bits)
     self.assertEqual(pack_bitstring(self.bits), '\x55')