Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Implement connected-mode operation #21

Merged
merged 207 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
207 commits
Select commit Hold shift + click to select a range
860264b
frame: Re-jig structure for handling AX.25 2.2
sjlongland Nov 9, 2019
9cb3f3a
frame: Add encoders/decoders for connection-related types.
sjlongland Nov 9, 2019
7b79d3b
frame: Fix 8-bit supervisory decode
sjlongland Nov 11, 2019
41778b5
frame: Add 16-bit supervisory decode test
sjlongland Nov 11, 2019
ec18d41
frame: Fix supervisory frame string representation
sjlongland Nov 11, 2019
c5d90c0
frame: Add supervisory frame copy test
sjlongland Nov 11, 2019
e16e686
frame: Fix IFrame copy, add tests
sjlongland Nov 11, 2019
469caf5
frame: Add AX25BaseUnnumberedFrame constructor and tests
sjlongland Nov 11, 2019
79e87b6
frame: Add test for decoding SABM
sjlongland Nov 11, 2019
656308f
frame: Add SABM with payload test
sjlongland Nov 11, 2019
e997021
frame: Fix test frame encoding, add tests
sjlongland Nov 11, 2019
558a16e
frame: Fix pass thorough of timestamp/deadline in AX25RawFrame
sjlongland Nov 11, 2019
d17ccb0
frame: Exclude some lines from coverage
sjlongland Nov 11, 2019
286e2cf
frame: Add test cases for base class.
sjlongland Nov 11, 2019
59bac2e
frame: Implement XID encode/decode and tests
sjlongland Nov 11, 2019
594ac77
frame: Fix UA modifier
sjlongland Nov 16, 2019
534dfdc
frame: Re-work frame decoding.
sjlongland Nov 16, 2019
7c6f75e
frame: Document the module a little bit.
sjlongland Nov 16, 2019
eac390e
frame: Tweak coverage, add further checks.
sjlongland Nov 16, 2019
151bc84
frame tests: Re-work test cases.
sjlongland Nov 16, 2019
244eda6
frame: Make sure we handle AX.25 1.x frames properly
sjlongland Nov 17, 2019
78ee141
frame: Add AX25Address.decode SSID override
sjlongland Nov 17, 2019
ca23f5e
frame: Set defaults for C/R and P/F bits.
sjlongland Nov 17, 2019
cc0e2ff
version: Add enumeration for AX.25 protocol versions.
sjlongland Nov 17, 2019
15eae67
station, peer: Commit work-in-progress implementation
sjlongland Nov 17, 2019
4709af1
station: Tweak error on unsupported protocol
sjlongland Nov 17, 2019
3078eb8
station: Clean up imports
sjlongland Nov 17, 2019
f46a300
station: Initial test cases
sjlongland Nov 17, 2019
415827c
station: Normalise the given call-sign
sjlongland Nov 17, 2019
64caadc
station tests: Split cases up, add attach/detach checks
sjlongland Nov 17, 2019
58eac8b
test cases: Add mocks library
sjlongland Nov 17, 2019
d78627e
station: Add peer factory tests
sjlongland Nov 17, 2019
4185ba4
station: Add existing peer retrieval test.
sjlongland Nov 21, 2019
585457e
station: Add _drop_peer test
sjlongland Nov 21, 2019
2eb493b
peer: Fix address property/constructor argument
sjlongland Nov 21, 2019
5bd8a2b
station: Add debug messages for receive tracing
sjlongland Nov 21, 2019
01708b8
test mocks: Add receive stub to dummy peer class
sjlongland Nov 21, 2019
62fcb97
station: Add test cases for received frames.
sjlongland Nov 21, 2019
2262bf0
peer: Use address property
sjlongland Nov 21, 2019
7b1c7cc
Fix issues spotted by pyflakes.
sjlongland Nov 21, 2019
ea8a925
peer: Fix RR frame scheduling
sjlongland Nov 21, 2019
d7a1fc0
peer: Implement ping method and handler
sjlongland Nov 21, 2019
953fd54
frame: Expand on XID parsing/generation
sjlongland Nov 23, 2019
72dd5d0
uint: Add unsigned integer encoding/decoding routines
sjlongland Nov 23, 2019
1d1ff34
frame: Use uint encode/decode for multi-byte fields.
sjlongland Nov 23, 2019
bfec941
frame: Define various types of XID parameter
sjlongland Nov 23, 2019
0fda488
frame tests: Split test suites up by frame type.
sjlongland Nov 23, 2019
5daec31
frame: Fix HDLC Optional Functions parsing, add tests
sjlongland Nov 23, 2019
a377c81
frame: Fix XID HDLC Optional Features encoding/decoding
sjlongland Nov 23, 2019
9694d25
frame: Add test cases for other XID parameters
sjlongland Nov 23, 2019
e5b98ed
frame: Define defaults for XIDs
sjlongland Nov 23, 2019
28d6735
frame: Define expected FI and GI for XID.
sjlongland Nov 23, 2019
427dcdc
peer, station: Add parameters, implement XID handling
sjlongland Nov 23, 2019
a14d80a
peer: Implement more connection logic
sjlongland Nov 23, 2019
d058009
peer: Implement S-frame handling logic
sjlongland Nov 23, 2019
5299298
peer: Move `peer` property, fix `_start_timer`
sjlongland Nov 24, 2019
bfc7a6c
test mocks: Expand dummy peer class
sjlongland Nov 24, 2019
f3380fd
peer tests: Add some helper tests
sjlongland Nov 24, 2019
86bbe73
peer: Fix helper done_sig signal.
sjlongland Nov 24, 2019
4978ad8
peer tests: Add _finish tests
sjlongland Nov 24, 2019
0097ad3
mocks: Add time method to IO loop
sjlongland Nov 24, 2019
ad03bff
peer: Move pending test frame check logic.
sjlongland Nov 24, 2019
b92eb2e
peer: Fix test frame generation
sjlongland Nov 24, 2019
0806e0f
peer: Remove redundant _done init
sjlongland Nov 24, 2019
3863050
mocks: Add station to dummy peer object.
sjlongland Nov 24, 2019
b727017
mocks: Move time method to correct object
sjlongland Nov 24, 2019
fdfc6fe
peer tests: Add tests for handling TEST frames.
sjlongland Nov 24, 2019
f1cfc70
.gitignore: Exclude coverage reports, egg info
sjlongland Nov 24, 2019
7a90fbc
peer: Tweak hook management
sjlongland Nov 24, 2019
4e454cd
peer: Add negotiation tests
sjlongland Nov 24, 2019
a0b491a
peer tests: Rename negotiation test routines.
sjlongland Nov 24, 2019
dda0f05
peer: Connection helper fixes
sjlongland Nov 24, 2019
ee681a9
mocks: Add negotiation tweaks to dummy station
sjlongland Nov 24, 2019
42e292b
peer: Add connection test cases
sjlongland Nov 24, 2019
67d80b2
mocks: Fix pass-through of logs to parent
sjlongland Nov 24, 2019
833bf1d
mocks: Set full duplex flag on station
sjlongland Nov 24, 2019
9d9742d
station, peer: Pass through full_duplex flag
sjlongland Nov 24, 2019
c35a7b6
peer: Fix reject mode precedence
sjlongland Nov 24, 2019
973b892
peer: Avoid double-initialisation of reject mode, full duplex
sjlongland Nov 24, 2019
49767da
peer: Interpret I-field length in bits
sjlongland Nov 24, 2019
8069cd4
peer: Restrict RR and RNR to connected state.
sjlongland Nov 24, 2019
535ac84
peer: Handle the "no paths" case.
sjlongland Nov 24, 2019
ecc0680
peer: Fix XID frame generation
sjlongland Nov 24, 2019
87c3d96
peer: Fix station protocol detection
sjlongland Nov 24, 2019
f7ee0bc
mocks: Make interface accessible to mock station
sjlongland Nov 24, 2019
39fefa1
peer: Add tests for XID handling
sjlongland Nov 24, 2019
d2a87b2
unit tests: Port from nosetests to py.test
sjlongland Sep 4, 2021
9b10e45
peer unit tests: Drop nosecompat test library usage.
sjlongland Nov 14, 2021
1d2b15c
peer: Fix path selection, add tests
sjlongland Nov 14, 2021
aa478fd
peer: Pick most frequently seen RX path if no TX paths rated.
sjlongland Nov 14, 2021
6810333
peer unit tests: Lean on AX25Path `__str__` for test readability.
sjlongland Nov 14, 2021
ef32b07
peer: Test path weight rating
sjlongland Nov 14, 2021
b331bdc
peer unit tests: Test ping() method
sjlongland Nov 14, 2021
19f3005
peer: Fix comparison of states
sjlongland Nov 14, 2021
f531859
peer unit tests: Test connect() method
sjlongland Nov 14, 2021
e2ef537
peer unit tests: Move connect() test cases
sjlongland Nov 18, 2021
2c0fd5a
unit test mocks: Add `connection_request` signal to mock station.
sjlongland Nov 18, 2021
7d1e966
peer unit tests: Test connection establishment logic.
sjlongland Nov 18, 2021
354b3c7
peer: Fix logic for DM frame reception
sjlongland Nov 18, 2021
9e8f3ee
peer: Initialise connection on receipt of UA.
sjlongland Nov 18, 2021
0171af1
peer: Treat incoming SABM(E) in CONNECTING state as UA.
sjlongland Nov 18, 2021
49fecb2
peer: Pass SABM(E) to handler if outgoing connection attempt in progr…
sjlongland Nov 18, 2021
11e9f19
pyproject.toml: Enable coverage by default
sjlongland Nov 27, 2021
dc3e890
peer unit tests: Test incoming connection acceptance and rejection
sjlongland Nov 27, 2021
50356e9
peer: Set DISCONNECTING state when sending DISC
sjlongland Nov 27, 2021
8b19fa2
peer: Rename incoming connect timeout to ACK timeout.
sjlongland Nov 27, 2021
5efebd3
peer: Start timer after sending DISC.
sjlongland Nov 27, 2021
7b5ed05
station: Drop _drop_peer, use weak dictionary instead
sjlongland Nov 27, 2021
fee885e
peer: Refine clean-up logic, add tests
sjlongland Nov 27, 2021
39a9b56
peer unit tests: Test RX path stats gathering
sjlongland Nov 27, 2021
eb6e0ee
peer unit tests: Tweak test suite name
sjlongland Nov 27, 2021
0c6e8f8
peer: Pass weak reference to test frame handler.
sjlongland Nov 27, 2021
bc34690
peer: Fix handling of TEST frame responses, add unit tests.
sjlongland Nov 27, 2021
e3c144b
peer: Tweak `FRMR` handling
sjlongland Nov 27, 2021
a792e79
peer unit tests: Pass XID tests through _on_receive
sjlongland Nov 27, 2021
ccf8d16
Revert "pyproject.toml: Enable coverage by default"
sjlongland Nov 27, 2021
511e10a
issue #17: frame: Fix SABM and SABME bit flip.
sjlongland Apr 1, 2023
6516285
issue #17: frame: Add unit test for SABME decode
sjlongland Apr 1, 2023
377f003
issue #17: frame: Fix pass-through of P/F bit
sjlongland Apr 1, 2023
82e7401
issue #17: frame: Update test data with P/F bit set.
sjlongland Apr 1, 2023
005f5eb
issue #17: frame: Add unit tests for emitting SABM(E)
sjlongland Apr 1, 2023
6ab497c
.coveragerc: Exclude tests from coverage report
sjlongland Apr 1, 2023
641eb24
peer: On receipt of an I-frame, push it to the received signal handler.
sjlongland Apr 1, 2023
2b2f331
peer: Add some unit tests for sending certain frame types
sjlongland Apr 1, 2023
fe4f878
peer: Test reception of DM frame.
sjlongland Apr 1, 2023
a6c5580
peer: Test reception of DISC frame
sjlongland Apr 1, 2023
782614b
peer: Fix comments in unit tests
sjlongland Apr 1, 2023
0049acc
peer: Add some more log statements
sjlongland Apr 1, 2023
19934c9
coding style: Apply `black`
sjlongland Apr 2, 2023
972f85e
frame: Re-instate some manual formatting
sjlongland Apr 2, 2023
eb9e967
aprs.datatype: Re-instate manual formatting of block
sjlongland Apr 2, 2023
5a7ec8c
peer: Test connection initialisation
sjlongland Apr 2, 2023
6e6fedb
peer: Test state change logic
sjlongland Apr 2, 2023
ade5d9b
peer: Test DISC UA time-out handling
sjlongland Apr 2, 2023
e66a959
peer: Check handling of unsolicited UA
sjlongland Apr 2, 2023
9f3483d
peer: Test DM handling
sjlongland Apr 2, 2023
60015fd
frame: Make U frames set P/F by default
sjlongland Apr 2, 2023
c4009a4
kiss: Add some more debug statements
sjlongland Apr 2, 2023
dccf9e3
router: Add some debug statements for bind/unbind.
sjlongland Apr 2, 2023
af1e05e
peer: Implement `send()` method
sjlongland Apr 2, 2023
d3d0efc
peer: `pf` bit is in the frame not its header.
sjlongland Apr 2, 2023
ef82c49
peer: Send `SABM` to connecting station after ACKing its `SABM`
sjlongland Apr 2, 2023
4986254
peer: Expect SABMs both ways when connecting.
sjlongland Apr 16, 2023
62457a8
peer: Rename parameter to `paclen`, set to 128.
sjlongland Apr 16, 2023
dc591ef
router: `python3 -m black` clean-up
sjlongland Apr 16, 2023
cd52361
peer unit tests: `python3 -m black` clean-up
sjlongland Apr 16, 2023
468c1ec
peer: Add `received_frame` and `sent_frame` signals
sjlongland Apr 16, 2023
5040b86
pytest.ini: Set some pytest options.
sjlongland Apr 16, 2023
cb1d09a
peer: Add some logging statements to track state variables.
sjlongland Apr 16, 2023
edc4a87
`python3 -m black` code clean-up
sjlongland Apr 16, 2023
611ee2c
frame unit tests: Translate `nosecompat` tests to bare `assert`
sjlongland Oct 19, 2023
12dcc1b
frame unit tests: Retire `eq_` from nosetests
sjlongland Oct 19, 2023
12c5552
frame: Expand `str()` operator for further debugging data.
sjlongland Oct 19, 2023
147961d
peer: Do not send SABM on incoming connection
sjlongland Oct 19, 2023
ac15741
doc: Snapshot the AX.25 2.0 spec page
sjlongland Oct 23, 2023
6d282e8
doc: Also commit AX.25 2.2 specs
sjlongland Oct 23, 2023
cd40759
peer: Attempt to debug N(R)/N(S) flow control handshake.
sjlongland Oct 24, 2023
07b7096
station: Drop RR-delay to 3 seconds
sjlongland Oct 24, 2023
a93a481
Apply `black` updates to coding style
sjlongland Oct 24, 2023
e67ac91
doc: AX.25 2.0 docs: Remove JavaScript
sjlongland Oct 24, 2023
94b20e5
README.md: document standards
sjlongland Oct 24, 2023
073fa88
frame: Fix UA stringification tests
sjlongland May 4, 2024
9508652
frame: Allow `AX25Address` to return "normalised copies" with customi…
sjlongland May 7, 2024
167a330
kiss: Describe the other kinds of KISS frames
sjlongland May 7, 2024
426c0b1
tools: Add a KISS frame dump tool
sjlongland May 7, 2024
fca874c
kiss: Silence annoying "RECV FRAME start at 0" when buffer == [0xc0]
sjlongland May 7, 2024
d2cf0ef
station: Store and consider command bit state
sjlongland May 7, 2024
5d98ab1
peer: Move enumerations out of the `AX25Peer` class
sjlongland May 7, 2024
856ce1d
peer: Expose connection state
sjlongland May 7, 2024
ec7340a
frame: Catch non-integer/boolean input on XID parameters
sjlongland May 7, 2024
77b8b0d
peer: Send maximum outstanding frames in XID.
sjlongland May 7, 2024
3eb7543
Revert "station: Store and consider command bit state"
sjlongland May 7, 2024
9b094ed
mocks: Ignore multiple `TimeoutHandle.cancel` calls
sjlongland May 7, 2024
ae2ace4
peer: Don't expect SABM in reply to our SABM.
sjlongland May 7, 2024
45a2c46
peer: Always set C/H bits appropriately
sjlongland May 7, 2024
d53b595
peer: Drop unused _ack_state counter
sjlongland May 7, 2024
57f8fb7
peer: Add comment to state updates, always apply modulo.
sjlongland May 7, 2024
1b98163
peer: Update N(S) and N(R) prior to I-frame TX
sjlongland May 7, 2024
afeaca6
peer: ACK outstanding frames on every I or S frame
sjlongland May 7, 2024
d7a0e7e
peer: Set V(R) from I-frame N(S) + 1
sjlongland May 7, 2024
aab3882
peer: Fix logic for ACKing outstanding I-frames.
sjlongland May 7, 2024
c9f0828
peer: Clarify where state variables are being updated
sjlongland May 7, 2024
1526779
peer: Always cancel helper time-out timer
sjlongland May 7, 2024
23ce89d
peer: Add a numeric suffix to the handler for identification
sjlongland May 7, 2024
12769e8
peer: Add some debugging logs
sjlongland May 7, 2024
a93f869
test mocks: Add some missing bits to the mock peer.
sjlongland May 7, 2024
1b844b9
peer tests: Clean up SABM handling in connection helper
sjlongland May 7, 2024
37282ab
tools: Add `call` tool
sjlongland May 7, 2024
bbaab1e
coverage: Exclude interactive tools
sjlongland May 7, 2024
38b4982
pyproject.toml: Set dependencies for the `call` tool.
sjlongland May 7, 2024
5b2ead6
README.md update
sjlongland May 7, 2024
7bf880d
peer unit tests: Test send segmentation
sjlongland May 7, 2024
e926d6b
peer unit tests: Test decoding of I/S-frames.
sjlongland May 7, 2024
6a68be3
peer unit tests: Test I-frame handling
sjlongland May 7, 2024
236c9d0
peer unit tests: Test S-frame handling
sjlongland May 7, 2024
1dd227e
peer: Require connection attempt before XID
sjlongland May 7, 2024
4202223
tools.call: Drop AX.25 2.0 limitation
sjlongland May 7, 2024
c11b587
tools.call: Don't use magic numbers for PID.
sjlongland May 7, 2024
83d3640
peer: Re-instate `_ack_state`, use it for handling peer `N(R)`
sjlongland May 8, 2024
bc8bee5
tools.listen: Add basic tool for "listening" for a connection
sjlongland May 8, 2024
d50744d
README.md update
sjlongland May 8, 2024
ae18276
peer: Assume modulo 8 if not set
sjlongland May 8, 2024
1de9e4a
tools.listen: Add line echo, tweak buffering
sjlongland May 8, 2024
4f25ce9
Apply `black` code formatting
sjlongland May 8, 2024
2cc665a
peer unit tests: Test frame scheduling logic
sjlongland May 8, 2024
76f1aae
peer unit tests: Test ACK timer handling
sjlongland May 8, 2024
3152c52
peer unit tests: Finish off unit tests
sjlongland May 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[run]
branch=true
source=aioax25
omit=
tests
aioax25/tools/**
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ __pycache__
*.egg-info
*.pyc
.coverage
coverage/
aioax25.egg-info/
cover/
testreports.xml
dist/
build/
Expand Down
39 changes: 18 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,6 @@ The aim of this project is to implement a simple-to-understand asynchronous
AX.25 library built on `asyncio` and `pyserial`, implementing a AX.25 and APRS
stack in pure Python.

## Python 3.5+ and above is required as of 2021-11-12

I did try to support 3.4, but this proved to be infeasible for the following
reasons:

* Python 3.8+ makes `asyncio.coroutine` deprecated (apparently will be removed
in 3.10). This meant I needed `coroutine` and `async def` versions of some
API functions, and the necessary logic to "hide" the latter from Python 3.4.
* Trying to coax generator-based coroutines to run "in the background" for unit
test purposes proved to be a pain in the arse.

Python 3.5 support is planned to continue until it too, becomes infeasible
(e.g. if type annotations become required).

## What works

* We can put a Kantronics KPC-3 TNC into KISS mode automatically
Expand All @@ -29,27 +15,30 @@ Python 3.5 support is planned to continue until it too, becomes infeasible
[NWDR UDRC-II](https://nw-digital-radio.groups.io/g/udrc/wiki/home))
* We can receive AX.25 UI frames
* We can send AX.25 UI frames
* Connecting to AX.25 nodes (*experimental*)
* Accepting connections from AX.25 nodes (*experimental*)

## What doesn't work

* Connecting to AX.25 nodes
* Accepting connections from AX.25 nodes
* Nothing yet?

## What isn't tested

* Platforms other than GNU/Linux

## Current plans

Right now, I intend to get enough going for APRS operation, as that is my
immediate need now. Hence the focus on UI frames.
Right now, I have the smarts to deal with basic APRS messaging. Hence the
focus on UI frames. We can send and receive APRS message frames, parse some
kinds of position frames, and do basic UI frame stuff.

I intend to write a core class that will take care of some core AX.25 message
handling work and provide the basis of what's needed to implement APRS.
Preliminary support for AX.25 connected mode is present, but is _experimental_.
It was tested connecting to a BPQ32 node, and being connected to by a BPQ32
node, but not a lot of testing has been done at this stage. **More feedback
would be appreciated.** The API is also very much a work-in-progress.

After that, some things I'd like to tackle in no particular order:

* Connected mode operation
* NET/ROM support

Supported platforms will be GNU/Linux, and possibly BSD variants. I don't
Expand Down Expand Up @@ -314,3 +303,11 @@ The `APRSDigipeater` class constructor can take a single parameter,
`digipeater_timeout`, which sets an expiry (default of 5 seconds) on queued
digipeat messages. If a message is not sent by the time this timeout expires,
the message is quietly dropped, preventing the memory effect.

## Specifications

This library is built on the following specifications:

* [AX.25 2.0](https://htmlpreview.github.io/?https://github.com/sjlongland/aioax25/blob/feature/connected-mode/doc/ax25-2p0/index.html)
* [AX.25 2.2](doc/ax25-2p2/ax25-2p2.pdf)
* [APRS 1.01](http://www.aprs.org/doc/APRS101.PDF)
1 change: 0 additions & 1 deletion aioax25/aprs/aprs.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ def __init__(
# Logger instance
log=None,
):

super(APRSRouter, self).__init__()
if log is None:
log = logging.getLogger(self.__class__.__module__)
Expand Down
50 changes: 26 additions & 24 deletions aioax25/aprs/datatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,30 @@ class APRSDataType(Enum):
not including unused or reserved types. Page 17 of APRS 1.0.1 spec.
"""

MIC_E_BETA0 = 0x1C
MIC_E_OLD_BETA0 = 0x1D
POSITION = ord("!")
PEET_BROS_WX1 = ord("#")
RAW_GPRS_ULT2K = ord("$")
AGRELO_DFJR = ord("%")
RESERVED_MAP = ord("&")
MIC_E_OLD = ord("'")
ITEM = ord(")")
PEET_BROS_WX2 = ord("*")
TEST_DATA = ord(",")
POSITION_TS = ord("/")
MESSAGE = ord(":")
OBJECT = ord(";")
STATIONCAP = ord("<")
POSITION_MSGCAP = ord("=")
STATUS = ord(">")
QUERY = ord("?")
# fmt: off
MIC_E_BETA0 = 0x1C
MIC_E_OLD_BETA0 = 0x1D
POSITION = ord("!")
PEET_BROS_WX1 = ord("#")
RAW_GPRS_ULT2K = ord("$")
AGRELO_DFJR = ord("%")
RESERVED_MAP = ord("&")
MIC_E_OLD = ord("'")
ITEM = ord(")")
PEET_BROS_WX2 = ord("*")
TEST_DATA = ord(",")
POSITION_TS = ord("/")
MESSAGE = ord(":")
OBJECT = ord(";")
STATIONCAP = ord("<")
POSITION_MSGCAP = ord("=")
STATUS = ord(">")
QUERY = ord("?")
POSITION_TS_MSGCAP = ord("@")
TELEMETRY = ord("T")
MAIDENHEAD = ord("[")
WX = ord("_")
MIC_E = ord("`")
USER_DEFINED = ord("{")
THIRD_PARTY = ord("}")
TELEMETRY = ord("T")
MAIDENHEAD = ord("[")
WX = ord("_")
MIC_E = ord("`")
USER_DEFINED = ord("{")
THIRD_PARTY = ord("}")
# fmt: on
2 changes: 0 additions & 2 deletions aioax25/aprs/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,6 @@ def _enter_state(self, state):


class APRSMessageFrame(APRSFrame):

MSGID_RE = re.compile(r"{([0-9A-Za-z]+)(}[0-9A-Za-z]*)?(\r?)$")
ACKREJ_RE = re.compile(r"^(ack|rej)([0-9A-Za-z]+)$")

Expand Down Expand Up @@ -259,7 +258,6 @@ def __init__(
cr=True,
src_cr=None,
):

self._addressee = AX25Address.decode(addressee).normalised
self._msgid = msgid
self._replyack = replyack
Expand Down
Loading
Loading