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
|
#include <stdlib.h>
#include <string.h>
#include <ctype.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",
"3700 to 4200 MHz",
"Single LO, 5150 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 }
};
/* 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;
}
|