
1.13.2.35 [20251016]
1. 恢复对mingw编译环境的支持
2. 修复x86以及arm以及aarch64平台下，提供的bmapi*.so文件缺失libudev等动态库符号的运行时错误
3. 修复第二代产品调用BM_Close会卡死的兼容性问题
4. 优化python-can的平台和版本兼容性
5. 优化python-can的busoff recovery逻辑，提升多线程支持能力

1.13.1.35 [20250909]
1. 添加BM_IsotpConfigTypeDef.flowcontrol.hardwareIsotpDisabled选项，用于禁用ISOTP流控的硬件加速功能，默认是不会禁用的（如果硬件支持）
2. 修复BM_WriteIsotp函数在需要多帧流控的情况下，CF SEQ被意外重置的问题
3. 修复python-can在未插入硬件设备时，由于Virtual Channel不支持PTP而导致抛出异常中止运行的问题
4. BM_GetDataPtpTimestamp函数返回的时间戳从微秒改为纳秒，从而与BM_GetPtpTime以及BM_GetHostPtpTime保持一致，各个例程也做了同样的修改
5. 提升第三代设备的报文发送效率和收发稳定性

1.13.0.35 [20250823]
1. 全面添加PTP相关API，并在can_analyzer_qt等多个例程中演示PTP功能（第二代和第三代产品均可调用相关API）
2. 优化BM_WriteIsotp的硬件ISOTP发送效率
3. BM_WriteMultiple和BM_WriteMultipleCanMessage在调用失败时，可以通过函数参数获取到实际成功发送了多少条
4. 优化对第三代设备的底层收发参数，提高收发效率

1.12.3.34 [20250716]
1. python-can增加sync_timestamp demo，并修复时间戳偏移bug
2. 优化BM_Enumerate在枚举设备时的命名，例如将PCIE板卡的多个通道统一命名
3. 更新BM_TxTaskTypeDef的定义并保持与历史版本兼容，添加了发送周期内的frame delay，用于LIN调度表等定时设计

1.12.2.33 [20250624]
1. 优化各个例程中新增的64位UTC时间戳功能与第三代以前的旧设备的兼容性
2. 修复Virtual Channel两个通道之间无法对发等问题
3. 优化python-can的时间戳同步精度

1.12.1.33 [20250610]
1. 修复LIN相关API的若干早期问题，现在LIN API已经可以用于量产环境
2. 新特性！！支持第三代硬件设备的64位UTC时间戳（位于BM_DataTailTypeDef），并在多个例程中演示如何获取UTC时间戳，从此以后再也不用担心时间戳翻转问题
3. python-can增加recoverFromError demo
4. 独家推出python-lin软件包，可用python语言来进行LIN总线的控制和报文收发，编程接口类似python-can
5. 在Linux上添加thread priority tuning API供有需要的客户使用，常规应用下建议保持默认值

1.12.0.32 [20250407]
1. 此版本开始正式支持LIN功能，与LIN相关的API和例程初步固化
2. 对通道数超出16的GWR设备的支持：BM_DataTypeDef中，在原来的schn和dchn的基础上，引入group的概念，每个设备最多支持8个group，每个group固定为16个channel，进而每个设备最多支持128个通道
3. 添加BM_MapTimestamp新API，用于将BM_DataTypeDef中的32位硬件本地时间戳映射为64位UTC时间戳，方便长时间采集记录

