Skip to content

Commit 06a3da0

Browse files
committed
Hopefully fix the unreceivable P25 transmissions.
1 parent da38264 commit 06a3da0

File tree

2 files changed

+31
-32
lines changed

2 files changed

+31
-32
lines changed

P25Control.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len)
361361
// Regenerate NID
362362
m_nid.encode(data + 2U, P25_DUID_LDU2);
363363

364-
// Add the dummy LDU2 data
364+
// Add the LDU2 data
365365
m_rfData.encodeLDU2(data + 2U);
366366

367367
// Regenerate the Low Speed Data
@@ -960,7 +960,7 @@ void CP25Control::createRFHeader()
960960
// Add the NID
961961
m_nid.encode(buffer + 2U, P25_DUID_HEADER);
962962

963-
// Add the dummy header
963+
// Add the header
964964
m_rfData.encodeHeader(buffer + 2U);
965965

966966
// Add busy bits, inbound busy
@@ -995,18 +995,18 @@ void CP25Control::createNetHeader()
995995
unsigned int dstId = (m_netLDU1[76U] << 16) + (m_netLDU1[77U] << 8) + m_netLDU1[78U];
996996
unsigned int srcId = (m_netLDU1[101U] << 16) + (m_netLDU1[102U] << 8) + m_netLDU1[103U];
997997

998-
unsigned char algId = m_netLDU2[126U];
999-
unsigned int kId = (m_netLDU2[127U] << 8) + m_netLDU2[128U];
998+
// unsigned char algId = m_netLDU2[126U];
999+
// unsigned int kId = (m_netLDU2[127U] << 8) + m_netLDU2[128U];
10001000

1001-
unsigned char mi[P25_MI_LENGTH_BYTES];
1002-
::memcpy(mi + 0U, m_netLDU2 + 51U, 3U);
1003-
::memcpy(mi + 3U, m_netLDU2 + 76U, 3U);
1004-
::memcpy(mi + 6U, m_netLDU2 + 101U, 3U);
1001+
// unsigned char mi[P25_MI_LENGTH_BYTES];
1002+
// ::memcpy(mi + 0U, m_netLDU2 + 51U, 3U);
1003+
// ::memcpy(mi + 3U, m_netLDU2 + 76U, 3U);
1004+
// ::memcpy(mi + 6U, m_netLDU2 + 101U, 3U);
10051005

10061006
m_netData.reset();
1007-
m_netData.setMI(mi);
1008-
m_netData.setAlgId(algId);
1009-
m_netData.setKId(kId);
1007+
// m_netData.setMI(mi);
1008+
// m_netData.setAlgId(algId);
1009+
// m_netData.setKId(kId);
10101010
m_netData.setLCF(lcf);
10111011
m_netData.setMFId(mfId);
10121012
m_netData.setSrcId(srcId);
@@ -1035,7 +1035,7 @@ void CP25Control::createNetHeader()
10351035
// Add the NID
10361036
m_nid.encode(buffer + 2U, P25_DUID_HEADER);
10371037

1038-
// Add the dummy header
1038+
// Add the header
10391039
m_netData.encodeHeader(buffer + 2U);
10401040

10411041
// Add busy bits
@@ -1121,7 +1121,7 @@ void CP25Control::createNetLDU2()
11211121
// Add the NID
11221122
m_nid.encode(buffer + 2U, P25_DUID_LDU2);
11231123

1124-
// Add the dummy LDU2 data
1124+
// Add the LDU2 data
11251125
m_netData.encodeLDU2(buffer + 2U);
11261126

11271127
// Add the Audio

P25Data.cpp

+18-19
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2016,2017 by Jonathan Naylor G4KLX
2+
* Copyright (C) 2016,2017,2023 by Jonathan Naylor G4KLX
33
* Copyright (C) 2018 by Bryan Biedenkapp <[email protected]> N2PLL
44
*
55
* This program is free software; you can redistribute it and/or modify
@@ -38,7 +38,7 @@ const unsigned char BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04
3838
CP25Data::CP25Data() :
3939
m_mi(NULL),
4040
m_mfId(0U),
41-
m_algId(0x80U),
41+
m_algId(P25_ALGO_UNENCRYPT),
4242
m_kId(0U),
4343
m_lcf(0x00U),
4444
m_emergency(false),
@@ -48,6 +48,7 @@ m_rs241213(),
4848
m_trellis()
4949
{
5050
m_mi = new unsigned char[P25_MI_LENGTH_BYTES];
51+
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
5152
}
5253

