From 26484f917be0e3cf63d7b402d7f27cf202ecdcb0 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Fri, 2 Nov 2018 20:27:07 -0700 Subject: [PATCH] Parse d868uv scanlists. --- d868uv.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/d868uv.c b/d868uv.c index 8156996..f2e466b 100644 --- a/d868uv.c +++ b/d868uv.c @@ -1958,14 +1958,68 @@ static int parse_zones(int first_row, char *line) return 1; } +// +// Set parameters for a given scan list. +// +static void setup_scanlist(int index, const char *name, + int prio1, int prio2, int txchan) +{ + scanlist_t *sl = GET_SCANLIST(index); + + memset(sl, 0, 192); + memset(sl->member, 0xff, 100); + ascii_decode(sl->name, name, 16, 0); + + sl->priority_ch1 = prio1; // Priority Channel 1: 0=Current Channel, 0xffff=Off + sl->priority_ch2 = prio2; // Priority Channel 2: 0=Current Channel, 0xffff=Off + sl->revert_channel = txchan; // Revert Channel: Selected or Last Called + + if (prio2 != 0xffff) { // Priority Channel Select + if (prio1 != 0xffff) { + sl->prio_ch_select = PRIO_CHAN_SEL12; + } else { + sl->prio_ch_select = PRIO_CHAN_SEL2; + } + } else { + if (prio1 != 0xffff) { + sl->prio_ch_select = PRIO_CHAN_SEL1; + } else { + sl->prio_ch_select = PRIO_CHAN_OFF; + } + } + + sl->look_back_a = 20; // Look Back Time A: 2.0s + sl->look_back_b = 30; // Look Back Time B: 3.0s + sl->dropout_delay = 31; // Dropout Delay Time: 3.1s + sl->dwell = 31; // Dwell Time: 3.1s +} + +// +// Add channel to a zone. +// Return 0 on failure. +// +static int scanlist_append(int index, int cnum) +{ + scanlist_t *sl = GET_SCANLIST(index); + int i; + + for (i=0; i<50; i++) { + if (sl->member[i] == cnum-1) + return 1; + if (sl->member[i] == 0xffff) { + sl->member[i] = cnum-1; + return 1; + } + } + return 0; +} + // // Parse one line of Scanlist table. // Return 0 on failure. // static int parse_scanlist(int first_row, char *line) { - //TODO -#if 0 char num_str[256], name_str[256], prio1_str[256], prio2_str[256]; char tx_str[256], chan_str[256]; int snum, prio1, prio2, txchan; @@ -2010,15 +2064,12 @@ static int parse_scanlist(int first_row, char *line) } if (strcasecmp("Last", tx_str) == 0) { - txchan = 0xffff; - } else if (strcasecmp("Sel", tx_str) == 0) { - txchan = 0; + txchan = REVCH_LAST_CALLED; + } else if (strcasecmp("Sel", tx_str) == 0 || strcasecmp("-", tx_str) == 0) { + txchan = REVCH_SELECTED; } else { - txchan = atoi(tx_str); - if (txchan < 1 || txchan > NCHAN) { - fprintf(stderr, "Bad transmit channel.\n"); - return 0; - } + fprintf(stderr, "Bad transmit channel.\n"); + return 0; } setup_scanlist(snum-1, name_str, prio1, prio2, txchan); @@ -2074,7 +2125,6 @@ static int parse_scanlist(int first_row, char *line) str = eptr + 1; } } -#endif return 1; }