mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2026-02-11 07:03:07 +01:00
add filter to sendN2K
This commit is contained in:
30
tools/sendN2K.py
Normal file → Executable file
30
tools/sendN2K.py
Normal file → Executable file
@@ -3,6 +3,7 @@ import re
|
|||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import datetime
|
import datetime
|
||||||
|
import getopt
|
||||||
|
|
||||||
###generated with getPgnType.py from canboat pgns.json
|
###generated with getPgnType.py from canboat pgns.json
|
||||||
PGNM_Fast=0
|
PGNM_Fast=0
|
||||||
@@ -429,7 +430,7 @@ class CanFrame:
|
|||||||
def key(self):
|
def key(self):
|
||||||
if self.sequence is None or self.pgn == 0:
|
if self.sequence is None or self.pgn == 0:
|
||||||
return None
|
return None
|
||||||
return f"{self.pgn}-{self.sequence}"
|
return f"{self.pgn}-{self.sequence}-{self.src}"
|
||||||
def getFPNum(self,bytes=False):
|
def getFPNum(self,bytes=False):
|
||||||
if self.frame != 0:
|
if self.frame != 0:
|
||||||
return None
|
return None
|
||||||
@@ -497,14 +498,38 @@ class MultiFrame:
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.firstFrame.ts},{self.firstFrame.prio},{self.firstFrame.pgn},{self.firstFrame.src},{self.firstFrame.dst},{self.numBytes},{dataToSep(self.bytes,self.numBytes)}"
|
return f"{self.firstFrame.ts},{self.firstFrame.prio},{self.firstFrame.pgn},{self.firstFrame.src},{self.firstFrame.dst},{self.numBytes},{dataToSep(self.bytes,self.numBytes)}"
|
||||||
|
|
||||||
|
def usage():
|
||||||
|
print(f"usage: {sys.argv[0]} [-q] [-p pgn,pgn,...] file")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
with open (sys.argv[1],"r") as fh:
|
try:
|
||||||
|
opts,args=getopt.getopt(sys.argv[1:],"hp:q")
|
||||||
|
except getopt.GetoptError as err:
|
||||||
|
err(err)
|
||||||
|
pgnlist=[]
|
||||||
|
quiet=False
|
||||||
|
for o,a in opts:
|
||||||
|
if o == '-h':
|
||||||
|
usage()
|
||||||
|
elif o == '-q':
|
||||||
|
quiet=True
|
||||||
|
elif o == '-p':
|
||||||
|
pgns=(int(x) for x in a.split(","))
|
||||||
|
pgnlist.extend(pgns)
|
||||||
|
if len(args) < 1:
|
||||||
|
usage()
|
||||||
|
hasFilter=len(pgnlist) > 0
|
||||||
|
if not quiet and hasFilter:
|
||||||
|
print(f"PGNs: {','.join(str(x) for x in pgnlist)}")
|
||||||
|
with open (args[0],"r") as fh:
|
||||||
buffer={}
|
buffer={}
|
||||||
lnr=0
|
lnr=0
|
||||||
for line in fh:
|
for line in fh:
|
||||||
lnr+=1
|
lnr+=1
|
||||||
frame=CanFrame.fromDump(line)
|
frame=CanFrame.fromDump(line)
|
||||||
|
if hasFilter and not frame.pgn in pgnlist:
|
||||||
|
continue
|
||||||
if frame.sequence is None:
|
if frame.sequence is None:
|
||||||
print(frame)
|
print(frame)
|
||||||
else:
|
else:
|
||||||
@@ -513,6 +538,7 @@ if __name__ == '__main__':
|
|||||||
mustDelete=False
|
mustDelete=False
|
||||||
if mf is None:
|
if mf is None:
|
||||||
if frame.frame != 0:
|
if frame.frame != 0:
|
||||||
|
if not quiet:
|
||||||
print(f"floating multi frame in line {lnr}: {frame}",file=sys.stderr)
|
print(f"floating multi frame in line {lnr}: {frame}",file=sys.stderr)
|
||||||
continue
|
continue
|
||||||
mf=MultiFrame(frame)
|
mf=MultiFrame(frame)
|
||||||
|
|||||||
Reference in New Issue
Block a user