1.11.0.31 [20250303]
1. 新增系列API，实现对新款LIN设备的支持
2. 新增系列API，实现对GWR等支持以太网的新款设备的支持，可以通过网络进行设备远程控制和报文收发等，可以将配置信息离线保存到TF卡中
3. BM_WriteIsotp支持超高效率（接近理论极限）的ISOTP发送操作，需要X2或者X4设备，且需要2.4.12.x或者更高版本的固件，否则无法生效（但仍可以使用默认软件实现正常发送，不存在兼容性问题）
4. 新增BM_CancelWrite API，从而修复python-can环境下使用send_periodic函数时，资源泄露的问题
5. 新增bmapi_lin_txrx例程，演示如何进行LIN报文收发，支持主机和从机
6. 新增lin_analyzer_qt例程，演示如何通过Qt图形界面进行LIN报文收发，支持主机和从机
7. C++和python-can新增bmapi_remote_connection例程，演示如何通过网络远程控制GWR等支持以太网的新款设备
8. python-can新增loopback_test例程，演示如何使用硬件进行自发自收
9. 修复BM_WriteIsotp与ISO15765在某些corner case下的CANFD短包分包方式不一致的问题
10. 修复BM_WriteIsotp在收到FC帧之后帧序号被错误重置的问题
11. 新增系列API，支持新款X2R/X4R/GWR设备的授时功能
12. 优化Windows操作系统下的BMAPI极限接收帧率
13. 在python-can中使用BM_SetTxTask硬件发送任务来实现send_periodic这个python API，保证报文的周期精度在1ms以内
14. 优化BM_OpenEx的错误码，当channelinfo为空或者全零时，返回BM_ERROR_ILLPARAMVAL
15. 新增两个虚拟通道，可以实现虚拟通道之间的互相收发，其他功能完善中
16. 修复BM_WriteIsotp函数在编码CF请求id时，在多个FC的场景下，id被错误重置的问题
17. 修复BM_ReadIsotp函数在一个会话中收到另外一个SF请求（例如3E 80）导致当前会话被重置的问题
18. can_analyzer_qt例程添加自动错误恢复机制，支持USB设备拔出检测以及busoff检测
19. BMAPI内部新增对BM_NO_ACK模式的实现，从而支持在异步模式下快速发送报文而无需处理发送完成事件，请注意在这种模式下无法得知报文是否发送成功。


1.10.2.30 [20240304]
1. 新增multichannel_logger例程，额外演示了如何同时将多个通道捕获的报文录制到一个ASC文件中（此ASC可稍后在Busmaster或者CANoe等软件中打开查看分析）
2. 修复BM_ReadMultiple和BM_ReadMultipleCanMessage在某些场景下无法通过nmessages参数获取已经接收到的报文数量的bug
3. 优化BM_ReadMultiple和BM_ReadMultipleCanMessage的返回值定义：当发生异常情况时，返回异常码；当指定时间内未接收到指定的报文数量时，返回BM_ERROR_BUSTIMEOUT；否则返回正常值BM_ERROR_OK。
4. 消除BM_OpenEx在linux的额外调试打印信息
5. 修复BM_Enumerate在linux下反复多次枚举时（例如在python-can环境下）会重复枚举已经打开的设备，导致程序概率性崩溃的问题
6. 修复multichannel_bmapi_demo.py例程收到报文后抛出BM_ERROR_QRCVEMPTY异常的问题

1.10.1.29 [20231231]
1. 新增bmapi_cyclic_tx_task例程，用于演示如何使用BUSMUST特有的TXTASK API来进行周期性报文发送（例如网络管理报文）
2. 新增multichannel_isotp_txrx_cpp例程，额外演示了如何同时通过多个通道来进行ISOTP（ISO15765）通信，例如通过UDS36服务来实现多通道并行刷写（需要使用不同的命令行参数启动两个实例来执行对发）
3. 新增对python-can-4.0.0的支持（理论上支持更高的4.x.x版本）
4. 新增python-can-xxxx/examples/ecu_uds_simulator例程，用于模拟一个ECU的UDS服务（是模拟ECU而不是模拟诊断仪）
5. 新增若干API，用于支持离线配置/记录/回放相关功能，具体请查看BMAPI.CHM（需要X2R/X4R等新款设备的硬件支持）
6. 小幅优化若干BMAPI的内部实现，提升稳定性，增加调试能力，优化效率

1.9.0.23 [20220722]
1. 新增对VB.Net语言框架的支持，包括用于库导入的头文件，以及can_analyzer_vb例程，该例程的界面功能与can_analyzer_csharp等工程一致
2. 恢复对Mingw编译器的支持，在Window系统下进行二次开发时，bin/mingw32及lib/mingw32文件夹用于mingw编译器，而bin/win32及lib/win32文件夹用于MSVC编译器
3. 优化C#.Net以及VB.Net的若干库导入声明，包括BM_OpenEx/BM_SetRxFilters/BM_SetTxTasks，使这些API支持多个rxfilter/txtask对象实例，
（请注意这几个API在升级后与1.8版本稍有不兼容，仅影响C#.Net和VB.Net，且所需改动不大，具体请参考对应的example）
4. 修复C#.Net的example点击Close无法真正关闭对应的硬件设备的问题

