Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
waveforms:ref_manual [2014/09/23 23:28] – [9.2Configuration] Joshua Woldstadwaveforms:ref_manual [2021/10/13 21:06] (current) – external edit 127.0.0.1
Line 2: Line 2:
  
 WaveForms™ provides an interface that allows users to interact with Digilent Analog Design hardware, such as the Analog Discovery™ and Electronics Explorer™. While the WaveForms application offers a refined graphical interface, the WaveForms SDK provides access to a public application programming interface (API) that gives users the ability to create custom PC applications. WaveForms™ provides an interface that allows users to interact with Digilent Analog Design hardware, such as the Analog Discovery™ and Electronics Explorer™. While the WaveForms application offers a refined graphical interface, the WaveForms SDK provides access to a public application programming interface (API) that gives users the ability to create custom PC applications.
-This WaveForms SDK manual describes the main components and architecture of the WaveForms system and details each function contained in the WaveForms API. The SDK package also offers examples demonstrating how to identify, connect to, and control analog hardware devices.+This WaveForms SDK manual describes the main components and architecture of the WaveForms system and details each function contained in the WaveForms API. The SDK package also offers examples demonstrating how to identify, connect to, and control analog hardware devices. The WaveForms software, as well as the SDK, can be downloaded for free at the [[https://digilent.com/shop/software/digilent-waveforms/| Digilent website]].
  
 {{ :waveforms:ove1.png?600 |}} {{ :waveforms:ove1.png?600 |}}
Line 617: Line 617:
 The function above returns for each AnalogIn channel the real offset level. The function above returns for each AnalogIn channel the real offset level.
  
----- 
  
 ==== 5.4 Trigger ==== ==== 5.4 Trigger ====
Line 984: Line 983:
 The function above is used to retrieve information about the play process.  The data lost occurs when the device generator is faster than the sample send process from the PC. In this case, the device buffer gets emptied and generated samples are repeated.  Corrupt samples are a warning that the buffer might have been emptied while samples were sent to the device.  In this case, try optimizing the loop for faster execution; or reduce the frequency or run time to be less or equal to the device buffer size (run time <= buffer size/frequency). The function above is used to retrieve information about the play process.  The data lost occurs when the device generator is faster than the sample send process from the PC. In this case, the device buffer gets emptied and generated samples are repeated.  Corrupt samples are a warning that the buffer might have been emptied while samples were sent to the device.  In this case, try optimizing the loop for faster execution; or reduce the frequency or run time to be less or equal to the device buffer size (run time <= buffer size/frequency).
  
-| **FDwfAnalogOutNodePlayData**( +| **FDwfAnalogOutNodePlayData**(HDWF hdwf, int idxChannel, AnalogOutNode node, double* rgdData, int cdData)  |
-HDWF hdwf, int idxChannel, AnalogOutNode node, double* rgdData, int cdData)  |+
 | Parameters:                                                                                                 | | Parameters:                                                                                                 |
 | - hdwf – Open interface handle on a device.                                                                 | | - hdwf – Open interface handle on a device.                                                                 |
Line 1065: Line 1063:
 | **FUNC Constants**  | **FUNC Constant Capabilities**                                | | **FUNC Constants**  | **FUNC Constant Capabilities**                                |
 | **funcDC**          | Generate DC value set as offset.                              | | **funcDC**          | Generate DC value set as offset.                              |
-| **FuncSine**        | Generate sine waveform.                                       |+| **funcSine**        | Generate sine waveform.                                       |
 | **funcSquare**      | Generate square waveform.                                     | | **funcSquare**      | Generate square waveform.                                     |
 | **funcTriangle**    | Generate triangle waveform.                                   | | **funcTriangle**    | Generate triangle waveform.                                   |
Line 1073: Line 1071:
 | **funcCustom**      | Generate waveform from custom repeated data.                  | | **funcCustom**      | Generate waveform from custom repeated data.                  |
 | **funcPlay**        | Generate waveform from custom data in stream play style.      | | **funcPlay**        | Generate waveform from custom data in stream play style.      |
 +
  
  
Line 1179: Line 1178:
 The function above is used to get the current offset value for the specified channel-node on the instrument. The function above is used to get the current offset value for the specified channel-node on the instrument.
  
-|//FDwfAnalogOutNodeSymmetryInfo//(HDWF hdwf, int idxChannel, AnalogOutNode node, double* ppercentageMin, double* ppercentageMax)| +**FDwfAnalogOutNodeSymmetryInfo**(HDWF hdwf, int idxChannel, AnalogOutNode node, double* ppercentageMin, double* ppercentageMax)  
-|Parameters:+| Parameters:                                                                                                                       
-|- hdwf – Open interface handle on a device.| +| - hdwf – Open interface handle on a device.                                                                                       
-|- idxChannel – Channel index.| +| - idxChannel – Channel index.                                                                                                     
-|- node – Node index.| +| - node – Node index.                                                                                                              
-|- ppercentageMin – Minimum value of Symmetry percentage.| +| - ppercentageMin – Minimum value of Symmetry percentage.                                                                          
-|- ppercentageMax – Maximum value of Symmetry percentage.|+| - ppercentageMax – Maximum value of Symmetry percentage.                                                                          | 
  
 The function above is used to obtain the symmetry (or duty cycle) range (0..100). This symmetry is supported for standard signal types. It the pulse duration divided by the pulse period. The function above is used to obtain the symmetry (or duty cycle) range (0..100). This symmetry is supported for standard signal types. It the pulse duration divided by the pulse period.
  
-|**FDwfAnalogOutNodeSymmetrySet**(HDWF hdwf, int idxChannel, AnalogOutNode node, AnalogOutNode node, double percentageSymmetry)| +| **FDwfAnalogOutNodeSymmetrySet**(HDWF hdwf, int idxChannel, AnalogOutNode node, double percentageSymmetry)  
-|Parameters:+| Parameters:                                                                                                 
-|- hdwf – Open interface handle on a device.| +| - hdwf – Open interface handle on a device.                                                                 
-|- idxChannel – Channel index.| +| - idxChannel – Channel index.                                                                               
-|- node – Node index.| +| - node – Node index.                                                                                        
-|- percentageSymmetry –Value of percentage of Symmetry (duty cycle).|+| - percentageSymmetry –Value of percentage of Symmetry (duty cycle).                                         | 
  
 The function above is used to set the symmetry (or duty cycle) for the specified channel-node on the instrument. The function above is used to set the symmetry (or duty cycle) for the specified channel-node on the instrument.
Line 1235: Line 1236:
 The function above is used to get the current phase for the specified channel-node on the instrument. The function above is used to get the current phase for the specified channel-node on the instrument.
  
-|FDwfAnalogOutNodeDataInfo(HDWF hdwf, int idxChannel, AnalogOutNode node, int* pnSamplesMin, double* pnSamplesMax)| +**FDwfAnalogOutNodeDataInfo**(HDWF hdwf, int idxChannel, AnalogOutNode node, int* pnSamplesMin, double* pnSamplesMax)  
-|Parameters:+| Parameters:                                                                                                            
-|- hdwf – Open interface handle on a device.| +| - hdwf – Open interface handle on a device.                                                                            
-|- idxChannel – Channel index.| +| - idxChannel – Channel index.                                                                                          
-|- node – Node index.| +| - node – Node index.                                                                                                   
-|- pnSamplesMin - Minimum number of samples available for custom data.| +| - pnSamplesMin - Minimum number of samples available for custom data.                                                  
-|- pnSamplesMax – Maximum number of samples available for custom data.|+| - pnSamplesMax – Maximum number of samples available for custom data.                                                  | 
  
 The function above is used to retrieve the minimum and maximum number of samples allowed for custom data generation. The function above is used to retrieve the minimum and maximum number of samples allowed for custom data generation.
Line 1930: Line 1932:
  
 ==== 9.4 Trigger Detector ==== ==== 9.4 Trigger Detector ====
 +
 +In order to use trigger on digital in pins, set trigger source with FDwfDigitalInTriggerSourceSet to trigsrcDetectorDigitalIn.
 +
 +|**FDwfDigitalInTriggerInfo**(HDWF hdwf, unsigned int *pfsLevelLow, unsigned int *pfsLevelHigh, unsigned int |*pfsEdgeRise, unsigned int *pfsEdgeFall)|
 +|Parameters:|
 +|- hdwf – Interface handle.|
 +|- pfsLevelLow – Variable to receive the supported low state triggers.|
 +|- pfsLevelHigh – Variable to receive the supported low state triggers.|
 +|- pfsEdgeRise – Variable to receive the supported rising edge triggers.|
 +|- pfsEdgeFall – Variable to receive the supported falling edge triggers.|
 +
 +The function above returns the supported digital in triggers. The bits of the arguments represent pins. 
 +The logic for the trigger bits is:// Low and High and (Rise or Fall)//. Setting a bit in both rise and fall will trigger on any edge, any transition. For instance FDwfDigitalInTriggerInfo(hdwf, 1, 2, 4, 8) will generate trigger when DIO-0 is low and DIO-1 is high and DIO-2 is rising or DIO-3 is falling.
 +
 +
 +|**FDwfDigitalInTriggerSet**(HDWF hdwf, unsigned int fsLevelLow, unsigned int fsLevelHigh, unsigned int fsEdgeRise, unsigned int fsEdgeFall)|
 +|Parameters:|
 +|- hdwf – Interface handle.|
 +|- fsLevelLow – Set low state condition.|
 +|- fsLevelHigh – Set high state condition.|
 +|- fsEdgeRise – Set rising edge condition.|
 +|- fsEdgeFall – Set falling edge condition.|
 +
 +The function above is used to configure the digital in trigger detector.
 +
 +|**FDwfDigitalInTriggerGet**(HDWF hdwf, unsigned int *pfsLevelLow, unsigned int *pfsLevelHigh, unsigned int |*pfsEdgeRise, unsigned int *pfsEdgeFall)|
 +|Parameters:|
 +|- hdwf – Interface handle.|
 +|- pfsLevelLow – Variable to receive the configured value.|
 +|- pfsLevelHigh – Variable to receive the configured value.|
 +|- pfsEdgeRise – Variable to receive the configured value.|
 +|- pfsEdgeFall – Variable to receive the configured value.|
 +
 +The function above returns the configured digital in trigger detector option.
 +
 +----
 +
 +====== 10 Digital Out (Pattern Generator) ======
 +
 +The DigitalOut instrument states:
 +
 +{{ :waveforms:10p1.png?600 |}}
 +
 +The states are described defined in dwf.h DwfState type.
 +  * **Ready**: Initial state. After FDwfDigitalOutConfigure or any FDwfDigitalOut*Set function call goes to this state. With digital out configure start command goes to Armed state
 +  * **Armed**: It waits for trigger.
 +  * **Wait**: Remains in this state for time period specified by FDwfDigitalOutWaitSet function.
 +  * **Running**: Remains in this state for time period specified by FDwfDigitalOutRunSet function.
 +  * **Repeat**: Goes to Armed or Wait state according the FDwfDigitalOutRepeatTriggerSet setting, for number of times specified by FDwfDigitalOutRepeatSet.
 +  * **Done**: Final state.
 +
 +This states machine controls all digital out channels. 
 +
 +Channel configuration:
 +
 +{{ :waveforms:10p2.png?600 |}}
 +
 +The initial values, for divider and counter, specify the initially loaded values, initial delay, when entering in Running state. The Divider specifies the clock division. This rate will be the custom sample frequency and step for the counter. When entering Running state the initial value specified with //FDwfDigitalOutDividerInitSet // is loaded. When this expires the value specified by //FDwfDigitalOutDividerSet// will be loaded upon each expiration.
 +The Counter initial value is set by //FDwfDigitalOutCounterInitSet// function. This function also sets the initial level. When this expires the level values specified by //FDwfDigitalOutCounterSet// are loaded upon further expiration. On counter expiration the level is toggled and this directs the low or high value loading. In case one of these is zero the level is not toggled.
 +
 +The Counter is used for:
 +  * Pulse to generate the low and high state lengths. 
 +  * Random to set update rate.
 +  * Custom to address buffer. The samples are configured by //FDwfDigitalOutDataSet// function. This also configures the counter low/high according //countOfBits// parameter. In TS mode the counter step is double, providing two bits of samples for output: value and enable.
 +
 +
 +The output Mode (//FDwfDigitalOutModeSet//) selects between: PP, OS, OD and TS.
 +The Idle output (//FDwfDigitalOutIdleSet//) selects the output while not in Running state.
 +
 +Pulse signal:
 +
 +{{ :waveforms:10p3.png?600 |}}
 +
 +For pulse signal the initial level and initial value are specified with FDwfDigitalOutCounterInitSet function. These are loaded when entering Running state. 
 +
 +==== 10.1 Control ====
 +
 +
 +|**FDwfDigitalOutReset**(HDWF hdwf)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +
 +The function above resets and configures all of the instrument parameters to default values.
 +
 +|**FDwfDigitalOutConfigure**(HDWF hdwf, BOOL fStart)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- fStart – Start the acquisition. To stop, set to FALSE. |
 +
 +The function above is used to start or stop the instrument.
 +
 +
 +|**FDwfDigitalOutStatus**(HDWF hdwf, STS* psts)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- psts – Pointer to variable to return the state.|
 +
 +The function above is used to check the state of the instrument. 
 +
 +
 +==== 10.2 Configuration ====
 +
 +
 +|**FDwfDigitalOutInternalClockInfo**(HDWF hdwf, double* phzFreq)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- phzFreq – Pointer to return the internal clock frequency.|
 +
 +The function above is used to retrieve the internal clock frequency.
 +
 +|**FDwfDigitalOutTriggerSourceInfo**(HDWF hdwf, int* pfstrigsrc)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- pfstrigsrc – Variable to receive the supported trigger sources.|
 +
 +The function above returns the supported trigger source options for the instrument. See the description of FDwfDeviceTriggerInfo.
 +
 +|**FDwfDigitalOutTriggerSourceSet**(HDWF hdwf, TRIGSRC trigsrc)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- trigsrc – Trigger source to set .|
 +
 +The function above is used to set the trigger source for the instrument. Default setting is trigsrcNone.
 +
 +|**FDwfDigitalOutTriggerSourceGet**(HDWF hdwf, TRIGSRC* ptrigsrc)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- ptrigsrc – Pointer to variable to receive the trigger source.|
 +
 +The function above is used to get the current trigger source setting for the instrument. 
 +
 +|**FDwfDigitalOutRunInfo**(HDWF hdwf, double* psecMin, double* psecMax)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- psecMin – Variable to receive the supported minimum run length.|
 +|- psecMax – Variable to receive the supported maximum run length. |
 +
 +The function above is used to return the supported run length range for the instrument in seconds. Zero value (default) represent an infinite (or continuous) run.
 +
 +|**FDwfDigitalOutRunSet**(HDWF hdwf, double secRun)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- secRun – Run length to set expressed in seconds.|
 +
 +The function above is used to set the run length for the instrument in Seconds.
 +
 +|**FDwfDigitalOutRunGet**(HDWF hdwf, double* psecRun)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- psecRun – Pointer to variable to receive the run length.|
 +
 +The function above is used to read the configured run length for the instrument in seconds.
 +
 +|**FDwfDigitalOutRunStatus**(HDWF hdwf, double* psecRun)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- psecRun – Pointer to variable to receive the remaining run length.|
 +
 +The function above is used to read the remaining run length. It returns data from the last FDwfDigitalOutStatus call.
 +
 +|**FDwfDigitalOutWaitInfo**(HDWF hdwf, double* psecMin, double* psecMax)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- psecMin – Variable to receive the supported minimum wait length.|
 +|- psecMax – Variable to receive the supported maximum wait length.|
 +
 +The function above is used to return the supported wait length range in seconds. The wait length is how long the instrument waits after being triggered to generate the signal. Default value is zero.
 +
 +
 +|**FDwfDigitalOutWaitSet**(HDWF hdwf, double secWait)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- secWait – Wait length to set expressed in seconds.|
 +
 +The function above is used to set the wait length.
 +
 +|**FDwfDigitalOutWaitGet**(HDWF hdwf, double* psecWait)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- psecWait – Pointer to variable to receive the wait length.|
 +
 +The function above is used to get the current wait length.
 +
 +|**FDwfDigitalOutRepeatInfo**(HDWF hdwf, unsigned int* pnMin, unsigned int* pnMax)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- pnMin – Variable to receive the supported minimum repeat count.|
 +|- pnMax – Variable to receive the supported maximum repeat count. |
 +
 +The function above is used to return the supported repeat count range. This is how many times the generated signal will be repeated. Zero value represents infinite repeats. Default value is one.
 +
 +|**FDwfDigitalOutRepeatSet**(HDWF hdwf, unsigned int cRepeat)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- cRepeat – Repeat count to set.|
 +
 +The function above is used to set the repeat count.
 +
 +|**FDwfDigitalOutRepeatGet**(HDWF hdwf, unsigned int* pcRepeat)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- pcRepeat – Pointer to variable to receive the repeat count.|
 +
 +The function above is used to read the current repeat count. 
 +
 +
 +|**FDwfDigitalOutRepeatStatus**(HDWF hdwf, unsigned int* pcRepeat)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- pcRepeat – Pointer to variable to receive the remaining repeat counts.|
 +
 +The function above is used to read the remaining repeat counts. It only returns information from the last FDwfDigitalOutStatus function call, it does not read from the device.
 +
 +|**FDwfDigitalOutRepeatTriggerSet**(HDWF hdwf, BOOL fRepeatTrigger)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- fRepeatTrigger – Boolean used to specify if the trigger should be included in a repeat cycle. |
 +
 +The function above is used to set the repeat trigger option. To include the trigger in wait-run repeat cycles, set fRepeatTrigger to TRUE. It is disabled by default.
 +
 +|**FDwfDigitalOutRepeatTriggerGet**(HDWF hdwf, BOOL* pfRepeatTrigger)|
 +|Parameters:|
 +|- hdwf – Open interface handle on a device.|
 +|- pfRepeatTrigger – Pointer to variable to receive the repeat trigger option.|
 +
 +The function above is used to verify if the trigger has been included in wait-run repeat cycles.
 +
 +|**FDwfDigitalOutCount**(HDWF hdwf, int* pcChannel)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- pcChannel – Pointer to variable to receive the number of channels in the instrument. |
 +
 +The function above returns the number of Digital Out channels by the device specified by hdwf.
 +
 +|**FDwfDigitalOutEnableSet**(HDWF hdwf, int idxChannel, BOOL fEnable)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- fEnable – TRUE to enable, FALSE to disable.|
 +
 +The function above enables or disables the channel specified by idxChannel.
 +
 +
 +|**FDwfDigitalOutEnableGet**(HDWF hdwf, int idxChannel, BOOL* pfEnable)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pfEnable – Pointer to variable to receive enabled state.|
 +
 +The function above is used to verify if a specific channel is enabled or disabled.
 +
 +
 +|**FDwfDigitalOutOutputInfo**(HDWF hdwf, int idxChannel, int* pfsDwfDigitalOutOutput)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pfsDwfDigitalOutOutput – Pointer to variable to receive the supported output modes.|
 +
 +The function above returns the supported output modes of the channel. They are returned (by reference) as a bit field. This bit field can be parsed using the IsBitSet Macro. Individual bits are defined using the   
 +  * **DwfDigitalOutOutput** constants in DWF.h:
 +  * **DwfDigitalOutOutputPushPull**: Default setting.
 +  * **DwfDigitalOutOutputOpenDrain**: External pull needed.
 +  * **DwfDigitalOutOutputOpenSource**: External pull needed.
 +  * **DwfDigitalOutOutputThreeState**: Available with custom and random types.
 +
 +
 +|**FDwfDigitalOutOutputSet**(HDWF hdwf, int idxChannel, DwfDigitalOutOutput v) |
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- v – Output mode.|
 +
 +The function above specifies output mode of the channel.
 +
 +|**FDwfDigitalOutOutputGet**(HDWF hdwf, int idxChannel, DwfDigitalOutOutput* pv)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pfEnable – Pointer to variable to receive enabled state.|
 +
 +The function above is used to verify if a specific channel output mode. 
 +
 +|**FDwfDigitalOutTypeInfo**(HDWF hdwf, int idxChannel, int *pfsDwfDigitalOutType)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pfsDwfDigitalOutType – Pointer to variable to receive the supported output types.|
 +
 +The function above returns the supported types of the channel. They are returned (by reference) as a bit field. This bit field can be parsed using the IsBitSet Macro. Individual bits are defined using the DwfDigitalOutType constants in dwf.h:
 +DwfDigitalOutTypePulse: Frequency = internal frequency/divider/(low + high counter).
 +DwfDigitalOutTypeCustom: Sample rate = internal frequency / divider.
 +DwfDigitalOutTypeRandom: Random update rate  = internal frequency/divider/counter alternating between low and high values.
 +
 +
 +|**FDwfDigitalOutTypeSet**(HDWF hdwf, int idxChannel, DwfDigitalOutType v)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- v – Output mode.|
 +
 +The function above sets the output type of the specified channel.
 +
 +|**FDwfDigitalOutTypeGet**(HDWF hdwf, int idxChannel, DwfDigitalOutType *pv)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pfEnable – Pointer to variable to receive enabled state.|
 +
 +The function above is used to verify the type of a specific channel.
 +
 +|**FDwfDigitalOutIdleInfo**(HDWF hdwf, int idxChannel, int *pfsDwfDigitalOutIdle) |
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pfsDwfDigitalOutIdle – Pointer to variable to receive the supported idle output types.|
 +
 +The function above returns the supported idle output types of the channel. They are returned (by reference) as a bit field. This bit field can be parsed using the IsBitSet Macro. Individual bits are defined using the   * DwfDigitalOutIdle constants in dwf.h. Output while not running:
 +  * DwfDigitalOutIdleInit: Output initial value.
 +  * DwfDigitalOutIdleLow: Low level.
 +  * DwfDigitalOutIdleHigh:  High level.
 +  * DwfDigitalOutIdleZet: Three state.
 +
 +
 +|**FDwfDigitalOutIdleSet**(HDWF hdwf, int idxChannel, DwfDigitalOutIdle v)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- v – Value to set idle output.|
 +
 +The function above sets the idle output of the specified channel.
 +
 +|**FDwfDigitalOutIdleGet**(HDWF hdwf, int idxChannel, DwfDigitalOutIdle *pv)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pv – Pointer to variable to receive configured value.|
 +
 +The function above is used to verify the idle output of a specific channel.
 +
 +|**FDwfDigitalOutDividerInfo**(HDWF hdwf, int idxChannel, unsigned int *vMin, unsigned int *vMax)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pnMin – Variable to receive the supported minimum divider value.|
 +|- pnMax – Variable to receive the supported maximum divider value. |
 +
 +The function above is used to return the supported clock divider value range. 
 +
 +|**FDwfDigitalOutDividerInitSet**(HDWF hdwf, int idxChannel, unsigned int v)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- v – Divider initial value. |
 +
 +The function above sets the initial divider value of the specified channel.
 +
 +|**FDwfDigitalOutDividerInitGet**(HDWF hdwf, int idxChannel, unsigned int *pv)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pv – Pointer to variable to receive configured value.|
 + 
 +The function above is used to verify the initial divider value of the specified channel.
 +
 +|**FDwfDigitalOutDividerSet**(HDWF hdwf, int idxChannel, unsigned int v)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- v – Divider value. |
 +
 +The function above sets the divider value of the specified channel.
 +
 +|**FDwfDigitalOutDividerGet**(HDWF hdwf, int idxChannel, unsigned int *pv)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pv – Pointer to variable to receive configured value. |
 +
 +The function above is used to verify the divider value of the specified channel.
 +
 +|**FDwfDigitalOutCounterInfo**(HDWF hdwf, int idxChannel, unsigned int *vMin, unsigned int *vMax)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- pnMin – Variable to receive the supported minimum counter value.|
 +|- pnMax – Variable to receive the supported maximum counter value. |
 +
 +The function above is used to return the supported counter value range. 
 +
 +|**FDwfDigitalOutCounterInitSet**(HDWF hdwf, int idxChannel, BOOL fHigh, unsigned int v)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index.|
 +|- fHigh – Start high. |
 +|- v – Divider initial value.|
 +
 +The function above sets the initial state and counter value of the specified channel. 
 +
 +|**FDwfDigitalOutCounterInitGet**(HDWF hdwf, int idxChannel, int* pfHigh, unsigned int *pv)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pfHigh – Pointer to variable to receive configured value. |
 +|- pv – Pointer to variable to receive configured value. |
 +
 +The function above is used to verify the initial state and counter value of the specified channel.
 +
 +|**FDwfDigitalOutCounterSet**(HDWF hdwf, int idxChannel, unsigned int vLow, unsigned int vHigh)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- vLow – Counter low value.|
 +|- vHigh – Counter high value. |
 +
 +The function above sets the counter low and high values of the specified channel.
 +
 +|**FDwfDigitalOutCounterGet**(HDWF hdwf, int idxChannel, unsigned int *pvLow, unsigned int *pvHigh)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pvLow – Pointer to variable to receive configured value. |
 +|- pvHigh – Pointer to variable to receive configured value. |
 +
 +The function above is used to verify the low and high counter value of the specified channel.
 +
 +|**FDwfDigitalOutDataInfo**(HDWF hdwf, int idxChannel, unsigned int *pcountOfBitsMax)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- pcountOfBitsMax – Variable to receive the maximum number of bits.|
 +
 +The function above is used to return the maximum buffers size, the number of custom data bits.
 +
 +|**FDwfDigitalOutDataSet**(HDWF hdwf, int idxChannel, void *rgBits, unsigned int countOfBits)|
 +|Parameters: |
 +|- hdwf – Interface handle.|
 +|- idxChannel – Channel index. |
 +|- rgBits – Custom data array. |
 +|- countOfBits –Number of bits.|
 +
 +The function above is used to set the custom data bits. The function also sets the counter initial, low and high value, according the number of bits. The data bits are sent out in LSB first order. For TS output, the count of bits is the total number of output value (I/O) and output enable (OE) bits, which should be an even number.
 +
 +|  Custom Data Bits                                                                        ||||||||||
 +| **BYTE**           | 0              |        |        |      |        | 1              |      |
 +| **Bits**           | 0       | 1      | 2      | 3      | ...  | 7      | 0       | 1      | ...  |
 +| **Output**         | I/O(0)  | OE(0)  | IE(1)  | OE(1)  | ...  | OE(3)  | I/O(4)  | OE(4)  | ...  |
 +
 +