Trunking Hangtime and Tweaks; NXDN F2U Tweak;
This commit is contained in:
parent
cc7504c280
commit
61cefa6a87
|
|
@ -54,6 +54,7 @@ sudo make install
|
|||
(See group.csv for example)
|
||||
-3 Enable Experimental Trunking Features (P25/EDACS/NXDN-ish for now) with RIGCTL/TCP or RTL Input
|
||||
-5 <udp p> Enable RIGCTL/TCP; Set UDP Port for RIGCTL. (4532 for SDR++)
|
||||
-6 <secs> Set Trunking VC/sync loss hangtime in seconds. (default = 1 second)
|
||||
|
||||
```
|
||||
### Input ###
|
||||
|
|
|
|||
|
|
@ -359,6 +359,7 @@ typedef struct
|
|||
|
||||
int p25_trunk; //experimental P25 trunking with RIGCTL (or RTLFM)
|
||||
int p25_is_tuned; //set to 1 if currently on VC, set back to 0 if on CC
|
||||
int trunk_hangtime; //hangtime in seconds before tuning back to CC
|
||||
|
||||
//csv import filenames
|
||||
char group_in_file[1024];
|
||||
|
|
|
|||
|
|
@ -150,8 +150,9 @@ getFrameSync (dsd_opts * opts, dsd_state * state)
|
|||
|
||||
//start control channel hunting if using trunking, time needs updating on each successful sync
|
||||
//will need to assign frequencies to a CC array for P25 since that isn't imported from CSV
|
||||
if (opts->p25_is_tuned == 0 && opts->p25_trunk == 1 && time(NULL) - state->last_cc_sync_time > 3)
|
||||
if (opts->p25_is_tuned == 0 && opts->p25_trunk == 1 && (time(NULL) - state->last_cc_sync_time > (opts->trunk_hangtime + 2)) )
|
||||
{
|
||||
|
||||
//test to switch back to 10/4 P1 QPSK for P25 FDMA CC
|
||||
if (opts->mod_qpsk == 1 && state->p25_cc_is_tdma == 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ void
|
|||
noCarrier (dsd_opts * opts, dsd_state * state)
|
||||
{
|
||||
|
||||
//tune back to last knwon CC when using trunking
|
||||
if (opts->p25_trunk == 1 && opts->p25_is_tuned == 1)
|
||||
//tune back to last knwon CC when using trunking after x second hangtime
|
||||
if (opts->p25_trunk == 1 && opts->p25_is_tuned == 1 && time(NULL) - state->last_cc_sync_time > opts->trunk_hangtime)
|
||||
{
|
||||
if (state->p25_cc_freq != 0)
|
||||
{
|
||||
|
|
@ -136,11 +136,26 @@ noCarrier (dsd_opts * opts, dsd_state * state)
|
|||
sprintf (state->ftype, " ");
|
||||
state->errs = 0;
|
||||
state->errs2 = 0;
|
||||
//should I disable this or not?
|
||||
state->lasttg = 0;
|
||||
state->lastsrc = 0;
|
||||
state->lasttgR = 0;
|
||||
state->lastsrcR = 0;
|
||||
|
||||
//zero out right away if not trunking
|
||||
if (opts->p25_trunk == 0)
|
||||
{
|
||||
state->lasttg = 0;
|
||||
state->lastsrc = 0;
|
||||
state->lasttgR = 0;
|
||||
state->lastsrcR = 0;
|
||||
}
|
||||
|
||||
//zero out after x second hangtime when trunking to prevent premature zeroing on these variables
|
||||
//mainly bugfix for ncurses and per call wavs (edacs)
|
||||
if (opts->p25_trunk == 1 && opts->p25_is_tuned == 1 && time(NULL) - state->last_cc_sync_time > opts->trunk_hangtime)
|
||||
{
|
||||
state->lasttg = 0;
|
||||
state->lastsrc = 0;
|
||||
state->lasttgR = 0;
|
||||
state->lastsrcR = 0;
|
||||
}
|
||||
|
||||
state->lastp25type = 0;
|
||||
state->repeat = 0;
|
||||
state->nac = 0;
|
||||
|
|
@ -392,6 +407,7 @@ initOpts (dsd_opts * opts)
|
|||
|
||||
opts->p25_trunk = 0; //0 disabled, 1 is enabled
|
||||
opts->p25_is_tuned = 0; //set to 1 if currently on VC, set back to 0 on carrier drop
|
||||
opts->trunk_hangtime = 1; //1 second hangtime by default before tuning back to CC
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -647,6 +663,7 @@ initState (dsd_state * state)
|
|||
state->p2_cc = 0;
|
||||
state->p2_hardset = 0;
|
||||
state->p2_is_lcch = 0;
|
||||
state->p25_cc_is_tdma = 2; //init on 2, TSBK NET_STS will set 0, TDMA NET_STS will set 1. //used to determine if we need to change symbol rate when cc hunting
|
||||
|
||||
//experimental symbol file capture read throttle
|
||||
state->symbol_throttle = 0; //throttle speed
|
||||
|
|
@ -837,6 +854,7 @@ usage ()
|
|||
printf (" (See group.csv for example)\n");
|
||||
printf (" -3 Enable Extremely Experimental Trunking Features (NXDN/P25/EDACS for now) with RIGCTL/TCP or RTL Input\n");
|
||||
printf (" -5 <udp p> Enable RIGCTL/TCP; Set UDP Port for RIGCTL. (4532 on SDR++)\n");
|
||||
printf (" -6 <secs> Set Trunking VC/sync loss hangtime in seconds. (default = 1 second)\n");
|
||||
//printf (" (Currently only available on UDP port 4532)\n");
|
||||
printf ("\n");
|
||||
exit (0);
|
||||
|
|
@ -1068,7 +1086,7 @@ main (int argc, char **argv)
|
|||
exitflag = 0;
|
||||
signal (SIGINT, sigfun);
|
||||
|
||||
while ((c = getopt (argc, argv, "haep:P:qs:tv:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:V:U:Y:K:H:X:NQWrlZTF1:2:345:")) != -1)
|
||||
while ((c = getopt (argc, argv, "haep:P:qs:tv:z:i:o:d:c:g:nw:B:C:R:f:m:u:x:A:S:M:G:D:L:V:U:Y:K:H:X:NQWrlZTF1:2:345:6:")) != -1)
|
||||
{
|
||||
opterr = 0;
|
||||
switch (c)
|
||||
|
|
@ -1105,6 +1123,10 @@ main (int argc, char **argv)
|
|||
opts.use_rigctl = 1;
|
||||
}
|
||||
break;
|
||||
//placeholder until letters get re-arranged
|
||||
case '6': //hangtime in seconds, default is 1;
|
||||
sscanf (optarg, "%d", &opts.trunk_hangtime);
|
||||
break;
|
||||
case 'e':
|
||||
opts.errorbars = 1;
|
||||
opts.datascope = 0;
|
||||
|
|
|
|||
|
|
@ -384,8 +384,22 @@ void nxdn_deperm_facch2_udch(dsd_opts * opts, dsd_state * state, uint8_t bits[34
|
|||
|
||||
crc = crc15(trellis_buf, 199);
|
||||
|
||||
fprintf (stderr, " F2/U ");
|
||||
if (crc == 0) NXDN_Elements_Content_decode(opts, state, 1, trellis_buf);
|
||||
uint8_t f2u_message_buffer[199];
|
||||
memset (f2u_message_buffer, 0, sizeof(f2u_message_buffer));
|
||||
|
||||
//just going to leave this all here in case its needed, like in cac,
|
||||
//don't have any samples with f2 or udch data in it
|
||||
for (int i = 0; i < 199-8; i++)
|
||||
{
|
||||
f2u_message_buffer[i] = trellis_buf[i+8];
|
||||
}
|
||||
|
||||
if (crc == 0)
|
||||
{
|
||||
fprintf (stderr, " F2/U ");
|
||||
//NXDN_Elements_Content_decode(opts, state, 1, trellis_buf);
|
||||
NXDN_Elements_Content_decode(opts, state, 1, f2u_message_buffer);
|
||||
}
|
||||
|
||||
if (opts->payload == 1)
|
||||
{
|
||||
|
|
@ -476,8 +490,6 @@ void nxdn_deperm_cac(dsd_opts * opts, dsd_state * state, uint8_t bits[300])
|
|||
|
||||
crc = crc16cac(trellis_buf, 171);
|
||||
|
||||
fprintf (stderr, " CAC ");
|
||||
|
||||
//message type will probably be neccesary beforehand on single/dual meessage runs
|
||||
//run message, check len, load into a seperate buffer, send to element, do same with other piece?
|
||||
uint8_t MessageType = 0;
|
||||
|
|
@ -496,7 +508,11 @@ void nxdn_deperm_cac(dsd_opts * opts, dsd_state * state, uint8_t bits[300])
|
|||
cac_message_buffer[i] = trellis_buf[i+8];
|
||||
}
|
||||
|
||||
if (crc == 0) NXDN_Elements_Content_decode(opts, state, 1, cac_message_buffer);
|
||||
if (crc == 0)
|
||||
{
|
||||
fprintf (stderr, " CAC ");
|
||||
NXDN_Elements_Content_decode(opts, state, 1, cac_message_buffer);
|
||||
}
|
||||
|
||||
if (opts->payload == 1)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue