Comments (3)
what?
from pyais.
`class NMEASorter:
def __init__(self, messages: typing.Iterable[bytes]):
self.unordered = messages
def __iter__(self) -> typing.Generator[bytes, None, None]:
buffer: typing.Dict[typing.Tuple[int, bytes], typing.List[typing.Optional[bytes]]] = {}
for msg in self.unordered:
# decode nmea header
parts = msg.split(b',')
if len(parts) < 5:
raise InvalidNMEAMessageException("Too few message parts")
try:
frag_cnt = int(parts[1])
frag_num = int(parts[2]) - 1
seq_id = int(parts[3]) if parts[3] else 0
channel = parts[4]
except ValueError as e:
raise InvalidNMEAMessageException() from e
if frag_cnt > 20:
raise InvalidNMEAMessageException("Frag count is too large")
if frag_num >= frag_cnt:
raise InvalidNMEAMessageException("Fragment number greater than Fragment count")
if frag_cnt == 1:
# A sentence with a fragment count of 1 is complete in itself
yield msg
continue
# seq_id and channel make a unique stream
slot = (seq_id, channel)
if slot not in buffer:
buffer[slot] = [None, ] * frag_cnt
buffer[slot][frag_num] = msg
msg_parts = buffer[slot][0:frag_cnt]
if all([m is not None for m in msg_parts]):
yield from msg_parts # type: ignore
del buffer[slot]
# yield all remaining messages that were not fully decoded
for msg_parts in buffer.values():
yield from filter(lambda x: x is not None, msg_parts) # type: ignore`
slot = (seq_id, channel)
if we have two messages:
eg : !AIVDM,3,1,4,A and !AIVDM,2,2,4,A they will have the same slot: (4, A) but they should not be parsed together.
I can't reproduce this issue using pip install pyais (version on this github), but it appears using pip install pyais2
from pyais.
I think that I understand.
pyais-2
was an experiment of mine to work around breaking changes in pyais. But I ultimately decided to just release version 2.0.0 of pyais. But I never actually deleted pyais-2
. I have now made up for this and deleted this project from PyPi.
The NMEASorter
was present in pyais
until version 2.0.0. I removed this class because it was not working correctly.
In current versions of pyais
this functionality is available to all classes that inherit from AssembleMessages
from pyais.
Related Issues (20)
- PiPY out of date? HOT 1
- Stream from serial/COM port HOT 2
- lat lon converters float accuracy HOT 2
- AtoN codes do not match R0126 (A-126) Table 3 or M.1371-5 TABLE 74 HOT 1
- Provide decoding of communication status field in types 1, 2, 3, 4, 9, 11, 18 HOT 5
- pyais fails to decode type 5 messages HOT 6
- Message Type 26 Logic may be incorrect HOT 2
- MessageType24PartA : incorrect length? HOT 6
- EpfdType Enum Missing InternalGNSS = 15 HOT 2
- Navigational statuses 9, 10, 13 and Ship type 29 HOT 3
- NoneFilter broken HOT 1
- Get Country Code HOT 5
- TCPConnection stops receiving messages HOT 4
- Determination of the communication status field HOT 5
- Encoded NRZI data HOT 1
- Timestamp for message type 1 and others HOT 1
- spare_1 field in MessageType19 converted as bytes HOT 1
- how to apply a filter to a single message HOT 5
- Decode raw payload data HOT 5
- Stream NMEA message with metadata HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pyais.