为任意协议轻松生成自定义标记和气泡文本

saleae-enrichable-analyzer的Python项目详细描述


用于丰富saleae分析器的python工具

saleae逻辑的内置分析器只为您提供了一些基本选项,用于如何显示传输的字节——ascii文本,或以几种数字格式之一显示。 如果你使用的设备不仅仅是将整数或文本数据编码成这些字节,甚至在每个字节中存储多个值,这将要求你在头脑中进行数学运算,导出数据进行后处理,或者将帧显示为二进制位,以便你可以直接查看对你重要的部分,那会怎么样? 这就是计算机擅长做的事情;我们为什么不让你的计算机做呢?

这个python库——与saleae逻辑分析器的特殊“可扩展”版本相结合——使您可以方便地丰富显示的数据,以便您可以为每个帧提供自己的文本和标记。 现在,您可以集中精力解决实际问题,而不是解释不可理解的十六进制值。

相关

安装

note:这需要python 3.5!

如果您想使用最新版本,请直接从pypi安装:

pip install saleae_enrichable_analyzer

要使用开发版本,只需克隆此存储库并运行:

pip install .

捆绑的扩展脚本

这个库与一些现成的扩展脚本捆绑在一起; 您可以按照下面的说明使用其中任何一个。 注意,您可能需要用相关python二进制文件的路径替换示例中的python-- 如果将此库安装到虚拟环境中,则该路径当然应指向该环境的python

spi

sc16is75xx

支持NXP SC16IS75XX系列SPI UART芯片。

已知支持:

  • SC16IS740
  • SC16IS750
  • SC16IS752
  • SC16IS760
  • SC16IS762

可使用以下扩展脚本:

python -m saleae_enrichable_analyzer.scripts.spi.SC16IS75xx

I2c

ad799x

支持模拟器件AD799X系列I2C模数转换器芯片。

已知支持:

  • AD7991(12位)
  • AD7995(10位)
  • AD7999(8位)

可通过使用以下扩展脚本使用;请确保替换 BITS使用adc提供的位数,以及ADDRESS 设备的Base-2 I2C地址:

python -m saleae_enrichable_analyzer.scripts.i2c.AD799x ADDRESS BITS

此外,还可以提供--reference-voltage=VOLTAGE参数 显示计算出的电压和原始ADC值。

ina219

支持德州仪器INA219电流监测芯片。

可通过使用以下扩展脚本使用;请确保替换 ADDRESS使用设备的base-2 i2c地址:

python -m saleae_enrichable_analyzer.scripts.i2c.INA219 ADDRESS

编写自己的扩展脚本

使用它就像在某个地方创建自己的模块一样简单,在该模块的子类saleae_enrichable_analyzer.EnrichableAnalyzer中使用要使用的特性的方法; 下面是一个基本示例:

