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

How to generate data transmission #7

Open
LaneaLucy opened this issue Jan 20, 2024 · 31 comments
Open

How to generate data transmission #7

LaneaLucy opened this issue Jan 20, 2024 · 31 comments

Comments

@LaneaLucy
Copy link

Hi, I want to do generic data transmission over tier 2 with mmdvm for RF.
But sadly I have no idea how to start because of missing documentation. If I would know, at which files to look, for connecting to mmdvm, to transmit/receive generic data, I probably could figure it out by myself, but I don't know where to look.
More documentation or even better some simple examples, for example just sending hello world and receiving it, would be much appreciated.
Thx

@LaneaLucy LaneaLucy changed the title Documentation needed Documentation/Examples needed Jan 20, 2024
@smarek
Copy link
Member

smarek commented Jan 22, 2024

Hi @LaneaLucy can you please clarify what type of terminals (aka mobile stations, handheld dmr radio, car/vehicle dmr radio, ...) you want to use? Or if you intend to just use the MMDVM/DMR protocols to transfer arbitrary data over MMDVM master (hblink, freedmr, ...) without terminals?

There is sadly no easy and generic way of using the terminals, which is the reason why there are no ready-made examples for such, because usually the protocols implemented in ok-dmrlib are encapsulated by proprietary protocols (of talking to terminals or using their serial interface for the matter)

Best of luck with your endeavours

@LaneaLucy
Copy link
Author

I just want to be able to send data over RF. This could be from one mmdvm directly to another mmdvm, or it could be mmdvm <---RF---> mmdvm <---network---> dmr server <---network---> mmdvm <---RF---> mmdvm
Or anything in between.
The important part is rf

@smarek
Copy link
Member

smarek commented Jan 23, 2024

not sure what you mean by "mmdvm", in my post i talk about software endpoint implementing Homebrew/MMDVM protocol (by G4KLX and friends).
If you need to pass the data over RF, it must be valid data transmission including header and terminator

I'd suggest you start your study in TransmissionGenerator

and respective tests

Which allows you to generate all bursts necessary to transmit arbitrary data

@smarek smarek changed the title Documentation/Examples needed How to generate data transmission Jan 23, 2024
@LaneaLucy
Copy link
Author

Could you maybe make a small example which uses a mmdvm hotspot to send hello world to another mmdvm hotspot?
Just a small cli program where you can use --tx as argument for the sender how then sends every 3 seconds a hello world message with a increasing counter, like "hello world 1", "hello world 2", ... And with --rx as argument which just receives those hello world messages and prints them to the console.
I bet this would help many people who would like to use this lib

@smarek
Copy link
Member

smarek commented Jan 23, 2024

Yeah, that wont happen any time soon sorry, i am overloaded. I'll appreciate anything from community, even PoC, i could later clean up and publish.

@LaneaLucy
Copy link
Author

LaneaLucy commented Mar 11, 2024

I really need a example how to send for example "hello world" via mmdvm hardware and receive it via mmdvm hardware too.
It can't be that there is no documented library to just send some generic stuff over dmr.
Even with some dmr server in-between mmdvm hardware + mmdvmhost and the example software I would be ok.
But I just need a simple example code.
Anyone can help me with it please?
What about help for a little donation?

@smarek
Copy link
Member

smarek commented Mar 12, 2024

tl;dr: i'm not sure what kind of "simple example code" could be produced, i never worked low-level with mmdvmhost, maybe if it has CLI interface or something, it could be easier than what I describe below


If it's meant to include on-air transmission, you'll want similar setup

[homebrew client] -> hblink3 -> mmdvmhost -> (air) -> mmdvmhost/radio

Question is what type of protocol you'll use to transfer data, i'd suggest usual Rate 1, 1/2 or 3/4 data transmission.
This kind of transmission might not be visible on radio, but will be delivered over air and you can log/decode it

If you check out the sample bursts needed to deliver SMS here:

