1 # SPDX-License-Identifier: MIT
3 # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 from bt2
import native_bt
, object, utils
6 from bt2
import clock_snapshot
as bt2_clock_snapshot
7 from bt2
import packet
as bt2_packet
8 from bt2
import stream
as bt2_stream
9 from bt2
import event
as bt2_event
12 def _create_from_ptr(ptr
):
13 msg_type
= native_bt
.message_get_type(ptr
)
14 return _MESSAGE_TYPE_TO_CLS
[msg_type
]._create
_from
_ptr
(ptr
)
17 class _MessageConst(object._SharedObject
):
20 native_bt
.message_get_ref(ptr
)
24 native_bt
.message_put_ref(ptr
)
27 def _check_has_default_clock_class(clock_class
):
28 if clock_class
is None:
30 "cannot get default clock snapshot: stream class has no default clock class"
34 class _Message(_MessageConst
):
38 class _MessageWithDefaultClockSnapshot
:
39 def _get_default_clock_snapshot(self
, borrow_clock_snapshot_ptr
):
40 snapshot_ptr
= borrow_clock_snapshot_ptr(self
._ptr
)
42 return bt2_clock_snapshot
._ClockSnapshotConst
._create
_from
_ptr
_and
_get
_ref
(
43 snapshot_ptr
, self
._ptr
, self
._get
_ref
, self
._put
_ref
47 class _EventMessageConst(_MessageConst
, _MessageWithDefaultClockSnapshot
):
48 _borrow_default_clock_snapshot
= staticmethod(
49 native_bt
.message_event_borrow_default_clock_snapshot_const
51 _borrow_event
= staticmethod(native_bt
.message_event_borrow_event_const
)
52 _event_pycls
= property(lambda _
: bt2_event
._EventConst
)
55 def default_clock_snapshot(self
):
56 self
._check
_has
_default
_clock
_class
(self
.event
.stream
.cls
.default_clock_class
)
57 return self
._get
_default
_clock
_snapshot
(self
._borrow
_default
_clock
_snapshot
)
61 event_ptr
= self
._borrow
_event
(self
._ptr
)
62 assert event_ptr
is not None
63 return self
._event
_pycls
._create
_from
_ptr
_and
_get
_ref
(
64 event_ptr
, self
._ptr
, self
._get
_ref
, self
._put
_ref
68 class _EventMessage(_EventMessageConst
, _Message
):
69 _borrow_event
= staticmethod(native_bt
.message_event_borrow_event
)
70 _stream_pycls
= property(lambda _
: bt2_stream
._Stream
)
71 _event_pycls
= property(lambda _
: bt2_event
._Event
)
74 class _PacketMessageConst(_MessageConst
, _MessageWithDefaultClockSnapshot
):
75 _packet_pycls
= bt2_packet
._PacketConst
78 def default_clock_snapshot(self
):
79 self
._check
_has
_default
_clock
_class
(self
.packet
.stream
.cls
.default_clock_class
)
80 return self
._get
_default
_clock
_snapshot
(self
._borrow
_default
_clock
_snapshot
_ptr
)
84 packet_ptr
= self
._borrow
_packet
(self
._ptr
)
85 assert packet_ptr
is not None
86 return self
._packet
_pycls
._create
_from
_ptr
_and
_get
_ref
(packet_ptr
)
89 class _PacketMessage(_PacketMessageConst
, _Message
):
90 _packet_pycls
= bt2_packet
._Packet
93 class _PacketBeginningMessageConst(_PacketMessageConst
):
94 _borrow_packet
= staticmethod(
95 native_bt
.message_packet_beginning_borrow_packet_const
97 _borrow_default_clock_snapshot_ptr
= staticmethod(
98 native_bt
.message_packet_beginning_borrow_default_clock_snapshot_const
102 class _PacketBeginningMessage(_PacketMessage
):
103 _borrow_packet
= staticmethod(native_bt
.message_packet_beginning_borrow_packet
)
106 class _PacketEndMessageConst(_PacketMessageConst
):
107 _borrow_packet
= staticmethod(native_bt
.message_packet_end_borrow_packet_const
)
108 _borrow_default_clock_snapshot_ptr
= staticmethod(
109 native_bt
.message_packet_end_borrow_default_clock_snapshot_const
113 class _PacketEndMessage(_PacketMessage
):
114 _borrow_packet
= staticmethod(native_bt
.message_packet_end_borrow_packet
)
117 class _StreamMessageConst(_MessageConst
, _MessageWithDefaultClockSnapshot
):
118 _stream_pycls
= property(lambda _
: bt2_stream
._StreamConst
)
122 stream_ptr
= self
._borrow
_stream
_ptr
(self
._ptr
)
124 return self
._stream
_pycls
._create
_from
_ptr
_and
_get
_ref
(stream_ptr
)
127 def default_clock_snapshot(self
):
128 self
._check
_has
_default
_clock
_class
(self
.stream
.cls
.default_clock_class
)
130 status
, snapshot_ptr
= self
._borrow
_default
_clock
_snapshot
_ptr
(self
._ptr
)
132 if status
== native_bt
.MESSAGE_STREAM_CLOCK_SNAPSHOT_STATE_UNKNOWN
:
133 return bt2_clock_snapshot
._UnknownClockSnapshot
()
135 return bt2_clock_snapshot
._ClockSnapshotConst
._create
_from
_ptr
_and
_get
_ref
(
136 snapshot_ptr
, self
._ptr
, self
._get
_ref
, self
._put
_ref
140 class _StreamMessage(_StreamMessageConst
, _Message
):
141 def _default_clock_snapshot(self
, raw_value
):
142 utils
._check
_uint
64(raw_value
)
143 self
._set
_default
_clock
_snapshot
(self
._ptr
, raw_value
)
145 _default_clock_snapshot
= property(
146 fget
=_StreamMessageConst
.default_clock_snapshot
.fget
,
147 fset
=_default_clock_snapshot
,
149 _stream_pycls
= property(lambda _
: bt2_stream
._Stream
)
152 class _StreamBeginningMessageConst(_StreamMessageConst
):
153 _borrow_stream_ptr
= staticmethod(
154 native_bt
.message_stream_beginning_borrow_stream_const
156 _borrow_default_clock_snapshot_ptr
= staticmethod(
157 native_bt
.message_stream_beginning_borrow_default_clock_snapshot_const
161 class _StreamBeginningMessage(_StreamMessage
):
162 _borrow_stream_ptr
= staticmethod(native_bt
.message_stream_beginning_borrow_stream
)
163 _set_default_clock_snapshot
= staticmethod(
164 native_bt
.message_stream_beginning_set_default_clock_snapshot
168 class _StreamEndMessageConst(_StreamMessageConst
):
169 _borrow_stream_ptr
= staticmethod(native_bt
.message_stream_end_borrow_stream_const
)
170 _borrow_default_clock_snapshot_ptr
= staticmethod(
171 native_bt
.message_stream_end_borrow_default_clock_snapshot_const
175 class _StreamEndMessage(_StreamMessage
):
176 _borrow_stream_ptr
= staticmethod(native_bt
.message_stream_end_borrow_stream
)
177 _set_default_clock_snapshot
= staticmethod(
178 native_bt
.message_stream_end_set_default_clock_snapshot
182 class _MessageIteratorInactivityMessageConst(
183 _MessageConst
, _MessageWithDefaultClockSnapshot
185 _borrow_clock_snapshot_ptr
= staticmethod(
186 native_bt
.message_message_iterator_inactivity_borrow_clock_snapshot_const
190 def clock_snapshot(self
):
191 # This kind of message always has a clock class: no
192 # need to call self._check_has_default_clock_class() here.
193 return self
._get
_default
_clock
_snapshot
(self
._borrow
_clock
_snapshot
_ptr
)
196 class _MessageIteratorInactivityMessage(
197 _MessageIteratorInactivityMessageConst
, _Message
202 class _DiscardedMessageConst(_MessageConst
, _MessageWithDefaultClockSnapshot
):
203 _stream_pycls
= property(lambda _
: bt2_stream
._StreamConst
)
207 stream_ptr
= self
._borrow
_stream
_ptr
(self
._ptr
)
209 return self
._stream
_pycls
._create
_from
_ptr
_and
_get
_ref
(stream_ptr
)
213 avail
, count
= self
._get
_count
(self
._ptr
)
214 if avail
is native_bt
.PROPERTY_AVAILABILITY_AVAILABLE
:
217 def _check_has_default_clock_snapshots(self
):
218 if not self
._has
_default
_clock
_snapshots
:
220 "cannot get default clock snapshot: such a message has no clock snapshots for this stream class"
224 def beginning_default_clock_snapshot(self
):
225 self
._check
_has
_default
_clock
_snapshots
()
226 return self
._get
_default
_clock
_snapshot
(
227 self
._borrow
_beginning
_clock
_snapshot
_ptr
231 def end_default_clock_snapshot(self
):
232 self
._check
_has
_default
_clock
_snapshots
()
233 return self
._get
_default
_clock
_snapshot
(self
._borrow
_end
_clock
_snapshot
_ptr
)
236 class _DiscardedMessage(_DiscardedMessageConst
, _Message
):
237 _stream_pycls
= property(lambda _
: bt2_stream
._Stream
)
239 def _set_count(self
, count
):
240 utils
._check
_uint
64(count
)
243 raise ValueError("discarded {} count is 0".format(self
._item
_name
))
245 self
._set
_count
(self
._ptr
, count
)
247 _count
= property(fget
=_DiscardedMessageConst
.count
.fget
, fset
=_set_count
)
250 class _DiscardedEventsMessageConst(_DiscardedMessageConst
):
251 _borrow_stream_ptr
= staticmethod(
252 native_bt
.message_discarded_events_borrow_stream_const
254 _get_count
= staticmethod(native_bt
.message_discarded_events_get_count
)
255 _borrow_beginning_clock_snapshot_ptr
= staticmethod(
256 native_bt
.message_discarded_events_borrow_beginning_default_clock_snapshot_const
258 _borrow_end_clock_snapshot_ptr
= staticmethod(
259 native_bt
.message_discarded_events_borrow_end_default_clock_snapshot_const
263 def _has_default_clock_snapshots(self
):
264 return self
.stream
.cls
.discarded_events_have_default_clock_snapshots
267 class _DiscardedEventsMessage(_DiscardedEventsMessageConst
, _DiscardedMessage
):
268 _borrow_stream_ptr
= staticmethod(native_bt
.message_discarded_events_borrow_stream
)
269 _set_count
= staticmethod(native_bt
.message_discarded_events_set_count
)
273 class _DiscardedPacketsMessageConst(_DiscardedMessageConst
):
274 _borrow_stream_ptr
= staticmethod(
275 native_bt
.message_discarded_packets_borrow_stream_const
277 _get_count
= staticmethod(native_bt
.message_discarded_packets_get_count
)
278 _borrow_beginning_clock_snapshot_ptr
= staticmethod(
279 native_bt
.message_discarded_packets_borrow_beginning_default_clock_snapshot_const
281 _borrow_end_clock_snapshot_ptr
= staticmethod(
282 native_bt
.message_discarded_packets_borrow_end_default_clock_snapshot_const
286 def _has_default_clock_snapshots(self
):
287 return self
.stream
.cls
.discarded_packets_have_default_clock_snapshots
290 class _DiscardedPacketsMessage(_DiscardedPacketsMessageConst
, _DiscardedMessage
):
291 _borrow_stream_ptr
= staticmethod(native_bt
.message_discarded_packets_borrow_stream
)
292 _set_count
= staticmethod(native_bt
.message_discarded_packets_set_count
)
293 _item_name
= "packet"
296 _MESSAGE_TYPE_TO_CLS
= {
297 native_bt
.MESSAGE_TYPE_EVENT
: _EventMessage
,
298 native_bt
.MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY
: _MessageIteratorInactivityMessage
,
299 native_bt
.MESSAGE_TYPE_STREAM_BEGINNING
: _StreamBeginningMessage
,
300 native_bt
.MESSAGE_TYPE_STREAM_END
: _StreamEndMessage
,
301 native_bt
.MESSAGE_TYPE_PACKET_BEGINNING
: _PacketBeginningMessage
,
302 native_bt
.MESSAGE_TYPE_PACKET_END
: _PacketEndMessage
,
303 native_bt
.MESSAGE_TYPE_DISCARDED_EVENTS
: _DiscardedEventsMessage
,
304 native_bt
.MESSAGE_TYPE_DISCARDED_PACKETS
: _DiscardedPacketsMessage
,
307 _MESSAGE_TYPE_TO_CLS
= {
308 native_bt
.MESSAGE_TYPE_EVENT
: _EventMessageConst
,
309 native_bt
.MESSAGE_TYPE_MESSAGE_ITERATOR_INACTIVITY
: _MessageIteratorInactivityMessageConst
,
310 native_bt
.MESSAGE_TYPE_STREAM_BEGINNING
: _StreamBeginningMessageConst
,
311 native_bt
.MESSAGE_TYPE_STREAM_END
: _StreamEndMessageConst
,
312 native_bt
.MESSAGE_TYPE_PACKET_BEGINNING
: _PacketBeginningMessageConst
,
313 native_bt
.MESSAGE_TYPE_PACKET_END
: _PacketEndMessageConst
,
314 native_bt
.MESSAGE_TYPE_DISCARDED_EVENTS
: _DiscardedEventsMessageConst
,
315 native_bt
.MESSAGE_TYPE_DISCARDED_PACKETS
: _DiscardedPacketsMessageConst
,