Source code for sbp.ext_events
#!/usr/bin/env python
# Copyright (C) 2015-2018 Swift Navigation Inc.
# Contact: Swift Navigation <dev@swiftnav.com>
#
# This source is subject to the license found in the file 'LICENSE' which must
# be be distributed together with this source. All other rights reserved.
#
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
# EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
"""
Messages reporting accurately-timestamped external events,
e.g. camera shutter time.
"""
import json
import construct
from sbp.msg import SBP, SENDER_ID
from sbp.utils import fmt_repr, exclude_fields, walk_json_dict, containerize
# Automatically generated from piksi/yaml/swiftnav/sbp/ext_events.yaml with generate.py.
# Please do not hand edit!
SBP_MSG_EXT_EVENT = 0x0101
[docs]class MsgExtEvent(SBP):
"""SBP class for message MSG_EXT_EVENT (0x0101).
You can have MSG_EXT_EVENT inherit its fields directly
from an inherited SBP object, or construct it inline using a dict
of its fields.
Reports detection of an external event, the GPS time it occurred,
which pin it was and whether it was rising or falling.
Parameters
----------
sbp : SBP
SBP parent object to inherit from.
wn : int
GPS week number
tow : int
GPS time of week rounded to the nearest millisecond
ns_residual : int
Nanosecond residual of millisecond-rounded TOW (ranges
from -500000 to 500000)
flags : int
Flags
pin : int
Pin number. 0..9 = DEBUG0..9.
sender : int
Optional sender ID, defaults to SENDER_ID (see sbp/msg.py).
"""
_parser = construct.Struct(
'wn' / construct.Int16ul,
'tow' / construct.Int32ul,
'ns_residual' / construct.Int32sl,
'flags' / construct.Int8ul,
'pin' / construct.Int8ul,)
__slots__ = [
'wn',
'tow',
'ns_residual',
'flags',
'pin',
]
def __init__(self, sbp=None, **kwargs):
if sbp:
super( MsgExtEvent,
self).__init__(sbp.msg_type, sbp.sender, sbp.length,
sbp.payload, sbp.crc)
self.from_binary(sbp.payload)
else:
super( MsgExtEvent, self).__init__()
self.msg_type = SBP_MSG_EXT_EVENT
self.sender = kwargs.pop('sender', SENDER_ID)
self.wn = kwargs.pop('wn')
self.tow = kwargs.pop('tow')
self.ns_residual = kwargs.pop('ns_residual')
self.flags = kwargs.pop('flags')
self.pin = kwargs.pop('pin')
def __repr__(self):
return fmt_repr(self)
@staticmethod
[docs] def from_json(s):
"""Given a JSON-encoded string s, build a message object.
"""
d = json.loads(s)
return MsgExtEvent.from_json_dict(d)
@staticmethod
[docs] def from_json_dict(d):
sbp = SBP.from_json_dict(d)
return MsgExtEvent(sbp, **d)
[docs] def from_binary(self, d):
"""Given a binary payload d, update the appropriate payload fields of
the message.
"""
p = MsgExtEvent._parser.parse(d)
for n in self.__class__.__slots__:
setattr(self, n, getattr(p, n))
[docs] def to_binary(self):
"""Produce a framed/packed SBP message.
"""
c = containerize(exclude_fields(self))
self.payload = MsgExtEvent._parser.build(c)
return self.pack()
[docs] def to_json_dict(self):
self.to_binary()
d = super( MsgExtEvent, self).to_json_dict()
j = walk_json_dict(exclude_fields(self))
d.update(j)
return d
msg_classes = {
0x0101: MsgExtEvent,
}