• 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对的红外编码,累死我了,大家凑合看,有错漏的地方或者其它问题欢迎留言(同样这里没有用到第三组时间组)。

  • 相关阅读:
    yum只下载不安装
    知乎的 Flink 数据集成平台建设实践
    饿了么EMonitor演进史
    手机淘宝轻店业务 Serverless 研发模式升级实践
    独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless
    一文详解物化视图改写
    业务团队如何统一架构设计风格?
    Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩
    开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?
    Service Mesh 从“趋势”走向“无聊”
  • 原文地址:https://www.cnblogs.com/k1two2/p/5507317.html
Copyright © 2020-2023  润新知