lnb.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #include <stdlib.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <linux/types.h>
  5. #include "lnb.h"
  6. static char *univ_desc[] = {
  7. "Europe",
  8. "10800 to 11800 MHz and 11600 to 12700 Mhz",
  9. "Dual LO, loband 9750, hiband 10600 MHz",
  10. (char *)NULL };
  11. static char *dbs_desc[] = {
  12. "Expressvu, North America",
  13. "12200 to 12700 MHz",
  14. "Single LO, 11250 MHz",
  15. (char *)NULL };
  16. static char *standard_desc[] = {
  17. "10945 to 11450 Mhz",
  18. "Single LO, 10000 Mhz",
  19. (char *)NULL };
  20. static char *enhan_desc[] = {
  21. "Astra",
  22. "10700 to 11700 MHz",
  23. "Single LO, 9750 MHz",
  24. (char *)NULL };
  25. static char *cband_desc[] = {
  26. "Big Dish - Monopoint LNBf",
  27. "3700 to 4200 MHz",
  28. "Single LO, 5150 Mhz",
  29. (char *)NULL };
  30. static char *cmulti_desc[] = {
  31. "Big Dish - Multipoint LNBf",
  32. "3700 to 4200 MHz",
  33. "Dual LO, 5150/5750 Mhz",
  34. (char *)NULL };
  35. static struct lnb_types_st lnbs[] = {
  36. {"UNIVERSAL", univ_desc, 9750, 10600, 11700 },
  37. {"DBS", dbs_desc, 11250, 0, 0 },
  38. {"STANDARD", standard_desc, 10000, 0, 0 },
  39. {"ENHANCED", enhan_desc, 9750, 0, 0 },
  40. {"C-BAND", cband_desc, 5150, 0, 0 },
  41. {"C-MULTI", cmulti_desc, 5150, 5750, 0 }
  42. };
  43. /* Enumerate through standard types of LNB's until NULL returned.
  44. * Increment curno each time
  45. */
  46. struct lnb_types_st *
  47. lnb_enum(int curno)
  48. {
  49. if (curno >= (int) (sizeof(lnbs) / sizeof(lnbs[0])))
  50. return (struct lnb_types_st *)NULL;
  51. return &lnbs[curno];
  52. }
  53. /* Decode an lnb type, for example given on a command line
  54. * If alpha and standard type, e.g. "Universal" then match that
  55. * otherwise low[,high[,switch]]
  56. */
  57. int
  58. lnb_decode(char *str, struct lnb_types_st *lnbp)
  59. {
  60. int i;
  61. char *cp, *np;
  62. memset(lnbp, 0, sizeof(*lnbp));
  63. cp = str;
  64. while(*cp && isspace(*cp))
  65. cp++;
  66. if (isalpha(*cp)) {
  67. for (i = 0; i < (int) (sizeof(lnbs) / sizeof(lnbs[0])); i++) {
  68. if (!strcasecmp(lnbs[i].name, cp)) {
  69. *lnbp = lnbs[i];
  70. return 1;
  71. }
  72. }
  73. return -1;
  74. }
  75. if (*cp == '\0' || !isdigit(*cp))
  76. return -1;
  77. lnbp->low_val = strtoul(cp, &np, 0);
  78. if (lnbp->low_val == 0)
  79. return -1;
  80. cp = np;
  81. while(*cp && (isspace(*cp) || *cp == ','))
  82. cp++;
  83. if (*cp == '\0')
  84. return 1;
  85. if (!isdigit(*cp))
  86. return -1;
  87. lnbp->high_val = strtoul(cp, &np, 0);
  88. cp = np;
  89. while(*cp && (isspace(*cp) || *cp == ','))
  90. cp++;
  91. if (*cp == '\0')
  92. return 1;
  93. if (!isdigit(*cp))
  94. return -1;
  95. lnbp->switch_val = strtoul(cp, NULL, 0);
  96. return 1;
  97. }