summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/ni_routing/README
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_routing/README')
-rw-r--r--drivers/staging/comedi/drivers/ni_routing/README240
1 files changed, 0 insertions, 240 deletions
diff --git a/drivers/staging/comedi/drivers/ni_routing/README b/drivers/staging/comedi/drivers/ni_routing/README
deleted file mode 100644
index b65c4ebedbc4..000000000000
--- a/drivers/staging/comedi/drivers/ni_routing/README
+++ /dev/null
@@ -1,240 +0,0 @@
-Framework for Maintaining Common National Instruments Terminal/Signal names
-
-The contents of this directory are primarily for maintaining and formatting all
-known valid signal routes for various National Instruments devices.
-
-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 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 and the NI-MHDDK (comments in in 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 does not seem to be
- obtainable in any programmatic fashion, neither through the proprietary
- NIDAQmx(-base) c-libraries, nor with register level programming, _nor_
- through any documentation. 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.
-
-
-
-The content of this directory is part of an effort to greatly simplify the use
-of signal routing capabilities of National Instruments data-acquisition and
-control hardware. In order to facilitate the transfer of register-level
-information _and_ the knowledge of valid routes per device, a few specific
-choices were made:
-
-
-1) The names of the National Instruments signals/terminals that are used in this
- directory are chosen to be 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.
-
- The impact of this choice implies that one allows the use of CamelScript names
- in the kernel. In short, the choice to use CamelScript and the exact names
- below is for maintainability, clarity, similarity to manufacturer's
- documentation, _and_ a mitigation for confusion that has plagued the use of
- these drivers for years!
-
-2) The bulk of the real content for this directory is stored in two separate
- collections (i.e. sub-directories) of tables stored in c source files:
-
- (a) ni_route_values/ni_[series-label]series.c
-
- This data represents all the various register values to use for the
- multiple different signal MUXes for the specific device families.
-
- The values are all wrapped in one of three macros to help document and
- track which values have been implemented and tested.
- These macros are:
- V(<value>) : register value is valid, tested, and implemented
- I(<value>) : register value is implemented but needs testing
- U(<value>) : register value is not implemented
-
- The actual function of these macros will depend on whether the code is
- compiled in the kernel or whether it is compiled into the conversion
- tools. For the conversion tools, it can be used to indicate the status
- of the register value. For the kernel, V() and I() both perform the
- same function and prepare data to be used; U() zeroes out the value to
- ensure that it cannot be used.
-
- *** It would be a great help for users to test these values such that
- these files can be correctly marked/documented ***
-
- (b) ni_device_routes/[board-name].c
-
- This data represents the known set of valid signal routes that are
- possible for each specific board. Although the family defines the
- register values to use for a particular signal MUX, not all possible
- signals are actually available on each board.
-
- In order for a particular board to take advantage of the effort to
- simplify/clarify signal routing on NI devices, a corresponding
- [board-name].c file must be created. This file should reflect the known
- valid _direct_ routing capabilities of the board.
-
- As noted above, the only known consistent source of information for
- valid device routes comes from the proprietary National Instruments
- Windows software, NI-MAX. Also, as noted above, this information can
- only be visually conveyed from NI-MAX to other media. To make this
- easier, the naming conventions used in the [board-name].c file are
- similar to the naming conventions as presented by NI-MAX.
-
-
-3) Two other files aggregate the above data to integrate it into comedi:
- ni_route_values.c
- ni_device_routes.c
-
- When adding a new [board-name].c file, be sure to also add in the line in
- ni_device_routes.c to include this information into comedi.
-
-
-4) Several tools have been included to convert from/to the c file formats.
- These tools are best used/demonstrated via the included Makefile targets:
- (a) `make csv-files`
- Creates new csv-files using content of c-files of existing
- ni_routing/* content. New csv files are placed in csv
- sub-directory.
-
- As noted above, the only consistent source of information of valid
- device routes comes from the proprietary National Instruments Windows
- software, NI-MAX. Also, as noted above, this information can only be
- visually conveyed from NI-MAX to other media. This make target creates
- spreadsheet representations of the routing data. The choice of using a
- spreadsheet (ala CSV) to copy this information allows for easy direct
- visual comparison to the NI-MAX "Valid Routes" tables.
-
- Furthermore, the register-level information is much easier to identify and
- correct when entire families of NI devices are shown side by side in table
- format. This is made easy by using a file-storage format that can be
- loaded into a spreadsheet application.
-
- Finally, .csv content is very easy to edit and read using a variety of
- tools, including spreadsheets or various other scripting languages. In
- fact, the tools provided here enable quick conversion of the
- spreadsheet-like .csv format to c-files that follow the kernel coding
- conventions.
-
-
- (b) `make c-files`
- Creates new c-files using content of csv sub-directory. These
- new c-files can be compared to the active content in the
- ni_routing directory.
- (c) `make csv-blank`
- Create a new blank csv file. This is useful for establishing a
- new data table for either a device family (less likely) or a
- specific board of an existing device family (more likely).
- (d) `make clean`
- Remove all generated files/directories.
- (e) `make everything`
- Build all csv-files, then all new c-files.
-
-
-
-
-In summary, similar confusion about signal routing configuration, 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).
-
-
-
---------------------------------------------------------------------------------
-Various naming conventions and relations:
---------------------------------------------------------------------------------
-These are various notes that help to relate the naming conventions used in the
-NI-STC with those naming conventions used here.
---------------------------------------------------------------------------------
-
- Signal sources for most signals-destinations are given a specific naming
- convention, although the register values are not consistent. This next table
- shows the mapping between the names used in comedi for NI and those names
- typically used within the NI-STC documentation.
-
- (comedi) (NI-STC input or output) (NOTE)
- ------------------------------------------------------------------------------
- TRIGGER_LINE(i) RTSI_Trig_i_Output_Select i in range [0..7]
- NI_AI_STOP AI_STOP
- NI_AI_SampleClock AI_START_Select
- NI_AI_SampleClockTimebase AI_SI If internal sample
- clock signal is used
- NI_AI_StartTrigger AI_START1_Select
- NI_AI_ReferenceTrigger AI_START2_Select for pre-triggered
- acquisition---not
- currently supported
- in comedi
- NI_AI_ConvertClock AI_CONVERT_Source_Select
- NI_AI_ConvertClockTimebase AI_SI2 If internal convert
- signal is used
- NI_AI_HoldCompleteEvent
- NI_AI_PauseTrigger AI_External_Gate
- NI_AO_SampleClock AO_UPDATE
- NI_AO_SampleClockTimebase AO_UI
- NI_AO_StartTrigger AO_START1
- NI_AO_PauseTrigger AO_External_Gate
- NI_DI_SampleClock
- NI_DO_SampleClock
- NI_MasterTimebase
- NI_20MHzTimebase TIMEBASE 1 && TIMEBASE 3 if no higher clock exists
- NI_80MHzTimebase TIMEBASE 3
- NI_100kHzTimebase TIMEBASE 2
- NI_10MHzRefClock
- PXI_Clk10
- NI_CtrOut(0) GPFO_0 external ctr0out pin
- NI_CtrOut(1) GPFO_1 external ctr1out pin
- NI_CtrSource(0)
- NI_CtrSource(1)
- NI_CtrGate(0)
- NI_CtrGate(1)
- NI_CtrInternalOutput(0) G_OUT0, G0_TC for Ctr1Source, Ctr1Gate
- NI_CtrInternalOutput(1) G_OUT1, G1_TC for Ctr0Source, Ctr0Gate
- NI_RGOUT0 RGOUT0 internal signal
- NI_FrequencyOutput
- #NI_FrequencyOutputTimebase
- NI_ChangeDetectionEvent
- NI_RTSI_BRD(0)
- NI_RTSI_BRD(1)
- NI_RTSI_BRD(2)
- NI_RTSI_BRD(3)
- #NI_SoftwareStrobe
- NI_LogicLow
- NI_CtrA(0) G0_A_Select see M-Series user
- manual (371022K-01)
- NI_CtrA(1) G1_A_Select see M-Series user
- manual (371022K-01)
- NI_CtrB(0) G0_B_Select, up/down see M-Series user
- manual (371022K-01)
- NI_CtrB(1) G1_B_Select, up/down see M-Series user
- manual (371022K-01)
- NI_CtrZ(0) see M-Series user
- manual (371022K-01)
- NI_CtrZ(1) see M-Series user
- manual (371022K-01)