pycomedi.git
12 years agoRan update-copyright.py.
W. Trevor King [Tue, 17 Apr 2012 16:37:15 +0000 (12:37 -0400)]
Ran update-copyright.py.

12 years agoAdd doc/demo/aout.py example of repeated analog output.
W. Trevor King [Tue, 17 Apr 2012 16:30:27 +0000 (12:30 -0400)]
Add doc/demo/aout.py example of repeated analog output.

This script contains the condensed wisdom of mailing list
discussions between Richard Höchenberger and myself.

Cc: Richard Höchenberger
12 years agoWrap long lines in doc/demo/info.py.
W. Trevor King [Tue, 17 Apr 2012 16:29:54 +0000 (12:29 -0400)]
Wrap long lines in doc/demo/info.py.

12 years ago'channels' default should be a list in pycomedi_demo_args.py.
W. Trevor King [Tue, 17 Apr 2012 16:29:34 +0000 (12:29 -0400)]
'channels' default should be a list in pycomedi_demo_args.py.

12 years agoWrap long help lines in pycomedi_demo_args.py.
W. Trevor King [Tue, 17 Apr 2012 16:29:00 +0000 (12:29 -0400)]
Wrap long help lines in pycomedi_demo_args.py.

12 years agoAdd `block_while_running` option to `_ReadWriteThread`.
W. Trevor King [Tue, 17 Apr 2012 16:22:22 +0000 (12:22 -0400)]
Add `block_while_running` option to `_ReadWriteThread`.

This way users don't need to understand the following distinctions:

* written to driver vs. output from card.
* `SDF_BUSY` vs. `SDF_RUNNING`.

The `subdevice.cancel` call in `_ReadWriteThread.block` is because the
`RUNNING` flag is cleared after output completes, but the `BUSY` flag
is not.  This may be a bug in Comedi.  I've asked on the mailing list,
but haven't heard back yet.

12 years agoAdd positional arguments to format strings for Python 2.6 compatibility.
W. Trevor King [Thu, 12 Apr 2012 14:43:19 +0000 (10:43 -0400)]
Add positional arguments to format strings for Python 2.6 compatibility.

For 2.7 and later, the positional arguments can be omitted, but
Richard Höchenberger (and others?) wants to run pycomedi on 2.6.

12 years agoAdd trailing slash to Gentoo overlay link in README.
W. Trevor King [Wed, 21 Mar 2012 16:48:59 +0000 (12:48 -0400)]
Add trailing slash to Gentoo overlay link in README.

12 years agoRework demos so that test.sh covers their critical parts.
W. Trevor King [Tue, 20 Mar 2012 11:51:26 +0000 (07:51 -0400)]
Rework demos so that test.sh covers their critical parts.

12 years agoAdd --mmap argument to cmd.py demo and fix some pycomedi_demo_args.py bugs.
W. Trevor King [Tue, 20 Mar 2012 01:16:06 +0000 (21:16 -0400)]
Add --mmap argument to cmd.py demo and fix some pycomedi_demo_args.py bugs.

12 years agoFix subdevice._device -> subdevice.device in _MMapReadWriteThread._fileno().
W. Trevor King [Tue, 20 Mar 2012 01:07:00 +0000 (21:07 -0400)]
Fix subdevice._device -> subdevice.device in _MMapReadWriteThread._fileno().

When I was writing the Cython implementation, I initially tried to
keep more things private, before realizing that that wasn't a good
idea.  This snippit missed the initial transition.

12 years agoConsolidate demo argument parsing in pycomedi_demo_args.py to reduce duplication.
W. Trevor King [Mon, 19 Mar 2012 18:51:40 +0000 (14:51 -0400)]
Consolidate demo argument parsing in pycomedi_demo_args.py to reduce duplication.

12 years agoAdd cmd.py demo.
W. Trevor King [Mon, 19 Mar 2012 17:47:29 +0000 (13:47 -0400)]
Add cmd.py demo.

12 years agoAllow AnalogChannel.__init__ to take integers for `range`.
W. Trevor King [Mon, 19 Mar 2012 17:34:25 +0000 (13:34 -0400)]
Allow AnalogChannel.__init__ to take integers for `range`.

If you know the index of your desired range, you can now use that
index directly and skip the usual call to `find_range`.

