Ejemplo n.º 1
0
 def items_to_bytes(self, items, descriptors=None, max_packet_size=1500):
     if descriptors is None:
         descriptors = items
     heap = send.Heap(self)
     for descriptor in descriptors:
         heap.add_descriptor(descriptor)
     for item in items:
         heap.add_item(item)
     gen = send.PacketGenerator(heap, 0x123456, max_packet_size)
     return list(gen)
Ejemplo n.º 2
0
 def test_lifetime(self):
     """Heap must hold references to item values"""
     item = spead2.Item(id=0x2345, name='name', description='description',
                        shape=(2, 3), dtype=np.uint16)
     item.value = np.array([[6, 7, 8], [10, 11, 12000]], dtype=np.uint16)
     weak = weakref.ref(item.value)
     heap = send.Heap(self.flavour)
     heap.add_item(item)
     del item
     packets = list(send.PacketGenerator(heap, 0x123456, 1472))   # noqa: F841
     assert weak() is not None
     del heap
     # pypy needs multiple gc passes to wind it all up
     for i in range(10):
         gc.collect()
     assert weak() is None
Ejemplo n.º 3
0
 def test_lifetime(self):
     """Heap must hold references to item values"""
     item = spead2.Item(id=0x2345,
                        name='name',
                        description='description',
                        shape=(2, 3),
                        dtype=np.uint16)
     item.value = np.array([[6, 7, 8], [10, 11, 12000]], dtype=np.uint16)
     weak = weakref.ref(item.value)
     heap = send.Heap(self.flavour)
     heap.add_item(item)
     del item
     packets = list(send.PacketGenerator(heap, 0x123456, 1472))
     assert_is_not_none(weak())
     del heap
     assert_is_none(weak())
Ejemplo n.º 4
0
 def test_end(self):
     """Tests sending an end-of-stream marker."""
     expected = [
         b''.join([
             self.flavour.make_header(6),
             self.flavour.make_immediate(spead2.HEAP_CNT_ID, 0x123456),
             self.flavour.make_immediate(spead2.HEAP_LENGTH_ID, 1),
             self.flavour.make_immediate(spead2.PAYLOAD_OFFSET_ID, 0),
             self.flavour.make_immediate(spead2.PAYLOAD_LENGTH_ID, 1),
             self.flavour.make_immediate(spead2.STREAM_CTRL_ID, spead2.CTRL_STREAM_STOP),
             self.flavour.make_address(spead2.NULL_ID, 0),
             struct.pack('B', 0)
         ])
     ]
     heap = send.Heap(self.flavour)
     heap.add_end()
     packet = list(send.PacketGenerator(heap, 0x123456, 1500))
     assert hexlify(packet) == hexlify(expected)
Ejemplo n.º 5
0
    def test_zero_copy(self):
        """Test that heaps can reference original data.

        This allows heaps to be updated by just changing the data.
        """
        id = 0x2345
        data = np.arange(8, dtype=np.uint8)
        imm = np.zeros((), dtype='>u8')
        item1 = spead2.Item(id=id, name='item1', description='addressed item',
                            shape=data.shape, dtype=data.dtype, value=data)
        item2 = spead2.Item(id=id + 1, name='item2', description='inline item',
                            shape=(), format=[('u', self.flavour.heap_address_bits)],
                            value=imm)
        heap = spead2.send.Heap(self.flavour)
        heap.add_item(item1)
        heap.add_item(item2)
        # Now change the values after they've been added to the heap.
        data *= 2
        imm[()] = 0xdeadbeef

        expected = [
            b''.join([
                self.flavour.make_header(6),
                self.flavour.make_immediate(spead2.HEAP_CNT_ID, 0x123456),
                self.flavour.make_immediate(spead2.HEAP_LENGTH_ID, 8),
                self.flavour.make_immediate(spead2.PAYLOAD_OFFSET_ID, 0),
                self.flavour.make_immediate(spead2.PAYLOAD_LENGTH_ID, 8),
                self.flavour.make_address(id, 0),
                self.flavour.make_immediate(id + 1, 0xdeadbeef),
                data.tobytes()
            ])
        ]

        gen = send.PacketGenerator(heap, 0x123456, 1500)
        packets = list(gen)
        assert hexlify(packets) == hexlify(expected)