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

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

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

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

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

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

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

------------------------------------------------------------------------
CH
:
: :
------------------------------------------------------------------------

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

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

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

以上面我们截获的数据为例,简化一下,可以用四组时间组表示,分别为 (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" : [
# 公司空调遥控关(开的编码不一样)
[ , "",
[(, ), (, ), (, ), (, )]],
# 公司投影遥控开/关
[ , "",
[(, ), (, ), (, ), (, )]], # code EU
[ , "",
[(, ), (, ), (, ), (, ), (, ), (, ), (, )]],
# code EU
[ , "",
[(, ), (, ), (, ), (, ), (, ), (, ), (, )]],
# code EU
[ , "",
[(, ), (, ), (, ), (, )]],
。。。

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

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

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

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

------------------------------------------------------------------------
CH
:
: :
------------------------------------------------------------------------

同样简化一下

完整的红外编码序列为

二进制整理一下


八位八位分割,缺少补零

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

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

最终的代码:

。。。
const uint16_t code_na000Times[] PROGMEM = {
, ,
, ,
, ,
, ,
};
const struct IrCode code_na000Code PROGMEM = {
freq_to_timerval(),
, // 106组时间序列
, // 不同的组一共四组,因此使用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对的红外编码,累死我了,大家凑合看,有错漏的地方或者其它问题欢迎留言(同样这里没有用到第三组时间组)。

TVB-Gone 红外编码方法的更多相关文章

  1. STM32F412应用开发笔记之四:与远红外炭氢传感器通讯

    远红外炭氢传感器是在多组分气体传感器中用来检测甲烷和丙烷浓度的,采用单总线串行通讯,TTL电平.所以我们需要用到UART口来实现与远红外炭氢传感器的通讯. 远红外传感器就是这个样子的: 再来一张进气和 ...

  2. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法

    最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)——红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境 ...

  3. 基于Arduino、STM32进行红外遥控信号接收

    catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...

  4. 51单片机tea5767收音机 红外遥控 自动搜台 存台 DIY

    先看效果图: 显示 频道CH , 频率 100.0Mhz 欢迎信息,1602 内置日文平假名, 正好用来显示博主名称. 焊接前,已经万能面包板上试验成功. 焊接完成以后,1602 的D0 - D7 接 ...

  5. Android使用AudioTrack发送红外信号

    最近要做一个项目,利用手机的耳机口输出红外信号,从而把手机变成红外遥控器,信号处理的知识基本都还给老师了,刚开始真的挺头疼.找了不少资料研究了一下,总算有点心得,在这里做个备忘. 一.音频信号输出原理 ...

  6. 红外遥控NEC协议使用总结

    最近做了一个调试红外遥控三色灯的实习,花了一个多月的时间研究基于NEC协议的红外遥控,下面是这次实习技术方面的总结. 一.NEC协议特征: 8位地址和8位命令长度 每次传输两遍地址(用户码)和命令(按 ...

  7. TM4C123G红外触摸屏:开发板好不容易实现了原理,放到专家设计的板子上无法运行,于是专家跑路项目黄了

    使用TI的TM4C123G LaunchPad开发板,USB接口,来对同样的芯片进行烧写. 我们只用烧写那一块功能,不用另外一个芯片的开发功能,需要跳线   源码项目:   从官方网站TM4C123G ...

  8. 红外解码编码学习----verilog

    在设计中运用红外遥控器可以很好的解决按键缺少的问题,还可以方便的控制产品. 红外发射部分: 红外发射管: 判断红外发射管的好坏 : 电路原理图: 接收部分: 传输的NEC协议: 本实验电路: veri ...

  9. TI CC2541的红外控制

    整整一个礼拜, 整了...大约40个小时吧, 最少.. 下面是结果, 只能做一个delay延时.: unsigned char Time;unsigned char IrValue[6];#pragm ...

随机推荐

  1. Ubuntu安装nodeJS

    安装环境 ubuntu12.04 64bit nodejs-v0.8.14.tar.gz Node.js是一个基于google v8+javascript的服务端编程框架.但是Node.js又不是js ...

  2. 创建高性能移动 web 站点

    如果你的网站3秒钟没有响应,人们就会失去兴趣了.为了满足响应快这个愿望,需要一个不同的方法在手机上进行分析,设计和测试. 这篇文章将会对Johan Johansson在2013年4月提出" ...

  3. Javascript的"预编译"思考

    今天工作需要,搜索下JS面试题,看到一个题目,大约是这样的 <script> var x = 1, y = z = 0; function add(n) { n = n+1;  } y = ...

  4. hdu------(1757)A Simple Math Problem(简单矩阵快速幂)

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. Ajax请求中带有IPv6地址后的百分号的问题

    IPv6地址后的百分号: 对于连入网络但没有IPv6路由器或DHCPv6服务器的IPv6客户端,它们始终使用fe80::/64链路本地网络地址.如果运行Windows的计算机中有多个网络适配器连接到不 ...

  6. IO流 总结一

    字符流: FileReader FileWriter BufferedReader BufferedWriter readLine(); 字节流: FileInputReader FileOutput ...

  7. Java多线程-新特性-线程池

    Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序 ...

  8. fill_parent和wrap_content的区别

    在Android布局文件中定义视图垂直或水平大小: android:layout_width和android_layout_height的属性有fill_parent.wrap_content和mat ...

  9. Jquery异步提交$.ajax的使用

    function test(){ var myEntity=new Object(); myEntity.pro1="xxx"; myEntity.pro2=10; $.ajax( ...

  10. 大过年的,不下班的,上个Android文件操作类(内部存储和sd卡均可)

    package com.kkdiangame.UI.res; import java.io.ByteArrayOutputStream; import java.io.File; import jav ...