12 years agoActually listen to the --subdevice option in the insn.py demo.
W. Trevor King [Mon, 19 Mar 2012 16:41:29 +0000 (12:41 -0400)]
Actually listen to the --subdevice option in the insn.py demo.

12 years agoAdd insn.py demo.
W. Trevor King [Mon, 19 Mar 2012 16:21:53 +0000 (12:21 -0400)]
Add insn.py demo.

12 years agoDon't set log levels for pycomedi.LOG handlers.
W. Trevor King [Mon, 19 Mar 2012 16:17:40 +0000 (12:17 -0400)]
Don't set log levels for pycomedi.LOG handlers.

That's too much granularity for the default situation, where there is
only one handler and we can use the logger's level to control
verbosity.

12 years agoFix error condition `ret < 0` -> `ret < len(insnlist)` for Device.do_insnlist.
W. Trevor King [Mon, 19 Mar 2012 16:10:18 +0000 (12:10 -0400)]
Fix error condition `ret < 0` -> `ret < len(insnlist)` for Device.do_insnlist.

The previous implemenation would apparently succeed if there was an
error executing an instruction.  It would only raise an exception if a
failure occured before the first instruction could be executed.

12 years agoAdd 'external' unit for RF_EXTERNAL (see previous commit for reasoning).
W. Trevor King [Mon, 19 Mar 2012 15:43:34 +0000 (11:43 -0400)]
Add 'external' unit for RF_EXTERNAL (see previous commit for reasoning).

12 years agoRevert "Mask range.unit with 0xff when determining the unit."
W. Trevor King [Mon, 19 Mar 2012 15:26:43 +0000 (11:26 -0400)]
Revert "Mask range.unit with 0xff when determining the unit."

This reverts commit d721a0c05450c793a5e0e562d286a689565cf81b.

From the National Instruments E Series User Manual [1], page 3-2:

  Reference Selection

  (NI 6020E, NI PXI-6040E, NI 6052E, NI 6062E, NI 6070E/6071E, and
  PCI-MIO-16E-4 Devices Only) You can connect each DAC to the device
  internal reference of 10 V or to the external reference signal
  connected to the external reference (AO EXT REF) pin on the I/O
  connector. This signal applied to EXT REF should be within
  ±11 V. You do not need to configure both channels for the same mode.

So RF_EXTERNAL is a valid unit (i.e. in units of the AO EXT REF
signal).  The next commit will add this unit.

[1]: http://digital.ni.com/manuals.nsf/websearch/06115536722DAA558625728E007E6BA4
  Edition Date: February 2007
  Part Number:    370503K-01
  p

12 years agoAdd info.py demo.
W. Trevor King [Mon, 19 Mar 2012 15:10:30 +0000 (11:10 -0400)]
Add info.py demo.

12 years agoMask range.unit with 0xff when determining the unit.
W. Trevor King [Mon, 19 Mar 2012 14:48:36 +0000 (10:48 -0400)]
Mask range.unit with 0xff when determining the unit.

This avoids crashes like:

  Traceback (most recent call last):
    ...
    File "range.pyx", line 62, in pycomedi.range.Range.__str__
    File "range.pyx", line 70, in pycomedi.range.Range._unit_get
    File "constant.pyx", line 269, in pycomedi.constant._Enum.index_by_value
  KeyError: 256L

when RF_EXTERNAL is set.

12 years agoAdd attributes to PyComediError to make intelligent error handling easier.
W. Trevor King [Mon, 19 Mar 2012 13:31:28 +0000 (09:31 -0400)]
Add attributes to PyComediError to make intelligent error handling easier.

12 years agoAdd .ranges() method to Channel class.
W. Trevor King [Mon, 19 Mar 2012 13:09:30 +0000 (09:09 -0400)]
Add .ranges() method to Channel class.

12 years agoAdd .channels() method to Subdevice class.
W. Trevor King [Mon, 19 Mar 2012 13:04:42 +0000 (09:04 -0400)]
Add .channels() method to Subdevice class.

12 years agoAllow keywords for Channel.get_range().
W. Trevor King [Thu, 15 Mar 2012 13:54:41 +0000 (09:54 -0400)]
Allow keywords for Channel.get_range().

12 years agoAdd docstring to Channel.get_range.
W. Trevor King [Thu, 15 Mar 2012 13:45:57 +0000 (09:45 -0400)]
Add docstring to Channel.get_range.

