1
1
/*
2
- * Copyright (C) 2016,2017 by Jonathan Naylor G4KLX
2
+ * Copyright (C) 2016,2017,2023 by Jonathan Naylor G4KLX
3
3
* Copyright (C) 2018 by Bryan Biedenkapp <[email protected] > N2PLL
4
4
*
5
5
* 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
38
38
CP25Data::CP25Data () :
39
39
m_mi(NULL ),
40
40
m_mfId(0U ),
41
- m_algId(0x80U ),
41
+ m_algId(P25_ALGO_UNENCRYPT ),
42
42
m_kId(0U ),
43
43
m_lcf(0x00U ),
44
44
m_emergency(false ),
@@ -48,6 +48,7 @@ m_rs241213(),
48
48
m_trellis()
49
49
{
50
50
m_mi = new unsigned char [P25_MI_LENGTH_BYTES];
51
+ ::memset (m_mi, 0x00U , P25_MI_LENGTH_BYTES);
51
52
}
52
53
53
54
CP25Data::~CP25Data ()
@@ -66,7 +67,7 @@ CP25Data& CP25Data::operator=(const CP25Data& data)
66
67
m_emergency = data.m_emergency ;
67
68
68
69
m_algId = data.m_algId ;
69
- m_kId = data.m_kId ;
70
+ m_kId = data.m_kId ;
70
71
71
72
::memcpy (m_mi, data.m_mi, P25_MI_LENGTH_BYTES);
72
73
}
@@ -97,20 +98,19 @@ bool CP25Data::decodeHeader(const unsigned char* data)
97
98
}
98
99
99
100
m_mfId = rs[9U ]; // Mfg Id.
101
+ /*
100
102
m_algId = rs[10U]; // Algorithm ID
101
103
102
104
if (m_algId != P25_ALGO_UNENCRYPT) {
103
- m_mi = new unsigned char [P25_MI_LENGTH_BYTES];
104
105
::memcpy(m_mi, rs, P25_MI_LENGTH_BYTES); // Message Indicator
105
106
106
- m_kId = (rs[11U ] << 8 ) + rs[12U ]; // Key ID
107
+ m_kId = (rs[11U] << 8) | ( rs[12U] << 0); // Key ID
107
108
} else {
108
- m_mi = new unsigned char [P25_MI_LENGTH_BYTES];
109
109
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
110
110
111
111
m_kId = 0x0000U;
112
112
}
113
-
113
+ */
114
114
return true ;
115
115
}
116
116
@@ -291,21 +291,20 @@ bool CP25Data::decodeLDU2(const unsigned char* data)
291
291
CUtils::dump (2U , " P25, RS crashed with input data" , rs, 18U );
292
292
return false ;
293
293
}
294
+ /*
295
+ m_algId = rs[9U]; // Algorithm ID
294
296
295
- m_algId = rs[9U ]; // Algorithm ID
296
297
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
299
299
300
- m_kId = (rs[10U ] << 8 ) + rs[11U ]; // Key ID
300
+ m_kId = (rs[10U] << 8) + rs[11U]; // Key ID
301
301
}
302
302
else {
303
- m_mi = new unsigned char [P25_MI_LENGTH_BYTES];
304
303
::memset(m_mi, 0x00U, P25_MI_LENGTH_BYTES);
305
304
306
305
m_kId = 0x0000U;
307
306
}
308
-
307
+ */
309
308
return true ;
310
309
}
311
310
@@ -318,11 +317,11 @@ void CP25Data::encodeLDU2(unsigned char* data)
318
317
::memset (rs, 0x00U , 18U );
319
318
320
319
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
322
321
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
326
325
327
326
// encode RS (24,16,9) FEC
328
327
m_rs241213.encode24169 (rs);
@@ -370,7 +369,7 @@ bool CP25Data::decodeTSDU(const unsigned char* data)
370
369
return false ;
371
370
}
372
371
373
- m_lcf = tsbk[0U ] & 0x3F ;
372
+ m_lcf = tsbk[0U ] & 0x3F ;
374
373
m_mfId = tsbk[1U ];
375
374
376
375
unsigned long long tsbkValue = 0U ;
@@ -556,7 +555,7 @@ void CP25Data::reset()
556
555
{
557
556
::memset (m_mi, 0x00U , P25_MI_LENGTH_BYTES);
558
557
559
- m_algId = 0x80U ;
558
+ m_algId = P25_ALGO_UNENCRYPT ;
560
559
m_kId = 0x0000U ;
561
560
m_lcf = P25_LCF_GROUP;
562
561
m_mfId = 0x00U ;
0 commit comments