过去一年,我一直在更新PortaPack硬件,软件这块暂停了很久。其实我当时做的APRS接收一直是有点问题,不是每次发射都能正确解调,并且有时候会跳出乱码。
这是因为我只是在参考aprs tx代码写rx,并没有真的找到标准协议。
后来我发现mayhem固件里有另一个老外(east2west,不是eried)也做了一个aprs接收,并且据说可以跟对讲机发出的标准的aprs信号互通。
我先试了一下mayhem中的这一部分功能,发现用它发射给我的接收,我的接收虽然也能收,但也会有点问题,就跟对讲机发给我一样,出现false_detect的数据包。
后来我又用我的固件发射,然后分别用我和mayhem的固件接收,效果如下:
我的固件接收(左边) 我的固件发射(中间)mayhem接收(右边)
可以看出我自己固件收自己的信号也会有点问题,但是mayhem收我的信号就没什么问题。
如果以mayhem为标准的话,我的发射能发给它的接收,说明我的发射没什么问题。我的接收应该是不如它的接收,但是应该也比较接近了。
因此,我的主要问题集中在接收,不是发射上(furrtek当时做的发射,多半没问题,后来我多加了一句add_flag(),这句改回去就行了)。
然后我看了mayhem aprs rx的接收。其实它的解调proc_aprsrx.cpp跟我用的解调代码proc_afskrx.cpp差不多,主要区别是在解码上aprs_packet.hpp。如果你感兴趣,可以看看mayhem项目中的这几个代码。
除此之外,mayhem中还有一些地方有小修改,在message.hpp baseband_api.cpp ui_widget.cpp中。最后,还有一个不得不提的是ui_aprs_rx.cpp,它对应的是aprs接收程序的界面,界面显示代码技术含量不高。
后来我把mayhem所有有关aprs接收的代码都合并了进来,这样这方面的功能就跟他同步了。
上图就是mayhem的aprs tx发给我最新固件的aprs rx的效果。