diff --git a/sl2-100/pd.py b/sl2-100/pd.py index 93576d2..570b612 100644 --- a/sl2-100/pd.py +++ b/sl2-100/pd.py @@ -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: