zoukankan      html  css  js  c++  java
  • TVB-Gone 红外编码方法

    每次都重新推算一遍,年纪大了还是记录一下吧(硬件版的TV-B-Gone的压缩编码跳过此段往下看)

    N900上有个TVB-Gone的程序,但是程序的红外编码往往都是对应的国外的电视,好多国产电视都不支持,

    有时候需要遥控空调或者投影之类的,只能自己录入了,大概看了一下,编码比较简单(比硬件那个简单多了,毕竟不需要考虑程序空间的问题)

    (上次录过一次,这次又重搞一遍,还是记录一下,以备后用。)

    第一步当然得知道红外编码,做了个简单的红外线分析器,网上有开源的,

    没有串口,我用了个转USB的小东西,

    对应可以输出红外线具体时间的文件,就靠这个文件里面的时间长度来录入编码,如下为截取Channel 2的一段:

    ------------------------------------------------------------------------ 
    CH 2
    :
    :212
    1
    8942
    4470
    551
    1656
    548
    1658
    547
    537
    550
    535
    549
    535
    550
    535
    549
    1656
    550
    1656
    549
    1656
    550
    1656
    549
    1656
    550
    1656
    549
    535
    550
    535
    549
    537
    548
    1656
    549
    537
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    548
    537
    549
    535
    550
    535
    551
    535
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    549
    535
    550
    535
    549
    535
    550
    535
    551
    535
    550
    1656
    549
    535
    550
    535
    549
    535
    550
    537
    547
    537
    548
    537
    549
    535
    550
    535
    549
    1656
    550
    535
    551
    535
    548
    537
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    1658
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    547
    537
    548
    537
    549
    1656
    548
    537
    549
    1656
    550
    535
    549
    535
    550
    535
    549
    537
    550
    535
    549
    1656
    550
    1656
    549
    1656
    550
    535
    549
    1656
    550
    1656
    549
    535
    550
    535
    577
    :
    ------------------------------------------------------------------------

    从8942开始,上面不用管,每个数字代表时长,两个数字一组,一组一组地看,数字接近的都合并为同一组,构造的结构为

    [载波频率, "载波序列", [(时间组1), (时间组2), (时间组3) ... ]]

    载波频率需要示波器查看,或者网上查,或者使用红外线常用的38400,载波序列中每一个数字代表一个时间组的序号,从零开始,

    以上面我们截获的数据为例,简化一下,可以用四组时间组表示,分别为 (8950, 4450), (550, 1650), (550, 535), (525, 560)

    该段截获红外代码就变成如下结构的编码

    [ 38400, "0112222111111222122222222222222222222212222222212222222212222222222222222222222222222222212122222111211222",                                         
            [(8950, 4450), (550, 1650), (550, 535), (525, 560)]]

    (此处未用到序列3的时间组,那是给另一段红外编码使用的,可删除)

    修改N900的/usr/lib/hildon-desktop/tvbgone.py文件,如下:

    。。。
    import os, fcntl, struct, time, math
    import gobject, cairo, gtk, gconf
    import hildon, hildondesktop, osso
    
    GCONFPATH = "/apps/Maemo/budig.de/TVBGone"
    
    # Collection of shutdown codes for various TV models.
    TVBGoneCodes = {
       "Europe" : [
         # 公司空调遥控关(开的编码不一样)
          [ 38400, "0112222111111222122222222222222222222212222222212222222212222222222222222222222222222222212122222111211222",                                         
            [(8950, 4450), (550, 1650), (550, 535), (525, 560)]],                                                                                                        
          # 公司投影遥控开/关
          [ 38400, "012121222212121301212122221212130121212222121213",
            [(2400, 580), (1200, 580), (600, 580), (600, 20860)]], 
    
          # code EU 0
          [ 35714, "510040000000000031026100400000000000310",
            [(430, 470), (430, 910), (430, 83240), (880, 470), (1330, 1330), (2640, 900), (2640, 910)]],
          # code EU 1
          [ 30303, "011111111143261111115326111111",
            [(470, 2650), (510, 540), (510, 1080), (510, 2630), (510, 20530), (510, 116470), (1000, 1090)]],
          # code EU 2
          [ 33333, "0122111222123112211122212",
            [(430, 2060), (460, 2040), (460, 4560), (460, 34880)]],
    。。。

    此处我是在Europe中增加了我的代码,别忘了使用的时候选择Europe代码,最后保存重启N900即可(不知道怎么不重启能生效,有知道的望告知)。

    -----------------------------------------------------------美艳动人的分割线-----------------------------------------------------------------

    硬件版的TV-B-Gone由于单片机容量有限,v1.2相比v1.1采用了压缩算法,可以存储更多的红外编码,压缩算法如下:

    同样以刚才截获的代码为例,

    ------------------------------------------------------------------------ 
    CH 2
    :
    :212
    1
    8942
    4470
    551
    1656
    548
    1658
    547
    537
    550
    535
    549
    535
    550
    535
    549
    1656
    550
    1656
    549
    1656
    550
    1656
    549
    1656
    550
    1656
    549
    535
    550
    535
    549
    537
    548
    1656
    549
    537
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    548
    537
    549
    535
    550
    535
    551
    535
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    549
    535
    550
    535
    549
    535
    550
    535
    551
    535
    550
    1656
    549
    535
    550
    535
    549
    535
    550
    537
    547
    537
    548
    537
    549
    535
    550
    535
    549
    1656
    550
    535
    551
    535
    548
    537
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    1658
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    549
    535
    550
    535
    549
    535
    550
    535
    549
    537
    548
    537
    549
    535
    550
    535
    549
    535
    550
    537
    547
    537
    548
    537
    549
    1656
    548
    537
    549
    1656
    550
    535
    549
    535
    550
    535
    549
    537
    550
    535
    549
    1656
    550
    1656
    549
    1656
    550
    535
    549
    1656
    550
    1656
    549
    535
    550
    535
    577
    :
    ------------------------------------------------------------------------

    同样简化一下

    完整的红外编码序列为

    二进制整理一下

    00010110101010010101010101101010011010101010101010101010101010101010101010100110101010101010100110101010101010100110101010101010101010101010101010101010101010101010101010101010100110011010101010010101100101101010

    八位八位分割,缺少补零

    原来106对,使用106个数字表示,占106字节,

    现在变成27个16进制字符,占27个字节,大大减少了容量。

    最终的代码:

    。。。
    const uint16_t code_na000Times[] PROGMEM = {
        8950, 4450,
        550, 1650,
        550, 535,
        525, 560,
    };
    const struct IrCode code_na000Code PROGMEM = {
            freq_to_timerval(38400),
            106,             //  106组时间序列
            2,              //  不同的组一共四组,因此使用2bit就可以表示,这个解码需要用到
            code_na000Times,
            {
            0x16,
            0xA9,
            0x55,
            0x6A,
            0x6A,
            0xAA,
            0xAA,
            0xAA,
            0xAA,
            0xA6,
            0xAA,
            0xA9,
            0xAA,
            0xAA,
            0x6A,
            0xAA,
            0xAA,
            0xAA,
            0xAA,
            0xAA,
            0xAA,
            0xAA,
            0x99,
            0xAA,
            0x95,
            0x96,
            0x90,
            }
    };
    。。。

    例子没举好,竟然搞了个106对的红外编码,累死我了,大家凑合看,有错漏的地方或者其它问题欢迎留言(同样这里没有用到第三组时间组)。

  • 相关阅读:
    大数据基础文献综述
    牛客网数据库SQL实战
    Leetcode with Python
    tinyMCE
    HTTP LVS
    采坑大全
    Hadoop 解除 NameNode is in safe mode
    R语言采坑系列——Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA
    .Net中的异步编程
    知识点4
  • 原文地址:https://www.cnblogs.com/k1two2/p/5507317.html
Copyright © 2011-2022 走看看