Skip to content

Commit 55f30da

Browse files
committed
add: Trimble EVT message (TNLEVT)
1 parent 8a870af commit 55f30da

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

pynmea2/types/proprietary/tnl.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,39 @@ class TNLPJT(TNL):
181181
('Coordinate System', 'coord_name'),
182182
('Project Name', 'project_name'),
183183
)
184+
185+
class TNLEVT(TNL, DatetimeFix):
186+
"""
187+
Trimble EVT message (used for events like hardware triggers)
188+
189+
0 Talker ID $PTNL
190+
1 Message ID EVT
191+
2 Event time. UTC time of event in format hhmmss.ssssss
192+
3 Port number. Port event markers receiver: "1" or "2" (optional), if two ports are available.
193+
4 NNNNNN. Incremental number of events on each independent port.
194+
5 WWWW. Week number of event (since 06 January 1980).
195+
6 Day of week. Days denoted 0 = Sunday…6 = Saturday.
196+
7 Leap second. UTC Leap Second offset from GPS time, Currently 18 seconds as of 07 July 2017.
197+
8 The checksum data, always begins with *
198+
199+
Example message:
200+
$PTNL,EVT,131007.999785,2,460,2181,5,18*72
201+
"""
202+
fields = (
203+
('Empty', '_'),
204+
('Sentence Type', 'type'),
205+
('Timestamp', 'timestamp', timestamp),
206+
('Port Number', 'port_num', int),
207+
('Event Number', 'event_num', int),
208+
('GPS Week Number', 'gps_week_num', int),
209+
('GPS Day of the Week', 'gps_day_num', int),
210+
('Leap Seconds', 'leap_secs', int)
211+
)
212+
213+
# We can derive the date from GPS Week Number and Day of the Week
214+
# Presumingly 1024 overflow was taken into accound by the GPS unit
215+
@property
216+
def datestamp(self):
217+
gps_epoch = datetime.date(year=1980, month=1, day=6)
218+
return gps_epoch + datetime.timedelta(
219+
weeks=self.gps_week_num, days=self.gps_day_num)

test/test_tnl.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,20 @@ def test_tnlvhd():
107107
assert msg.gps_quality == '3'
108108
assert msg.num_sats == 7
109109
assert msg.pdop == 2.4
110+
111+
def test_tnlevt():
112+
data = '$PTNL,EVT,131007.999785,2,460,2181,5,18*72'
113+
msg = pynmea2.parse(data)
114+
assert type(msg) == pynmea2.tnl.TNLEVT
115+
assert msg.manufacturer == 'TNL'
116+
assert msg.type == 'EVT'
117+
assert msg.timestamp == datetime.time(13, 10, 7, 999785, tzinfo=datetime.timezone.utc)
118+
assert msg.port_num == 2
119+
assert msg.event_num == 460
120+
assert msg.gps_week_num == 2181
121+
assert msg.gps_day_num == 5
122+
assert msg.leap_secs == 18
123+
124+
assert msg.datestamp == datetime.date(2021, 10, 29)
125+
assert msg.datetime == datetime.datetime(
126+
2021, 10, 29, 13, 10, 7, 999785, tzinfo=datetime.timezone.utc)

0 commit comments

Comments
 (0)