我正在编写一个与AT调制解调器通信的应用程序(在这种情况下,使用的是cx93010芯片组,请参见此处的手册:https://www.manualslib.com/manual/1140976/Conexant-Cx93010.html)。 我的应用程序收集了Callerid信息,并使用各种方式来获取信息(黑名单网站查询,有关扩展名的信息,本地白名单和黑名单等)。
我想进一步采取这一步骤,并出于多种原因发送和接收语音数据,例如应答机,检测何时有人打了抑制电话,然后播放预定义的消息并挂断。
我已经建立了一个接口,可以与调制解调器对话并获取所需的Callerid数据,并根据该数据挂断电话。
我的问题如下:
当我的应用程序接收音频数据时,不是说音频(!)字节流随机(!)包括DLE消息作为音频数据的一部分吗?
我已经检查了手册和其他资源,但没有什么可以告诉我,如果是,那么如何处理?
-这些随机事件是否已被逃逸?如果可以,怎么办?
-还是以固定大小的块(基于编解码器)发送音频数据,并且在这些块之间可能出现有意的DLE消息,因此我可以忽略x的DLE字符出现的次数个字节?
网上找到的各种代码示例(基本上是我能找到的所有示例)都忽略了这一点。我想知道它们是准确的实现,还是只是简单又肮脏的示例来展示基本功能,而这些极端情况却随着时间的流逝而被遗忘了。
提前谢谢!
答案 0 :(得分:1)
要结束这一点,尤其是因为(至少对我来说)这已经显示在google搜索的顶部,所以我想分享一下我自己提出的答案。
因此,根据数据手册的内容,通过将随机的DLE字节附加另一个DLE字节来逃逸(根据手册),该随机DLE字节是数据流的一部分(“ data”表示“有效载荷”,而不是原始数据)。因此,两个DLE字节一起出现意味着您需要删除其中一个字节,而单个DLE是数据的一部分。如果您在原始流中遇到单个DLE,则表示下一个字符肯定是调制解调器(DCE)发送给您(DTE)的事件代码,除了:
DLE + SUB的组合用于转义两个连续发送的DLE字节。这样做是为了不增加要传输的原始数据量。
这意味着各种示例只是简单地将原始数据接收和解释为音频数据和/或发送音频数据而不进行转义,这只是不准确的过分简化。
感谢阅读我原始问题的任何人。