为任意协议轻松生成自定义标记和气泡文本
saleae-enrichable-analyzer的Python项目详细描述
用于丰富saleae分析器的python工具
saleae逻辑的内置分析器只为您提供了一些基本选项,用于如何显示传输的字节——ascii文本,或以几种数字格式之一显示。 如果你使用的设备不仅仅是将整数或文本数据编码成这些字节,甚至在每个字节中存储多个值,这将要求你在头脑中进行数学运算,导出数据进行后处理,或者将帧显示为二进制位,以便你可以直接查看对你重要的部分,那会怎么样? 这就是计算机擅长做的事情;我们为什么不让你的计算机做呢?
这个python库——与saleae逻辑分析器的特殊“可扩展”版本相结合——使您可以方便地丰富显示的数据,以便您可以为每个帧提供自己的文本和标记。 现在,您可以集中精力解决实际问题,而不是解释不可理解的十六进制值。
相关
- saleae-enrichable-spi-analyzer:saleae spi分析器的一个版本,支持富集。
- saleae-enrichable-i2c-analyzer:saleae i2c分析器的一个版本,它支持浓缩。
安装
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
I2cad799x
支持模拟器件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
。
有效选项(按增加详细程度的顺序)包括
CRITICAL
、ERROR
、WARNING
、INFO
和DEBUG
。
所选级别显示的输出包括
较低的详细级别。--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逻辑的日志输出和交错的脚本。
推荐PyPI第三方库
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
。 有效选项(按增加详细程度的顺序)包括CRITICAL
、ERROR
、WARNING
、INFO
和DEBUG
。 所选级别显示的输出包括 较低的详细级别。--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逻辑的日志输出和交错的脚本。