import math
import sigrokdecode as srd
from collections import deque
-
-def bitpack(bits):
- res = 0
- for i, b in enumerate(bits):
- res |= b << i
- return res
-
-def bitunpack(num, minbits=0):
- res = []
- while num or minbits > 0:
- res.append(num & 1)
- num >>= 1
- minbits -= 1
- return tuple(res)
+from common.srdhelper import bitpack, bitunpack
def gray_encode(plain):
return plain & (plain >> 1)
id = 'graycode'
name = 'Gray code'
longname = 'Gray code and rotary encoder'
- desc = 'Accumulate rotary encoder increments, provide timing statistics.'
+ desc = 'Accumulate rotary encoder increments, provide statistics.'
license = 'gplv2+'
inputs = ['logic']
- outputs = ['graycode']
+ outputs = []
+ tags = ['Encoding']
optional_channels = tuple(
{'id': 'd{}'.format(i), 'name': 'D{}'.format(i), 'desc': 'Data line {}'.format(i)}
for i in range(MAX_CHANNELS)
('phase', 'Phase'),
('increment', 'Increment'),
('count', 'Count'),
- ('turns', 'Turns'),
+ ('turn', 'Turn'),
('interval', 'Interval'),
('average', 'Average'),
('rpm', 'Rate'),
)
- annotation_rows = tuple((u, v, (i,)) for i, (u, v) in enumerate(annotations))
+ annotation_rows = tuple((u + 's', v + 's', (i,)) for i, (u, v) in enumerate(annotations))
def __init__(self):
+ self.reset()
+
+ def reset(self):
self.num_channels = 0
self.samplerate = None
self.last_n = deque()
if self.options['edges']:
self.turns.set(self.samplenum, self.count.get() // self.options['edges'])
- if self.samplerate is not None:
+ if self.samplerate:
period = (curtime - prevtime) / self.samplerate
freq = abs(phasedelta_raw) / period