12 years agoBump to verssion 0.4. 0.4
W. Trevor King [Thu, 15 Mar 2012 03:06:55 +0000 (23:06 -0400)]
Bump to verssion 0.4.

12 years agoAdd __reduce__() method to BitwiseOperator and _NamedInt.
W. Trevor King [Thu, 15 Mar 2012 02:55:45 +0000 (22:55 -0400)]
Add __reduce__() method to BitwiseOperator and _NamedInt.

This makes it possible to successfully pickle and deepcopy instances
of these types [1,2].  This gets the

  TRIG_SRC.now == copy.deepcopy(TRIG_SRC.now)

doctest working, which I needed to successfully dump h5config
ChoiceConfig objects that use _Enum choices [3].

For example, the newly fixed pypiezo.config.ChannelConfig [4] uses the
AREF enum values as possible choices for it's `analog-reference`
setting.  h5config makes deepcopies of mutable objects to avoid
confusion if the mutable is changed externally.  It then compares the
deepcopies with uncopied values.  Now that deepcopying works for
_NamedInts, the h5config behavior will work.

[1] http://docs.python.org/library/pickle.html#pickling-and-unpickling-extension-types
[2] http://docs.python.org/library/copy.html
[3] http://pypi.python.org/pypi/h5config/
[4] http://pypi.python.org/pypi/pypiezo/

12 years agoUse utility.lsample instead of numpy.uint in calibration._convert().
W. Trevor King [Thu, 15 Mar 2012 02:36:21 +0000 (22:36 -0400)]
Use utility.lsample instead of numpy.uint in calibration._convert().

Don't repeat yourself!  Also, numpy.uint is a uint64 on my amd64, and
that does not match with lsampl_t.

12 years agoYes, 2 < 3. (fix constant comparison doctest).
W. Trevor King [Thu, 15 Mar 2012 02:19:22 +0000 (22:19 -0400)]
Yes, 2 < 3.  (fix constant comparison doctest).

12 years agoFix rich comparison doctest prompts and add comparisons to None.
W. Trevor King [Thu, 15 Mar 2012 01:46:00 +0000 (21:46 -0400)]
Fix rich comparison doctest prompts and add comparisons to None.

The None comparison logic avoids:

  TypeError: long() argument must be a string or a number, not 'NoneType'

12 years agoOops, Cython uses __richcmp__() instead of __eq__(), etc.
W. Trevor King [Thu, 15 Mar 2012 01:37:59 +0000 (21:37 -0400)]
Oops, Cython uses __richcmp__() instead of __eq__(), etc.

http://docs.cython.org/src/userguide/special_methods.html#rich-comparisons

12 years agoAdd rich comparisons to BitwiseOperator (compare by .value).
W. Trevor King [Thu, 15 Mar 2012 01:33:06 +0000 (21:33 -0400)]
Add rich comparisons to BitwiseOperator (compare by .value).

12 years agoFix get_version_code parsing and split it off into a new Device.get_version method.
W. Trevor King [Wed, 14 Mar 2012 22:21:28 +0000 (18:21 -0400)]
Fix get_version_code parsing and split it off into a new Device.get_version method.

12 years agoFix wrtier -> writer typo in `pycomedi.utility._MMapReadWriteThread` docstring.
W. Trevor King [Tue, 13 Mar 2012 13:01:26 +0000 (09:01 -0400)]
Fix wrtier -> writer typo in `pycomedi.utility._MMapReadWriteThread` docstring.

12 years agoMove function_name extraction up in pycomedi/_error.pyx's comedi_get.
W. Trevor King [Thu, 8 Mar 2012 19:51:24 +0000 (14:51 -0500)]
Move function_name extraction up in pycomedi/_error.pyx's comedi_get.

This avoids:
  pycomedi/_error.pyx:43:29:
    local variable 'function_name' referenced before assignment

12 years agoUpdate URLs from einstein to tremily.
W. Trevor King [Wed, 22 Feb 2012 18:33:22 +0000 (13:33 -0500)]
Update URLs from einstein to tremily.

12 years agoRan update-copyright.py.
W. Trevor King [Thu, 16 Feb 2012 23:01:12 +0000 (18:01 -0500)]
Ran update-copyright.py.

12 years agoTransition to my external update-copyright package.
W. Trevor King [Thu, 16 Feb 2012 22:58:57 +0000 (17:58 -0500)]
Transition to my external update-copyright package.

