File: lnb.c

package info (click to toggle)
w-scan 20170107-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 1,684 kB
  • sloc: ansic: 12,756; sh: 1,051; xml: 33; makefile: 17
file content (118 lines) | stat: -rw-r--r-- 3,603 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* This file is taken from linuxtv-dvb-apps */

#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <linux/types.h>
#include "lnb.h"

static char *univ_desc[] = {
                "Europe",
                "10800 to 11800 MHz and 11600 to 12700 Mhz",
                "Dual LO, loband 9750, hiband 10600 MHz",
                (char *)NULL };

static char *dbs_desc[] = {
                "Expressvu, North America",
                "12200 to 12700 MHz",
                "Single LO, 11250 MHz",
                (char *)NULL };

static char *standard_desc[] = {
                "10945 to 11450 Mhz",
                "Single LO, 10000 Mhz",
                (char *)NULL };

static char *enhan_desc[] = {
                "Astra",
                "10700 to 11700 MHz",
                "Single LO, 9750 MHz",
                (char *)NULL };

static char *cband_desc[] = {
                "Big Dish - Monopoint LNBf",
                "3700 to 4200 MHz",
                "Single LO, 5150 Mhz",
                (char *)NULL };

static char *cmulti_desc[] = {
                "Big Dish - Multipoint LNBf",
                "3700 to 4200 MHz",
                "Dual LO, 5150/5750 Mhz",
                (char *)NULL };

static char *australia_desc[] = {
                "Australia Single LO LNB",
                "11700 to 12750 MHz",
                "Single LO, 10700 MHz",
                (char *)NULL }; 

static struct lnb_types_st lnbs[] = {
        {"UNIVERSAL",   univ_desc,              9750, 10600, 11700 },
        {"DBS",         dbs_desc,              11250,     0,     0 },
        {"STANDARD",    standard_desc,         10000,     0,     0 },
        {"ENHANCED",    enhan_desc,             9750,     0,     0 },
        {"C-BAND",      cband_desc,             5150,     0,     0 },
        {"C-MULTI",     cmulti_desc,            5150,  5750,     0 },
        {"AUSTRALIA",   australia_desc,        10700, 11700, 12750 }, 
};

/* Enumerate through standard types of LNB's until NULL returned.
 * Increment curno each time
 */

struct lnb_types_st *
lnb_enum(int curno)
{
        if (curno >= (int) (sizeof(lnbs) / sizeof(lnbs[0])))
                return (struct lnb_types_st *)NULL;
        return &lnbs[curno];
}

/* Decode an lnb type, for example given on a command line
 * If alpha and standard type, e.g. "Universal" then match that
 * otherwise low[,high[,switch]]
 */

int
lnb_decode(char *str, struct lnb_types_st *lnbp)
{
int i;
char *cp, *np;

        memset(lnbp, 0, sizeof(*lnbp));
        cp = str;
        while(*cp && isspace(*cp))
                cp++;
        if (isalpha(*cp)) {
                for (i = 0; i < (int) (sizeof(lnbs) / sizeof(lnbs[0])); i++) {
                        if (!strcasecmp(lnbs[i].name, cp)) {
                                *lnbp = lnbs[i];
                                return 1;
                        }
                }
                return -1;
        }
        if (*cp == '\0' || !isdigit(*cp))
                return -1;
        lnbp->low_val = strtoul(cp, &np, 0);
        if (lnbp->low_val == 0)
                return -1;
        cp = np;
        while(*cp && (isspace(*cp) || *cp == ','))
                cp++;
        if (*cp == '\0')
                return 1;
        if (!isdigit(*cp))
                return -1;
        lnbp->high_val = strtoul(cp, &np, 0);
        cp = np;
        while(*cp && (isspace(*cp) || *cp == ','))
                cp++;
        if (*cp == '\0')
                return 1;
        if (!isdigit(*cp))
                return -1;
        lnbp->switch_val = strtoul(cp, NULL, 0);
        return 1;
}