zoukankan      html  css  js  c++  java
  • (串口通信编程) 开源串口调试助手Common (Com Monitor)

      最新的文档见这里:http://blog.twofei.com/566/

      我写的串口调试助手程序以及源代码.

      警告:请勿将本软件源代码用于任何商业用途。

      其实吧, 我写的这个串口软件绝对比网上流传的一些串口调试软件好用很多, 对于软件,我本身并没有作
      太多推广, 一些功能我由于懒也没有文档化; 如果您正在使用, 也觉得我说得没错, 还望您帮忙推广一下. 感激!

          本程序最近正在使用C++完全重构, github上面的源代码无法通过编译~~
      敬请期待最新版本!
     

          微云你就一坑货, 说了的链接永久有效呢?


          源代码:https://github.com/movsb/common.git

      声明:本软件为开源软件,绝对不包含任何对系统不利的代码,对于360的那种行为,我不想说什么.

      软件界面:
      
      

    -------------------------------------------------------------------------------------------------------------------------

        说明: 更新信息可能不会再更新到这里, 请到GitHub上面查看.


      更新:
    2014-07-07:
        ①优化:接收数据时,如果最后一个字符是'\r'或'\n',则会在一定时间内等待接收所有'\r','\n'字符,避免导致读取'\r\n'可能造成的两次换行
        ②更改:除已经提到的那三种情况, 还有使用'\r\n\r'三个字符作为换行符使用的, 已增加支持

    2014-07-07:
        ①修复:回车换行字符'\r','\n','\r\n'均能达到换行效果
        ②修复:一开始"忽略回车"等无法点击问题
        ③优化:简化对数据中包含'\0'的数据的处理
        ④增加:简洁界面模式时把工具栏放到左边
        ⑤更改:只显示接收区按下的"回车"字符为"<Enter>",其它不显示
        ⑥增加:接收区增加一个"清空数据"菜单

    2014-07-06 1.17:
        ①增加:允许从接收区输入字符并发送(更友好的类交互模式)
        会显示的字符包括:
          ' '     <Space>
          '\b'   <Backspace>
          '\t'   <Tab>
          '\r'   <Enter>


      感觉输入效果还不错:

        ②更改:更改了字符接收区/发送区的字体为Consolas等宽字体,不再使用原来的Courier字体
        ③增加:简洁模式 - 此模式下大部分界面元素会被隐藏, 有时候这样更舒服
        见上图所示, 左下角为"简洁模式"开关, 开启简洁模式后就像上图, 是不是很简洁?
        ④增加:主窗口的自动界面布局(允许拖动改变窗口大小,控件坐标自动调整)
        ⑤更改:默认使用的模式改为:字符接收+字符发送

    2014-07-05 1.16 (未对外发布):
        ①字符接收数据时,增加对控制字符Backspace的支持(即'\b'),效果就是向前删除一个字符
        
        ②修复一处中文检测错误(原来是对的, 不知道什么时候改错了
        ③删除了窗体大小调整(下个版本即将使用自动布局)


    2014-03-03 1.15:
      更新:支持手动输入非标准波特率
      改进:增加了几个功能快捷键,比如Alt+S为发送,....
      优化:修正:如果接收缓冲区有未显示的数据,则会在按下继续显示时进行提示,而不是原来的在接收到下一次的数据时进行提示;
      
        
    2013-11-02 1.14:
       更新:修改了原来的命令发送模式的界面,现在变得更加友好了
         如下图, 先选择要发送的命令列表文件:
           choose_file.png
        点击打开, 将会打开如下界面:
          interface.png

          1.上面的代码是我测试蓝牙芯片用到的命令列表文件, 点击"发送命令"就会发送对应的一条命令
           2.16进制还是原来的要求, 2个一组即可; 对于字符数据:默认开启转义字符功能, 比如 '\n' 就代表换行,
            支持字符型转义字符有6个, \n,\r,\\,\t,\a,\v,\b, 那些可见的字符不需要转义, 比如引号,问号...
            支持的16进制转义字符格式:\x??  - 其中, 一个?代表一个16进制字符, 以上4个字符组成一个16进制值,缺一不可
          3.文本框中的数据可以在发送时随时修改,回车键可看到效果, (但修改的内容目前不能更新到原来的本地文件上)
          4.注意到数据类型后面的"双击改变"几个字样, 也就是说通过双击, 可以改变那条命令的解析格式
          5.数据大小是指最终要被发送的数据的大小, 而不是转义前的大小
        
        命令文件的格式举例:
            C:初始化SPP库:at+init\r\n
            C:查询任意访问码的蓝牙设备:at+iac=9e8b33\r\n
            C:查询设备类为0x1f1f的蓝牙设备:at+class=1f1f\r\n
            C:设置查询模式:at+inqm=1,9,48\r\n
            C:过滤,查询周边蓝牙设备:at+inq\r\n
            H:16进制测试:12 45 67 4f

          分为3部分组成, 两者之间用冒号隔开:
            第1部分:C或者H(大写), 代表数据是16进制还是字符数据
            第2部分:命令的名字
            第3部分:数据对应的数据

      BUG修复:
        上一个版本在发送数据前忘记检查串口是否已经打开了, 已修复~
    ----------------------------------------------------------------------------------------------------------
    2012-12-24 1.0.0.0:
        发布第1个版本
    2012-12-26:
        自动识别当前存在,插入,移除的串口号
    2013-01-11 1.0.0.1:
        增加保存接收区数据到文件(16进制/文本形式)
        增加从文件读数据到发送区(16进制/文本形式)
        增加暂停显示功能
        增加复制发送/接收区数据到剪贴板
    2013-01-18 1.0.0.2:
        修复:文本文件,16二进制文件读取错误
        修复:程序内部缓冲区满后使程序进入死循环
        修复:文本字符方式显示接收的数据时产生不正确的换行符的错误,若要产生换行符, 请使用"\n"
    2013-02-08 1.0.0.3:
        内部程序作了许多的优化工作,包含数据的发送方式等
        修复接收数据时鼠标在接收区的文本选择造成的干扰
    2013-02-14 1.0.0.4:
        增加显示出0~127号ASCII对应8,10,16进制功能
    2013-02-24 1.0.0.5,今天元宵节:
        更改原来的1~64串口列表到自动检测计算机上的可用串口
    2013-02-27 1.0.0.6:
        若发送文本,则自动发送被自动取消(若自动发送选项已打开)
        在显示模式下不允许对接收区数据进行选择操作
        提供硬件支持的串口设备设置
        为用户提供串口超时设置
        提供手动设置DTR/RTS引脚电平
    2013-03-01  1.0.0.7:
        修改原计算器(系统)为表达式求值计算器(简单版本)
    2013-03-03:
        添加:<其它>菜单添加<设备管理器>
        修改:在关闭串口后自动发送前面的钩不再自动取消(如果已经选中)
        修改:串口被关闭/移除后串口列表回到第一个串口设备的BUG
    2013-03-04:
        修改:现在在串口列表中可以显示串口在设备管理器中的名字了
        修正:无法显示 MSP430-FETUIF Debugger 的串口号(现在调用SetupApi更新列表)
    2013-03-05:
        为了方便数据的统计与显示,16进制内容与字符内容被显示到不同的编辑框中
    2013-03-09 1.0.0.8:
        修正在使用SetupApi枚举串口设备时未检测并口设备而造成的内存异常访问错误
        减少在某些波特率(如:19200bps)下丢包严重的情况(如:MSP430串口),有时候还是会发生,等待修复.某些软件(如:SComAssistant采用每
    次只读一个字节的办法效果还行, 就是速度有点慢. 我改成了WaitCommEvent函数调用了(原来是Pending ReadFile),减少了CPU占用(有些串口驱动并不总是支持同步操作.
        以前只管ReadFile+输出nRead字节,这里错误,ReadFile并不保证读取到要求的数据量后才返回,这里会导致严重丢包,WriteFile亦然.
        速度减慢,但数据更完整
    2013-03-10 1.0.0.9:
        修正:因为在格式化字符串的最后少写了一句 *pb = '\0',导致接收区数据显示错误!
      修复:对utils.hex2chs和add_text作了大量修改,大大减少数据丢包,貌似没有丢包?,细节处理参见源程序
      1.0.0.8版本因为内部原因速度严重减慢, 1.0.0.9回到原来的快速!
    2013-03-18:
        更正:若为字符显示方式,16进制方式保存不被允许,因为格式基本上不满足!
    2013-03-23 1.10:
        添加:工作模式中,右键点击接收区字符文本框可以使能中文显示模式(不推荐),由于中文字符由
        两个字节构成,所以:一旦在某一次接收过程中只
    接收到了中文字符的一个字节,那么数据就会显示出错, 这个无法避免, 所以建议尽量不使能中文显示模式.
        修正:用C语言的人们都习惯使用'\n'作为换行符,我也这样使用,
    但偏偏Windows的编辑框以'\r\n'作为换行符,没有办法,我不得
    不把所有的'\n'换成'\r\n',效率必然会下降,而且我不得不计算出
    \n的个数先 --> 为了计算所需缓冲区的大小.
        添加:现在可以显示出还未被发送出去的数据计数.
        添加:新增计时器,打开串口后开始计时,关闭后停止计时.
    2013-03-25:
        修正:大大减少中文乱码的问题.细节处理见代码.
        增加:字符串转16进制数组功能,工具菜单里面.

    2013-04-04:
        修正:无法复制接收区字符文本的BUG.
        小提示:在选择串口时,如果没有任何可用的串口,则进行提示更新.
    2013-04-07:
        修改:完全修改了utils.str2hex的实现,大大增加了16进制输入的灵活性.
    现在的要求:每个16进制值由两个相邻字符组成,无其它限制.(以前是2个相邻字符+一个空格)
    2013-04-11:
        发送字符数据时,对于换行,只发送'\n',不再发送'\r\n',注意:结尾的'\0\'不被发送!
    2013-04-13:
        修正:更改发送与接收方式为异步方式.
        添加:简单波形显示.
    2013-04-23:
        修正:发送与接收方式改回同步方式!坑~
        修正:当发送操作达到100次时无法继续发送的BUG!
        修改:优化内部线程同步机制,避免程序停止工作(失去响应)!
        优化:优化自动发送数据的方式,提高精度,减小内存/CPU占用!
        小提示:在加载/保存文件时,若不清楚打开/保存方式,可以查看简单的帮助信息!
    2013-05-11:明天母亲节
        修正:终于找到一个比较好的办法来处理自动发送用到的重复数据了,呵呵,时间下限减少到10ms
    2013-07-05:
        临时修正:选择从文件加载并取消后, 串口号选择的ComboBox会消失不见,不知道原因,临时已解决
    2013-07-14:
        改进:程序内部改进内存分配算法,避免因程序错误造成内存泄漏
    2013-07-20 1.12:
    2013-09-10 1.13 今天教师节:
         增加:现在可以手动编写待发送的命令文件,并发送命令了 - 在发送文件时选择 命令文件, 格式见博客后面的介绍
         增加:字符发送模式下,可以选择取消回车换行符的发送,可以选择插入转义字符
            1.支持的字符型转义字符:
                \r,\n,\t,\v,\a,\b,\\
            2.支持的16进制转义字符格式:
                \x?? - 其中一个问号代表一个16进制字符, 不可省略其一,
                必需保证4个字符的格式
            3.'?',''','"', 等print-able字符不需要转义


      女孩不哭 @ 2012-12-27 14:47:59 @ http://www.cnblogs.com/memset
     

  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/memset/p/common.html
Copyright © 2011-2022 走看看