http://pypi.python.org/pypi/update-copyright/

12 years agoChange to GPLv2+ licensing.
W. Trevor King [Wed, 25 Jan 2012 15:08:24 +0000 (10:08 -0500)]
Change to GPLv2+ licensing.

Previously COPYING and the README had claimed GPLv3+, but the headers
generated by update_copyright had used GPLv2+.  GPLv2+ is more
inclusive and closer to the standard Comedi library's LGPLv2.1+.

12 years agoAdd AUTHORS (generated by update_copyright.py) to version control.
W. Trevor King [Tue, 24 Jan 2012 18:57:57 +0000 (13:57 -0500)]
Add AUTHORS (generated by update_copyright.py) to version control.

12 years agoRemove separate copyright dates from README.
W. Trevor King [Tue, 24 Jan 2012 18:56:24 +0000 (13:56 -0500)]
Remove separate copyright dates from README.

They wouldn't get updated by update_copyright.py, so they would
inevitably fall out of date.

12 years agoRun update_copyright.py.
W. Trevor King [Tue, 24 Jan 2012 18:55:37 +0000 (13:55 -0500)]
Run update_copyright.py.

12 years agoAdd update_copyright.py.
W. Trevor King [Tue, 24 Jan 2012 18:55:09 +0000 (13:55 -0500)]
Add update_copyright.py.

13 years agoMostly-complete Cython implementation.
W. Trevor King [Tue, 19 Apr 2011 13:17:37 +0000 (09:17 -0400)]
Mostly-complete Cython implementation.

I need some work on Cython upstream to entirely remove the requirement
on the SWIG-wrapped comedi module.

13 years agoConvert to more generic Pythonic wrapper. Not everything works yet. 0.3
W. Trevor King [Wed, 9 Feb 2011 14:22:32 +0000 (09:22 -0500)]
Convert to more generic Pythonic wrapper.  Not everything works yet.

13 years agoFix == -> = in __version__ definition.
W. Trevor King [Tue, 14 Dec 2010 19:53:13 +0000 (14:53 -0500)]
Fix == -> = in __version__ definition.

13 years agoRename simAioError -> SimAioError and use ValueError in common._expand_tuple().
W. Trevor King [Tue, 14 Dec 2010 19:31:34 +0000 (14:31 -0500)]
Rename simAioError -> SimAioError and use ValueError in common._expand_tuple().

13 years agoAlso rename sngAioError -> SngAioError and dioError -> SngDioError.
W. Trevor King [Tue, 14 Dec 2010 19:27:44 +0000 (14:27 -0500)]
Also rename sngAioError -> SngAioError and dioError -> SngDioError.

13 years agoRename pycomediError to PEP-8-compliant PycomediError.
W. Trevor King [Tue, 14 Dec 2010 19:04:09 +0000 (14:04 -0500)]
Rename pycomediError to PEP-8-compliant PycomediError.

13 years agoMove pycomedi.common.VERSION to pycomedi.__version__ and cleanup setup.py.
W. Trevor King [Tue, 14 Dec 2010 19:01:43 +0000 (14:01 -0500)]
Move pycomedi.common.VERSION to pycomedi.__version__ and cleanup setup.py.

15 years agoBumped version to 0.2 0.2
W. Trevor King [Wed, 17 Jun 2009 13:36:01 +0000 (09:36 -0400)]
Bumped version to 0.2

15 years agoAdded bugtracking with Bugs Everywhere.
W. Trevor King [Thu, 7 May 2009 19:35:37 +0000 (15:35 -0400)]
Added bugtracking with Bugs Everywhere.

The bug I added it for turned out to be due to the calling software,
not PyComedi itself.  I also removed an old debugging printout from
simult_aio.py.

15 years agoAllow two passes through test_cmd in simult_aio.
W. Trevor King [Mon, 8 Dec 2008 20:21:16 +0000 (15:21 -0500)]
Allow two passes through test_cmd in simult_aio.

Fixed failing commands when the exact ns sample period was not available.

e.g:

Testing command:
Command on <pycomedi.common.PyComediIO object at 0x8e9184c> (output):
subdevice:      1
flags:          0x40
start:          ext|    18
scan_begin:     timer|  324675
convert:        now|    0
scan_end:       count|  1
stop:           count|  16010
test pass 0, argument conflict
Failing command (4):
Command on <pycomedi.common.PyComediIO object at 0x8e9184c> (output):
subdevice:      1
flags:          0x40
start:          ext|    18
scan_begin:     timer|  324700
convert:        now|    0
scan_end:       count|  1
stop:           count|  16010

