更新sl2-100的实现,修正文本导出,将x,y坐标单独显示在不同的行.
This commit is contained in:
+16
-10
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user