5354
CP25Data::~CP25Data()
@@ -66,7 +67,7 @@ CP25Data& CP25Data::operator=(const CP25Data& data)
6667
m_emergency = data.m_emergency;
6768

6869
m_algId = data.m_algId;
69-
m_kId = data.m_kId;
70+
m_kId = data.m_kId;
7071

7172
::memcpy(m_mi, data.m_mi, P25_MI_LENGTH_BYTES);
7273
}
@@ -97,20 +98,19 @@ bool CP25Data::decodeHeader(const unsigned char* data)
9798
}
9899

99100
m_mfId = rs[9U]; // Mfg Id.
101+
/*
100102
m_algId = rs[10U]; // Algorithm ID
101103
102104
if (m_algId != P25_ALGO_UNENCRYPT) {
103-
m_mi = new unsigned char[P25_MI_LENGTH_BYTES];
104105
::memcpy(m_mi, rs, P25_MI_LENGTH_BYTES); // Message Indicator
105106
106-
m_kId = (rs[11U] << 8) + rs[12U]; // Key ID
107+
m_kId = (rs[11U] << 8) | (rs[12U] << 0); // Key ID
107108
} else {
108-
m_mi = new unsigned char[P25_MI_LENGTH_BYTES];
109109
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
110110
111111
m_kId = 0x0000U;
112112
}
113-
113+
*/
114114
return true;
115115
}
116116

@@ -291,21 +291,20 @@ bool CP25Data::decodeLDU2(const unsigned char* data)
291291
CUtils::dump(2U, "P25, RS crashed with input data", rs, 18U);
292292
return false;
293293
}
294+
/*
295+
m_algId = rs[9U]; // Algorithm ID
294296
295-
m_algId = rs[9U]; // Algorithm ID
296297
if (m_algId != P25_ALGO_UNENCRYPT) {
297-
m_mi = new unsigned char[P25_MI_LENGTH_BYTES];
298-
::memcpy(m_mi, rs, P25_MI_LENGTH_BYTES); // Message Indicator
298+
::memcpy(m_mi, rs, P25_MI_LENGTH_BYTES); // Message Indicator
299299
300-
m_kId = (rs[10U] << 8) + rs[11U]; // Key ID
300+
m_kId = (rs[10U] << 8) + rs[11U]; // Key ID
301301
}
302302
else {
303-
m_mi = new unsigned char[P25_MI_LENGTH_BYTES];
304303
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
305304
306305
m_kId = 0x0000U;
307306
}
308-
307+
*/
309308
return true;
310309
}
311310

@@ -318,11 +317,11 @@ void CP25Data::encodeLDU2(unsigned char* data)
318317
::memset(rs, 0x00U, 18U);
319318

320319
for (unsigned int i = 0; i < P25_MI_LENGTH_BYTES; i++)
321-
rs[i] = m_mi[i]; // Message Indicator
320+
rs[i] = m_mi[i]; // Message Indicator
322321

323-
rs[9U] = m_algId; // Algorithm ID
324-
rs[10U] = (m_kId >> 8) & 0xFFU; // Key ID MSB
325-
rs[11U] = (m_kId >> 0) & 0xFFU; // Key ID LSB
322+
rs[9U] = m_algId; // Algorithm ID
323+
rs[10U] = (m_kId >> 8) & 0xFFU; // Key ID MSB
324+
rs[11U] = (m_kId >> 0) & 0xFFU; // Key ID LSB
326325

327326
// encode RS (24,16,9) FEC
328327
m_rs241213.encode24169(rs);
@@ -370,7 +369,7 @@ bool CP25Data::decodeTSDU(const unsigned char* data)
370369
return false;
371370
}
372371

373-
m_lcf = tsbk[0U] & 0x3F;
372+
m_lcf = tsbk[0U] & 0x3F;
374373
m_mfId = tsbk[1U];
375374

376375
unsigned long long tsbkValue = 0U;
@@ -556,7 +555,7 @@ void CP25Data::reset()
556555
{
557556
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
558557

559-
m_algId = 0x80U;
558+
m_algId = P25_ALGO_UNENCRYPT;
560559
m_kId = 0x0000U;
561560
m_lcf = P25_LCF_GROUP;
562561
m_mfId = 0x00U;

0 commit comments

Comments
 (0)