1.8.1.22 [20220708]
1. 新增BM_ResetDevice API，用于重启整个USB设备，相当于重新插拔USB，请在阅读API文档后按需慎用
2. 修复can_analyzer_csharp例程在未选中任何通道时点击Open按钮时报错的问题
3. 封装新的GetName()函数，修复can_analyzer_csharp例程（以及其他调用BMAPI.cs的客户C#程序）通过BM_Enumerate获取到的通道名称尾部有乱码的问题

1.8.0.21 [20220530]
1. 支持最新的八通道硬件设备X8PI
2. 增加若干新的API，支持最新的支持离线报文录制播放的设备X4R，X2R
3. 新增C++多通道并行接收例程multichannel_rx_cpp，演示如何进行高效率的报文接收
4. 新增x8pi_spi_test例程，演示如何通过树莓派的40Pin接口来控制X8PI设备
5. BMAPI在linux上部分重构，CPU占用率大幅降低，对外接口保持不变
6. 若干小问题修复

1.7.1.20 [20220216]
1. 支持Python2.7.18
2. Python-can新增send_multiple API以及对应的example，可以达到与C API一致的超高发送帧率，但是请注意这个API在python-can标准版本中并不存在
3. 更新raspbian64平台的各个二进制文件
4. 在python-can中自带了aenum package，避免新手第一次运行时出现找不到aenum的情况
5. 更新udsoncan的download_hex_file例程，现已支持加载CANoe格式的security DLL来自动进行27解锁

1.7.0.19
1. Qt/C#/pyqt示例程序从此版本起支持多通道操作了，可在通道下拉列表中勾选需要的通道，同时可以通过独立的下拉框选择发送通道
2. 新增演示基础接收操作的C/C++例程: bmapi_receive_only
3. 新增演示基础发送操作的C/C++例程: bmapi_transmit_only
4. 修复Unix系统下，同时打开多通道时，使用非首个通道发送数据时的卡死问题
5. 修复udsoncan例程的UDS36服务实现中，首个请求的序号未从01开始的错误
6. 优化python-can对多平台兼容性的自适应能力
7. 增加在udsoncan中使用CANoe DLL进行UDS 27解锁的演示操作

1.6.0.18
1. 修复1.5.4版本引入的远程帧无法实时发送的问题
2. Python-can创建bus对象时允许指定采样点位置（未指定则默认最常见的75%）
3. BM_ReadIsotp支持同时侦听指定的UDS Request ID和功能寻址地址
4. BM_ReadIsotp在上一次ISOTP会话意外中断时，尽量不影响下一次ISOTP的发起
5. 修复BM_Reset在多线程环境频繁创建销毁的情况下句柄资源没有正确释放的问题
（仍然建议您在BM_OpenEx/BM_Close/BM_Reset时确保没有其他后台线程正在读写报文）

1.6.0.17 [Alpha]
1. 新增BM_GetVersion接口，用于获取动态库（*.dll|*.so）的实际编译版本
2. 新增BM_GetLogLevel和BM_SetLogLevel接口，用于配置动态库在Linux下的命令行调试信息输出等级，默认仅打印BM_LOG_ERR及更高，可通过配置为BM_LOG_NONE禁用全部调试信息输出用于量产环境

1.5.4.16 [20210813]
1. 针对X1PRO和X1设备修正了BM_OpenEx时正在接收报文导致设备无法正确配置的bug
2. 修正Debian下BM_ClearBuffer递归锁导致程序阻塞的问题
3. udsoncan增加example.run.sh作为启动器，客户朋友如需发布自己的程序也可基于此启动器简单修改
4. 暂时移除问题较多的python-can的asyncio demo，待优化后重新发布
5. 修正BM_WriteIsotp和BM_ReadIsotp的首个CF帧的序列号不对的问题

---------------------------------------
1.5.4.16以前的历史版本，变更记录位于Busmaster上位机安装包的changelist中。
---------------------------------------