There are preambles (might not be needed, usually to clear out traffic and let the radio-hw sync on RX
And bursts after preambles, incl. header, decoded:

> dmrlib-dmr-burst 7abc3520240678e3a3436a8b55bdff57d75df5d55ed179b2304122624d0589a7bc
7abc3520240678e3a3436a8b55bdff57d75df5d55ed179b2304122624d0589a7bc
[BsSourcedData] [DataTypes.DataHeader] [CC: 5]
	[DataPacketFormats.DataPacketUnconfirmed] [SAPIdentifier.UDP_IP_compression] [TARGET IS INDIVIDUAL] [PAD OCTETS: 10] [SOURCE: 2308094] [DESTINATION: 2308092] [FullMessageFlag.FirstTryToCompletePacket] [BTF: 2] [FSN: Unconfirmed data single fragment]

> dmrlib-dmr-burst 430d22106233407c00b0219a55ddff57d75df5d6f1492a46d43d20c20b8291214b
430d22106233407c00b0219a55ddff57d75df5d6f1492a46d43d20c20b8291214b
[BsSourcedData] [DataTypes.Rate12Data] [CC: 5]
	[RATE 1/2 DATA UNCONFIRMED] [DATA(12) d6790062620003bf00070000]

> dmrlib-dmr-burst 008a00da01b401400330180015ddff57d75df5d6f104025802700ae0250010001e
008a00da01b401400330180015ddff57d75df5d6f104025802700ae0250010001e
[BsSourcedData] [DataTypes.Rate12Data] [CC: 5]
	[RATE 1/2 DATA UNCONFIRMED] [DATA(12) 0000000000000000210b9a3d]

In this specific case it carries UDP/IP compressed header and payload (Motorola TMS - Text Messaging Service - Acknowledgment with seq.no. 7)

> dmrlib-dmr-ipudp d6790062620003bf00070000
d6790062620003bf00070000
[IPv4 id: 54905] [IP src: IPAddressIdentifier.RadioNetwork] [IP dst: IPAddressIdentifier.RadioNetwork] [UDP src: UDPPortIdentifier.ManufacturerSpecific (98)] [UDP dst: UDPPortIdentifier.ManufacturerSpecific (98)]  [DATA: 0003bf00070000]

> debug-motorola-tmp 0003bf0007
{'_m_custom_pdu_type': 31,
 'len_address': 0,
 'message_header': {'acknowledgement_required': False,
                    'control_user_bit': True,
                    'extension_bit': True,
                    'pdu_type': 15,
                    'reserved': True},
 'message_size': 3,
 'pdu_content': {'tms_acknowledgement_header_sequence_number': {'has_msb_header': False,
                                                                'header_lsb_bits': 7,
                                                                'header_lsb_reserved': 0}},
 'unparsed_data': b''}

So with the setup i outlined in the beginning, you will need to

  1. establish mmdvm/homebrew protocol link with hblink3 (or similar mmdvm hub)
  2. generate transmission bursts and send them over wrapped within MMDVM DMRD pdus, see https://github.com/OK-DMR/DMR-HAM-Protocols/blob/master/homebrew-2015.md#210-dmr-data-dmrd
  3. receive bursts on the other end and extract data

Or if you talk about using DMO (Direct Mode Operation), eg. without repeater infrastructure, you could even connect two radios (or maybe two mmdvm modems, i never tried that) to single computer. However then you'd talk to the radio using Motorola/Hytera/other proprietary protocol, MMDVM has no support in hardware afaik.

@alwinhb
Copy link

alwinhb commented Mar 12, 2024

@smarek Do you have more such samples

like - 7abc3520240678e3a3436a8b55bdff57d75df5d55ed179b2304122624d0589a7bc

For all the Data PDU's

@LaneaLucy
Copy link
Author

@smarek could you please make a complete example out of it?
Just a Python program that connects to hblink3 and then sends "hello world" and receives it again.
I just need a complete example application to send hello world and receives it again, maybe with src and dst dmr id as input? Don't need to be a argument, some global variables inside the code would be enough for the beginning.
Then I just need to figure out how to link 2 hblink3 over the air

@alwinhb
Copy link

alwinhb commented Mar 19, 2024

@smarek Looking for your help on the above comments

@smarek
Copy link
Member

smarek commented Apr 2, 2024

@LaneaLucy i can do that, however i don't have much time to invest right now, if you're in hurry, try to work out something, it's always easier for me to help with something existing than making everything from scratch on my own :)

@alwinhb i don't have anything extracted at the moment, you should really try to work with the PCAP data i already linked you and extract the right bursts, the tools are available (ok-dmrlib and dmr-kaitai cli scripts) if they need enhancement, you can try to modify PcapTool or any other, or at least identify "the way i want to use the script and it's not provided". I won't do your work on your behalf, not for free, sorry

@LaneaLucy
Copy link
Author

@smarek i can wait for now, but i really need at least a hello world example of doing just through a dmr server and through mmdvm hardware modems. If i have those for examples (one transmit, one receive, over server and over mmdvm) i can mix them together as i need them and replace the hello world message with my own stuff.

Is there a site where i can for example buy you a coffee?

@smarek
Copy link
Member

smarek commented Apr 2, 2024

@LaneaLucy thank you for the offer, i have github sponsors set-up for a while now https://github.com/sponsors/smarek
however buymeacoffee.com works for me as well, let me know if you have preference (or will use github sponsors) and i can make myself available on some platform of your choice, or i'll let you know my BIC/IBAN in private if you want to skip the middle men

@LaneaLucy
Copy link
Author

@smarek send you some over GitHub sponsor, i hope this is enough for the beginning.
What do you mean with platform? Do you mean sponsor/donation platform or something with the library?

@smarek
Copy link
Member

smarek commented Apr 2, 2024

meant sponsor/donation platform, i actually was curious, so now i'm also on https://www.buymeacoffee.com/smarek

anyway, yep, i'll give it some time

actually you only will need single hblink3, because your network model will be: "recipient" and "sender" will be homebrew protocol endpoints emulating dmr terminal(s)

@LaneaLucy
Copy link
Author

So if i understand right, for a standalone rf node i need a local dmr server in the middle for mmdvm to connect to?

@alwinhb
Copy link

alwinhb commented Apr 4, 2024

@smarek Thanks for the quick help, Not looking for the quick help, Whenever you get time you may add the hex samples (Data and Voice)

@smarek
Copy link
Member

smarek commented Apr 6, 2024

@alwinhb suit yourself, i updated pcaptool to output both description of processed burst and hex form of on-air burst (not raw input wrapped in IPSC/MMDVM/whatever protocol), now you should be able to inspect all the pcap data easily

usage:

> dmrlib-pcap-tool --observe-transmissions HYTERA_IPSC/gw_hytera_mmdvm_2_start_voice_voice_close.pcapng
--output truncated--

[BsSourcedData] [DataTypes.VoiceLCHeader] [CC: 1]
	[FLCOs.GroupVoiceChannelUser] [FeatureSetIDs.StandardizedFID] [SOURCE: 2308155] [GROUP: 111] [SERVICE_OPTIONS: PRIORITY:0]
06e50ae604f020e84af05600046dff57d75df5de32b008303e4038002d813f8317
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
e96180454a7ef78accec2c87277755fd7df75f76d8988caade0d842771d99d8a88
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
e96180454a7ef78accec2c87277755fd7df75f76d8988caade0d842771d99d8a88
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstB][LCSS.FirstFragmentLC] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ed0ce6210f24786086ce2f867621309000c0c910ed9ccaaaff3ce4704f554824c0
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstC][LCSS.FirstFragmentLC] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ed0ce6210f24786086ce2f867621309000c0c910ed9ccaaaff3ce4704f554824c0
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstD][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
b6a3a3216944e4e20856fb86da1170a0a06057418dceec2ec6e3a2ea07ef0d4086
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstE][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
b6a3a3216944e4e20856fb86da1170a0a06057418dceec2ec6e3a2ea07ef0d4086
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstF][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
9693a3231962d5c20cc1aec0341170f121b097438c2980e6ef3da5553788adcaaa
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstA][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
9693a3231962d5c20cc1aec0341170f121b097438c2980e6ef3da5553788adcaaa
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstB][LCSS.LastFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
a8b2c1314396988aeafc3e7eef615110c170f075959924ea3ab8d9b7706a9ca2e0
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstC][LCSS.LastFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
a8b2c1314396988aeafc3e7eef615110c170f075959924ea3ab8d9b7706a9ca2e0
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstD][LCSS.SingleFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
8949e623042e2dc0aebe6cc2034119c3d1642e25e67a8846ad7ce03767a21daa26
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstE][LCSS.SingleFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
8949e623042e2dc0aebe6cc2034119c3d1642e25e67a8846ad7ce03767a21daa26
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
b969e760023e1dc2e83255ce5d0755fd7df75f766c5a08acab49c613275f38a2ca
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
b969e760023e1dc2e83255ce5d0755fd7df75f766c5a08acab49c613275f38a2ca
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstB][LCSS.FirstFragmentLC] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
2144ee1b527e1c2cccb959c537613211400179117a6b82ac88027fa907d2a18e4e
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstC][LCSS.FirstFragmentLC] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
2144ee1b527e1c2cccb959c537613211400179117a6b82ac88027fa907d2a18e4e
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstD][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
c8370a934797a32062e528813031703c3410a7442a4064cea16d1ada46f0e0c2cc
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstE][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
c8370a934797a32062e528813031703c3410a7442a4064cea16d1ada46f0e0c2cc
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstF][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ae256aba653be486a0ff55e610017480066a37460a316a28ca73c17021d60022c2
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstA][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ae256aba653be486a0ff55e610017480066a37460a316a28ca73c17021d60022c2
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstB][LCSS.LastFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
bb6ac705433d6b80eebba2c25771509bb1b8d071b2a88c88cc65e553627f416e0e
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstC][LCSS.LastFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
bb6ac705433d6b80eebba2c25771509bb1b8d071b2a88c88cc65e553627f416e0e
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstD][LCSS.SingleFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
87da81261118ad88c4fb611aab4119c3d1642e25da238ec0cf326dd258e246c6e6
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstE][LCSS.SingleFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
87da81261118ad88c4fb611aab4119c3d1642e25da238ec0cf326dd258e246c6e6
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
e80118f3ed59bbc4e0ab2d548a7755fd7df75f78352584eeef6815c86da287cca8
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
e80118f3ed59bbc4e0ab2d548a7755fd7df75f78352584eeef6815c86da287cca8
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstB][LCSS.FirstFragmentLC] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
fd40535bc6a86b4a00ae776650b1309000c0c91d348c28048c664714ad05ce0826
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstC][LCSS.FirstFragmentLC] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
fd40535bc6a86b4a00ae776650b1309000c0c91d348c28048c664714ad05ce0826
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstD][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ad7444149e56cc2c048c452756f170a0a0605740de48a22a8e762472a1fa58a468
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstE][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ad7444149e56cc2c048c452756f170a0a0605740de48a22a8e762472a1fa58a468
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstF][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
bf644436ec508c2e26ef274170c170f121b0974784fcc0a6f9204670861d88ae28
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstA][LCSS.ContinuationFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
bf644436ec508c2e26ef274170c170f121b0974784fcc0a6f9204670861d88ae28
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstB][LCSS.LastFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ca1467124ae5e44eeada356663515110c170f07ba78468aefe0037e951d9cce222
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstC][LCSS.LastFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
ca1467124ae5e44eeada356663515110c170f07ba78468aefe0037e951d9cce222
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstD][LCSS.SingleFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
fa360bc141b5e5044499666ca25119c3d1642e27ef0140eaab116f8862c5d5ee6c
[EmbeddedSignalling]  [VoiceBursts.VoiceBurstE][LCSS.SingleFragmentLCorCSBK] [PreemptionPowerIndicator.CarriesSameChannelOrNullEmbeddedMessage] [CC: 1]
fa360bc141b5e5044499666ca25119c3d1642e27ef0140eaab116f8862c5d5ee6c
[BsSourcedVoice]  [VoiceBursts.VoiceBurstA]
ab136dab46c796ce4eed0ca4015755fd7df75f70ffed88cc9c5dc16174966b8802

--output truncated--

And you can reverse inspect operation by going

> dmrlib-dmr-burst 068a0a32044020904a8056a004adff57d75df5d967a40b08392034402581268324
068a0a32044020904a8056a004adff57d75df5d967a40b08392034402581268324
[BsSourcedData] [DataTypes.TerminatorWithLC] [CC: 1]
	[FLCOs.GroupVoiceChannelUser] [FeatureSetIDs.StandardizedFID] [SOURCE: 2308155] [GROUP: 111] [SERVICE_OPTIONS: PRIORITY:0]

@smarek
Copy link
Member

smarek commented Apr 6, 2024

So if i understand right, for a standalone rf node i need a local dmr server in the middle for mmdvm to connect to?

depends on the "standalone rf node" capability, if it's standalone hytera/motorola/... repeater, you don't need anything else, but you'll have to talk to it in proprietary language

if it's mmdvmhost , afaik it expects some kind of upstream (mmdvm dmr server or dmrgateway or alike)

@LaneaLucy
Copy link
Author

LaneaLucy commented Apr 6, 2024

if it's mmdvmhost , afaik it expects some kind of upstream (mmdvm dmr server or dmrgateway or alike)

Ok, i can work with this, maybe I find a minimal dmr server for it where no full one is needed.
But how are the examples going?

@smarek
Copy link
Member

smarek commented Apr 6, 2024

minimal mmdvm server (such as hblink3 without ACL and other features) just takes in dmr bursts wrapped in mmdvm protocol and distributes them to other clients (repeat to all scenario, "what one client sends to hblink3 will be sent to all other clients")

i still don't clearly understand your intended hardware setup, but since you want "mmdvm hardware" then the most simple setup will be "2x mmdvm hotspot (mmdvmhost on rpi or similar)" and hblink3 which will interconnect those two hotspots. Then you can monitor all the DMR traffic and inject traffic by acting as yet another "mmdvm hotspot" connected to the same hblink3

and script-wise

[SENDER SCRIPT]

  1. connect to hblink3 (ip, port, password) using repeater_id=1234
  2. generate data transmission bursts, wrap those in mmdvm protocol and send to hblink3
  3. this will deliver data to all connected terminals

[RECIPIENT SCRIPT]

  1. connect to hblink3 (ip, port, password) using repeater_id=4321
  2. wait for bursts to arrive, decode data transmission and extract contents

does this seem useful to you?

@smarek
Copy link
Member

smarek commented Apr 6, 2024

forgot to tag you @LaneaLucy

@LaneaLucy
Copy link
Author

LaneaLucy commented Apr 6, 2024

@smarek
I want to do: computer --- rf --- computer,
Computer ---- rf --- network --- computer and
Computer --- network --- computer.
I just want to be able to send whatever text messages for the beginning over rf and network over dmr between two or more computer

@smarek
Copy link
Member

smarek commented Apr 6, 2024

@LaneaLucy
so if hblink connects two computers, you're happy with encoding and decoding the message as dmr data transmission
if it has rf nodes connected, it will transmit over rf and if rf recipient is setup correctly, it will receive valid dmr data transmission. seems like my proposal will work for you, i'll stich that up

@LaneaLucy
Copy link
Author

@smarek
If it wouldn't much more work for you, it would be great if you could tell me, what difference i need to set up for the rf recipient. Thx

@smarek
Copy link
Member

smarek commented Apr 7, 2024

@LaneaLucy that depends entirely on the hardware you own, i cannot help you im afraid, i assume you can transfer message from pc[mmdvm hotspot + hblink3] to pc[dmr terminal], i don't think you can just use two mmdvmhosts to rf-connect two computers, i think you need dmr terminal at least on one side of the solution. Also the easiest way would be to have two dmr terminals in DMO, but then we'd not be dealing with MMDVM but terminal-specific-protocol (such as hytera HRNP/HDAP) and respective serial interfaces.

Can you diagram your network model with respective hardware you intend to use? Then I'd maybe be able to help more

@LaneaLucy
Copy link
Author

@smarek rf path would be just mmdvm as hardware if possible, because they are easy to get

@smarek
Copy link
Member

smarek commented Apr 7, 2024

@smarek rf path would be just mmdvm as hardware if possible, because they are easy to get

I dont think its possible to connect two mmdvm modems in DMO. Do you think its possible? Can you link devices and settings/config of mmdvmhost maybe? Id be interested but i dont work with hardware, so i dont know if it can be done

@LaneaLucy
Copy link
Author

I don't know but i opened a issue on mmdvmhost to find out

@alwinhb
Copy link

alwinhb commented Jun 5, 2024

@smarek In regard to the below screenshot for the DMR Data Sample

image

Can you help me understand what raw data (Text) is embedded within these hex samples? So that when I decode the samples via my code I could see the same result.

@smarek
Copy link
Member

smarek commented Jun 5, 2024

@alwinhb you should try harder next time, shame really to ask such questions, use search next time, eg. like this
https://github.com/search?q=repo%3AOK-DMR%2Fok-dmrlib%207abc&type=code


everything i have is published in the repositories, all the data you refer to are in tests usually, because putting them into implementation would be silly

def test_header(do_return: bool = False):

pdu0: UDPIPv4CompressedHeader = UDPIPv4CompressedHeader(

tests are implemented very verbosely, the actual content is not "Text" but TMS ACK message, a PDU with seqNo=7, so the content is really just acknowledgement for previously received TMS text message

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants