概述

IRext 是一个开源万能红外遥控码库、编解码压缩算法以及免费周边服务。它向智能家居开发者提供以下能力:

  • 支持 16 类 1000 多品牌,上万个型号的家用电器遥控。
  • 在线以及离线的万能红外码库,包括按照品牌分类的索引以及遥控编码。
  • 灵活的服务部署方式,利用开源的服务端以及控制台代码在容器环境内 5 分钟快速搭建自己的码库服务。
  • 码库和解码算法经过了极限压缩,能存储和运行在配置低至 51 MCU 的严苛硬件环境中。
  • 丰富的平台适配支持和示例代码。
  • 详尽的文档资源,覆盖万能遥控开发的每一个环节。
  • 开发者可使用码库扩展工具自行扩展码库,可基于开源代码自由修改方案功能细节。

红外遥控码

红外遥控码是一种基于 38000Hz 或者 56000Hz 载波频率的控制编码,接收方通过识别带有或不带有载波的时间间隔片进行编码识别。

在控制层通常使用高低物理电平对的序列来表示一个独立的控制信号,例如以下的NEC码:

它使用9000us载波+4500us无载波时间序列表示引导码,并且使用500us载波+500us无载波时间序列表示逻辑0,使用500us载波+1500us无载波时间序列表示逻辑1,采用2字节地址码和2字节命令码构成,全码时间序列长度为67.5ms。


以下是一些红外遥控码的规则:

  • 有载波的时间片称为物理高电平,无载波的时间片称为物理低电平。
  • 引导码,结束码,分隔符码以及逻辑1码,逻辑0码等统称为编码特征,每种协议具有不同的编码特征,比如NEC的衍生码upd6121-g系列以及tc9012系列等等。
  • 编码特征中存在若干的cycle,每个cycle即为一对高低物理电平,因此所有码中均有可能含有多个电平对,但通常只有1对。
  • 任何的引导码,结束码,分隔符码的均占cycle个逻辑bit,例如上述的NEC码中的9000-4500占1bit。
  • 逻辑1和逻辑0码均占cycle x 8个bit,通常为8个bit。
  • 逻辑1和逻辑0码存在大端和小端两种按bit输出状态,大端为每个8bit中按高位在前输出,小端为低位在前输出。
  • 逻辑1和逻辑0码存在按位掩码。
  • 某些协议的逻辑码存在4进制,8进制和16进制码,定义为4样本,8样本和16样本,最常见的为2样本(逻辑2进制)。
  • 某些协议存在位反转,例如RC5码和RC6码,其特征是物理高低电平时间间隔相等。
  • 某些协议的引导码,结束码和分隔符码存在物理电平时间间隔为0的情况。

两种常用的红外控制码类型

  • 命令码: 命令码即为编码接收方根据命令自行调整状态的应用编码,例如家用电视机,机顶盒等设备;遥控器每次按下一个功能按键,将发出固定的编码,由接收设备自动设置状态,例如每次按下POWER键,都发出同样的编码,电视机则在开和关两种状态之间切换。
  • 状态码: 状态码为编码发送方根据当前状态以及按下的按键组合形成新的状态后发送给受控方,受控方按照这个状态执行指令的编码;例如大部分红外控制的空调均是用此种编码进行控制。

系统架构

IRext 从4个层次向万能遥控开发者提供解决方案:公有云索引/解码服务、私有云索引/解码服务、发射端解码服务以及码库扩展与管理服务。

  • 公有云服务主要提供在线的码库展示、体验、文档说明以及红外码交换服务 (IRIS)功能,也可以提供码库索引能力 (目前更推荐使用私有云)。
  • 私有云服务主要提供用户本地化环境中的码库索引能力、在线解码能力、码库管理控制台。
  • 解码端方案主要提供码库索引 SDK 调用以及离线解码能力。
  • 码库扩展和管理服务主要由 IRIS 项目负责,它是对 IRext 体系的一个能力补充。


