OK-DMR / ok-dmrlib

DMR PDUs, elements, FEC and CRC library, including proprietary DMR protocols of Hytera and Motorola
GNU Affero General Public License v3.0
36 stars 8 forks source link

How to generate data transmission #7

Open LaneaLucy opened 8 months ago

LaneaLucy commented 8 months ago

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

smarek commented 8 months ago

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 commented 8 months ago

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 commented 8 months ago

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 https://github.com/OK-DMR/ok-dmrlib/blob/a4447303afa32c94cd92934d0885db61d3adfe76/okdmr/dmrlib/transmission/transmission_generator.py#L19

and respective tests https://github.com/OK-DMR/ok-dmrlib/blob/a4447303afa32c94cd92934d0885db61d3adfe76/okdmr/tests/dmrlib/transmission/test_transmission.py#L123

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

LaneaLucy commented 8 months ago

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 commented 8 months ago

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 commented 6 months ago

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 commented 6 months ago

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: https://github.com/OK-DMR/ok-dmrlib/blob/a4447303afa32c94cd92934d0885db61d3adfe76/okdmr/tests/dmrlib/transmission/test_transmission.py#L45

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 commented 6 months ago

@smarek Do you have more such samples

like - 7abc3520240678e3a3436a8b55bdff57d75df5d55ed179b2304122624d0589a7bc

For all the Data PDU's

LaneaLucy commented 6 months ago

@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 commented 6 months ago

@smarek Looking for your help on the above comments

smarek commented 6 months ago

@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 commented 6 months ago

@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 commented 6 months ago

@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 commented 6 months ago

@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 commented 6 months ago

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 commented 6 months ago

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 commented 6 months ago

@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 commented 5 months ago

@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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

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 commented 5 months ago

forgot to tag you @LaneaLucy

LaneaLucy commented 5 months ago

@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 commented 5 months ago

@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 commented 5 months ago

@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 commented 5 months ago

@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 commented 5 months ago

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

smarek commented 5 months ago

@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 commented 5 months ago

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

alwinhb commented 3 months ago

@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 commented 3 months ago

@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

https://github.com/OK-DMR/ok-dmrlib/blob/a77b3cc4078a8084ef5b1b068c486be9031d0506/okdmr/tests/dmrlib/transmission/test_transmission.py#L106

https://github.com/OK-DMR/ok-dmrlib/blob/a77b3cc4078a8084ef5b1b068c486be9031d0506/okdmr/tests/dmrlib/etsi/layer3/pdu/test_udp_ipv4_compressed_header.py#L46

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