[PATCH v4 00/13] device-global identifiers and routes introduced

Ian Abbott abbotti at mev.co.uk
Thu Oct 4 10:57:26 UTC 2018


On 03/10/18 21:55, Spencer E. Olson wrote:
> This patch set is the second revision of a recent patch set of the same name.
> Changes and notes:
>    - [PATCH v4 07/13]: Rebased patchset on repaired patch "staging: comedi:
>      ni_mio_common: protect register write overflow" (that patch had a missing
>      brace and this patch depends on that earlier patch).
> 
>    - [PATCH v3 04/13]: Minor update in indentation for support tool.
>    - [PATCH v3 05/13]: Simplify and clean up prototypes of functions for use with
>      besearch.
> 
>    - [PATCH v2 02/13]: Update signal/terminal names found after adding additional
>      devices to routing list in [PATCH v2 04/13].
>    - [PATCH v2 04/13]: Add routing information for PXIe-6535 and PXIe-6738
>      devices.
>    - [PATCH v2 04/13]: Implements Ian's suggestion to break up components of new
>      ni_routing module into multiple compile units so that .c files are not
>      included from .c files.
>    - [PATCH v2 04/13]: Fixes various function prototypes and "const" variable
>      declarations as per Ian's suggestions.
>    - [PATCH v2 05/13]: Tweak Makefile to build routing info for newly added
>      hardware in updates to [PATCH v2 04/13].
>    - [PATCH v2 05/13]: Fixes placement of "select COMEDI_NI_ROUTING" to ensure
>      ni_routing module is enabled for all dependent modules.
>    - [PATCH v2 05/13]: Removes a few inline function declarations in unit test.
>    - [PATCH v2 07/13]: This patch must be built upon an earlier patch recently
>      submitted and in the queue for integration:
>      "staging: comedi: ni_mio_common: protect register write overflow"
> 
> --
> 
> This patchset introduces a new framework for providing and maintaining a
> consistent namespace to define terminal/signal names for a set of comedi
> devices.  This effort was primarily focused on supporting NI hardware, but the
> interfaces introduced here can be implemented by all other hardware drivers, if
> desired.  Otherwise, these new interfaces do not effect any interfaces
> previously defined or prior use cases (i.e. backwards compatibility).
> 
> Some background:
>    There have been significant confusions over the past many years for users
>    when trying to understand how to connect to/from signals and terminals on
>    NI hardware using comedi.  The major reason for this is that the actual
>    register values were exposed and required to be used by end users.  Several
>    major reasons exist why this caused major confusion for users:
> 
>    1) The register values are _NOT_ in user documentation, but rather in
>      arcane locations, such as a few register programming manuals that are
>      increasingly hard to find.  Some information is found in the register level
>      programming libraries provided by National Instruments (NI-MHDDK), but
>      many items are only vaguely found/mentioned in the comments of the NI-MHDDK
>      example code.  There is no one place to find the various valid values of the
>      registers.
> 
>    2) The register values are _NOT_ completely consistent.  There is no way to
>      gain any sense of intuition of which values, or even enums one should use
>      for various registers.  There was some attempt in prior use of comedi to
>      name enums such that a user might know which enums should be used for
>      varying purposes, but the end-user had to gain a knowledge of register
>      values to correctly wield this approach.
> 
>    3) The names for signals and registers found in the various register level
>      programming manuals and vendor-provided documentation are _not_ even
>      close to the same names that are in the end-user documentation.
> 
>    4) The sets of routes that are valid are not consistent from device to device.
>      One additional major challenge is that this information is not documented
>      and does not seem to be obtainable in any programmatic fashion, neither
>      through the proprietary NIDAQmx(-base) c-libraries, nor with register level
>      programming.  In fact, the only consistent source of this information is
>      through the proprietary NI-MAX software, which currently only runs on
>      Windows platforms.  A further challenge is that this information cannot be
>      exported from NI-MAX, except by screenshot.
> 
> Similar confusion, albeit less, plagued NI's previous version of their own
> proprietary drivers.  Earlier than 2003, NI greatly simplified the situation for
> users by releasing a new API that abstracted the names of signals/terminals to a
> common and intuitive set of names.  In addition, this new API provided a much
> more common interface to use for most of NI hardware.
> 
> Comedi already provides such a common interface for data-acquisition and control
> hardware.  This effort complements comedi's abstraction layers by further
> abstracting much more of the use cases for NI hardware, but allowing users _and_
> developers to directly refer to NI documentation (user-level, register-level,
> and the register-level examples of the NI-MHDDK).
> 
> The goal of these patches are:
>    0) Allow current code to function as is, providing backwards compatibility to
>      the current interface, following a suggestion by Eric Piel.
>    1) Provide an interface to connect routes or identify signal sources and
>      destinations using a consistent naming scheme, global to a driver family.
>    2) For NI devices, use terminal/signal naming that is consistent with (a) the
>      NI's user level documentation, (b) NI's user-level code, (c) the information
>      as provided by the proprietary NI-MAX software, and (d) the user interface
>      code provided by the user-land comedilib library.
>    3) Make for easy maintenance of register level values that are to be used for
>      any particular NI device of any particular NI device family.
>    4) Provide a means whereby the user can query the set of signal routes that is
>      valid for a particular device.
>    5) Provide an interface whereby the user can query the status and capability
>      of any signal route.  The driver can provide information on whether the
>      route is valid for the device and whether the route is already connected.
> 
> This patch set implements various changes that keep the goals set forth here.
> This patch set is in nowise complete with respect to the various NI hardware
> options supported by comedi, though a large selection should be supported--all
> e/m-series (ni_mio_common.c hardware) boards and 660x boards are the target of
> this patch set, including the tio devices (counter/timers) used by these boards.
> 
> Spencer E. Olson (13):
>    staging: comedi: tests: add unittest framework for comedi
>    staging: comedi: add abstracted NI signal/terminal named constants
>    staging: comedi: add new device-global config interface
>    staging: comedi: ni_routing: Add NI signal routing info
>    staging: comedi: add interface to ni routing table information
>    staging: comedi: ni_mio_common: implement new routing for TRIG_EXT
>    staging: comedi: ni_mio_common: implement global pfi,rtsi routing
>    staging: comedi: ni_mio_common: implement output selection of
>      GPFO_{0,1}
>    staging: comedi: tio: implement global tio/ctr routing
>    staging: comedi: ni_mio_common: create device-global access to tio
>    staging: comedi: ni_660x: Add NI PCI-6608 to list of supported devices
>    staging: comedi: ni_660x: clean up pfi routing
>    staging: comedi: ni_660x: add device-global routing

Thanks for the new functionality.

Reviewed-by: Ian Abbott <abbotti at mev.co.uk>

-- 
-=( Ian Abbott <abbotti at mev.co.uk> || Web: www.mev.co.uk )=-
-=( MEV Ltd. is a company registered in England & Wales. )=-
-=( Registered number: 02862268.  Registered address:    )=-
-=( 15 West Park Road, Bramhall, STOCKPORT, SK7 3JZ, UK. )=-


More information about the devel mailing list