各平台最佳实践

IRext 针对开发者的不同产品构成选型进行了良好的平台适配,几乎可以用于带有红外发射功能的任意软硬/云端一体环境中,请根据您自身的需求详细参考针对不同环境的最佳实践,优化您的开发流程。

Android 应用程序

你可以使用 repository 中的 Android NDK 编译脚本 Android.mk 为你的 Android 应用程序编译 IRext 离线解码程序,并将所有 SDK 接口映射为 JAVA 代码进行调用。


Windows 服务器/应用程序

可以使用 repository 中的 ir_decoder.vcxproj 工程文件导入 Visual Studio 进行生成 ir_deocde.dll 文件,且将生成的动态链接库导入你的项目中使用。参考示例请见 irext\src\example\decode_example\Win32。


Linux 服务器/应用程序

使用 CMake 编译环境, 并且使用 repository 中的 CMakeLists.txt 对源码进行编译,可以生成可执行程序(用于测试)以及 Linux 动态链接库,再导入你的工程。


TI RTOS (CC26XX)

ARM Cortext

在嵌入式平台中进行离线解码,请按照 SDK 文档中的步骤进行操作,目前已经支持 TI CC25XX,CC26XX,对内存消耗要求极小。参考示例请见 irext\src\example\decode_example\CC26xx,可以导入 IAR 工程文件进行测试。

相同的代码依然可以支持运行在增强型 51 单片机之上,已经对 51 单片机 进行了兼容。

感谢开源项目IRmqtt作者,将IRext适配至 Node-MCU 及相类似平台。


Java 服务器

你可以从开源库中下载 WebAPI 的源码或者 jar package,在您的工程里调用进行码库索引,并且参考文档的“在线解码 API” 部署解码服务。


iOS 应用程序

直接集成 IRext index service API 以及 decode core 到 iOS 应用程序当中实现下载和解码。



概述

本地控制台可供使用者自行搭建一个完整的,不依赖于公有云的私有码库管理系统,它完全包含 IRext 所提供的所有编码索引和码库。

本地控制台为您提供以下能力:

  • 继承 IRext 的公共码库控制台关键功能。
  • 继承 IRext 公有云服务的码库索引和下载功能,为端侧产品提供服务能力。
  • 完全不依赖于 IRext 的公共码库运行环境。
  • 支持容器化部署和在线解码。
  • 您可以利用私有控制台自行新增码库。
  • 可以通过 IRext 提供的可视化码库管理工作流对码库质量进行管控,确保下游产品高可用性。

部署索引服务

1. 预置环境: Linux 操作系统的服务器 (推荐 Ubuntu 或者 CentOS),MySQL数据库 (推荐版本 5.6),Redis,Java 运行时环境 (推荐1.7 以上版本)。

