Comments (10)
I found a workaround for the time being.
After getting the frame from aioax25, I force the control bit to False for the sender with
frame.header._source._ch = False
from aioax25.
For what it's worth, here is my patch on aprsd that uses aioax25. I have it working with tcpkiss and am testing it with serialkiss next.
aprsd <---> aioax25 <-- tcp kiss --> direwolf
from aioax25.
Okay, so that field marked CH
in this code base can mean two different things:
- In a source or destination call-sign/SSID, it's the "command" bit
- In a repeater call-sign/SSID, it's the "has been repeated" bit
http://web.archive.org/web/20190522033714/https://www.tapr.org/pub_ax25.html#2.4.1.2
I set the bits according to what I understood from that part of the AX.25 2.0 specification. Clearly APRS is special. ;-)
from aioax25.
http://www.aprs.org/aprs11/C-bits-SSID.txt … took some digging, but this is where I got the idea that the destination call-sign should have a C bit set on the destination and cleared on the source.
Since bit also doubles as the has been digipeated bit when the field is used in a digipeater context, *
gets appended anywhere the C/H
bit is set.
In the bug report though, one can clearly see it's the source bit that's getting that C
bit set… so ch=False
is being passed in somewhere. Been a while since I looked at this code, so it might take some digging.
from aioax25.
@hemna I had a look at the code in aprslib
and in aprsd
… it would seem the problem is we really need a means of obtaining a frame in "TNC2 format" which could then be passed to aprslib
.
Have a look at https://github.com/sjlongland/aioax25/tree/bugfix/issue-9-addr-ch-bit-set and in your code https://github.com/craigerl/aprsd/blob/master/aprsd/threads.py#L374-L375, you should be able to replace that with:
msg = frame.tnc2
from aioax25.
https://github.com/craigerl/aprsd/blob/master/aprsd/threads.py#L374-L375
awesome. I'll give that a try!
from aioax25.
This is what I got.
Traceback (most recent call last):
File "/Users/i530566/.pyenv/versions/3.8.5/lib/python3.8/asyncio/events.py", line 81, in _run
self._context.run(self._callback, *self._args)
File "/Users/i530566/devel/mine/aprsd/aprsd/threads.py", line 376, in process_packet
msg = frame.tnc2
AttributeError: 'APRSMessageFrame' object has no attribute 'tnc2'
from aioax25.
Strange… because APRSMessageFrame
is a APRSFrame
, which is a AX25UnnumberedInformationFrame
…
AX25UnnumberedInformationFrame
defines the tnc2
property and get_tnc2()
method.
Are you sure you pulled the right branch (bugfix/issue-9-addr-ch-bit-set
)? Did you symbolically link aioax25
's module directory into your project or run setup.py install
to install the module in your library path?
from aioax25.
ah! I didn't pull the bugfix/issue-9-addr-ch-bit-set. branch. I tried that out and it's working.
I just set my message to frame.tnc2 and it's good to get decoded!
from aioax25.
No worries, I figured I'd try this first before I tried mucking with changing the C
bits actually sent over the air. :-)
Half the problem with AX.25 is a lot of the standards were written about the time I was born or a few years after, and so getting documentation on them today can be sketchy. Then you have "de-facto standards" like "TNC2 format", which are seemingly undocumented.
Anyway, if it's working now, I guess we can close this unless we strike issues later. Many thanks.
from aioax25.
Related Issues (14)
- APRS module does not de-duplicate messages HOT 1
- seeing problems decoding aprs packets from direwolf HOT 8
- Error on create HOT 11
- Sending message packet with msg number HOT 10
- queued messages never go out sometimes HOT 6
- SABM and SABME swapped in frame.py HOT 1
- Get official APRS TOCALL allocated
- Exception handling help? HOT 1
- Digipeating should wait a randomised delay before relaying HOT 2
- Handle garbage data at the end of message IDs in APRS messages HOT 1
- `None` being appended to APRS message frames HOT 1
- working on TCPKISSDevice HOT 5
- README is out of date? HOT 2
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 aioax25.