# PB_Box-HID_USB_Module,PB-Box项目的HID-USB模块 **Repository Path**: planb-council/pb_box-hid_usb_module ## Basic Information - **Project Name**: PB_Box-HID_USB_Module,PB-Box项目的HID-USB模块 - **Description**: PB-Box项目的HID-USB模块 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-05-07 - **Last Updated**: 2023-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 【应用简介】: 1.该程序为PB-Box项目的一部分,是PB-Box中用于和USB HID设备通信的调试工具; 2.本程序和USB HID设备的通信是通过HIDAPI库实现的,故理论上是支持跨平台的,当然后面如果有空我会进行跨平台的测试的。不过目前的话就暂时只有Windows版本的; 3.PB-Box开发的初衷就是对所学的Qt知识进行复习和查漏补缺,所以程序的设计风格更加偏向于花里胡哨而不是稳定性和性能,所以该程序对于性能还是有相当低的需求的; # 【应用声明】: 1.本软件大量使用了iconfont网站的图标(万分感谢各图标的作者!),如有侵权请联系删除; 2.本软件的最终解释权归Spectre所有; 3.本软件已经上传至我的蓝奏云,你可以通过如下连接获取到最新版本:https://wwc.lanzouy.com/b01jn006f 【密码:4fts】; 4.本软件不得运用于商业用途! # 【程序特色】: 1.本程序具备自动扫描功能,且会将扫描到的设备信息分析、整理、排序; 2.本程序可自行收藏常用设备,避免了重复选择设备带来的困扰; 3.本程序拥有三个指令发送框,且会根据换行符自动将发送内容分割为多条指令进行发送,同时支持GetFeature以及SetFeature两种简单的控制传输通信; 4.本程序的接收部分是交由子线程无阻塞接收的,为避免性能浪费最低接收间隔为1ms; 5.本程序默认使用接收自动换行,即收到换行符后才会显示接收信息。如果你接收的内容没有换行符,则需要你在设置中自行关闭自动换行功能,再通过调节接收间隔来控制换行的频率; 6.本程序三个指令发送框都拥有独立的自动发送定时器; 7.本程序从打开设备开始将会自动记录完整的通信数据; 8.本程序支持界面参数自动保存功能; 9.本程序拥有四个调节器,它们的功能如下所示: ①.消息接收间隔:接收线程休眠时间; ②.接收显示间隔:消息缓冲区刷新频率; ③.设备扫描间隔:设备信息自动扫描频率; ④.消息发送间隔:消息发送等待时间; PS: 消息发送间隔实际上是主线程的强制休眠,因此在不出错的情况下该值越小越好。但是该值过小将导致HIDAPI函数出现死锁,所以请根据使用情况自行调整) # 【已知问题】: 1.在挂机测试的过程中发现,如果PC负载过高,将有概率出现程序死锁于HIDAPI的发送函数中的现象。这将导致挂机过程中的数据丢失,故为避免数据丢失的现象出现,现已将发送函数挪动至子线程,并添加看门狗监视发送线程以保证测试过程中的数据安全;(//@DONE) 2.因为本程序涉及到了大量的数据处理(而且没有放在多线程中),所以在低性能PC高负载发送的情况下会出现界面卡顿异常的现象,在停止发送后会恢复正常,且没有什么实际影响;(//@DONE) 3.本程序在工作时会同时存在4个线程,故请尽量使用多核设备运行本程序。 4.2022年5月20日 —— 实测过程中发现三通道同时以100ms发送一次的频率,一次发送3条指令会出现非常严重的发送阻塞(即漏发送),且hid_write()在多线程中所需要的调用延迟明显比在主线程中高。此问题与PC以及下位机性能有关;(//@DONE) 5.2022年5月26日 —— 在PB-Box中本模块打开数据库时有概率出现打开失败的现象。(//@NOTE:未找到解决方案,暂时搁置//@GUESS:猜测是可能是没有管理员权限问题) # 【其他】: 1.2022年5月16日 —— 导入PB-Box后打包会出现缺失数据库驱动的现象,导致程序无法运行,需要手动将数据库驱动相关的Qt动态连接库导入;(//@NOTE) 2.2022年9月20日 —— 使用Qt6.2.4进行编译会出现大量问题,时代变了…… # 发行版本 Beta-V2.3 发布日期: 2022年7月29日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.代码中原本 QString = int + QString 的代码在Qt6中需要你自行将int类型强制转换为QString类型,int类型将不再支持隐式转换至QChar; 2.正则表达式所需要的QRegExpValidator在Qt6中将不被支持,已经替换为QRegularExpression,QRegularExpressionValidator的书写方法,同时该方法在Qt5中,所以前者可能来自更加早期的版本了; ====================================================== # 发行版本 Beta-V2.2 发布日期: 2022年7月29日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.重新开启标准输入框的16进制输入组件参数保存功能,上个版本只禁用了参数存储,没有禁用参数加载导致程序参数加载异常; 2.修复初始化时16进制开关启用但是功能未生效的Bug; 3.修复初始化时标准输入框中ASCII类型数据会被清空的Bug; 4.添加“自动收藏打开过的设备”的功能,并在设置中增加控制该功能的action开关; ====================================================== # 发行版本 Beta-V2.1 发布日期: 2022年7月28日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.TreeView初始化时会重置所选项至(0,0),确保启动程序时TreeView处于最左侧不会居中显示; 2.完成输入框16进制输入功能的添加,但是有严重的bug; ====================================================== # 发行版本 Beta-V2.0 发布日期: 2022年7月27日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.完成控制传输GetReport和SetReport功能的添加,删除原本单独处理GetReport的线程; 2.删除上个版本添加的控制传输页; 3.调整打开设备时的默认显示信息,不再显示设备路径; 4.添加自动清空消息显示框的功能,同时添加进度条显示自动清空触发进度; 5.添加枚举类型表示各个页面,增强代码可读性; ====================================================== # 发行版本 Beta-V1.9 发布日期: 2022年7月26日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.修改打开设备函数中,设备地址的由QString转换为char*类型的方法,由原本的.toStdString()修改为.toLatin1()函数。前者在Windows7中会导致无法打开设备; 2.新增控制传输页,准备添加控制传输收发功能; 3.参考hid标准通信部分的代码,新增控制传输通信功能,增加两个子线程用于控制传输的收发,不过目前尚未调通,还需要通过下位机进行调试修改; ====================================================== # 发行版本 Beta-V1.8 发布日期: 2022年6月30日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.修改并精简【关于本程序】中的相关信息; 2.在【检查更新】页中添加了我的邮箱信息,以及软件发行仓库; 3.版本信息以及更新时间的初始化移动至.cpp文件中,方便更新; 4.调整.h文件增强打包便捷性; ====================================================== # 发行版本 Beta-V1.7 发布日期: 2022年6月24日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.不能使用return代替exit(-1)来取代数据库打开失败下的函数处理,因为即便是成功跳过数据库初始化也会导致程序在没有数据库下运作,而本程序有大量的必要运作是基于数据库实现的,所以该方案被弃用; 2.在关于中添加【检查更新】Action,在【检查更新】页中放置超链接方便用户直接访问仓库地址获取新版程序; 3.修复失败次数显示Label中的字符错误; ====================================================== # 发行版本 Beta-V1.6 发布日期: 2022年6月10日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.因为发送函数已经被移动至子线程,故原本打开设备后禁用扫描的安全策略已经没有存在的意义,故现在程序中屏蔽了这一逻辑; ====================================================== # 发行版本 Beta-V1.5 发布日期: 2022年6月9日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.为了优化显示效果,删除了原有的窗口最小尺寸限定; 2.修复了设备断开连接检测失效的bug; ====================================================== # 发行版本 Beta-V1.4 发布日期: 2022年5月30日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.用于设备选择的ComboBox添加设备接口信息显示; 2.修复切换TabWidget至【设备收藏设置】页后,由于SelectItem会自动复位至(0,0)导致第一行第一列的设备会被错误的收藏或是被收藏的Bug; 3.屏蔽数据库初始化函数中设置数据库账号名密码的代码,疑似该部分代码导致的数据库打开失败! 4.添加用于操作【收藏的设备】页“增删改”的Action; ====================================================== # 发行版本 Beta-V1.3 发布日期: 2022年5月20日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.修改看门狗的超时执行函数,将原有的只尝试重启一次修改为,如果打开设备不成功则尝试10次,10次如果依然无法打开设备则放弃重启; 2.修改设备打开函数,使其可以返回设备打开情况,用于看门狗程序判断是否需要再次打开,且将原本打开设备失败后的弹窗提示修改为了消息对话框显示提示,避免重启被阻拦; 3.修改设备关闭函数,如果手动关闭设备后设备恰巧看门狗发现异常自动关闭则会出现操作空指针的行为,所以添加判定在关闭按钮未启用的情况下跳出函数; 4.原有控制消息发送函数调用间隔的SpinBox修改为用于控制调用现有发送函数调用间隔; 5.修改日志文件保存路径以及日志文件命名格式; 已知问题: 1.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!(BUG) 2.2022年5月16日 —— 在使用SpectrePC_VCN挂机过程中发现,即使将发送函数的延迟设置至90ms仍然会出现卡死现象,所以该问题将重新记入已知问题进行处理;(已解决) ①:2022年5月17日 —— 关于主线程死锁目前又有了一个新的思路,有没有可能……我是说可能是因为接收线程和主线程发送函数同时调用了同一个设备对象导致出现程序死锁,淦越想越觉得找到了问题原因……果然线程同步对于多线程来说是必要的,以后再也不敢用多线程不对线程进行同步了!!! ②:2022年5月18日 —— 按照上面的思路,我将接收线程所需要用到的设备对象直接放到了子线程中创建,即发送函数和接收函数是用的两个完全不同的设备对象,这种情况下设备也实现了全双工通信,确实很大程度的降低了程序死锁的现象,但是死锁现象依然存在!!! ③:2022年5月19日 —— 通过对HIDAPI的写入函数进行调试,终于确定程序死锁是发生在res = GetOverlappedResult(dev->device_handle, &ol, &bytes_written, TRUE/*wait*/);而通过百度发现该函数最后一个参数为TRUE时程序会一直处于阻塞等待的模式,所以没错主线程在这发生了死等现象!!! ④:2022年5月19日 —— 综上所述,解决方案有两个: 方案一: 修改源码将 GetOverlappedResult(dev->device_handle, &ol, &bytes_written, TRUE/*wait*/); 函数修改为非阻塞等待模式;(直接改为false会导致正常发送的情况下出现程序崩溃的现象,不过可以尝试使用while模拟有限制的阻塞等待) 方法二:(已经尝试通过此方案解决该问题) 将发送函数放置多线程中,同时在主线程设置监控发送线程的看门狗!当发送函数死锁时重开发送线程,替换掉原有发送线程;(优雅且完美的解决方案……就是废头发) 3.2022年5月16日 —— 导入PB-Box后打包会出现缺失数据库驱动的现象,导致程序无法运行,需要手动将数据库驱动相关的Qt动态连接库导入;(目前只能手动添加驱动解决) 4.2022年5月19日 —— 发送线程看门狗检测到发送线程死锁后也只会进行一次重启设备倘若这一次失败了则直接GG,后期应该可以多试几次;(已解决) 5.2022年5月19日 —— 原有发送函数强制延迟控件还在toolbar上,且槽函数也还没有禁用;(已解决) 6.2022年5月20日 —— 实测过程中发现三通道同时以100ms发送一次的频率,一次发送3条指令会出现非常严重的发送阻塞(即漏发送),且hid_write()在多线程中所需要的调用延迟明显比在主线程中高。不过我暂时没法排除是不是因为我电脑物理核心只有两个导致没办法很好的操作三个线程导致;(只做记录不予处理) ====================================================== # 发行版本 Beta-V1.2(发送任务迁移至子线程中) 发布日期: 2022年5月19日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.采用了优雅且费头发的方案二解决了已知问题中的问题2,不过也没有想象中那么难。但是发送函数由原来的不遗漏任何一条消息变成了尽力而为型,也就是说如果发送频率高于发送函数写入设备的频率那么则会遗漏消息; 已知问题: 1.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!//@TODO:功能性问题 2.2022年5月16日 —— 在使用SpectrePC_VCN挂机过程中发现,即使将发送函数的延迟设置至90ms仍然会出现卡死现象,所以该问题将重新记入已知问题进行处理;(待测试) ①:2022年5月17日 —— 关于主线程死锁目前又有了一个新的思路,有没有可能……我是说可能是因为接收线程和主线程发送函数同时调用了同一个设备对象导致出现程序死锁,淦越想越觉得找到了问题原因……果然线程同步对于多线程来说是必要的,以后再也不敢用多线程不对线程进行同步了!!! ②:2022年5月18日 —— 按照上面的思路,我将接收线程所需要用到的设备对象直接放到了子线程中创建,即发送函数和接收函数是用的两个完全不同的设备对象,这种情况下设备也实现了全双工通信,确实很大程度的降低了程序死锁的现象,但是死锁现象依然存在!!! ③:2022年5月19日 —— 通过对HIDAPI的写入函数进行调试,终于确定程序死锁是发生在res = GetOverlappedResult(dev->device_handle, &ol, &bytes_written, TRUE/*wait*/);而通过百度发现该函数最后一个参数为TRUE时程序会一直处于阻塞等待的模式,所以没错主线程在这发生了死等现象!!! ④:2022年5月19日 —— 综上所述,解决方案有两个: 方案一: 修改源码将 GetOverlappedResult(dev->device_handle, &ol, &bytes_written, TRUE/*wait*/); 函数修改为非阻塞等待模式;(直接改为false会导致正常发送的情况下出现程序崩溃的现象,不过可以尝试使用while模拟有限制的阻塞等待) 方法二:(已经尝试通过此方案解决该问题) 将发送函数放置多线程中,同时在主线程设置监控发送线程的看门狗!当发送函数死锁时重开发送线程,替换掉原有发送线程;(优雅且完美的解决方案……就是废头发) 3.2022年5月16日 —— 导入PB-Box后打包会出现缺失数据库驱动的现象,导致程序无法运行,需要手动将数据库驱动相关的Qt动态连接库导入;(目前只能手动添加驱动解决) 4.2022年5月19日 —— 发送线程看门狗检测到发送线程死锁后也只会进行一次重启设备倘若这一次失败了则直接GG,后期应该可以多试几次; 5.2022年5月19日 —— 原有发送函数强制延迟控件还在toolbar上,且槽函数也还没有禁用; ====================================================== # 发行版本 Beta-V1.1(发送任务放在主线程里的最后一个版本,该版本完成度极高) 发布日期: 2022年5月17日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.修复了参数保存函数中的漏洞,即无法存储配置参数的原因为参数保存文件的路径信息有误导致,修改后正常; 2.基于已知问题5中的猜想,且因为HID设备本身是支持多开对象的,所以我还是没有使用线程同步来控制hid设备对象,而是直接在子线程中通过HIDAPI的打开函数多开启了一个HID设备对象,用于专门接收消息,这样不仅省事而且通信变成了全双工了,我真是个天才! 3.修改了多线程接收类的构造函数,由原来的接收外部HID设备对象改为了接收打开设备的路径信息,然后通过收到的路径信息直接在run函数中创建子线程; 4.修改发送延迟设置范围,由原有的10ms-200ms改为0ms-200ms; 已知问题: 1.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!//@TODO:功能性问题 2.2022年5月16日 —— 在使用SpectrePC_VCN挂机过程中发现,即使将发送函数的延迟设置至90ms仍然会出现卡死现象,所以该问题将重新记入已知问题进行处理; 3.2022年5月16日 —— 导入PB-Box后打包会出现缺失数据库驱动的现象,导致程序无法运行,需要手动将数据库驱动相关的Qt动态连接库导入;(目前只能手动添加驱动解决) 4.2022年5月16日 —— 导入PB-Box后通过PB-Box的Tabwidget关闭按钮关闭模块后会出现参数不会保存的现象;(已解决) 5.2022年5月17日 —— 关于主线程死锁目前又有了一个新的思路,有没有可能……我是说可能是因为接收线程和主线程发送函数同时调用了同一个设备对象导致出现程序死锁,淦越想越觉得找到了问题原因……果然线程同步对于多线程来说是必要的,以后再也不敢用多线程不对线程进行同步了!!! ====================================================== # 发行版本 Beta-V1.0 发布日期: 2022年5月16日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.修改日志文件数据记录方式,日志文件中将直接显示\r和\n以便于后期的数据核对; 2.为了方便调节发送延迟,日志记录文件中将保存开始记录时的发送延迟设置参数; 3.优化获取时间、日期的方法以及日志文件名字格式; 4.修改参数保存文件的名字为PB_Box-HIDUSB_Module-Param.dat,避免导入PB-Box后与其他模块发送冲突; 已知问题: 1.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!//@TODO:功能性问题 2.2022年5月16日 —— 在使用SpectrePC_VCN挂机过程中发现,即使将发送函数的延迟设置至90ms仍然会出现卡死现象,所以该问题将重新记入已知问题进行处理; 3.2022年5月16日 —— 导入PB-Box后打包会出现缺失数据库驱动的现象,导致程序无法运行,需要手动将数据库驱动相关的Qt动态连接库导入; 4.2022年5月16日 —— 导入PB-Box后通过PB-Box的Tabwidget关闭按钮关闭模块后会出现参数不会保存的现象; ====================================================== # 发行版本 Beta-V0.9 发布日期: 2022年5月14日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.添加“关于软件”相关内容 ,以及Qt版本信息相关内容; 2.开发结束,程序从2022年5月7日开始开发到2022年5月14日完成开发,总共历时8天,意想不到的耗费时间,本来以为和TCP模块差不多最多3天结束……我太高估自己了,总之完结撒花感谢陪伴!!!哈哈哈! 3.该说的在关于软件中都已经说了,这就不多说了,还有一个小问题,歇会儿再改吧…… 已知问题: 1.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!//@TODO:功能性问题 ====================================================== # 发行版本 Beta-V0.8 发布日期: 2022年5月13日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.添加清空消息显示按钮; 2.添加控制显示发送信息的按钮; 3.经测试HIDAPI的消息发送函数在短时间内连续调用会出现卡死的现象!故添加在消息发送函数中添加强制延迟避免该现象的发生,且猜测该现象出现有可能和PC的性能有关,故特地添加用于调节发送延迟的SpinBox,如果进行长时间挂机测试,为了您的数据安全请尽可能将该数值改大避免悲剧。当然如果对多通道发送使用使用多线程也能进一步改善该问题,不过可能会带来数据风暴的风险,而且程序开发现在已经进入尾声了所以暂时也不想动了,所以估计暂时是不会改了。其实这个问题也没有想象中那么大的风险,毕竟不会有几台电脑比我测试所用的环境还会差的……; PS:针对这一条性能标准做个说明给大家参考,SpectrePC-VCN在低负载的情况下10ms也能发几分钟,标准负载下15ms能挂半小时往上,高负载下20ms 1小时分钟会挂……特喵的6代i3低压U,8G内存你特么还加杀毒软件疯狂吃性能!!!我特么拿这电脑来看杀毒软件杀毒的吗??? 4.添加用于控制接收消息显示更新频率调节的SpinBox,这个实际上后台仍然在接收数据,只是为了定时发送的用户不使用自动换行的情况下,方便排版设计的,和控制接收线程频率调节的SpinBox有本质区别的; 5.解决问题“2022年5月11日 —— 参数自动保存的功能未完成”,完成参数自动保存功能的添加; 6.修改了软件名和软件图标; 7.添加了软件.exe图标; 已知问题: 1.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示:(不处理) 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; 2.2022年5月11日 —— 9中提到发送函数异常才想起来,HIDAPI在一个for内同时连续发送两次会出现程序卡死的现象!!!不过在本程序中已经通过强行延迟解决了;(已解决) 3.2022年5月12日 —— winner+的C552软体按照标准发送规格发送指令后不会回复;(不处理) 4.2022年5月11日 —— 程序在挂机过程中会出现无响应的现象!!!猜测有以下几种可能:(经过大量的挂机测试基本已经确定该问题是由猜测①导致,而目前函数已经针对猜测①中描述的问题做出了修改,详情请参考修改记录)(已解决) ①:三个自动定时发送在间隔时间非常短的情况下连续调用发送函数,导致HIDAPI的发送函数异常; ②:程序的循环出现了死锁(接收函数里有个while); ③:经过长时间挂机自动发送测试,单通道发送的情况下程序没有出现任何异常; 5.2022年5月11日 —— 参数自动保存的功能未完成;//@TODO:功能性问题(已解决) 6.2022年5月12日 —— 添加软件关于信息;//@TODO:功能性问题(已解决) 7.2022年5月12日 —— 程序标题和图片也没有添加;//@TODO:功能性问题(已解决) 8.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!//@TODO:功能性问题 ====================================================== # 发行版本 Beta-V0.7 发布日期: 2022年5月12日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.解决问题“2022年5月10日 —— 各界面的按钮图标还没有更换”; 2.解决问题“2022年5月11日 —— 自保存的路径选择按钮待添加动”; 3.解决问题“2022年5月11日 —— 接收到\r自动换行的功能需要添加为可选功能”; 4.添加用于日志自动存储的专用时间戳,避免在设置中取消时间戳后日志存储也不显示时间戳; 5.解决问题“2022年5月11日 —— 完成5中的问题处理后需要添加可自定义调节消息接收频率的功能”; 6.解决问题“2022年5月11日 —— 可以添加自定义调节设备扫描频率的SpinBox”; 7.解决问题“2022年5月12日 —— 日志路径显示应该显示绝对地址,而且应当添加一键跳转至日志文件夹的功能”; 8.解决问题“2022年5月11日 —— 如果需要跨平台估计还得添加可选自动转换\n为\n\r的功能(发送消息)”; 9.尝试在调用HIDAPI的发送函数中添加延迟,避免多个发送通道几乎同时调用HIDAPI发送函数,进而引发崩溃的现象(如果明天的多通道发送测试不再出现崩溃问题,那么证明问题“2022年5月11日 —— 程序在挂机过程中会出现无响应的现象!!!”是由“2022年5月11日 —— 提到4中发送函数异常才想起来,HIDAPI在一个for内同时连续发送两次也会出现程序卡死的现象!!!”问题造成的); 10.解决问题“2022年5月12日 —— 需要添加拔出设备自动关闭设备的功能”; 已知问题: 1.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示: 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; 2.2022年5月11日 —— 9中提到发送函数异常才想起来,HIDAPI在一个for内同时连续发送两次会出现程序卡死的现象!!!; 3.2022年5月12日 —— winner+的C552软体按照标准发送规格发送指令后不会回复;(待测试) 4.2022年5月11日 —— 程序在挂机过程中会出现无响应的现象!!!猜测有以下几种可能:(待测试) ①:三个自动定时发送在间隔时间非常短的情况下连续调用发送函数,导致HIDAPI的发送函数异常; ②:程序的循环出现了死锁(接收函数里有个while); ③:经过长时间挂机自动发送测试,单通道发送的情况下程序没有出现任何异常; 5.2022年5月11日 —— 参数自动保存的功能未完成;//@TODO:功能性问题 6.2022年5月12日 —— 添加软件关于信息;//@TODO:功能性问题 7.2022年5月12日 —— 程序标题和图片也没有添加;//@TODO:功能性问题 8.2022年5月12日 —— 点击【收藏的设备】页再点击设备收藏设置会有极大概率出现自动收藏第一个设备的现象!//@TODO:功能性问题 9.2022年5月12日 —— 日志路径显示应该显示绝对地址,而且应当添加一键跳转至日志文件夹的功能;(已解决) 10.2022年5月12日 —— 需要添加拔出设备自动关闭设备的功能;(已解决) 11.2022年5月10日 —— 各界面的按钮图标还没有更换,程序标题和图片也没有添加;(已解决) 12.2022年5月11日 —— 接收到\r自动换行的功能需要添加为可选功能;(已解决) 13.2022年5月11日 —— 完成12中的问题处理后需要添加可自定义调节消息接收频率的功能;(已解决) 14.2022年5月11日 —— 自保存的路径选择按钮待添加动;(已解决) 15.2022年5月11日 —— 如果需要跨平台估计还得添加可选自动转换\n为\n\r的功能(发送消息);(已解决) 16.2022年5月11日 —— 可以添加自定义调节设备扫描频率的SpinBox;(已解决) ====================================================== # 发行版本 Beta-V0.6 发布日期: 2022年5月11日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.解决了二次扫描会导致程序崩溃的问题,导致崩溃的原因是在扫描设备时,对设备选择ComboBox的修改会触发多个对应的槽函数,进而导致槽函数操作没有设备对象的表格和ComboBox最后导致越界操作(非常典型的翻车现象!!!); 2.基本完成程序所有基础功能的开发; 3.解决问题“2022年5月11日 —— 需要添加收藏设备表格发生变动时自动触发设备刷新”,在点击收藏按钮的槽函数中将允许扫描标志位置true; 4.解决问题“2022年5月11日 —— 需要添加收藏设备表格发生变动时自动触发设备刷新”,完成这两个功能的添加; 已知问题: 1.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示: 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; 2.2022年5月11日 —— 参数自动保存的功能未完成; 3.2022年5月11日 —— 自动保存的路径选择按钮待添加; 4.2022年5月10日 —— 各界面的按钮图标还没有更换,程序标题和图片也没有添加; 5.2022年5月11日 —— 接收到\r自动换行的功能需要添加为可选功能; 6.2022年5月11日 —— 完成7中的问题处理后需要添加可自定义调节消息接收频率的功能; 7.2022年5月11日 —— 如果需要跨平台估计还得添加可选自动转换\n为\n\r的功能(发送消息); 8.2022年5月11日 —— 可以添加自定义调节设备扫描频率的SpinBox; 9.2022年5月11日 —— 程序在挂机过程中会出现无响应的现象!!!猜测有以下几种可能: ①:三个自动定时发送在间隔时间非常短的情况下连续调用发送函数,导致HIDAPI的发送函数异常; ②:程序的循环出现了死锁(接收函数里有个while); 10.2022年5月11日 —— 9中提到发送函数异常才想起来,HIDAPI在一个for内同时连续发送两次会出现程序卡死的现象!!!; ====================================================== # 发行版本 Beta-V0.5 发布日期: 2022年5月11日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.解决了二次扫描会导致程序崩溃的问题,导致崩溃的原因是在扫描设备时,对设备选择ComboBox的修改会触发多个对应的槽函数,进而导致槽函数操作没有设备对象的表格和ComboBox最后导致越界操作;(非常典型的翻车现象!!!) 2.基本完成程序所有基础功能的开发; 已知问题: 1.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示: 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; 2.2022年5月11日 —— 需要添加收藏设备表格发生变动时自动触发设备刷新”,完成这两个功能的添加; 3.2022年5月10日 —— 读写数据的自动储存自动转发信号还没有实现; 4.2022年5月10日 —— 各界面的按钮图标还没有更换,程序标题和图片也没有添加; 5.2022年5月11日 —— 接收到\r自动换行的功能需要添加为可选功能; 6.2022年5月11日 —— 完成7中的问题处理后需要添加可自定义调节消息接收频率的功能; 7.2022年5月11日 —— 如果需要跨平台估计还得添加可选自动转换\n为\n\r的功能; 8.2022年5月11日 —— 数据保存至文本的功能还未完成; 9.2022年5月11日 —— 参数自动保存的功能未完成; 10.2022年5月11日 —— 可以添加自定义调节设备扫描频率的SpinBox; 11.2022年5月11日 —— 程序在挂机过程中会出现无响应的现象!!!猜测有以下几种可能: ①:三个自动定时发送在间隔时间非常短的情况下连续调用发送函数,导致HIDAPI的发送函数异常; ②:程序的循环出现了死锁(接收函数里有个while); 12.2022年5月11日 —— 11中提到发送函数异常才想起来,HIDAPI在一个for内同时连续发送两次会出现程序卡死的现象!!!; ====================================================== # 发行版本 Beta-V0.4 发布日期: 2022年5月10日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.完成读写部分的代码设计,但还没有进行测试; 2.加入时间戳日期戳添加设置; 已知问题: 1.每秒一次扫描设备数量变更时程序会出现卡顿现象,但是扫描时有对设备修改情况进行判定,如果设备数量没有变化则不会重新遍历设备。所以目前的卡顿有点神奇; 2.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示: 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; 3.在设备收藏设置页进行的修改需要重新加载数据库和重新扫描设备后才会更新到应用中。此处非不能实现内容,而是刷新设备信息页会造成严重的性能负担(目前程序百分之99的负担估计都在扫描函数里了……)。故暂时记录一下此问题,明天再考虑是通过btn手动刷新,还是在设备收藏变更时刷新; 4.2022年5月10日 —— 二次扫描会导致程序崩溃!!!错误提示 ASSERT failure in QList::at: "index out of range", file C:\Qt\5.12.12\mingw73_64\include/QtCore/qlist.h, line 544 5.2022年5月10日 —— 读写数据的自动储存自动转发信号还没有实现; 6.2022年5月10日 —— 各界面的按钮图标还没有更换,程序标题和图片也没有添加; ====================================================== # 发行版本 Beta-V0.3 发布日期: 2022年5月9日-2022年5月10日00点37分 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.在ComboBox的变化响应函数中添加用于映射变动到TreeView的代码,使ComboBox变动的同时TreeView进行对应的修改; 2.完成设备收藏设置页,收藏设备显示页,设备选择页数据的对接。即收藏设备优先显示的核心功能已经完结!(终于完了,累死我了!!!); 已知问题: 1.QTreeView的Item无法从0,0开始添加,从0,0开始会出现闪退,代码中已用@FIXME标记,所以程序中是默认从1,0开始的; 2.每秒一次扫描设备数量变更时程序会出现卡顿现象,但是扫描时有对设备修改情况进行判定,如果设备数量没有变化则不会重新遍历设备。所以目前的卡顿有点神奇; 3.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示: 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; 4.在设备收藏设置页进行的修改需要重新加载数据库和重新扫描设备后才会更新到应用中。此处非不能实现内容,而是刷新设备信息页会造成严重的性能负担(目前程序百分之99的负担估计都在扫描函数里了……)。故暂时记录一下此问题,明天再考虑是通过btn手动刷新,还是在设备收藏变更时刷新; ====================================================== # 发行版本 Beta-V0.2 发布日期: 2022年5月8日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1.完成了HID设备分类显示部分的代码; 2.修改自动扫描周期为5s一次,虽然有添加判定条件; 3.新增设备收藏设置页面,只需要通过勾选收藏按钮即可添加设备信息至QSqlRelationalTableModel并保存,不过目前仍然处于未完待续状态; 已知问题: 1.QTreeView的Item无法从0,0开始添加,从0,0开始会出现闪退,代码中已用@FIXME标记,所以程序中是默认从1,0开始的; 2.每秒一次扫描设备数量变更时程序会出现卡顿现象,但是扫描时有对设备修改情况进行判定,如果设备数量没有变化则不会重新遍历设备。所以目前的卡顿有点神奇; 3.通过prepare语句进行数据库表格创建时,如果语句过长则会导致创建数据库表格失败的现象,包括参考代码LightMusicPlayer中在此处也对SQL语句进行了删减,目前原因未知!具体情况如下所示: 使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20))"); 可以完成创建; 而使用 tCreateQuery_QSqlQuery.prepare("create table CareDev (PID_VID_Product varchar(100), Path varchar(300), Manufacturer varchar(100), SN varchar(50), RN varchar(50), Interface varchar(20), Usage varchar(10) UsagePage varchar(50))"); 则无法创建表格; ====================================================== # 发行版本 Beta-V0.1 发布日期: 2022年5月7日 操作系统: Windows10 64位 Qt版本: Qt 5.12.12 编译器: Qt 5.12.12 MinGW 64 修改记录: 1,基于PBDebugTool-CPP进行初期架构的搭建(本来PBDebugTool就是早期为学习Qt所准备的项目,只不过现在对Qt稍微熟悉一点后回去看这个半成品程序就有点尴尬了,所以还是直接重构吧!不过作为初期用于对HID API测试程序PBDebugTool还是不错的!);