更新sl2-100的实现,修正文本导出,将x,y坐标单独显示在不同的行.

This commit is contained in:
2026-07-08 15:45:47 +08:00
parent deeacd2270
commit 2df599dc14
+16 -10
View File
@@ -45,7 +45,7 @@ class Decoder(srd.Decoder):
options = (
# 一个数据周期10us
{'id': 'datatime', 'desc': '数据传输时间(ns)', 'default': 10000},
{'id': 'filename', 'desc': '解码输出文件名','default':'d:/abc.txt'},
{'id': 'filename', 'desc': '解码输出文件名','default':'d:/sl2-100.csv'},
)
# 解析结果项定义
# annotations里的每一项可以有2到3个属性,当有3个属性时,第一个表示类型
@@ -55,9 +55,11 @@ class Decoder(srd.Decoder):
('bit', '数据位'),
('header', 'Header'),
('xpos', 'x坐标'),
('xpos_value', 'x坐标值'),
('xv', 'x坐标效验'),
('header2', 'header2'),
('ypos', 'y坐标'),
('ypos_value', 'y坐标值'),
('yv', 'y坐标效验'),
)
# 解析结果行定义
@@ -66,7 +68,9 @@ class Decoder(srd.Decoder):
('level', '电平', (0,)),
('bits', '数据位', (1,)),
# (2,3,4,5,6,7)表示可输出第2个到第7个定义的annotations类型
('fields', '字段', (2, 3, 4, 5, 6, 7)),
('fields', '字段', (2, 3, 5, 6, 7, 9)),
('xpos', 'x坐标值', (4,)),
('ypos', 'y坐标值', (8,)),
)
# 构造函数,自动被调用
def __init__(self):
@@ -98,7 +102,7 @@ class Decoder(srd.Decoder):
self.data = 0 #存放坐标值数据
self.highpin = 0 #当前采样宽度(78.125ns)内高电平数量
self.lowpin = 0 #当前采样宽度(78.125ns)内低电平数量
self.filename = "d:/abc.txt"
self.filename = "d:/sl2-100.csv"
self.file = None
def metadata(self, key, value):
@@ -128,21 +132,22 @@ class Decoder(srd.Decoder):
self.xpos_first = es
self.xpos_cnt = 0 #当前坐标 位数归零,准备累积
self.data = 0 #当前坐标值归零,准备开始累积
self.file.write('HEADER:' + self.header_str + '\n')
elif self.state == 'xpos':
self.data = (bit << self.xpos_cnt) | self.data
self.xpos_cnt = self.xpos_cnt+1
if self.xpos_cnt == 20:
self.put(self.xpos_first, es, self.out_ann,[3, ['X坐标:' + ': 0x%x' % self.data + ' = %d' % self.data]])
self.put(self.xpos_first, es, self.out_ann,[4, ['%d' % self.data]])
self.state = 'xpos_v'
self.xv_first = es
self.xv_cnt = 0
self.xv_str = ""
self.file.write('%d' % self.data + ',')
elif self.state == 'xpos_v':
self.xv_str += str(bit)
self.xv_cnt = self.xv_cnt+1
if self.xv_cnt == 4:
self.put(self.xv_first, es, self.out_ann,[4, ['X校验:'+ self.xv_str]])
self.put(self.xv_first, es, self.out_ann,[5, ['X校验:'+ self.xv_str]])
self.state = 'HEADER2'
self.header2_first = es
self.head2_cnt = 0
@@ -151,26 +156,27 @@ class Decoder(srd.Decoder):
self.header2_str += str(bit)
self.head2_cnt = self.head2_cnt+1
if self.head2_cnt == 8:
self.put(self.header2_first, es, self.out_ann,[5, ['HEADER_y:' + self.header2_str]])
self.put(self.header2_first, es, self.out_ann,[6, ['HEADER_y:' + self.header2_str]])
self.state = 'ypos'
self.ypos_first = es
self.ypos_cnt = 0 #当前坐标 位数归零,准备累积
self.data = 0 #当前坐标值归零,准备开始累积
self.file.write('HEADER2:' + self.header2_str + '\n')
elif self.state == 'ypos':
self.data = (bit << self.ypos_cnt) | self.data
self.ypos_cnt = self.ypos_cnt+1
if self.ypos_cnt == 20:
self.put(self.ypos_first, es, self.out_ann,[6, ['y坐标:' + ': 0x%x' % self.data + ' = %d' % self.data]])
self.put(self.ypos_first, es, self.out_ann,[7, ['y坐标:' + ': 0x%x' % self.data + ' = %d' % self.data]])
self.put(self.ypos_first, es, self.out_ann,[8, [ '%d' % self.data]])
self.state = 'ypos_v'
self.yv_first = es
self.yv_cnt = 0
self.yv_str = ""
self.file.write('%d' % self.data + '\n')
elif self.state == 'ypos_v':
self.yv_str += str(bit)
self.yv_cnt = self.yv_cnt+1
if self.yv_cnt == 4:
self.put(self.yv_first, es, self.out_ann,[7, ['y校验:' + self.yv_str]])
self.put(self.yv_first, es, self.out_ann,[9, ['y校验:' + self.yv_str]])
self.state = 'HEADER'
self.header_first = es
self.head_cnt = 0
@@ -208,7 +214,7 @@ class Decoder(srd.Decoder):
raise SamplerateError('Cannot decode without samplerate.')
if self.filename != "":
self.file = open(self.filename,'a')
self.file.write('开始解析:')
self.file.write('x坐标,y坐标\n')
# Initialize internal state from the very first sample.
(pin,) = self.wait()
if self.oldsamplenum == 0: