在贴子(1)的“闲言碎语”中提到:Hijack里曼码的编码格式:
3位的Idle + 11位的Start + 8位的Data + 1位的Parity + 3位的Idle 。
基本元素还是可以看做单一位的曼码0与1,因此解码先从搞定曼码中的一个位开始;
线索:曼码的的位中间是跳变的,跳变的方向则隐含了0,1信息。
解码思路:
记录每一次的跳变的时间(以首次跳变为“基准”);
根据跳变的时刻,识别出是否“有效”的曼码(0/1),
根据有效码的状态计数,及部分码的特点,改变状态标志或拼装曼码数据(8位数据 及1位校验),
收到停止位及IDLE后,准备收工,
继续等待下个的到来...
在实际调试中,还需要对Energia 环境进行小小的调整,目的是:提高MCU速度,还有计时的精度。
经过无数次的努力,有了貌似可用的解码程序。
以下截图是把成功解码后的数据从串口发出,便于检查:
还要再验证一下解码程序:
利用430G2板发出曼码,由金刚狼接收解码。具体连接:
(VCP)COM11: -> 430G2(Pin2) -> FR5969(Pin5) -> (VCP) COM19:
上电前的留影:
在PC屏幕上打开的2个串口分别对应于COM11:(待发的给430G2),COM19:(金刚狼发出的结果)
图中,主要验证了几个:70,71,72,73 (十六进码)
结果是满意的。
再来点更接近实际的,金刚狼与手机间的测试。
金刚狼的引脚与耳机插头间有简单的阻容电路:
说明:
触摸iPod 已经打开APP里的LED1,耳机的L发出曼码0X71;LED2对应的0X72;LED3对应的0X73.
在金刚狼这端,收到0X71,红色LED亮;收到0X72,绿色LED亮;收到0X73,2个LED熄灭,见下图:
实际连接及实测结果:
LED1 -> 红LED
LED2 -> 绿LED
依次触摸LED1,LED2的结果
触摸LED3的结果是熄灭2个LED,结果正确(无图)。
曼码的编码、解码都能实现了,接下来是不是该准备点更有意义的事情。
【已发的相关帖子】
试玩Hijack(1):闲言碎语讲一讲
试玩Hijack(2):曼彻斯特编码的产生
试玩Hijack(3):曼码的发送及测试