importsysfromtypingimportList,Optionalfromsaleae_enrichable_analyzerimport(Channel,EnrichableAnalyzer,Marker,MarkerType)classMySimpleAnalyzer(EnrichableAnalyzer):defhandle_bubble(self,packet_id:Optional[int],frame_index:int,start_sample:int,end_sample:int,frame_type:int,flags:int,direction:Channel,value:int)->List[str]:return["This message will be displayed above every frame in the blue bubble"]defhandle_marker(self,packet_id:Optional[int],frame_index:int,sample_count:int,start_sample:int,end_sample:int,frame_type:int,flags:int,mosi_value:int,miso_value:int)->List[Marker]:markers=[]if(miso_value==0xff){# This will show a "Stop" marker on the zeroth sample# of the frame on the MISO channel when its value is 0xff.markers.append(Marker(0,Channel.MISO,MarkerType.Stop))}returnmarkersif__name__=='__main__':MySimpleAnalyzer.run(sys.argv[1:])

下面描述的方法可以实现与saleae逻辑的交互。

如果你想看看简单的具体例子, 您可以参考以下内容:

  • simple_SC16IS7xx.py:实现一个简单的enricher,用于显示sc16is7xx系列spi uart的寄存器、通道和数据。
  • simple_ad7995.py:实现一个稍微更完整的enricher,用于显示AD7995 I2C ADC的详细配置和读取数据。

还要注意,scripts目录也包含示例, 但它们在功能上可能更先进一些。

handle_bubble

defhandle_bubble(self,packet_id:Optional[int],frame_index:int,start_sample:int,end_sample:int,frame_type:int,flags:int,direction:Channel,value:int)->List[str]:return[]

设置此帧的气泡文本(以蓝色A框显示的文本)。 默认情况下,不显示气泡。建议您返回多个 不同长度的字符串。

handle_marker

defhandle_marker(self,packet_id:Optional[int],frame_index:int,sample_count:int,start_sample:int,end_sample:int,frame_type:int,flags:int,value1:int,# SPI: MOSI; I2C: SDAvalue2:int,# SPI: MISO; I2C: Undefined)->List[Marker]:return[]

将标记返回到在给定的采样点显示。 默认情况下,不显示标记。

这个方法可以实现的原因不是想要显示 马克笔也是-- 如果您的脚本需要按照接收数据帧的顺序接收所有数据帧,则这非常有用。 在这种情况下,可以在方法主体中记录数据包, 并返回一个空列表。 请参阅base I2CAnalyzer class以获取正在使用的策略的具体示例。

handle_tabular

defhandle_tabular(self,packet_id:Optional[int],frame_index:int,start_sample:int,end_sample:int,frame_type:int,flags:int,value1:int,# SPI: MOSI; I2C: SDAvalue2:int,# SPI: MISO; I2C: Undefined)->List[str]:return[]

要在表格“解码协议”部分显示的数据。 由于saleae逻辑中的限制:如果实现了此方法,则必须为每个请求在结果数组中返回完全相同数量的字符串; 如果尝试执行其他操作,您可能会看到以下错误(sic)“错误:分析器结果中的字符串数因不同的显示基而不同”,后面跟着一个sigsegv。

调试扩展脚本

如果saleae逻辑在使用扩展脚本时崩溃, 这几乎可以肯定是你剧本的错,而不是赛莱的逻辑。 幸运的是,通过使用内置的日志功能,调试非常容易。

默认情况下,日志记录被写入stderr, 但考虑到我们大多数人不在终端中运行saleae逻辑,这种输出不会立即可见。 要在不运行终端的情况下查看日志输出, 您可以使用以下两个标志:

  • --loglevel=LEVEL:设置报告输出的级别。 调试时,可能需要使用--loglevel=DEBUG。 有效选项(按增加详细程度的顺序)包括 CRITICALERRORWARNINGINFODEBUG。 所选级别显示的输出包括 较低的详细级别。
  • --logpath=PATH:设置要将日志输出写入的文件路径。

注意,当使用捆绑的扩展脚本时,这些标志必须跟随模块名称。 例如,要调试捆绑的AD799x扩展脚本(它本身需要两个位置参数), 您可以在Saleae逻辑中为“扩展脚本”设置以下内容:

python -m saleae_enrichable_analyzer.scripts.i2c.AD799x --loglevel=DEBUG --logpath=/tmp/logic_debug.log 12 0101000

如果你在调试你写的脚本, 只需在脚本路径后提供标志:

python /path/to/your/enrichment/script.py --loglevel=DEBUG --logpath=/tmp/logic_debug.log

无论是否启用了对文件的日志记录,日志记录消息都将继续写入stderr, 如果您发现由脚本编写的日志输出没有显示, 在终端中运行saleae逻辑可能有助于查看saleae逻辑的日志输出和交错的脚本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Android上使用BroadcastReceiver从Java报警执行本机代码   解析模板[]时发生java错误,模板可能不存在,或者任何已配置的模板解析程序都无法访问该模板   从命令行创建Java包的正确方法是什么?(与Maven的麻烦)   带有日期参数的java时区和MessageFormat   Java返回一个新数组,其中包含数组参数元素的平方   带有可选右括号的java年正则表达式   writeCharacteristic Android上的java空指针异常   在ScheduledThreadPoolExecutor中重写泛型方法的java问题   java如何在从两个不同的组合框中选择两个元素时生成通知?   java试图在正则表达式中捕获多个组,同时跳过其他组   Jasper报告中的java动态图像大小   JavaFX(带FXML)MVC:模型使用控制器   我们可以用java回滚文件mkdir吗?   java Android,无效双:“空白”字段使程序崩溃   java JSoup解析结构不良的HTML   java Jackson:(反)序列化程序和StdConverter之间有什么区别?   Crudepository(spring boot)中自定义方法的java问题