Measurement Hardware Driver Development Kit (MHDDK) Frequently Asked Questions


This article provides answers to frequently asked questions (FAQ) about the Measurement Hardware Driver Development Kit (MHDDK).


What is the Measurement Hardware Driver Development Kit (MHDDK) and how is it different from previous Register Level Programming (RLP) options?

The MHDDK is a collection of example code, hardware documentation, and C++ classes called Chip Objects, which correspond to the chips on a device and expose all the functionality of the hardware. It has the advantage of abstracting the functionality of the hardware from the complicated mechanics of RLP. This abstraction greatly simplifies the task of developing in different operating systems. A more thorough description of the MHDDK can be found in Measurement Hardware Driver Development Kit (MHDDK) Architecture. You can also find more details about using a Chip Object in How to Use a Chip Object.

Prior to the MHDDK, the example code was all in straight C and was written for a DOS-based compiler. This required the programmer to spend a lot of effort accessing each register and left the code open to simple memory and addressing mistakes.


Where can I find more documentation about RLP with the MHDDK?


For a variety of device families, NI has register level programming documentation available on the MHDDK product page: NI Measurement Hardware DDK (Driver Development Kit). These manuals are named either “Register Level Programming Manual” or “Technical Reference Manual”. In many cases, more than one manual is applicable to a device, where common components like the DAQ-STC or DAQ-DIO chips are used on a variety of devices.

RLP manuals contain descriptions of the individual devices and components on the devices. The descriptions include detailed information on the individual registers and bitfields on the device as well as information on programming the device for different operations using the registers. Information on initializing the device as well other general programming topics, such as RTSI, interrupts, DMA, is included. The completeness of the RLP documentation may vary some between the different product families. If you need additional information on a particular device contact your field engineer to discuss the possibility of extended support options.

For some hardware families, manuals have not been formally released and are therefore considered to be in beta status. These beta manuals are not available through the product page and need to be requested through your field engineer.


Where can I get support for the MHDDK?

The MDDDK is not supported through Applications Engineering. For information about the support policy for MHDDK refer to Measurement Hardware Driver Development Kit (MHDDK) Technical Support.


What operating systems are supported?

The MHDDK supports several operating systems:

  • Windows, LabVIEW RT, Linux, and Mac OS X, based on the NI-VISA driver (64-bit compatible)
  • Windows, using the WDM architecture (64-bit compatible)
  • Linux 2.6, based on a native kernel module (64-bit compatible)
  • Linux 2.4, based on /dev/mem
  • QNX Neutrino 6.2, using a native driver
  • RTX, using a native driver
  • Windows CE / PocketPC


How do I use the MHDDK on a different operating system?

The MHDDK makes use of C++ classes called Chip Objects to abstract hardware functionality from hardware access. The Chip Objects in turn use an iBus class to handle interaction with the operating system and the details of hardware access. The iBus class is designed to be easily ported to another operating system and the procedure is described in How to Make an iBus.


How do I compile an example?

Compiling the examples in the MHDDK will vary a bit depending on the compiler that you are using and your host platform. In general, you will want to make a project and add the example code (eg aiex1.cpp), the Chip Objects for your hardware, and the iBus for your platform.

For an X Series device, you would use:

  • Examples/aiex1.cpp (or a different example)
  • ChipObjects/*.cpp
  • osiBus.cpp
  • osiUserCode.cpp
  • CHInCh/*.cpp
  • Examples/dio/*.cpp
  • Examples/inTimer/*.cpp
  • Examples/outTimer/*.cpp
  • Examples/counterResetHelper.cpp
  • Examples/dataHelper.cpp
  • Examples/devices.cpp
  • Examples/eepromHelper.cpp
  • Examples/main.cpp
  • Examples/pfiRtsiResetHelper.cpp
  • Examples/pllHelper.cpp
  • Examples/simultaneousInit.cpp
  • Examples/streamHelper.cpp

Where do I get the Product ID and Vendor ID for my hardware?

In order to register a driver for a device with the operating system, you will need the Product ID and Vendor ID for your device. The Vendor ID for any National Instruments PCI/PXI device is 0x1093, and, for most devices, the Product ID will identify the specific device model. However, all X Series devices have the Product ID 0xC4C4, so you will need to use the Subsystem Product ID to differentiate between X Series models. Finding the IDs will be operating system specific.


  1. Open the Windows Device Manager.
  2. Right-click on the NI device and select “Properties.”
  3. From the “Details” tab, select the “Hardware Ids” from the drop-down box.
  4. The Product ID is the hex number in “DEV_xxxx”, where “xxxx” is the Product ID.


  1. The command line tool lspci can tell you the Product and Vendor ID for all devices in your system.


What NI hardware is supported?

RLP examples and documentation are available for the following NI hardware families. Some of this information may require a nondisclosure agreement (NDA) to be signed before distribution. If you require information for other products, contact your field engineer.

  • PCIe-6320
  • PCIe-6321
  • PCIe-6323, PXIe-6323
  • PCIe-6341, PXIe-6341
  • PCIe-6343, PXIe-6343
  • PCIe-6351
  • PCIe-6353
  • PXIe-6356
  • PXIe-6358
  • PCIe-6361, PXIe-6361
  • PCIe-6363, PXIe-6363
  • PXIe-6366
  • PXIe-6368
  • PXIe-6376
  • PXIe-6378
  • NI 62xx M Series MIO
  • NI 60xxE E Series MIO
  • NI-6013
  • NI-6014
  • NI-6110
  • NI-6111
  • NI-6133
  • NI-6143
  • NI-650x (PCI/PXI only)
  • NI-651x
  • NI-6520
  • NI-6521
  • NI-6528
  • NI-6533
  • NI-660x
  • NI-671x
  • NI-6731/3
  • PCMCIA-4050 (WindowsCE only) *Not recommended for new design
  • NI-7831R

Note: The quality and completeness of the RLP documentation and examples may vary between these different product families.