add support for soft calibration
authorÉric Piel <piel@delmic.com>
Tue, 16 Oct 2012 10:44:30 +0000 (12:44 +0200)
committerW. Trevor King <wking@tremily.us>
Tue, 16 Oct 2012 18:07:32 +0000 (14:07 -0400)
pycomedi/channel.pyx
pycomedi/device.pyx

index 8947415f493792860bb4cbe9cf0c86c7c5278663..c7d6cc178cdceb1a16819b8cd6dcc3971c395393 100644 (file)
@@ -388,15 +388,14 @@ cdef class AnalogChannel (Channel):
         `direction` should be a value from `constant.CONVERSION_DIRECTION`.
         """
         cdef _comedilib_h.comedi_polynomial_t poly
-        #rc = _comedilib_h.comedi_get_softcal_converter(
-        #    self.subdevice.device.device,
-        #    self.subdevice.index, self.index,
-        #    _constant.bitwise_value(self.range),
-        #    _constant.bitwise_value(direction),
-        #    calibration, &poly)
-        #if rc < 0:
-        #    _error.raise_error(function_name='comedi_get_softcal_converter',
-        #                       ret=rc)
+        rc = _comedilib_h.comedi_get_softcal_converter(
+            self.subdevice.index, self.index,
+            _constant.bitwise_value(self.range),
+            _constant.bitwise_value(direction),
+            <_comedilib_h.comedi_calibration_t*> calibration, &poly)
+        if rc < 0:
+            _error.raise_error(function_name='comedi_get_softcal_converter',
+                               ret=rc)
         return poly
 
     cdef _comedilib_h.comedi_polynomial_t get_hardcal_converter(
@@ -421,9 +420,14 @@ cdef class AnalogChannel (Channel):
         cdef _CalibratedConverter ret
         flags = self.subdevice.get_flags()
         if flags.soft_calibrated:
-            #if calibration is None:
-            #    calibration = self.subdevice.device.parse_calibration()
-            raise NotImplementedError()
+            if calibration is None:
+                calibration = self.subdevice.device.parse_calibration()
+            to_physical = self.get_softcal_converter(
+                   _constant.CONVERSION_DIRECTION.to_physical,
+                calibration)
+            from_physical = self.get_softcal_converter(
+                   _constant.CONVERSION_DIRECTION.from_physical,
+                calibration)
         else:
             to_physical = self.get_hardcal_converter(
                 _constant.CONVERSION_DIRECTION.to_physical)
index 62fa73cc0c93d9a58cc30b1a77352a8fa1d7eeea..3c6b6797bf43afe19733ba92823402b033e7c42d 100644 (file)
@@ -272,6 +272,20 @@ cdef class Device (object):
             _error.raise_error(
                 function_name='comedi_get_default_calibration_path')
         return ret
+     
+    def parse_calibration(self, path=None):
+        """The soft calibration from a file for this device.
+        
+        If path is None, the default calibration file is used.
+        """
+        if path is None:
+            path = self.get_default_calibration_path()
+        
+        ret = _comedilib_h.comedi_parse_calibration_file(path)
+        if ret == NULL:
+            _error.raise_error(
+                function_name='comedi_parse_calibration_file')
+        return ret
 
     # extensions to make a more idomatic Python interface