最近开发的项目是对Cisco路由的设置,有时候需要发送Ctrl+Break的处理。
我们现在的方案是Cient端负责用串口和Router连接,并通过网络连接到Server。
Server端收到连接后可以进行类似终端的操作。但是现在的问题就是无法发送Ctrl+Break这个中断的控制。
我发送了0xFF,0xF3这个中断,调试的时候也写入了。但是Router返回的竟然是8,32,8,s(8是BS,32是空格)。所以现在很迷惑,这个功能竟然无法实现。另外,发现在用110,300,1200波特率的时候发送e竟然可以达到效果(其实就是想在60秒内Ctrl+Break进入那个状态)。尽管如此,这种方法毕竟不能告诉客户你这么用。所以希望哪个仁兄指点一二!谢谢!

解决方案 »

  1.   

    感谢楼上的兄弟回复,尽管我不知道你说的方法,但是还是感谢您的热心。
    关于串口中Ctrl+Break的发送。Ctrl+Break这个用户中断在串口中发送有点问题,看了有的人说需要高电平多少毫秒什么的,有了点启发。我用串口调试的工具跟踪,发现在以9600波特率收发的时候,(用超级终端发送,调试工具接)得到的仅仅是一个0。但是在我向设备发送0的时候却得不到这个中断。而当我用1200以下的波特率发送某些字符的时候竟然可以得到这个中断。然后我就用这几个波特率试验,(用1200以下的波特率发送,用9600接收),结果除了几个128等之外,也得到了一个0。我再次发送这些得到的数据(用9600)还是没有发送出中断。后来看了一个文章,说需要高电平,但是如果简单的发送0(0代表高电平)是不可以,还有停止位什么的。最后发现了个api----SetComBreak 原来在这个地方。但是加上了以后在发送就不行了,原因是没有加上ClearComBreak,加了之后又无法发送中断了。因为并没有维持足够时间的高电平。Sleep()一段以后就可以啦。另外说明一下为什么低波特率可以,个人认为,低波特率发送一个位的0,高波特率就收到了好多个(1200*8=9600)甚至认为需要维持的高电平时间应该和波特率有关,应该是接2个byte的时间(没验证希望有人证明)暂时写这么多,以前的内容都很支离破碎,我整理了一下,希望有帮助。