前言
上回书说到,常规的按键遥控发码已经实现(传送门)。一般的按键已经满足了需求,然而开关机键拥有两种功能——按一下锁屏,长按关机。一下没有思路,还是拿出“法器”揣摩揣摩。
有图有真相
红外线遥控编码分析仪图上图中,第一通道是按一下所发出的红外编码,第二通道是长按按键后发出的红外编码,可以看到,正常发码(引导码(9ms+4.5ms)+用户编码(低八位)+用户编码(高八位)+键数据码+键数据反码,在63ms已经结束了)都是一样的,区别在于后面延时码的次数。
实践得真知
结合红外线遥控编码分析仪图,在原有的代码基础上添加了延时码和重复码,根据实际操作发现,重复码需要3次以上设备才能响应,所以得出以下代码:
public static void transmitKey(Context context, String key, String key2, boolean longPress) {
if (!checkCIR(context)) {
return;
}
list.clear();
//引导码
list.add(startH);
list.add(startL);
//用户编码
change(userH);
change(userL);
//键数据码
change(key);
//键数据反码
change(key2);
//延时码
list.add(600);
list.add(GAP);
list.add(LOOP_H);
list.add(LOOP_L);
//如果长按则添加重复码
if (longPress) {
for (int i = 0; i < 4; i++) {
list.add(650);
list.add(96000);
list.add(9600);
list.add(2250);
}
}
int size = list.size();
pattern = new int[size];
for (int i = 0; i < size; i++) {
pattern[i] = list.get(i);
}
mCIR.transmit(carrierFrequency, pattern);
}
温故而知新
在添加了延时码后发现,上篇文章发现少一位的问题得到了解决。如果正常发码到键数据反码戛然而止,最后一位是发送不成功的。
网友评论