2. 获取 private-server 源代码 (git clone https://opensource.irext.net/irext/private-cloud.git,或者直接下载压缩包)。

3. 可以将工程导入 idea 进行修改,并使用 maven install 打包成 SpringBoot jar,也可以直接使用 packages 中的预编译安装包。

4. 获取最新的 IRext 索引, (git clone https://opensource.irext.net/irext/database.git),并将 sql 脚本导入 MySQL 数据库。

5. 将 decode-service 工程的 decode-core 下的 libirda_decoder.so 复制到 /data/irext/ 下 (需要root权限)。

6. 通过 java -jar 执行 decode-service 服务包,解码服务将会默认在 HTTP 8081 端口监听。

7. 你可以自定义 application.properties 文件,设置您的 监听端口、MySQL 和 Redis 连接参数,并放置在与 .jar 文件同级的 config 目录下。

在 Web API 接口中请将 localhost:8081 替换成您的 IP:port

部署控制台

1. 预置环境: Linux 操作系统的服务器 (推荐 Ubuntu 或者 CentOS),MySQL数据库 (推荐版本 5.6),Redis,Nodejs运行时环境 (推荐 8.X版本),Python 2.7运行时环境。

2. 开始之前,请确保安装上述环境,并确保 MySQL 和 Redis 服务处于运行状态。

3. 从 github 上 clone 或者 download irext-console 到服务器:git@github.com:irext/irext-console.git。

4. 从工程的 database/db/irext_xxxxx.sql 导入数据至 MySQL。

5. 在 home 目录下建立 rc_extension 目录,并将 data/binaries/irext-debug.tar.gz 中的文件解压缩到 rc_extension 目录下。

6. 在工程的根目录下执行 npm install。

7. 在工程的 web/public_js 下执行 bower install。 (前提是需要执行一次 npm install -g bower)

8. 在您的 Ubuntu 或 CentOS 上安装 tmux 工具,并且运行工程根目录下的 ./startup.sh,启动控制台服务。

9. 在浏览器 localhost 上可以访问到控制台,并且可以使用您在 site.irext.net 上注册的账号进行登录。


使用容器

1. 预置环境:Docker 运行环境。

2. 下载 IRext 容器镜像包 (包括索引服务和控制台),和 数据包 (包含了最新版本数据和码库,2023-09-06 更新)。

3. 使用 su 将数据包解压缩到系统根目录,形成 /data 。

4. 运行以下命令导入并启动容器:


wget https://irext-lib-release.oss-cn-hangzhou.aliyuncs.com/pc-docker-image/1.2.7/irext-private_1.2.7.tar.gz
wget https://irext-lib-release.oss-cn-hangzhou.aliyuncs.com/pc-docker-image/1.2.7/irext-private-data-20230906.tar.gz

tar -xf irext-private-data-20230906.tar.gz
sudo mv data /

sudo docker load < irext-private_1.2.7.tar.gz
sudo docker run -itd \
--name irext-private \
-v /data:/data \
-p 8080:8301 \
-p 8081:8081 \
irext-private:1.2.7 /data/start_irext.sh

            

5. 在浏览器中打开 localhost:8080 即可访问控制台。

6. 索引和解码接口请参考 Web API 章节。

7. 您可以根据自身服务器环境对参数进行调整,例如端口映射、数据目录等。


使用控制台

码库索引和下载

进入控制台页面,可以通过索引的方式逐步找到您的目标码库,并且通过下载按钮下载二进制文件。

也可以透过搜索框对码库进行查找,在码库索引表中,您可以展开一些隐藏的编码字段,例如机顶盒运营商以及码库贡献者等。


更新数据

目前,请定期访问 site.irext.net 首页,可以和 IRext 同步码库数据。


概述

本节文档阐述 IRext 中的红外遥控码通过 Web services 进行索引以及在线解码的方法。

IRext 提供了一个基于 SpringBoot 的私有化部署的索引和解码服务,适用于智能家居APP,远程遥控等场景。

在线解码服务包括了 IRext 核心解码算法的所有能力,并以标准的 Restful 接口提供输出,供具有 HTTP 能力的一切终端使用。

您可以单独下载 IRext 的在线解码服务源代码或者程序包,部署在您的服务器上,配合 IRext 提供的索引数据库以及二进制压缩码库进行部署。


运行环境

码库索引

只需要几步就能通过 IRext 的Web service API获取到码库中的编码。

1. 获取编码二进制文件,可以通过 site.irext.net 控制台获取,也可以通过Web API进行获取,通过Web API获取方法请参考条目2。

2. 通过 Web API 按照以下流程依次调用可以索引到最终的编码二进制文件。

3. 将获得的二进制文件内容传输到需要解码的平台上,支持PC-Windows/Linux/Mac环境,TI CC25XX/26XX,Android APP环境等具有C runtime的环境。


下面分接口描述 Web Service API 定义

在线解码

协议解析

数据结构

枚举量

状态码

响应


概述

使用 Web API 最终将编码下载之后,将二进制文件保存到本地,也可以将它的值读取到内存的缓冲区,并且使用解码API对其进行打开、解码,最后关闭。

1. 需要根据 Web API 中的返回值remoteIndex对象打开其对应下载的遥控码库文件,主要对象参数包括:remoteIndex.categoryId, remoteIndex.subCate。

2. 成功打开码库文件之后,根据每次遥控按键的按键码 (参见按键映射),以及空调的状态 (如果是空调),最终得到一个整数型数组的红外编码输出结果。

3. 将这个结果发送到IR发射的功能接口或者驱动程序接口中,实现遥控控制。


从文件系统解码

                    ir_file_open(category, sub_category, "my_ir_code_file.bin");
                    ir_decode(key_code, user_data, ac_status, change_wind_dir);
                    ir_close();
                

加载到内存解码

                    ir_binary_open(category, sub_category, buffer, buffer_length);
                    ir_decode(key_code, user_data, &ac_status, change_wind_dir);
                    ir_close();
                

解码之后在 decoded_data 中获得可供输出的 IR 时间序列,将此序列递交给 IR 设备驱动即可实现红外发送。


解码接口说明

                    #include "ir_decode.h"
                

对于机顶盒设备,频道 0~9 的按键码为 14+0 ~ 14+9


概述

本文档内容适合有一定综合技术背景和能力 (Javascript + python + 嵌入式)的用户参考。

借助 IRext 的本地控制台、编码算法以及一些外部设备,可以在现有码库的基础之上扩展你的遥控码库,并对编码的正确性进行校验,对码库进行管理。

本地控制台的搭建方式请参考 “本地控制台” 一节所描述的内容,搭建好之后,通过了解和学习本文档的知识和步骤,就可以对码库进行扩充了。

由于命令码 (除空调之外的绝大部分设备)和状态码 (大部分空调设备)在编码方式上存在差异,本文目前只阐述如何扩充命令码码库。


编码原理

由于状态码编码复杂,维护难度较高,目前文档只介绍命令码编码原理以及维护的方法。

1. 命令码码库由 protocol 和 control 两部分组成。

2. protocol 表示这种控制编码的起始码,结束码,逻辑0,逻辑1,位反转等信息,对于遥控的所有功能所发出的码,这些信息都是适用的。

3. control 表示某一个具体的遥控设备每个功能按键所能发出的编码的具体信息。protocol 和 control 之间是一对多的关系,即一个 protocol 可以衍生出多种不同的遥控设备编码。

4. protocol 部分由多个属性组成,包括:bit_boot,bit_1,bit_0,bit_stop,bit_flip,frame_normal。

  • bit_boot:红外控制引导码,红外接收装置将这种特殊的成对时间序列视为一个有效控制信号的开端,以排除噪声。
  • bit_stop:红外控制结束码,红外接收装置将这种特殊的成对时间序列视为遥控信号结束。
  • bit_0:逻辑信号0。
  • bit_1:逻辑信号1。
  • bit_flip:逻辑信号位反转。
  • frame_normal:一个完整控制码的序列,由上述5种码组合而成,例如 upd6121g 协议中,一个完整控制帧的构成为:bit_boot,8bit segment 1, 8bit segment 2,8bit segment3,8bit segment3-reverse,bit_stop。其中每个 8bit 的 segment 在每个按键上都有所不同,但是每个 bit 只可能是逻辑0 或者 逻辑1。
  • frame_normal 的定义当中还有针对每个 segment 的属性,又分为:
  • (1) bits:定义一个 8bit 的 segment 当中有几个有效位,对于无效位应该做 mask 屏蔽。
    (2) ending:定义一个 8bit 的 segment 的输出是大端方式 (msb,正序输出)还是小端 (lsb,反序输出)方式。
    (3) mode:定义一个 8bit 的 segment 是按照 bit 正常还是 bit 反转方式输出。
    (4) type:定义一个 1bit 的类型,取值为 boot,stop,flip 当中的一种。

5. control 部分由多个按键的编码以及对应的 protocol 名称组成。control 当中根据 protocol 指定了不同的按键发出编码的帧结构。

6. 每个按键有对应的名称,且包括规定协议当中的所有 segment 的具体值,例如,某个 upd6121g 协议的设备的电源按键帧值为:0x45 0xBA 0x12,即对应 upd6121g protocol 当中的 3 个 normal mode 的 byte 以及 一个 reversed mode 的 byte,byte 当中的每一个 bit 翻译成 bit_0 或者 bit_1。


一个命令码 protocol (upd6121g-NEC) 的例子


一个命令码 control (某扫地机器人) 的例子


编码规则

如果详细了解了上述的实例,那么例如我们需要生成一个扫地机器人的电源按键编码,可以看到其电源按键的控制码为

item1=0x40,item2=0x55,item3=0x44

upd6121g 当中涉及到了 item3 的反码,因此 item3(inverse)=NOT(0x44)=0xBB

换算成2进制即为:item1=01000000,item2=01010101,item3=01000100,item3(inverse)=10111011

由于每个 item 指定为 lsb 模式,即反序输出,换算为:item1=00000010,item2=10101010,item3=00100010,item3(inverse)=11011101

对照 upd6121g 协议,最终产生的红外时间序列为:9000,4500,560,565,560,565,560,565,560,565,560,565,560,565,560,1690,560,565,560,1690,560,565,560,1690,560,565,560,1690,560,565,560,1690,560,565,560,565,560,565,560,1690,560,565,560,565,560,565,560,1690,560,565,560,1690,560,1690,560,565,560,1690,560,1690,560,1690,560,565,560,1690,560,560,0

将上述时间序列作为输入,提交到 IR emit 驱动,实现依次按照 38K 有载波-无载波顺序调制,即可发出让科沃斯扫地机器人工作的控制信号。

当然,上述算法,包括最终码库的二进制压缩,都由 IRext encoder core 实现好了,您只需要产生所需要的控制码 XML 文件,提交给 encoder core 即可完成编码工作。


码库维护环境准备

1. 红外码库的扩充,需要借助一台 YG-920 红外码分析仪。在将来 IRext 也会推出成本更加低廉的红外码分析方式。

2. 安装红外码分析仪的配套软件 (目前只支持 Windows 操作系统),连接分析仪到电脑,确认可以在分析仪的仪表板上接收到任意第三方遥控器的编码。

分析仪配套软件下载链接

3. 参考 “本地控制台” 一节描述的内容,搭建好 IRext 本地控制台。

4. 准备好需要录入的第三方遥控器,然后就可以开始录入了。


码库维护方法

在已有协议基础上扩充和维护码库

1. 打开 YG-920 分析配套软件,接入分析仪,将第三方遥控器对准 YG-920 的接收接口,按下相应功能按键,在分析软件界面上可以看到这个功能遥控码的解析结果。

2. 如果解析结果当中的 protocol 是 IRext 已经编录的 protocol,那么只需要根据 system code 和 custom code 录入按键码即可,准备一个和上面扫地机器人控制码 xml 文档类似的文档,按照下面的规则填写信息:

  • 如果电器的类别 (category)是 IRext 当中的 category,那么请参考 ir_command_encode.py 进行功能按键编码的录入。
  • 仔细分析 protocol 当中的 frame 字段内容,并且根据遥控分析仪上的 system code 和 custom code 填入每个按键的 item 值。
  • 下载 encode core 算法源码到 private console 的 ir_encoder 目录,并且在 system_config.js 当中配置好您环境中的 PYTHON_PATH。
  • 下载 binary data 到本地文件夹,并且在 system_config.js 配置 FILE_TEMP_PATH,指向 protocol 和 binary 文件夹的父目录。
  • 在 private console 的管理控制台当中新增一个红外码,选好所属类别 (category)和品牌 (brand)/城市 (city),选好它所属的协议,上传上面手工加入的 xml 文件,一个新的码库就生成了。
  • 通过管理控制台,您可以控制码库的验证,将码库下载到本地,使用解码算法进行实际验证,如果验证不通过,您可以回退码库状态,也可以验证通过进入正式发布状态。
  • 如果要新增的编码不属于 IRext 当中的任何类别 (category),例如游戏机,那么需要用户手动添加相应的 category 到数据库,并且通过私有控制台创建 brand,接着按照上面的方法新增遥控码。

编码维护服务

如果要录入的编码,是属于不在 IRext 官方码库当中的协议,请联系作者,可以通过企业服务的方式帮助企业用户进行新增协议的支持,这部分服务会收取一定费用。

其它关于本文档的疑问,请在 https://opensource.irext.net/irext/irext/-/issues 项目上提 issue。


Web 服务相关问题

Q: 如何在自己的服务器上搭建 IRext 服务?

A: 可以在 github 上下载 私有服务器 配合 码库索引数据库 进行部署,部署方式可参考文档 Web API 章节。


Q: 如何实现类似 IRext 控制台上的在线解码功能?

A: 目前 0.2.2 版本上,如果部署了码库索引的私有服务,那么可以下载资源库当中的 Linux JNI 解码库,并在私有服务器的 application.properties 当中的 user.data.basedir,且将解码库放置于 $user.data.basedir/irext/ 下, 则一并具备了在线解码的能力,在线解码的 Web API 调用参见文档 Web API 章节。


解码相关问题

Q: 空调解码时,解码接口为什么既要传递空调状态参数,又要传递按键?

A: 因为空调解码过程不仅需要得到当前的状态,还需要知道当前状态是如何迁移过来的,例如从 制热-24度 切换到 制冷-24度 与从 制冷-23度 切换到 制冷-24度,发出去的红外指令是不同的。


Q: 空调支持扫风和风向控制吗?

A: 目前仅支持控制上下扫风和风向控制,不支持左右扫风控制 (比较小众)。


Q: 空调状态当中有 Sleep,Timing,Display 三项,是否支持?

A: 此三项目前为保留字段,不支持其功能,但用户如果有编码和码库维护能力,可以自主根据源代码进行扩展。


Q: 电视机和机顶盒支持频道控制吗?

A: 支持,电视机和机顶盒支持直接频道数字码发送 (0-9),请参阅文档 按键映射 章节。


Q: 如何在 iOS 平台上实现红外解码?

A: 解码核心算法是由纯 C 语言开发,可直接集成到 iOS 开发环境进行编译,但是需要用户自行研究从 iPhone 等设备发射红外码的方法。并且需要为 iPhone 购买音频转红外的发射模组,具体实践过程请参考文档首页的 “最佳实践” 章节。


Q: 为什么有些遥控器匹配成功之后,大部分按键都可以正常控制,个别按键按下之后设备无反应?

A: 因为各大家电厂家会推出同一季发布、规格相近但是不完全相同的电器。它们在遥控指令方面大部分是共享的,但是也有功能上的差异化。在产品上进行控制匹配时比较难仅仅通过简单的几个按键 100% 精准匹配到用户使用的电器,此时建议提升按键匹配数以提高准确度。如果码库当中实在不存在 1:1 匹配的电器,可以考虑自行扩充编码。


编码相关问题

Q: 目前 IRext 上提供的编码方案可以通过哪些途径获得?

A:目前可以通过 IRIS 项目向 IRext 码库提供编码,当前 IRIS 支持通过虚拟机和开发板的途径从外界吸收码库,也可以通过在线协议分析功能进行编码分析。


其它问题

Q: 如何让最终用户更快的在 IRext 遥控码索引中找到其家电的遥控码?

A: IRext 的遥控码索引均已按照特定品牌家电的普及程度排序,越普及的遥控码的 priority 值就越小,建议按照 priority 从小到大的顺序在产品当中呈现遥控码列表。


致谢

特别感谢在 IRext 和 IRIS 建设当中给予支持的同学:
  • 参与原始编解码算法贡献者:@阿贵,@香江🍌,@恩恩
  • IRIS 码库贡献者:@呆呆
  • 设计师:@Teresa
  • BabyIR 👶作者:@Caffreyfans
  • 特别感谢 @Huangyidao2006 在 2020 年夏天测试了所有空调码库的可用性 🤣
  • 特别感谢 @fengpeng.net@163.com 贡献了第一个用户自定义空调编码
  • 特别感谢 @BS_joo0vocal

感谢所有帮助 IRext 不断改善的用户 (排名不分先后):

ivluowei, backrunner, Caffreyfans, Clanaid, FounderSG, TanJunYi, FatDogJoe, tianbl, yuanchaowang

shengMR, figo-fe, ll00ccuuss, lujw, liuhailiang, 逍遥行工作室, Joketinnel, Liweiwei, 无敌浣熊, 呆呆

cylon147, wa111314, lazyling, 欧阳, Lyb-coder, XWZYZ, killer-p, fengpeng.net@163.com, 小賤賤要飛


                    2025-02-25
                    Bug fixes for frequent heartbeat re-publish when IRIS APP connected to EMQX

                    2025-01-31
                    Added code emitting functionality to IRIS web console
                    Added key status sync functionality for code collection from VM on IRIS web console

                    Enhanced IRIS Kit MQTT connection stability (Need to update to latest firmware for Kit)

                    2025-01-06
                    Launched IRIS Kit remote code study feature
                    IRIS Kit could be registered by QR scan with Wechat
                    IRIS remote code attached protocol analysis result
                    Supported instant UI between IRext console and IRIS Kit studying feature

                    From Jan. 2025, all registered users can apply for administrator with IRIS VM, Kit and remote protocol analysis feature,
                    administrator could also apply for 1 IRIS Kit for start up.

                    Optimized protocol analysis performance
                    Bug fixes for IRIS Kit and remote protocol analysis
                    IRIS is enhanced with HA of Aliyun IoT and EMQX

                    2024-05-04
                    Launched 1.3.1, supported new categories - camera and water heater

                    2024-03-09
                    Launched protocol analysis features
                    Fixed some bugs of IRIS APP and IRIS Kit

                    2024-01-14
                    Launched 1.3.0 with IRIS code collector optimized
                    Launched IRIS Kit, the firmware could be downloaded from SDK page

                    2023-09-07
                    Updated DB to Sep. 2023

                    2022-07-12
                    Fixed mode switch bug for AC control

                    2022-03-04
                    Fixed Hexadecimal format command-typed decode issue
                    Released version 1.2.7 for all components

                    2022-02-20
                    Launched IRIS-Stack to optimize protocol analysis
                    Real remote control test (by IRIS client) linked to Alibaba-Cloud IoT for stability

                    2021-08-15
                    Public service updated to 0.2.6
                    Private cloud data updated to 0.2.6
                    Fixed some bugs for decode core

                    2021-04-18
                    IR carrier waves support in IRIS page
                    Optimized SDK management
                    Remote IR protocol analyzer for code manager
                    Real home appliance control test is supported by IRIS client APP

                    2021-03-03
                    IRIS APP for Android has been released separately, support collecting code from IRIS-VM
                    IRIS online protocol analyzer is published, you can analyze IR protocol directly from IRIS console
                    Bug fixes

                    2020-11-15
                    A new IRIS code collector is released with dashboard, code collection and remote emit features
                    Refined authentication framework and logic of admin and APP SDK, has no side effect to currently online clients

                    2020-10-11
                    Added best practice for SW/HW platforms
                    Optimized SDK and multi-point access by SDK
                    IRIS server critical bug fixed

                    2020-06-26
                    IRIS Code collector is not available on github
                    IRIS server critical bug fixed

                    2020-06-14
                    Enhanced IRIS statistics with new remote collection notification
                    International support for private cloud and console

                    2020-05-04
                    IRIS now supports merging or creating unknown brands and STB service providers
                    Containerized deployment for indexing service and console
                    Local deployment document is updated

                    2020-04-06
                    Fixed hybrid 8-bit and 16-bit issue in decode core and support 8-bit MCU better
                    New feature in IRIS supporting geo location mock (China only)
                    New feature in IRIS supporting STB code collection (China only)
                    IRIS could now run on MacOS
                    IRIS/directional decoding is enabled in private server
                    Documentation issue correction and optimization
                    irext.net is beautified and single point login is allowed
                    Published IRIS database
                    Released version 0.2.5 for all components

                    2020-02-07
                    IRIS Virtual Machine is now available
                    Support online direct decode by API
                    Support online direct decode IRIS code by API

                    2019-12-28
                    The kick start version of IRIS (IR Interchange Service) Engine is online
                    Added online reverse search of command code
                    Added online non-extraction decode API, now you can use the latest code from IRIS engine
                    Uploaded the link of ARM and AARCH64 decode library
                    Bug fix for status typed decoding
                    Fixed all bugs in documents
                    Released version 0.2.4 for all components

                    2019-10-06
                    Completed key mappings for all remote categories
                    Updated remote index data and binaries to 2019-10
                    Support armhf and aarch64 build options in decode core

                    2019-07-29
                    Added FAQ to document
                    CC25XX 51MCU is supported, with an example
                    Fixed bugs in Android example

                    2019-07-01
                    Fix wind direction control is supported in decode core
                    Fixed macro definition issue in decode core header file
                    Fixed a critical bug for STM32 in decode algorithm
                    Published private web server with indexing and decoding API
                    Released version 0.2.2 for all components

                    2019-06-16
                    Key mapping bug fix in decode core
                    Online decoding crash issue fix
                    Support no file system function in decode core
                    Support SQLite3 offline database
                    Released version 0.2.1 for all components

                    2019-04-12
                    Published code maintain method
                    Supported encoding feature in private console

                    2019-02-22
                    Core decode algorithm enhancement, support AC function support query
                    Core decode algorithm enhancement, support decoding by channel number for STB
                    Support CC2650 + TI OSAL
                    Full support for JNI and Java
                    Open source online decode project
                    Offline database is maintained in a new project
                    Backend code collector is ready
                    Released version 0.2.0 for all components

                    2018-08-26
                    Node-MCU support
                    Fixed some issues in indexing API and SDK
                    Fixed data type conversion issues in decode algorithm
                    Added private IR code indexing server and guide
                    Released version 0.1.5 for all components

                    2018-04-29
                    Decode algorithm on STM8S207
                    Fixed authentication issue in indexing API
                    Updated document
                    Released version 0.1.4 for all components

                    2018-03-25
                    Added IR code for Dyson series
                    Fixed bugs in decode algorithm

                    2017-11-04
                    Allow anonymous access to console and documentations
                    Disabled remote code search functionality since there is a bug

                    2017-08-25
                    Done i18n for console and back end data

                    2017-07-15
                    Added online decode feature

                    2017-07-05
                    Released JAVA and Android web-api SDK version 0.1.3

                    2017-06-08
                    Released decode library version 0.1.2 fixed issue in AC decode algorithm
                    Support for APP registration for Android and JAVA SDK
                    Fixed some issues in JNI

                    2017-05-29
                    Released Android and JAVA Web SDK version 0.1.2

                    2017-04-30
                    Released decode SDK for Android

                    2017-03-31
                    Released decode function for CC2650 on board

                    2017-02-11
                    Released WEB COM

                    2017-01
                    Released Console

                    2016
                    Released core algorithm encoding and decoding
                    Released databases