15 years agoExplicit cast to int to avoid lsampl type problem.
W. Trevor King [Mon, 8 Dec 2008 19:29:58 +0000 (14:29 -0500)]
Explicit cast to int to avoid lsampl type problem.

See commit 5b69b33d46529be30bbdf15b392f0b96986bdcdd for another example.

15 years agoAdded labels to verbose plot in single_aio.py.
W. Trevor King [Mon, 8 Dec 2008 19:06:53 +0000 (14:06 -0500)]
Added labels to verbose plot in single_aio.py.

15 years agoCast data to int in PyComediSingleIO.write_chan_index.
W. Trevor King [Mon, 8 Dec 2008 17:24:09 +0000 (12:24 -0500)]
Cast data to int in PyComediSingleIO.write_chan_index.

Without the cast, I got this traceback when data was a numpy.uint16:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/wking/.python/unfold.py", line 101, in __init__
    self.zp.jumpToPos(self.zp.pos_nm2out(0))
  File "/home/wking/.python/z_piezo.py", line 161, in jumpToPos
    self.curIn = self._jump.jumpToPos(self.curOut)
  File "/home/wking/.python/z_piezo.py", line 248, in jumpToPos
    self.AO.write(out)
  File
"/home/wking/lib/python2.5/site-packages/pycomedi-0.1-py2.5.egg/pycomedi/single_aio.py",
line 90, in write
    self.write_chan_index(i, data[i])
  File
"/home/wking/lib/python2.5/site-packages/pycomedi-0.1-py2.5.egg/pycomedi/common.py",
line 411, in write_chan_index
    rc = c.comedi_data_write(self.dev, self.subdev,
self.chan[chan_index], self._range[chan_index], self._aref[chan_index],
data);
TypeError: in method 'comedi_data_write', argument 6 of type 'lsampl_t'

16 years agoFixed license reference in setup.py and added license headers to source.
W. Trevor King [Tue, 11 Nov 2008 15:42:31 +0000 (10:42 -0500)]
Fixed license reference in setup.py and added license headers to source.

16 years agoAdded a .gitignore file.
W. Trevor King [Tue, 11 Nov 2008 15:34:04 +0000 (10:34 -0500)]
Added a .gitignore file.

16 years agoAdded ez_setup installation framework.
W. Trevor King [Tue, 11 Nov 2008 15:31:30 +0000 (10:31 -0500)]
Added ez_setup installation framework.

16 years agoAdded subdevice flag checking ability and reworked some tests.
W. Trevor King [Tue, 11 Nov 2008 15:26:35 +0000 (10:26 -0500)]
Added subdevice flag checking ability and reworked some tests.

I was hoping SDF_BUSY would let me know when the output job was
complete, but for some reason it doesn't seem to.
See simult_aio.AIO.reset().

16 years agoFairly large rewrite for more object-oriented pycomedi.
W. Trevor King [Thu, 23 Oct 2008 12:49:39 +0000 (08:49 -0400)]
Fairly large rewrite for more object-oriented pycomedi.

test.py should never have been versioned; it was simply an example
of the test logic for simult_aio._repeat_aio_test().

16 years agoBroke out common functionality into common.py
W. Trevor King [Sun, 5 Oct 2008 04:07:02 +0000 (00:07 -0400)]
Broke out common functionality into common.py

Still need to go through and clean up the simultaneous code.

16 years agoNo changes?
W. Trevor King [Sat, 4 Oct 2008 22:35:29 +0000 (18:35 -0400)]
No changes?

16 years agoCleaned up single_dio.py 0.1
W. Trevor King [Sat, 4 Oct 2008 22:34:58 +0000 (18:34 -0400)]
Cleaned up single_dio.py

16 years agoRenamed modules without the now-redundant `comedi_' prefix
W. Trevor King [Sat, 4 Oct 2008 15:00:11 +0000 (11:00 -0400)]
Renamed modules without the now-redundant `comedi_' prefix

16 years agoVersioning started. 0.0
W. Trevor King [Sat, 4 Oct 2008 14:55:29 +0000 (10:55 -0400)]
Versioning started.

Time to compile this heap-o-stuff into a real package.