freq.c
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:21k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.  * For Video for Linux Two video capture driver
  3.  *
  4.  * Program to set input to first tuner and then channel on the tuner
  5.  *
  6.  * Program written by Mike Bernson (mike@mlb.org)
  7.  * This program is in the public domain.
  8.  *
  9.  * Freq table taken from xawtv program by Gerd Knorr (kraxel@goldbach.in-berlin.de)
  10.  *
  11.  */
  12. #include <sys/time.h>
  13. #include <sys/types.h>
  14. #include <asm/types.h>
  15. #include <sys/stat.h>
  16. #include <fcntl.h>
  17. #include <sys/ioctl.h>
  18. #include <unistd.h>
  19. #include <stdlib.h>
  20. #include <stdio.h>
  21. #include <string.h>
  22. #include <sys/mman.h>
  23. #include <errno.h>
  24. #include <linux/fs.h>
  25. #include <linux/kernel.h>
  26. #include <linux/videodev2.h>
  27. struct CHANLIST {
  28. char *channel_name;
  29. long freq;
  30. };
  31. struct CHANLISTS {
  32. char *standard;
  33. struct CHANLIST *list;
  34. int count;
  35. };
  36. #define CHAN_COUNT(x) (sizeof(x)/sizeof(struct CHANLIST))
  37. /* US broadcast */
  38. static struct CHANLIST ntsc_bcast[] = {
  39.     { "2",  55250 },
  40.     { "3",  61250 },
  41.     { "4",  67250 },
  42.     { "5",  77250 },
  43.     { "6",  83250 },
  44.     { "7", 175250 },
  45.     { "8", 181250 },
  46.     { "9", 187250 },
  47.     { "10", 193250 },
  48.     { "11", 199250 },
  49.     { "12", 205250 },
  50.     { "13", 211250 },
  51.     { "14", 471250 },
  52.     { "15", 477250 },
  53.     { "16", 483250 },
  54.     { "17", 489250 },
  55.     { "18", 495250 },
  56.     { "19", 501250 },
  57.     { "20", 507250 },
  58.     { "21", 513250 },
  59.     { "22", 519250 },
  60.     { "23", 525250 },
  61.     { "24", 531250 },
  62.     { "25", 537250 },
  63.     { "26", 543250 },
  64.     { "27", 549250 },
  65.     { "28", 555250 },
  66.     { "29", 561250 },
  67.     { "30", 567250 },
  68.     { "31", 573250 },
  69.     { "32", 579250 },
  70.     { "33", 585250 },
  71.     { "34", 591250 },
  72.     { "35", 597250 },
  73.     { "36", 603250 },
  74.     { "37", 609250 },
  75.     { "38", 615250 },
  76.     { "39", 621250 },
  77.     { "40", 627250 },
  78.     { "41", 633250 },
  79.     { "42", 639250 },
  80.     { "43", 645250 },
  81.     { "44", 651250 },
  82.     { "45", 657250 },
  83.     { "46", 663250 },
  84.     { "47", 669250 },
  85.     { "48", 675250 },
  86.     { "49", 681250 },
  87.     { "50", 687250 },
  88.     { "51", 693250 },
  89.     { "52", 699250 },
  90.     { "53", 705250 },
  91.     { "54", 711250 },
  92.     { "55", 717250 },
  93.     { "56", 723250 },
  94.     { "57", 729250 },
  95.     { "58", 735250 },
  96.     { "59", 741250 },
  97.     { "60", 747250 },
  98.     { "61", 753250 },
  99.     { "62", 759250 },
  100.     { "63", 765250 },
  101.     { "64", 771250 },
  102.     { "65", 777250 },
  103.     { "66", 783250 },
  104.     { "67", 789250 },
  105.     { "68", 795250 },
  106.     { "69", 801250 },
  107.  
  108.     { "70", 807250 },
  109.     { "71", 813250 },
  110.     { "72", 819250 },
  111.     { "73", 825250 },
  112.     { "74", 831250 },
  113.     { "75", 837250 },
  114.     { "76", 843250 },
  115.     { "77", 849250 },
  116.     { "78", 855250 },
  117.     { "79", 861250 },
  118.     { "80", 867250 },
  119.     { "81", 873250 },
  120.     { "82", 879250 },
  121.     { "83", 885250 },
  122. };
  123. /* US cable */
  124. static struct CHANLIST ntsc_cable[] = {
  125.     { "1",  73250 },
  126.     { "2",  55250 },
  127.     { "3",  61250 },
  128.     { "4",  67250 },
  129.     { "5",  77250 },
  130.     { "6",  83250 },
  131.     { "7", 175250 },
  132.     { "8", 181250 },
  133.     { "9", 187250 },
  134.     { "10", 193250 },
  135.     { "11", 199250 },
  136.     { "12", 205250 },
  137.     { "13", 211250 },
  138.     { "14", 121250 },
  139.     { "15", 127250 },
  140.     { "16", 133250 },
  141.     { "17", 139250 },
  142.     { "18", 145250 },
  143.     { "19", 151250 },
  144.     { "20", 157250 },
  145.  
  146.     { "21", 163250 },
  147.     { "22", 169250 },
  148.     { "23", 217250 },
  149.     { "24", 223250 },
  150.     { "25", 229250 },
  151.     { "26", 235250 },
  152.     { "27", 241250 },
  153.     { "28", 247250 },
  154.     { "29", 253250 },
  155.     { "30", 259250 },
  156.     { "31", 265250 },
  157.     { "32", 271250 },
  158.     { "33", 277250 },
  159.     { "34", 283250 },
  160.     { "35", 289250 },
  161.     { "36", 295250 },
  162.     { "37", 301250 },
  163.     { "38", 307250 },
  164.     { "39", 313250 },
  165.     { "40", 319250 },
  166.     { "41", 325250 },
  167.     { "42", 331250 },
  168.     { "43", 337250 },
  169.     { "44", 343250 },
  170.     { "45", 349250 },
  171.     { "46", 355250 },
  172.     { "47", 361250 },
  173.     { "48", 367250 },
  174.     { "49", 373250 },
  175.     { "50", 379250 },
  176.     { "51", 385250 },
  177.     { "52", 391250 },
  178.     { "53", 397250 },
  179.     { "54", 403250 },
  180.     { "55", 409250 },
  181.     { "56", 415250 },
  182.     { "57", 421250 },
  183.     { "58", 427250 },
  184.     { "59", 433250 },
  185.     { "60", 439250 },
  186.     { "61", 445250 },
  187.     { "62", 451250 },
  188.     { "63", 457250 },
  189.     { "64", 463250 },
  190.     { "65", 469250 },
  191.     { "66", 475250 },
  192.     { "67", 481250 },
  193.     { "68", 487250 },
  194.     { "69", 493250 },
  195.  
  196.     { "70", 499250 },
  197.     { "71", 505250 },
  198.     { "72", 511250 },
  199.     { "73", 517250 },
  200.     { "74", 523250 },
  201.     { "75", 529250 },
  202.     { "76", 535250 },
  203.     { "77", 541250 },
  204.     { "78", 547250 },
  205.     { "79", 553250 },
  206.     { "80", 559250 },
  207.     { "81", 565250 },
  208.     { "82", 571250 },
  209.     { "83", 577250 },
  210.     { "84", 583250 },
  211.     { "85", 589250 },
  212.     { "86", 595250 },
  213.     { "87", 601250 },
  214.     { "88", 607250 },
  215.     { "89", 613250 },
  216.     { "90", 619250 },
  217.     { "91", 625250 },
  218.     { "92", 631250 },
  219.     { "93", 637250 },
  220.     { "94", 643250 },
  221.     { "95",  91250 },
  222.     { "96",  97250 },
  223.     { "97", 103250 },
  224.     { "98", 109250 },
  225.     { "99", 115250 },
  226.     { "100", 649250 },
  227.     { "101", 655250 },
  228.     { "102", 661250 },
  229.     { "103", 667250 },
  230.     { "104", 673250 },
  231.     { "105", 679250 },
  232.     { "106", 685250 },
  233.     { "107", 691250 },
  234.     { "108", 697250 },
  235.     { "109", 703250 },
  236.     { "110", 709250 },
  237.     { "111", 715250 },
  238.     { "112", 721250 },
  239.     { "113", 727250 },
  240.     { "114", 733250 },
  241.     { "115", 739250 },
  242.     { "116", 745250 },
  243.     { "117", 751250 },
  244.     { "118", 757250 },
  245.     { "119", 763250 },
  246.     { "120", 769250 },
  247.     { "121", 775250 },
  248.     { "122", 781250 },
  249.     { "123", 787250 },
  250.     { "124", 793250 },
  251.     { "125", 799250 },
  252.  
  253.     { "T7",    8250 },
  254.     { "T8",  14250 },
  255.     { "T9",  20250 },
  256.     { "T10",  26250 },
  257.     { "T11",  32250 },
  258.     { "T12",  38250 },
  259.     { "T13",  44250 },
  260.     { "T14",  50250 }
  261. };
  262. /* US HRC */
  263. static struct CHANLIST ntsc_hrc[] = {
  264.     { "1",   72000 },
  265.     { "2",   54000 }, 
  266.     { "3",   60000 }, 
  267.     { "4",   66000 }, 
  268.     { "5",   78000 }, 
  269.     { "6",   84000 }, 
  270.     { "7",  174000 },
  271.     { "8",  180000 },
  272.     { "9",  186000 },
  273.     { "10",  192000 },
  274.     { "11",  198000 },
  275.     { "12",  204000 },
  276.     { "13",  210000 },
  277.     { "14",  120000 },
  278.     { "15",  126000 },
  279.     { "16",  132000 },
  280.     { "17",  138000 },
  281.     { "18",  144000 },
  282.     { "19",  150000 },
  283.     { "20",  156000 },
  284.  
  285.     { "21",  162000 },
  286.     { "22",  168000 },
  287.     { "23",  216000 },
  288.     { "24",  222000 },
  289.     { "25",  228000 },
  290.     { "26",  234000 },
  291.     { "27",  240000 },
  292.     { "28",  246000 },
  293.     { "29",  252000 },
  294.     { "30",  258000 },
  295.     { "31",  264000 },
  296.     { "32",  270000 },
  297.     { "33",  276000 },
  298.     { "34",  282000 },
  299.     { "35",  288000 },
  300.     { "36",  294000 },
  301.     { "37",  300000 },
  302.     { "38",  306000 },
  303.     { "39",  312000 },
  304.     { "40",  318000 },
  305.     { "41",  324000 },
  306.     { "42",  330000 },
  307.     { "43",  336000 },
  308.     { "44",  342000 },
  309.     { "45",  348000 },
  310.     { "46",  354000 },
  311.     { "47",  360000 },
  312.     { "48",  366000 },
  313.     { "49",  372000 },
  314.     { "50",  378000 },
  315.     { "51",  384000 },
  316.     { "52",  390000 },
  317.     { "53",  396000 },
  318.     { "54",  402000 },
  319.     { "55",  408000 },
  320.     { "56",  414000 },
  321.     { "57",  420000 },
  322.     { "58",  426000 },
  323.     { "59",  432000 },
  324.     { "60",  438000 },
  325.     { "61",  444000 },
  326.     { "62",  450000 },
  327.     { "63",  456000 },
  328.     { "64",  462000 },
  329.     { "65",  468000 },
  330.     { "66",  474000 },
  331.     { "67",  480000 },
  332.     { "68",  486000 },
  333.     { "69",  492000 },
  334.  
  335.     { "70",  498000 },
  336.     { "71",  504000 },
  337.     { "72",  510000 },
  338.     { "73",  516000 },
  339.     { "74",  522000 },
  340.     { "75",  528000 },
  341.     { "76",  534000 },
  342.     { "77",  540000 },
  343.     { "78",  546000 },
  344.     { "79",  552000 },
  345.     { "80",  558000 },
  346.     { "81",  564000 },
  347.     { "82",  570000 },
  348.     { "83",  576000 },
  349.     { "84",  582000 },
  350.     { "85",  588000 },
  351.     { "86",  594000 },
  352.     { "87",  600000 },
  353.     { "88",  606000 },
  354.     { "89",  612000 },
  355.     { "90",  618000 },
  356.     { "91",  624000 },
  357.     { "92",  630000 },
  358.     { "93",  636000 },
  359.     { "94",  642000 },
  360.     { "95",  900000 },
  361.     { "96",  960000 },
  362.     { "97",  102000 },
  363.     { "98",  108000 },
  364.     { "99",  114000 },
  365.     { "100",  648000 },
  366.     { "101",  654000 },
  367.     { "102",  660000 },
  368.     { "103",  666000 },
  369.     { "104",  672000 },
  370.     { "105",  678000 },
  371.     { "106",  684000 },
  372.     { "107",  690000 },
  373.     { "108",  696000 },
  374.     { "109",  702000 },
  375.     { "110",  708000 },
  376.     { "111",  714000 },
  377.     { "112",  720000 },
  378.     { "113",  726000 },
  379.     { "114",  732000 },
  380.     { "115",  738000 },
  381.     { "116",  744000 },
  382.     { "117",  750000 },
  383.     { "118",  756000 },
  384.     { "119",  762000 },
  385.     { "120",  768000 },
  386.     { "121",  774000 },
  387.     { "122",  780000 },
  388.     { "123",  786000 },
  389.     { "124",  792000 },
  390.     { "125",  798000 },
  391.  
  392.     { "T7",    7000 },  
  393.     { "T8",   13000 }, 
  394.     { "T9",   19000 }, 
  395.     { "T10",   25000 }, 
  396.     { "T11",   31000 }, 
  397.     { "T12",   37000 }, 
  398.     { "T13",   43000 }, 
  399.     { "T14",   49000 }, 
  400. };
  401. /* --------------------------------------------------------------------- */
  402. /* JP broadcast */
  403. static struct CHANLIST ntsc_bcast_jp[] = {
  404.     { "1",   91250 },
  405.     { "2",   97250 },
  406.     { "3",  103250 },
  407.     { "4",  171250 },
  408.     { "5",  177250 },
  409.     { "6",  183250 },
  410.     { "7",  189250 },
  411.     { "8",  193250 },
  412.     { "9",  199250 },
  413.     { "10", 205250 },
  414.     { "11", 211250 },
  415.     { "12", 217250 },
  416.     { "13", 471250 },
  417.     { "14", 477250 },
  418.     { "15", 483250 },
  419.     { "16", 489250 },
  420.     { "17", 495250 },
  421.     { "18", 501250 },
  422.     { "19", 507250 },
  423.     { "20", 513250 },
  424.     { "21", 519250 },
  425.     { "22", 525250 },
  426.     { "23", 531250 },
  427.     { "24", 537250 },
  428.     { "25", 543250 },
  429.     { "26", 549250 },
  430.     { "27", 555250 },
  431.     { "28", 561250 },
  432.     { "29", 567250 },
  433.     { "30", 573250 },
  434.     { "31", 579250 },
  435.     { "32", 585250 },
  436.     { "33", 591250 },
  437.     { "34", 597250 },
  438.     { "35", 603250 },
  439.     { "36", 609250 },
  440.     { "37", 615250 },
  441.     { "38", 621250 },
  442.     { "39", 627250 },
  443.     { "40", 633250 },
  444.     { "41", 639250 },
  445.     { "42", 645250 },
  446.     { "43", 651250 },
  447.     { "44", 657250 },
  448.     { "45", 663250 },
  449.     { "46", 669250 },
  450.     { "47", 675250 },
  451.     { "48", 681250 },
  452.     { "49", 687250 },
  453.     { "50", 693250 },
  454.     { "51", 699250 },
  455.     { "52", 705250 },
  456.     { "53", 711250 },
  457.     { "54", 717250 },
  458.     { "55", 723250 },
  459.     { "56", 729250 },
  460.     { "57", 735250 },
  461.     { "58", 741250 },
  462.     { "59", 747250 },
  463.     { "60", 753250 },
  464.     { "61", 759250 },
  465.     { "62", 765250 },
  466. };
  467. /* JP cable */
  468. static struct CHANLIST ntsc_cable_jp[] = {
  469.     { "13", 109250 },
  470.     { "14", 115250 },
  471.     { "15", 121250 },
  472.     { "16", 127250 },
  473.     { "17", 133250 },
  474.     { "18", 139250 },
  475.     { "19", 145250 },
  476.     { "20", 151250 },
  477.  
  478.     { "21", 157250 },
  479.     { "22", 165250 },
  480.     { "23", 223250 },
  481.     { "24", 231250 },
  482.     { "25", 237250 },
  483.     { "26", 243250 },
  484.     { "27", 249250 },
  485.     { "28", 253250 },
  486.     { "29", 259250 },
  487.     { "30", 265250 },
  488.     { "31", 271250 },
  489.     { "32", 277250 },
  490.     { "33", 283250 },
  491.     { "34", 289250 },
  492.     { "35", 295250 },
  493.     { "36", 301250 },
  494.     { "37", 307250 },
  495.     { "38", 313250 },
  496.     { "39", 319250 },
  497.     { "40", 325250 },
  498.     { "41", 331250 },
  499.     { "42", 337250 },
  500.     { "43", 343250 },
  501.     { "44", 349250 },
  502.     { "45",  355250 },
  503.     { "46",  361250 },
  504.     { "47",  367250 },
  505.     { "48",  373250 },
  506.     { "49",  379250 },
  507.     { "50",  385250 },
  508.     { "51",  391250 },
  509.     { "52",  397250 },
  510.     { "53",  403250 },
  511.     { "54",  409250 },
  512.     { "55",  415250 },
  513.     { "56",  421250 },
  514.     { "57",  427250 },
  515.     { "58",  433250 },
  516.     { "59",  439250 },
  517.     { "60",  445250 },
  518.     { "61",  451250 },
  519.     { "62",  457250 },
  520.     { "63", 463250 },
  521. };
  522. /* --------------------------------------------------------------------- */
  523. /* australia */
  524. static struct CHANLIST pal_australia[] = {
  525.     { "0",  46250 },
  526.     { "1",  57250 },
  527.     { "2",  64250 },
  528.     { "3",  86250 },
  529.     { "4",    95250 },
  530.     { "5",   102250 },
  531.     { "6",   175250 },
  532.     { "7",   182250 },
  533.     { "8",   189250 },
  534.     { "9",   196250 },
  535.     { "10",  209250 },
  536.     { "11", 216250 },
  537.     { "28", 527250 },
  538.     { "29", 534250 },
  539.     { "30", 541250 },
  540.     { "31", 548250 },
  541.     { "32", 555250 },
  542.     { "33", 562250 },
  543.     { "34", 569250 },
  544.     { "35", 576250 },
  545.     { "39", 604250 },
  546.     { "40", 611250 },
  547.     { "41", 618250 },
  548.     { "42", 625250 },
  549.     { "43", 632250 },
  550.     { "44", 639250 },
  551.     { "45", 646250 },
  552.     { "46", 653250 },
  553.     { "47", 660250 },
  554.     { "48", 667250 },
  555.     { "49", 674250 },
  556.     { "50", 681250 },
  557.     { "51", 688250 },
  558.     { "52", 695250 },
  559.     { "53", 702250 },
  560.     { "54", 709250 },
  561.     { "55", 716250 },
  562.     { "56", 723250 },
  563.     { "57", 730250 },
  564.     { "58", 737250 },
  565.     { "59", 744250 },
  566.     { "60", 751250 },
  567.     { "61", 758250 },
  568.     { "62", 765250 },
  569.     { "63", 772250 },
  570.     { "64", 779250 },
  571.     { "65", 786250 },
  572.     { "66", 793250 },
  573.     { "67", 800250 },
  574.     { "68", 807250 },
  575.     { "69", 814250 },
  576. };
  577. /* --------------------------------------------------------------------- */
  578. /* europe                                                                */
  579. /* CCIR frequencies */
  580. #define FREQ_CCIR_I_III
  581.     { "E2",   48250 },
  582.     { "E3",   55250 },
  583.     { "E4",   62250 },
  584.     { "S01",   69250 },
  585.     { "S02",   76250 },
  586.     { "S03",   83250 },
  587.     { "E5",  175250 },
  588.     { "E6",  182250 },
  589.     { "E7",  189250 },
  590.     { "E8",  196250 },
  591.     { "E9",  203250 },
  592.     { "E10",  210250 },
  593.     { "E11",  217250 },
  594.     { "E12",  224250 }
  595. #define FREQ_CCIR_SL_SH
  596.     { "SE1",  105250 },
  597.     { "SE2",  112250 },
  598.     { "SE3",  119250 },
  599.     { "SE4",  126250 },
  600.     { "SE5",  133250 },
  601.     { "SE6",  140250 },
  602.     { "SE7",  147250 },
  603.     { "SE8",  154250 },
  604.     { "SE9",  161250 },
  605.     { "SE10",    168250 },
  606.     { "SE11",    231250 },
  607.     { "SE12",    238250 },
  608.     { "SE13",    245250 },
  609.     { "SE14",    252250 },
  610.     { "SE15",    259250 },
  611.     { "SE16",    266250 },
  612.     { "SE17",    273250 },
  613.     { "SE18",    280250 },
  614.     { "SE19",    287250 },
  615.     { "SE20",    294250 }
  616. #define FREQ_CCIR_H
  617.     { "S21", 303250 },
  618.     { "S22", 311250 },
  619.     { "S23", 319250 },
  620.     { "S24", 327250 },
  621.     { "S25", 335250 },
  622.     { "S26", 343250 },
  623.     { "S27", 351250 },
  624.     { "S28", 359250 },
  625.     { "S29", 367250 },
  626.     { "S30", 375250 },
  627.     { "S31", 383250 },
  628.     { "S32", 391250 },
  629.     { "S33", 399250 },
  630.     { "S34", 407250 },
  631.     { "S35", 415250 },
  632.     { "S36", 423250 },
  633.     { "S37", 431250 },
  634.     { "S38", 439250 },
  635.     { "S39", 447250 },
  636.     { "S40", 455250 },
  637.     { "S41", 463250 }
  638. /* OIRT frequencies */
  639. #define FREQ_OIRT_I_III
  640.     { "R1",       49750 },
  641.     { "R2",       59250 },
  642.     { "R3",       77250 },
  643.     { "R4",       84250 },
  644.     { "R5",       93250 },
  645.     { "R6",  175250 },
  646.     { "R7",  183250 },
  647.     { "R8",  191250 },
  648.     { "R9",  199250 },
  649.     { "R10",  207250 },
  650.     { "R11",  215250 },
  651.     { "R12",  223250 }
  652. #define FREQ_OIRT_SL_SH
  653.     { "SR1",  111250 },
  654.     { "SR2",  119250 },
  655.     { "SR3",  127250 },
  656.     { "SR4",  135250 },
  657.     { "SR5",  143250 },
  658.     { "SR6",  151250 },
  659.     { "SR7",  159250 },
  660.     { "SR8",  167250 },
  661.     { "SR11",    231250 },
  662.     { "SR12",    239250 },
  663.     { "SR13",    247250 },
  664.     { "SR14",    255250 },
  665.     { "SR15",    263250 },
  666.     { "SR16",    271250 },
  667.     { "SR17",    279250 },
  668.     { "SR18",    287250 },
  669.     { "SR19",    295250 }
  670. #define FREQ_UHF
  671.     { "21",  471250 },
  672.     { "22",  479250 },
  673.     { "23",  487250 },
  674.     { "24",  495250 },
  675.     { "25",  503250 },
  676.     { "26",  511250 },
  677.     { "27",  519250 },
  678.     { "28",  527250 },
  679.     { "29",  535250 },
  680.     { "30",  543250 },
  681.     { "31",  551250 },
  682.     { "32",  559250 },
  683.     { "33",  567250 },
  684.     { "34",  575250 },
  685.     { "35",  583250 },
  686.     { "36",  591250 },
  687.     { "37",  599250 },
  688.     { "38",  607250 },
  689.     { "39",  615250 },
  690.     { "40",  623250 },
  691.     { "41",  631250 },
  692.     { "42",  639250 },
  693.     { "43",  647250 },
  694.     { "44",  655250 },
  695.     { "45",  663250 },
  696.     { "46",  671250 },
  697.     { "47",  679250 },
  698.     { "48",  687250 },
  699.     { "49",  695250 },
  700.     { "50",  703250 },
  701.     { "51",  711250 },
  702.     { "52",  719250 },
  703.     { "53",  727250 },
  704.     { "54",  735250 },
  705.     { "55",  743250 },
  706.     { "56",  751250 },
  707.     { "57",  759250 },
  708.     { "58",  767250 },
  709.     { "59",  775250 },
  710.     { "60",  783250 },
  711.     { "61",  791250 },
  712.     { "62",  799250 },
  713.     { "63",  807250 },
  714.     { "64",  815250 },
  715.     { "65",  823250 },
  716.     { "66",  831250 },
  717.     { "67",  839250 },
  718.     { "68",  847250 },
  719.     { "69",  855250 }
  720. static struct CHANLIST pal_europe[] = {
  721.     FREQ_CCIR_I_III,
  722.     FREQ_CCIR_SL_SH,
  723.     FREQ_CCIR_H,
  724.     FREQ_UHF
  725. };
  726. static struct CHANLIST pal_europe_east[] = {
  727.     FREQ_OIRT_I_III,
  728.     FREQ_OIRT_SL_SH,
  729.     FREQ_CCIR_H,
  730.     FREQ_UHF
  731. };
  732. static struct CHANLIST pal_italy[] = {
  733.     { "2",  53750 },
  734.     { "3",  62250 },
  735.     { "4",  82250 },
  736.     { "5", 175250 },
  737.     { "6", 183750 },
  738.     { "7", 192250 },
  739.     { "8", 201250 },
  740.     { "9", 210250 },
  741.     { "10", 210250 },
  742.     { "11", 217250 },
  743.     { "12", 224250 },
  744. };
  745. static struct CHANLIST pal_ireland[] = {
  746.     { "0",    45750 },
  747.     { "1",    53750 },
  748.     { "2",    61750 },
  749.     { "3",   175250 },
  750.     { "4",   183250 },
  751.     { "5",   191250 },
  752.     { "6",   199250 },
  753.     { "7",   207250 },
  754.     { "8",   215250 },
  755.     FREQ_UHF,
  756. };
  757. /* --------------------------------------------------------------------- */
  758. static struct CHANLIST pal_newzealand[] = {
  759.     { "1",    45250 }, 
  760.     { "2",   55250 }, 
  761.     { "3",   62250 },
  762.     { "4",  175250 },
  763.     { "5",  182250 },
  764.     { "5A",  138250 },
  765.     { "6",  189250 },
  766.     { "7",  196250 },
  767.     { "8",  203250 },
  768.     { "9",  210250 },
  769.     { "10",  217250 },
  770. };
  771. struct CHANLISTS chanlists[] = {
  772.     { "ntsc-bcast",      ntsc_bcast,      CHAN_COUNT(ntsc_bcast)      },
  773.     { "ntsc-cable",      ntsc_cable,      CHAN_COUNT(ntsc_cable)      },
  774.     { "ntsc-cable-hrc",  ntsc_hrc,        CHAN_COUNT(ntsc_hrc)        },
  775.     { "ntsc-bcast-jp",   ntsc_bcast_jp,   CHAN_COUNT(ntsc_bcast_jp)   },
  776.     { "ntsc-cable-jp",   ntsc_cable_jp,   CHAN_COUNT(ntsc_cable_jp)   },
  777.     { "pal-europe",      pal_europe,      CHAN_COUNT(pal_europe)      },
  778.     { "pal-europe-east", pal_europe_east, CHAN_COUNT(pal_europe_east) },
  779.     { "pal-italy",       pal_italy,       CHAN_COUNT(pal_italy)       },
  780.     { "pal-newzealand",  pal_newzealand,  CHAN_COUNT(pal_newzealand)  },   
  781.     { "pal-australia",   pal_australia,   CHAN_COUNT(pal_australia)   },
  782.     { "pal-ireland",     pal_ireland,     CHAN_COUNT(pal_ireland)     },
  783.     { NULL, NULL, 0 } /* EOF */
  784. };
  785.  
  786. char *devname = "/dev/video";
  787. char *input_name = "tuner";
  788. char *standard_name = "ntsc-bcast";
  789. struct CHANLIST *chanlist  = NULL;
  790. int chancount = -1;
  791. void process_args(int *argc, char **argv[]);
  792. int 
  793. main(int argc,char **argv) {
  794. int vfd = 0;
  795. int freq = 0;
  796. int i;
  797. int input_index = -1;
  798. char *devname = "/dev/video";
  799. struct v4l2_input inp;
  800. process_args(&argc, &argv);
  801. /*
  802.  * User has selected a freq standard search the table to see 
  803.  * name exits. If so update needed info.
  804.  */
  805. for(i=0; chanlists[i].standard; i++) {
  806. if (strcmp(standard_name, chanlists[i].standard) == 0) {
  807. chanlist = chanlists[i].list;
  808. chancount = chanlists[i].count;
  809. break;
  810. }
  811. }
  812. if (chanlist == NULL) {
  813. fprintf(stderr, "Bad frequency standard name "%s"n",
  814. standard_name);
  815. fprintf(stderr, "Valid names are:n");
  816. for(i=0; chanlists[i].standard; i++) {
  817. fprintf(stderr, "t%sn", chanlists[i].standard);
  818. }
  819. exit(1);
  820. }
  821. /*
  822.  * Search the table of channel number to find the freq for the 
  823.  * requested channel
  824.  */
  825. if (argc == 2) {
  826. freq = -1;
  827. for(i=0 ; i < chancount; i++) {
  828. if (strcmp(chanlist[i].channel_name, argv[1]) == 0) {
  829. freq = (chanlist[i].freq * 10)/625 ;
  830. break;
  831. }
  832. }
  833. }
  834. /*
  835.  * Request channel does not exits in channel table print
  836.  * error message and exit 
  837.  */
  838. if (freq == -1) {
  839. fprintf(stderr, "unknown channel number %sn", argv[1]);
  840. exit(1);
  841. }
  842. /*
  843.  * Open up the video cap device in non-capture mode. If error
  844.  * Print message and exit.
  845.  */
  846. if ((vfd = open(devname, O_RDWR|O_NONCAP)) < 0) {
  847. perror(devname);
  848. exit(1);
  849. }
  850. /*
  851.  * check to see that selected input is on card. If not 
  852.  * then print an error message and exit.
  853.  */
  854. for(i=0 ;; i++) {
  855. inp.index = i;
  856. if (ioctl(vfd, VIDIOC_ENUMINPUT, &inp) < 0)
  857. break;
  858. if (strcasecmp(input_name, inp.name) == 0) {
  859. input_index = i;
  860. break;
  861. }
  862. }
  863. if (input_index < 0) {
  864. fprintf(stderr, "Bad input name "%s"n", input_name);
  865. fprintf(stderr, "Vaild input names:n");
  866. for(i=0 ;; i++) {
  867. inp.index = i;
  868. if (ioctl(vfd, VIDIOC_ENUMINPUT, &inp) < 0)
  869. break;
  870. fprintf(stderr, "t%sn", inp.name);
  871. }
  872. exit(1);
  873. }
  874. /*
  875.  * Select requested input on cap device
  876.  */
  877. if (ioctl(vfd, VIDIOC_S_INPUT , input_index) < 0) {
  878. perror(input_name);
  879. exit(1);
  880. }
  881. if (inp.type != V4L2_INPUT_TYPE_TUNER && freq >  -1) {
  882. fprintf(stderr, "input device %s is not a tunern", input_name);
  883. exit(1);
  884. }
  885. /*
  886.  * Set the freq for the channel number. If any error print message
  887.  * and exit.
  888.  */
  889. if (ioctl(vfd,VIDIOC_S_FREQ, &freq) < 0) {
  890. perror("setting frequency"),exit(1);
  891. exit(1);
  892. }
  893. /*
  894.  * Lets be a good programer and close the file.
  895.  */
  896. close(vfd);
  897. /*
  898.  * We are done no errors so exit.
  899.  */
  900. exit(0);
  901. }
  902. void
  903. process_args(int *argc, char **argv[])
  904. {
  905. int c;
  906. char *name;
  907. name = *argv[0];
  908. while((c = getopt(*argc, *argv, "f:s:i:")) != EOF) {
  909. switch(c) {
  910. case 'i':
  911. input_name = strdup(optarg);
  912. break;
  913. case 's':
  914. standard_name = strdup(optarg);
  915. break;
  916. case 'f':
  917. devname = strdup(optarg);
  918. break;
  919. default:
  920. fprintf(stderr, "usage: %s [-i input-name] "
  921. "[-s freq-standard] [-f video-device]n",name);
  922. exit(1);
  923. }
  924. }
  925. *argv += (optind -1);
  926. *argc -= (optind -1);
  927. }