diff --git a/template.py b/template.py index 6d9ea21..d60ed34 100644 --- a/template.py +++ b/template.py @@ -7,4 +7,4 @@ voice_3 = '\x80\x00\x04\xbf\xfd\x08\x2f\x7c\xca\x00\x00\x02\x02\x00\x00\x30\xac\ voice_4 = '\x80\x00\x04\xbf\xfd\x08\x2f\x7c\xca\x00\x00\x02\x02\x00\x00\x30\xac\x20\x80\x5d\x3b\x07\x3b\xeb\x48\x20\x00\x00\x00\x00\x8a\x19\x06\x98\x02\xb9\x4f\xa4\xd3\xbb\xb7\x96\xc7\x83\xd8\xee\x81\x19\x41\xe4\x4a\x68\x0f\x05\x06\x0f\x16' voice_5 = '\x80\x00\x04\xbf\xfd\x08\x2f\x7c\xca\x00\x00\x02\x02\x00\x00\x30\xac\x20\x80\x5d\x3b\x08\x3b\xeb\x4a\x00\x00\x00\x00\x00\x8a\x22\x16\xe8\x1a\x62\xd6\x8c\x6b\xba\x06\x3d\x0d\xeb\x04\xe9\x81\xdd\xf1\x04\x86\xc8\x00\x0a\x0a\x0c\x00\x00\x00\x00\x00\x02\x2f\x7c\xca\x14' voice_6 = '\x80\x00\x04\xbf\xfd\x08\x2f\x7c\xca\x00\x00\x02\x02\x00\x00\x30\xac\x20\x80\x5d\x3b\x09\x3b\xeb\x4b\xe0\x00\x00\x00\x00\x8a\x19\x06\x98\x22\xd3\xd9\x00\xb4\xa6\x05\x6d\x29\xa2\x17\xa8\x82\x75\x14\xf8\x10\x08\x00\x00\x00\x00\x10' -voice_t = '\x80\x00\x04\xbf\xfd\x08\x2f\x7c\xca\x00\x00\x02\x02\x00\x00\x30\xac\x60\x80\x5e\x3e\x76\x3b\xf1\xb8\x40\x00\x00\x00\x00\x02\x80\x00\x0a\x80\x0a\x00\x60\x00\x00\x00\x00\x00\x02\x2f\x7c\xca\x9d\xa0\x7f\x00\x12\x35\x35' \ No newline at end of file +voice_t = '\x80\x00\x04\xbf\xfd\x08\x2f\x7c\xca\x00\x00\x02\x02\x00\x00\x30\xac\x60\x80\x5e\x3e\x76\x3b\xf1\xb8\x40\x00\x00\x00\x00\x02\x80\x00\x0a\x80\x0a\x00\x60\x00\x00\x00\x00\x00\x02\x2f\x7c\xca\x9d\xa0\x7f\x00\x12\x35\x35' diff --git a/voice_burst_decoding.md b/voice_burst_decoding.md new file mode 100644 index 0000000..b8a8302 --- /dev/null +++ b/voice_burst_decoding.md @@ -0,0 +1,150 @@ +VOICE HEADER 1: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.dd 3b.01 3b.eb.3c.e0 00.00.00.00 | 01 **80000a800a0060000000** 00.00.02 2f.7c.ca **92af7000113532** +VOICE HEADER 2: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.02 3b.eb.3e.c0 00.00.00.00 | 01 **80000a800a0060000000** 00.00.02 2f.7c.ca **92af7000113530** +VOICE HEADER 3: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.03 3b.eb.40.a0 00.00.00.00 | 01 **80000a800a0060000000** 00.00.02 2f.7c.ca **92af7000113531** +VOICE BURST A: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.04 3b.eb.42.80 00.00.00.00 | 8a 14 **40** f8.01.a9.9f.8c.e0.be.00.6a.67.e3.38.2f.80.1a.99.f8.ce.08 +VOICE BURST B: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.05 3b.eb.44.60 00.00.00.00 | 8a 19 **06** f8.01.a9.9f.8c.e0.be.00.6a.67.e3.38.2f.80.1a.99.f8.ce.08 **0505060612** +VOICE BURST C: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.06 3b.eb.46.40 00.00.00.00 | 8a 19 **06** f8.01.a9.9f.8c.e0.be.00.6a.67.e3.38.2f.80.1a.99.f8.ce.08 **0905060516** +VOICE BURST D: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.07 3b.eb.48.20 00.00.00.00 | 8a 19 **06** 98.02.b9.4f.a4.d3.bb.b7.96.c7.83.d8.ee.81.19.41.e4.4a.68 **0f05060f16** +VOICE BURST E: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.08 3b.eb.4a.00 00.00.00.00 | 8a 22 **16** e8.1a.62.d6.8c.6b.ba.06.3d.0d.eb.04.e9.81.dd.f1.04.86.c8 **000a0a0c000000** 00.00.02 2f.7c.ca **14** +VOICE BURST F: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 20 | 80.5d 3b.09 3b.eb.4b.e0 00.00.00.00 | 8a 19 **06** 98.22.d3.d9.00.b4.a6.05.6d.29.a2.17.a8.82.75.14.f8.10.08 **0000000010** +VOICE TERMINATOR: 80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 **00.00.30.ac** 60 | 80.5e 3e.76 3b.f1.b8.40 00.00.00.00 | 02 80 00.0a 80 0a 00.60 00 00 00 00.00.02 2f.7c.ca **9da07f00123535** + + +VOICE HEADER: 54 Bytes (0-53) (sent 3 times, see notes): + IPSC: + PACKET_TYPE[0] + PEER_ID[1-4] + IPSC_SEQ[5] + SRC_SUB[6-9] + DST_SUB[9-11] + CALL_TYPE[12] + CALL_CONTROL[13-16] (use a random number) + CALL_INFO[17] + RTP: + RTP_HEAD[18-19] + RTP_SEQ[20-21] + RTP_TIMESTMP[22-25] + RTP_SSID[26-29] + RTP PAYLOAD: + BURST_TYPE[30] + ???[31-40] + VOICE_PDU_DST[41-43] + VOICE_PDU_SRC[44-46] + ???[46-53] + +VOICE BURST A: 52 Bytes (0-51): + IPSC: + PACKET_TYPE[0] + PEER_ID[1-4] + IPSC_SEQ[5] + SRC_SUB[6-9] + DST_SUB[9-11] + CALL_TYPE[12] + CALL_CONTROL[13-16] (use a random number) + CALL_INFO[17] + RTP: + RTP_HEAD[18-19] + RTP_SEQ[20-21] + RTP_TIMESTMP[22-25] + RTP_SSID[26-29] + RTP PAYLOAD: + BURST_TYPE[30] + LENGTH[31] (bytes left after this one) + ???[32] + AMBE_DATA[33-51] + +VOICE BURST B-D and maybe F: 57 Bytes (0-56): + IPSC: + PACKET_TYPE[0] + PEER_ID[1-4] + IPSC_SEQ[5] + SRC_SUB[6-9] + DST_SUB[9-11] + CALL_TYPE[12] + CALL_CONTROL[13-16] (use a random number) + CALL_INFO[17] + RTP: + RTP_HEAD[18-19] + RTP_SEQ[20-21] + RTP_TIMESTMP[22-25] + RTP_SSID[26-29] + RTP PAYLOAD: + BURST_TYPE[30] + LENGTH[31] (bytes left after this one) + ???[32] + AMBE_DATA[33-51] + ???[52-56] + +VOICE BURST E: 66 Bytes (0-65): + IPSC: + PACKET_TYPE[0] + PEER_ID[1-4] + IPSC_SEQ[5] + SRC_SUB[6-9] + DST_SUB[9-11] + CALL_TYPE[12] + CALL_CONTROL[13-16] (use a random number) + CALL_INFO[17] + RTP: + RTP_HEAD[18-19] + RTP_SEQ[20-21] + RTP_TIMESTMP[22-25] + RTP_SSID[26-29] + RTP PAYLOAD: + BURST_TYPE[30] + LENGTH[31] (bytes left after this one) + ???[32] + AMBE_DATA[33-51] + ???[52-64] + VOICE_PDU_DST[59-61] + VOICE_PDU_SRC[62-64] + ???[65] + +VOICE BURST F, Same as B-D???: 57 Bytes (0-56): + +VOICE TERMINATOR: 54 Bytes (0-53) + IPSC: + PACKET_TYPE[0] + PEER_ID[1-4] + IPSC_SEQ[5] + SRC_SUB[6-9] + DST_SUB[9-11] + CALL_TYPE[12] + CALL_CONTROL[13-16] (use a random number) + CALL_INFO[17] + RTP: + RTP_HEAD[18-19] + RTP_SEQ[20-21] + RTP_TIMESTMP[22-25] + RTP_SSID[26-29] + RTP PAYLOAD: + BURST_TYPE[30] + RSSI_THRESH_PARITY[31] + LENGTH_TO_FOLLOW[32-33] + RSSI_STATUS[34] + SLOT_TYPE_SYNC[35] + DATA_SIZE[36-37] + IPSC_DATA { [38] to (LENGTH_TO_FOLLOW *2)-4 } + FULL_LC_BYTE1[38] + FULL_LC_FID[39] + VOICE_PDU_SVC_OPT[40] + VOICE_PDU_DST[41-43] + VOICE_PDU_SRC[44-46] + ???[47-53] + + + A is a sync burst + B,C,D are the ame + E has extra data -- EMB? + F is the same length as B,C,D, but has a lot of zeros near the end. + +Send a wakeup before starting a call (type 0x85) + +IPSC Sequence Number - incremented with each call made + +RTP Header - Marker set for 1st voide header - 0x80DD, not for anything else 0x805D except terminator 0x80DE, which is the payload type and use is proprietary. +I've decoded the bits in the RTP header, it's going to be ok to use this recipe. Nothing else is going on. + +RTP Sequence number -- increment with each packet + +RTP timestamp - assumed currently to be 32 bit fixed point number 16bit.16bit seconds. Which would place these packets at 4.8ms apart... seems wrong. \ No newline at end of file diff --git a/voice_burst_decoding.txt b/voice_burst_decoding.txt deleted file mode 100644 index d0f6467..0000000 --- a/voice_burst_decoding.txt +++ /dev/null @@ -1,28 +0,0 @@ -v_hed_1 = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.dd 3b.01 3b.eb.3c.e0 00.00.00.00 01 80000a800a0060000000000002 2f.7c.ca 92af7000113532' -v_hed_2 = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.02 3b.eb.3e.c0 00.00.00.00 01 80000a800a0060000000000002 2f.7c.ca 92af7000113530' -v_hed_3 = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.03 3b.eb.40.a0 00.00.00.00 01 80000a800a0060000000000002 2f.7c.ca 92af7000113531' -voice_A = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.04 3b.eb.42.80 00.00.00.00 8a 1440f801a99f8ce0be006a67e3382f801a99f8ce08' -voice_B = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.05 3b.eb.44.60 00.00.00.00 8a 1906f801a99f8ce0be006a67e3382f801a99f8ce080505060612' -voice_C = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.06 3b.eb.46.40 00.00.00.00 8a 1906f801a99f8ce0be006a67e3382f801a99f8ce080905060516' -voice_D = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.07 3b.eb.48.20 00.00.00.00 8a 19069802b94fa4d3bbb796c783d8ee811941e44a680f05060f16' -voice_E = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.08 3b.eb.4a.00 00.00.00.00 8a 2216e81a62d68c6bba063d0deb04e981ddf10486c8000a0a0c000000000002 2f.7c.ca.14' -voice_F = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 20 80.5d 3b.09 3b.eb.4b.e0 00.00.00.00 8a 19069822d3d900b4a6056d29a217a8827514f810080000000010' -voice_T = '80 00.04.bf.fd 08 2f.7c.ca 00.00.02 02 00.00.30.ac 60 80.5e 3e.76 3b.f1.b8.40 00.00.00.00 02 80000a800a0060000000000002 2f.7c.ca 9da07f00123535' - - TP PEER_ID IPSC_SEQ SRC_SUB DST_SUB TYPE unknown INFO RTP RTP_SEQ RTP_TIMESTMP RTP_SSID | BURST - - A is a sync burst - B,C,D are the ame - E has extra data -- EMB? - F is the same length as B,C,D, but has a lot of zeros near the end. - -Send a wakeup before starting a call (type 0x85) - -IPSC Sequence Number - incremented with each call made - -RTP Header - Marker set for 1st voide header - 0x80DD, not for anything else 0x805D except terminator 0x80DE, which is the payload type and use is proprietary. -I've decoded the bits in the RTP header, it's going to be ok to use this recipe. Nothing else is going on. - -RTP Sequence number -- increment with each packet - -RTP timestamp - assumed currently to be 32 bit fixed point number 16bit.16bit seconds. Which would place these packets at 4.8ms apart... seems wrong. \ No newline at end of file