Difference between revisions of "MDC-1200"

From "PTTLink Wiki"
Jump to navigation Jump to search
Line 1: Line 1:
 
[[Category:How to]]
 
[[Category:How to]]
 +
[[Category:Node Configuration]]
 
= MDC-1200 =
 
= MDC-1200 =
 
 
[https://en.wikipedia.org/wiki/MDC-1200 MDC-1200] support has been avialble as a compile time option since app_rpt 0.225 and is now enabled by default.
 
[https://en.wikipedia.org/wiki/MDC-1200 MDC-1200] support has been avialble as a compile time option since app_rpt 0.225 and is now enabled by default.
  
 
== MDC-1200 decoding display ==
 
== MDC-1200 decoding display ==
 
 
On the CLI when MDC-1200 is received the following will be displayed:
 
On the CLI when MDC-1200 is received the following will be displayed:
  
Line 65: Line 64:
 
Put an [mdcmacro] clause in rpt.conf
 
Put an [mdcmacro] clause in rpt.conf
  
<pre>
+
<syntaxhighlight lang="ini">
 
IXXXX=*something        ; will match PTTID XXXX
 
IXXXX=*something        ; will match PTTID XXXX
  
Line 73: Line 72:
  
 
CXXXX-YYYY=*something  ; will match unit XXXX calling unit YYYY
 
CXXXX-YYYY=*something  ; will match unit XXXX calling unit YYYY
</pre>
+
</syntaxhighlight>
  
 
The character '%' may be used to match any single character and '*' may be used to match any number of characters.  
 
The character '%' may be used to match any single character and '*' may be used to match any number of characters.  
  
 
For example:
 
For example:
<pre>
+
<syntaxhighlight lang="ini">
 
E*=*something  ; would match ANY ID with an emergency
 
E*=*something  ; would match ANY ID with an emergency
</pre>Note that if you have a macro setup to do something based on ID it will execute once if it hears the ID multiple times in a row (ie during testing).  If you are testing a macro based on unit ID such as:
+
</syntaxhighlight>Note that if you have a macro setup to do something based on ID it will execute once if it hears the ID multiple times in a row (ie during testing).  If you are testing a macro based on unit ID such as:
[mdcmacro]
+
<syntaxhighlight lang="ini">[mdcmacro]
I1701=*81#
+
I1701=*81#</syntaxhighlight>
 
This will announce the time only once if there are no other MDC ID's received between hearing ID 1701.
 
This will announce the time only once if there are no other MDC ID's received between hearing ID 1701.
  
Line 88: Line 87:
  
 
MDC-1200 bursts maybe sent from macros or the commpand line via cop,60:
 
MDC-1200 bursts maybe sent from macros or the commpand line via cop,60:
<pre>
+
<syntaxhighlight lang="ini">
 
function_code=cop,60,type,UnitID[,DestID,SubCode]
 
function_code=cop,60,type,UnitID[,DestID,SubCode]
</pre>
+
</syntaxhighlight>
  
 
  Type is 'I' for PttID, 'E' for Emergency, and 'C' for Call
 
  Type is 'I' for PttID, 'E' for Emergency, and 'C' for Call
Line 108: Line 107:
  
 
For example in a macro:
 
For example in a macro:
<pre>
+
<syntaxhighlight lang="ini">8765=cop,60,I,1234                    ; send MDC PTTID 1234
8765=cop,60,I,1234                    ; send MDC PTTID 1234
+
8766=cop,60,C,1600,1701,8015          ; Send MDC1200 call burst using unitID 1600, DestID 1701, and Maxtrac Selective call Subcode</syntaxhighlight>
8766=cop,60,C,1600,1701,8015          ; Send MDC1200 call burst using unitID 1600, DestID 1701, and Maxtrac Selective call Subcode
 
</pre>
 
  
 
From the command line sending a unit call to a CDM1550 unit 1701 from unit 1600:
 
From the command line sending a unit call to a CDM1550 unit 1701 from unit 1600:
<pre>
+
<syntaxhighlight lang="sh">rpt cmd 41618 cop 60 C,1600,1701,8205</syntaxhighlight>
rpt cmd 41618 cop 60 C,1600,1701,8205
 
</pre>
 

Revision as of 05:39, 28 January 2022

MDC-1200

MDC-1200 support has been avialble as a compile time option since app_rpt 0.225 and is now enabled by default.

MDC-1200 decoding display

On the CLI when MDC-1200 is received the following will be displayed:

For a radio ID:

Got MDC-1200 (single-length) packet on node 41618:
op: 01, arg: 00, UnitID: 1701
Got MDC-1200 data I1701 from local system (41618)

For a radio check of unit 1400:

Got MDC-1200 (single-length) packet on node 41618:
op: 63, arg: 85, UnitID: 1400
Node Variable dump for node 42032:

For a call-alert of Unit 1400 from unit 1701:

Got MDC-1200 (double-length) packet on node 41618:
op: 35, arg: 89, UnitID: 1400
ex1: 83, ex2: 0d, ex3: 17, ex4: 01
Got MDC-1200 data A1701-1400 from local system (41618)

For a selective call from unit 1701 to unit 1600:

Got MDC-1200 (double-length) packet on node 41618:
op: 35, arg: 89, UnitID: 1600
ex1: 80, ex2: 15, ex3: 17, ex4: 01

Note the sender isn't parsed properly.

For a Remote Monitor of unit 1600:

Got MDC-1200 (single-length) packet on node 41618:
op: 71, arg: 85, UnitID: 1600

Sending MDC Message 01 from unit 1701:

Got MDC-1200 (single-length) packet on node 41618:
op: 47, arg: 01, UnitID: 1701

There are others unlisted here, emergency being the most obvious example, but they are quite simple to decode.

If logging is enabled this will be logged to the daily logs as follows:

20180330111954,Got MDC-1200 data I1701 from local system (41618)

The format is I, E, S, C based on the type of call received. Note this is a subset of the MDC-1200 protocol, but it would be quite easy to extend the code to support other codes. Inhibit and un-inhibit have been tried and do work well, but would need more work to be supported in app_rpt.

MDC1200 is a very insecure protocol and enabling decode on any radio does open it to an attack over the air if inhibit is enabled. Some radios, such as the Motorola waris professional series cannot disable remote inhibit if MDC decode is enabled.

MDC-1200 Decoding Macro

Put an [mdcmacro] clause in rpt.conf

IXXXX=*something        ; will match PTTID XXXX

EXXXX=*something        ; will match Emergency from XXXX

SXXXX-Y=*something      ; will match unit XXXX status Y

CXXXX-YYYY=*something   ; will match unit XXXX calling unit YYYY

The character '%' may be used to match any single character and '*' may be used to match any number of characters.

For example:

E*=*something  ; would match ANY ID with an emergency

Note that if you have a macro setup to do something based on ID it will execute once if it hears the ID multiple times in a row (ie during testing). If you are testing a macro based on unit ID such as:

[mdcmacro]
I1701=*81#

This will announce the time only once if there are no other MDC ID's received between hearing ID 1701.

MDC-1200 Encoding

MDC-1200 bursts maybe sent from macros or the commpand line via cop,60:

function_code=cop,60,type,UnitID[,DestID,SubCode]
Type is 'I' for PttID, 'E' for Emergency, and 'C' for Call

(SelCall or Alert), or 'SX' for STS (ststus), where X is 0-F.

DestID and subcode are only specified for the 'C' type message.

UnitID is the local systems UnitID.

DestID is the MDC1200 ID ofthe radio being called, and the subcodes are as follows:

Subcode '8205' is Voice Selective Call for Spectra ('Call')

Subcode '8015' is Voice Selective Call for Maxtrac ('SC') or Astro-Saber('Call')

Subcode '810D' is Call Alert (like Maxtrac 'CA')

For example in a macro:

8765=cop,60,I,1234                    ; send MDC PTTID 1234
8766=cop,60,C,1600,1701,8015          ; Send MDC1200 call burst using unitID 1600, DestID 1701, and Maxtrac Selective call Subcode

From the command line sending a unit call to a CDM1550 unit 1701 from unit 1600:

rpt cmd 41618 cop 60 C,1600,1701,8205