EDACS: Show agency and fleet calls based on AFS

This commit is contained in:
ilyacodes 2024-04-13 16:22:52 -04:00
parent 4eb2e770c8
commit 7e26b7b902
3 changed files with 31 additions and 12 deletions

View File

@ -763,14 +763,16 @@ typedef struct
int edacs_s_mask; //Calculated Mask for S Bits
//flags for EDACS call type
#define EDACS_IS_VOICE 0x01
#define EDACS_IS_DIGITAL 0x02
#define EDACS_IS_EMERGENCY 0x04
#define EDACS_IS_GROUP 0x08
#define EDACS_IS_INDIVIDUAL 0x10
#define EDACS_IS_ALL_CALL 0x20
#define EDACS_IS_INTERCONNECT 0x40
#define EDACS_IS_TEST_CALL 0x80
#define EDACS_IS_VOICE 0x01
#define EDACS_IS_DIGITAL 0x02
#define EDACS_IS_EMERGENCY 0x04
#define EDACS_IS_GROUP 0x08
#define EDACS_IS_INDIVIDUAL 0x10
#define EDACS_IS_ALL_CALL 0x20
#define EDACS_IS_INTERCONNECT 0x40
#define EDACS_IS_TEST_CALL 0x80
#define EDACS_IS_AGENCY_CALL 0x100
#define EDACS_IS_FLEET_CALL 0x200
//trunking group and lcn freq list
long int trunk_lcn_freq[26]; //max number on an EDACS system, should be enough on DMR too hopefully

View File

@ -3665,6 +3665,8 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
if ((call_matrix[i][4] & EDACS_IS_TEST_CALL) != 0) {}
else if ((call_matrix[i][4] & EDACS_IS_DIGITAL) == 0) printw (" [Ana]");
else printw (" [Dig]");
if ((call_matrix[i][4] & EDACS_IS_AGENCY_CALL) != 0) printw ("[A]");
if ((call_matrix[i][4] & EDACS_IS_FLEET_CALL) != 0) printw ("[F]");
if ((call_matrix[i][4] & EDACS_IS_EMERGENCY) != 0) printw ("[EM]");
}
else
@ -3860,9 +3862,11 @@ ncursesPrinter (dsd_opts * opts, dsd_state * state)
printw ("Unknown call type");
// Call flags
if ((call_matrix[j][4] & EDACS_IS_TEST_CALL) != 0) {}
if ((call_matrix[j][4] & EDACS_IS_TEST_CALL) != 0) {}
else if ((call_matrix[j][4] & EDACS_IS_DIGITAL) == 0) printw (" [Ana]");
else printw (" [Dig]");
if ((call_matrix[j][4] & EDACS_IS_AGENCY_CALL) != 0) printw ("[A]");
if ((call_matrix[j][4] & EDACS_IS_FLEET_CALL) != 0) printw ("[F]");
if ((call_matrix[j][4] & EDACS_IS_EMERGENCY) != 0) printw ("[EM]");
}
else

View File

@ -69,6 +69,17 @@ char* get_lcn_status_string(int lcn)
return "";
}
int is_agency_call_group(int afs)
{
int fs_mask = state->edacs_s_mask | (state->edacs_f_mask << state->edacs_f_shift);
return (afs & fs_mask) == 0
}
int is_fleet_call_group(int afs)
{
return (afs & state->edacs_s_mask) == 0
}
//Bitwise vote-compare the three copies of a message received. Note that fr_2 and fr_5 are transmitted inverted.
unsigned long long int edacs_vote_fr(unsigned long long int fr_1_4, unsigned long long int fr_2_5, unsigned long long int fr_3_6)
{
@ -1305,9 +1316,11 @@ void edacs(dsd_opts * opts, dsd_state * state)
state->lastsrc = lid;
//Call type for state
state->edacs_vc_call_type = EDACS_IS_VOICE | EDACS_IS_GROUP;
if (is_digital == 1) state->edacs_vc_call_type |= EDACS_IS_DIGITAL;
if (is_emergency == 1) state->edacs_vc_call_type |= EDACS_IS_EMERGENCY;
state->edacs_vc_call_type = EDACS_IS_VOICE | EDACS_IS_GROUP;
if (is_digital == 1) state->edacs_vc_call_type |= EDACS_IS_DIGITAL;
if (is_emergency == 1) state->edacs_vc_call_type |= EDACS_IS_EMERGENCY;
if (is_agency_call_group(group)) state->edacs_vc_call_type |= EDACS_IS_AGENCY_CALL;
if (is_fleet_call_group(group)) state->edacs_vc_call_type |= EDACS_IS_FLEET_CALL;
char mode[8]; //allow, block, digital enc
sprintf (mode, "%s", "");