]> sigrok.org Git - libsigrokdecode.git/blobdiff - decoders/stepper_motor/pd.py
license: remove FSF postal address from boiler plate license text
[libsigrokdecode.git] / decoders / stepper_motor / pd.py
index 1527d4813b67957dc71deec851a9ee53f45a9f60..52e3e635a4bea1185e8e2282bad2d8c901a3d9e1 100644 (file)
@@ -14,8 +14,7 @@
 ## GNU General Public License for more details.
 ##
 ## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+## along with this program; if not, see <http://www.gnu.org/licenses/>.
 ##
 
 import sigrokdecode as srd
@@ -24,7 +23,7 @@ class SamplerateError(Exception):
     pass
 
 class Decoder(srd.Decoder):
-    api_version = 2
+    api_version = 3
     id = 'stepper_motor'
     name = 'Stepper motor'
     longname = 'Stepper motor position / speed'
@@ -50,9 +49,9 @@ class Decoder(srd.Decoder):
         ('position', 'Position', (1,)),
     )
 
-    def __init__(self, **kwargs):
+    def __init__(self):
         self.oldstep = None
-        self.prev_step_ss = None
+        self.ss_prev_step = None
         self.pos = 0
         self.prev_speed = None
         self.prev_pos = None
@@ -70,28 +69,26 @@ class Decoder(srd.Decoder):
             self.unit = 'mm'
 
     def step(self, ss, direction):
-        if self.prev_step_ss is not None:
-            delta = ss - self.prev_step_ss
+        if self.ss_prev_step is not None:
+            delta = ss - self.ss_prev_step
             speed = self.samplerate / delta / self.scale
             speed_txt = self.format % speed
             pos_txt = self.format % (self.pos / self.scale)
-            self.put(self.prev_step_ss, ss, self.out_ann,
+            self.put(self.ss_prev_step, ss, self.out_ann,
                 [0, [speed_txt + ' ' + self.unit + '/s', speed_txt]])
-            self.put(self.prev_step_ss, ss, self.out_ann,
+            self.put(self.ss_prev_step, ss, self.out_ann,
                 [1, [pos_txt + ' ' + self.unit, pos_txt]])
 
         self.pos += (1 if direction else -1)
-        self.prev_step_ss = ss
+        self.ss_prev_step = ss
 
     def metadata(self, key, value):
         if key == srd.SRD_CONF_SAMPLERATE:
             self.samplerate = value
 
-    def decode(self, ss, es, data):
+    def decode(self):
         if not self.samplerate:
             raise SamplerateError('Cannot decode without samplerate.')
-
-        for (self.samplenum, (step, direction)) in data:
-            if step == 1 and self.oldstep == 0:
-                self.step(self.samplenum, direction)
-            self.oldstep = step
+        while True:
+            step, direction = self.wait({0: 'r'})
+            self.step(self.samplenum, direction)