@@ -86,6 +86,10 @@ m_rfCollectedLSF(),
86
86
m_rfLSFn(0U ),
87
87
m_netLSF(),
88
88
m_netLSFn(0U ),
89
+ m_rfTextBits(0x00U ),
90
+ m_netTextBits(0x00U ),
91
+ m_rfText(NULL ),
92
+ m_netText(NULL ),
89
93
m_rssiMapper(rssiMapper),
90
94
m_rssi(0U ),
91
95
m_maxRSSI(0U ),
@@ -97,10 +101,15 @@ m_fp(NULL)
97
101
{
98
102
assert (display != NULL );
99
103
assert (rssiMapper != NULL );
104
+
105
+ m_rfText = new char [4U * M17_META_LENGTH_BYTES];
106
+ m_netText = new char [4U * M17_META_LENGTH_BYTES];
100
107
}
101
108
102
109
CM17Control::~CM17Control ()
103
110
{
111
+ delete[] m_netText;
112
+ delete[] m_rfText;
104
113
}
105
114
106
115
bool CM17Control::writeModem (unsigned char * data, unsigned int len)
@@ -196,7 +205,8 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
196
205
m_rssiCount = 1U ;
197
206
m_rfLSFn = 0U ;
198
207
m_rfLSFCount = 0U ;
199
-
208
+ m_rfTextBits = 0x00U ;
209
+ ::memset (m_rfText, 0x00U , 4U * M17_META_LENGTH_BYTES);
200
210
#if defined(DUMP_M17)
201
211
openFile ();
202
212
#endif
@@ -249,7 +259,8 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
249
259
m_aveRSSI = m_rssi;
250
260
m_rssiCount = 1U ;
251
261
m_rfLSFCount = 0U ;
252
-
262
+ m_rfTextBits = 0x00U ;
263
+ ::memset (m_rfText, 0x00U , 4U * M17_META_LENGTH_BYTES);
253
264
#if defined(DUMP_M17)
254
265
openFile ();
255
266
#endif
@@ -282,6 +293,38 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len)
282
293
if (valid) {
283
294
m_rfCollectedLSF = m_rfCollectingLSF;
284
295
m_rfCollectingLSF.reset ();
296
+
297
+ unsigned char encryptionType = m_rfCollectedLSF.getEncryptionType ();
298
+ unsigned char encryptionSubType = m_rfCollectedLSF.getEncryptionSubType ();
299
+ if (encryptionType == M17_ENCRYPTION_TYPE_NONE && encryptionSubType == M17_ENCRYPTION_SUB_TYPE_TEXT) {
300
+ unsigned char meta[20U ];
301
+ m_rfCollectedLSF.getMeta (meta);
302
+ CUtils::dump (1U , " M17, LSF text data fragment" , meta, M17_META_LENGTH_BYTES);
303
+
304
+ m_rfTextBits |= meta[0U ];
305
+
306
+ switch (meta[0U ] & 0x0FU ) {
307
+ case 0x01U :
308
+ ::memcpy (m_rfText + 0U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
309
+ break ;
310
+ case 0x02U :
311
+ ::memcpy (m_rfText + 13U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
312
+ break ;
313
+ case 0x04U :
314
+ ::memcpy (m_rfText + 26U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
315
+ break ;
316
+ case 0x08U :
317
+ ::memcpy (m_rfText + 39U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
318
+ break ;
319
+ default :
320
+ break ;
321
+ }
322
+
323
+ if (m_rfTextBits == 0x11U || m_rfTextBits == 0x33U || m_rfTextBits == 0x77U || m_rfTextBits == 0xFFU ) {
324
+ LogMessage (" M17, text Data: \" %s\" " , m_rfText);
325
+ m_rfTextBits = 0x00U ;
326
+ }
327
+ }
285
328
}
286
329
}
287
330
@@ -547,8 +590,10 @@ void CM17Control::writeNetwork()
547
590
548
591
m_netTimeoutTimer.start ();
549
592
m_elapsed.start ();
550
- m_netFrames = 0U ;
551
- m_netLSFn = 0U ;
593
+ m_netFrames = 0U ;
594
+ m_netLSFn = 0U ;
595
+ m_netTextBits = 0x00U ;
596
+ ::memset (m_netText, 0x00U , 4U * M17_META_LENGTH_BYTES);
552
597
553
598
// Create a dummy start message
554
599
unsigned char start[M17_FRAME_LENGTH_BYTES + 2U ];
@@ -580,6 +625,38 @@ void CM17Control::writeNetwork()
580
625
581
626
m_netLSF.setSource (m_callsign);
582
627
m_netLSF.setCAN (m_can);
628
+
629
+ unsigned char encryptionType = m_netLSF.getEncryptionType ();
630
+ unsigned char encryptionSubType = m_netLSF.getEncryptionSubType ();
631
+ if (encryptionType == M17_ENCRYPTION_TYPE_NONE && encryptionSubType == M17_ENCRYPTION_SUB_TYPE_TEXT) {
632
+ unsigned char meta[20U ];
633
+ m_netLSF.getMeta (meta);
634
+ CUtils::dump (1U , " M17, LSF text data fragment" , meta, M17_META_LENGTH_BYTES);
635
+
636
+ m_netTextBits |= meta[0U ];
637
+
638
+ switch (meta[0U ] & 0x0FU ) {
639
+ case 0x01U :
640
+ ::memcpy (m_netText + 0U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
641
+ break ;
642
+ case 0x02U :
643
+ ::memcpy (m_netText + 13U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
644
+ break ;
645
+ case 0x04U :
646
+ ::memcpy (m_netText + 26U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
647
+ break ;
648
+ case 0x08U :
649
+ ::memcpy (m_netText + 39U , meta + 1U , M17_META_LENGTH_BYTES - 1U );
650
+ break ;
651
+ default :
652
+ break ;
653
+ }
654
+
655
+ if (m_netTextBits == 0x11U || m_netTextBits == 0x33U || m_netTextBits == 0x77U || m_netTextBits == 0xFFU ) {
656
+ LogMessage (" M17, text Data: \" %s\" " , m_netText);
657
+ m_netTextBits = 0x00U ;
658
+ }
659
+ }
583
660
}
584
661
585
662
unsigned char data[M17_FRAME_LENGTH_BYTES + 2U ];
0 commit comments