THREE PACKET TYPES FIGURED OUT!
0x61, 0x62 and 0x63 have been mostly decoded. Still don’t know what all of the pieces do, but know what they’re for finally! This will mean big things for log.py as I figure out the details.
This commit is contained in:
parent
94ef04fbea
commit
8e78d70f0e
@ -34,9 +34,9 @@ Each peer will send keep-alives to each other peer in the IPSC network at an int
|
||||
The following sections of this document will include various packet types. This is a list of currently known types and their meanings. Note: The names are arbitrarily chosen with the intention of being descriptive, and each is defined by what they've been "observed" to do in the wild.
|
||||
|
||||
CALL_CONFIRMATION = 0x05 Confirmation FROM the recipient of a confirmed call.
|
||||
CALL_CTL_1 = 0x61 |
|
||||
CALL_CTL_2 = 0x62 | Call control messages, exact use unknown
|
||||
CALL_CTL_3 = 0x63 |
|
||||
CALL_MON_ORIGIN = 0x61 Sent to Repeater Call Monitor Peers from repeater originating a call
|
||||
CALL_MON_RPT = 0x62 Sent to Repeater Call Monitor Peers from all repeaters repeating a call
|
||||
CALL_MON_NACK = 0x63 Sent to Repeater Call Monitor Peers from repeaters that cannot transmit a call (ie. ID in progress)
|
||||
XCMP_XNL = 0x70 Control protocol messages
|
||||
GROUP_VOICE = 0x80 This is a group voice call
|
||||
PVT_VOICE = 0x81 This is a private voice call
|
||||
|
@ -82,13 +82,13 @@ class bridgeIPSC(IPSC):
|
||||
def private_data(self, _network, _src_sub, _dst_sub, _ts, _end, _peerid, _data):
|
||||
pass
|
||||
|
||||
def call_ctl_1(self, _network, _data):
|
||||
def call_mon_origin(self, _network, _data):
|
||||
pass
|
||||
|
||||
def call_ctl_2(self, _network, _data):
|
||||
def call_mon_rpt(self, _network, _data):
|
||||
pass
|
||||
|
||||
def call_ctl_3(self, _network, _data):
|
||||
def call_mon_nack(self, _network, _data):
|
||||
pass
|
||||
|
||||
def xcmp_xnl(self, _network, _data):
|
||||
|
24
dmrlink.py
24
dmrlink.py
@ -416,14 +416,14 @@ class IPSC(DatagramProtocol):
|
||||
# CALLBACK FUNCTIONS FOR USER PACKET TYPES
|
||||
#************************************************
|
||||
|
||||
def call_ctl_1(self, _network, _data):
|
||||
print('({}) Call Control Type 1 Packet Received: {}' .format(_network, h(_data)))
|
||||
def call_mon_origin(self, _network, _data):
|
||||
print('({}) Repeater Call Monitor Origin Packet Received: {}' .format(_network, h(_data)))
|
||||
|
||||
def call_ctl_2(self, _network, _data):
|
||||
print('({}) Call Control Type 2 Packet Received: {}' .format(_network, h(_data)))
|
||||
def call_mon_rpt(self, _network, _data):
|
||||
print('({}) Repeater Call Monitor Repeating Packet Received: {}' .format(_network, h(_data)))
|
||||
|
||||
def call_ctl_3(self, _network, _data):
|
||||
print('({}) Call Control Type 3 Packet Received: {}' .format(_network, h(_data)))
|
||||
def call_mon_nack(self, _network, _data):
|
||||
print('({}) Repeater Call Monitor NACK Packet Received: {}' .format(_network, h(_data)))
|
||||
|
||||
def xcmp_xnl(self, _network, _data):
|
||||
#print('({}) XCMP/XNL Packet Received' .format(_network))
|
||||
@ -659,16 +659,16 @@ class IPSC(DatagramProtocol):
|
||||
self.xcmp_xnl(self._network, data)
|
||||
return
|
||||
|
||||
elif (_packettype == CALL_CTL_1):
|
||||
self.call_ctl_1(self._network, data)
|
||||
elif (_packettype == call_mon_origin):
|
||||
self.call_mon_origin(self._network, data)
|
||||
return
|
||||
|
||||
elif (_packettype == CALL_CTL_2):
|
||||
self.call_ctl_2(self._network, data)
|
||||
elif (_packettype == call_mon_rpt):
|
||||
self.call_mon_rpt(self._network, data)
|
||||
return
|
||||
|
||||
elif (_packettype == CALL_CTL_3):
|
||||
self.call_ctl_3(self._network, data)
|
||||
elif (_packettype == call_mon_nack):
|
||||
self.call_mon_nack(self._network, data)
|
||||
return
|
||||
|
||||
# Connection maintenance packets that fall into this category
|
||||
|
@ -8,9 +8,9 @@
|
||||
|
||||
# Known IPSC Message Types
|
||||
CALL_CONFIRMATION = b'\x05' # Confirmation FROM the recipient of a confirmed call.
|
||||
CALL_CTL_1 = b'\x61' # |
|
||||
CALL_CTL_2 = b'\x62' # | Exact meaning unknown
|
||||
CALL_CTL_3 = b'\x63' # |
|
||||
CALL_MON_ORIGIN = b'\x61' # |
|
||||
CALL_MON_RPT = b'\x62' # | Exact meaning unknown
|
||||
CALL_MON_NACK = b'\x63' # |
|
||||
XCMP_XNL = b'\x70' # XCMP/XNL control message
|
||||
GROUP_VOICE = b'\x80'
|
||||
PVT_VOICE = b'\x81'
|
||||
@ -47,7 +47,7 @@ LINK_TYPE_IPSC = b'\x04'
|
||||
IPSC_VER = LINK_TYPE_IPSC + IPSC_VER_19 + LINK_TYPE_IPSC + IPSC_VER_17
|
||||
|
||||
# Packets that must originate from a peer (or master peer)
|
||||
ANY_PEER_REQUIRED = [GROUP_VOICE, PVT_VOICE, GROUP_DATA, PVT_DATA, CALL_CTL_1, CALL_CTL_2, CALL_CTL_3, XCMP_XNL, RPT_WAKE_UP, DE_REG_REQ]
|
||||
ANY_PEER_REQUIRED = [GROUP_VOICE, PVT_VOICE, GROUP_DATA, PVT_DATA, CALL_MON_ORIGIN, CALL_MON_RPT, CALL_MON_NACK, XCMP_XNL, RPT_WAKE_UP, DE_REG_REQ]
|
||||
|
||||
# Packets that must originate from a non-master peer
|
||||
PEER_REQUIRED = [PEER_ALIVE_REQ, PEER_ALIVE_REPLY, PEER_REG_REQ, PEER_REG_REPLY]
|
||||
@ -71,9 +71,9 @@ REQ_VALID_MASTER = [
|
||||
]
|
||||
|
||||
REQ_MASTER_CONNECTED = [
|
||||
CALL_CTL_1,
|
||||
CALL_CTL_2,
|
||||
CALL_CTL_3,
|
||||
CALL_MON_ORIGIN,
|
||||
CALL_MON_RPT,
|
||||
CALL_MON_NACK,
|
||||
XCMP_XNL,
|
||||
GROUP_VOICE,
|
||||
PVT_VOICE,
|
||||
|
12
log.py
12
log.py
@ -28,14 +28,14 @@ class logIPSC(IPSC):
|
||||
# CALLBACK FUNCTIONS FOR USER PACKET TYPES
|
||||
#************************************************
|
||||
|
||||
def call_ctl_1(self, _network, _data):
|
||||
print('({}) Call Control Type 1 Packet Received From: {}' .format(_network, _src_sub))
|
||||
def call_mon_origin(self, _network, _data):
|
||||
print('({}) Repeater Call Monitor Origin Packet Received From: {}' .format(_network, _src_sub))
|
||||
|
||||
def call_ctl_2(self, _network, _data):
|
||||
print('({}) Call Control Type 2 Packet Received' .format(_network))
|
||||
def call_mon_rpt(self, _network, _data):
|
||||
print('({}) Repeater Call Monitor Repeating Packet Received' .format(_network))
|
||||
|
||||
def call_ctl_3(self, _network, _data):
|
||||
print('({}) Call Control Type 3 Packet Received' .format(_network))
|
||||
def call_mon_nack(self, _network, _data):
|
||||
print('({}) Repeater Call Monitor NACK Packet Received' .format(_network))
|
||||
|
||||
def xcmp_xnl(self, _network, _data):
|
||||
print('({}) XCMP/XNL Packet Received From: {}' .format(_network, h(_data)))
|
||||
|
Loading…
Reference in New Issue
Block a user