"""****************************************************************************

 FILE       : GxPio.py

 PURPOSE    : Windows/Linux function prototypes for GXPIO libraries using 
              Python

 COPYRIGHT  : Copyright (c) Marvin Test Solutions, Inc. All Rights Reserved.

 CREATED    : Feb. 2023

 COMMENTS:  
 
    To compile your application, add the following to your source file:
        from ctypes import *
        from GxPio import *  
    Make sure GxPio.py is the python module path or use     
        sys.path.append statement to point to that module
        
****************************************************************************"""

# 
"""****************************************************************************
       Imports          
****************************************************************************"""
from ctypes import *
from ctypes.util import find_library

"""****************************************************************************
       GxPio Class                                                              
****************************************************************************"""

class GxPio:
    @property
    def c_string(self):
        return c_char_p(str(self).encode('utf-8'))

    CHAR = c_byte
    BYTE = c_ubyte
    SHORT = c_short
    WORD = c_ushort
    INT = c_int
    UINT = c_uint
    LONG = c_int
    DWORD = c_uint
    DOUBLE = c_double
    BOOL = c_int
    PBOOL = POINTER(c_bool)
    PBYTE = POINTER(c_ubyte)
    PSHORT = POINTER(c_short)
    PWORD = POINTER(c_ushort)
    PLONG = POINTER(c_int)
    PDWORD = POINTER(c_uint)
    PDOUBLE = POINTER(c_double)
    PVOID = c_void_p
    PSTR = c_char_p

    FALSE = 0
    TRUE = 1

    HANDLE = c_void_p
    HWND = c_int
    PCHAR = POINTER(c_byte)
    PCSTR = c_char_p      # c_string
    PHWND = POINTER(c_int)
    VOID = None

    GxPioLib = WinDLL(find_library("GxPio"))

    '''****************************************************************************
       Status codes
     ****************************************************************************'''
    #  board Warnings/info
    GXPIO_MODULE_BUFFER_OVERFLOW    = 20

    #  resource errors
    GT_NO_ERROR					            = 0
    GT_CANT_OPEN_HW				            = -1
    GT_BOARD_NOT_EXIST			            = -2
    GT_WRONG_BOARD				            = -3
    GT_SLOT_NOT_CONFIG			            = -4
    GT_UNABLE_REGISTER_DEVICE	            = -5
    GT_UNABLE_ALLOC_DEVICE_RESOURCE	        = -6
    GT_UNABLE_ALLOC_MEMORY			        = -7
    GT_UNABLE_CREATE_PANEL			        = -8
    GT_UNABLE_TO_GETTIMER			        = -9
    GT_BOARD_INVALID_EEPROM			        = -10
    GT_NOT_IN_CALIBRATION_MODE		        = -11
    GT_NOT_CALIBRATED				        = -12
    GT_ERR_FUNCTION_NOT_SUPPORTED	        = -13
    
    #  general parameter error 		        		
    GT_INVALID_ERROR				        = -20
    GT_INVALID_PARAMETER			        = -21
    GT_INVALID_SLOT					        = -22
    GT_INVALID_HANDLE				        = -23
    GT_INVALID_STRLEN				        = -24
    GT_INVALID_MODE					        = -25
    GT_PARAMETER_OUT_OF_RANGE		        = -26
        
    #  board specific parameter error        
    GXPIO_INVALID_PORT				        = -40
    GXPIO_INVALID_WORD				        = -41
    GXPIO_INVALID_BYTE				        = -42
    GXPIO_INVALID_BIT				        = -43
    GXPIO_INVALID_COUNTER			        = -44
    GXPIO_INVALID_IN_LOAD_CONTROL	        = -45
    GXPIO_INVALID_COUNTER_OR_ALL_TERMINAL_COUNT_AND_CLOCKS	= -46
    GXPIO_INVALID_TC_MODE					= -47
    GXPIO_INVALID_CLOCK_SOURCE				= -48
    GXPIO_INVALID_CLOCK						= -49
    GXPIO_INVALID_CLOCK_INTERNAL_SOURCE		= -50
    GXPIO_INVALID_GATE_SOURCE				= -51
    GXPIO_INVALID_DIVIDER					= -52
    GXPIO_INVALID_INTERNAL_STROBE_SOURCE	= -53
    GXPIO_INVALID_STROBE_SOURCE				= -54
    GXPIO_INVALID_STROBE_POLARITY			= -55
    GXPIO_INVALID_BUFFER_SIZE				= -56
    GXPIO_INVALID_GROUP						= -57
    GXPIO_INVALID_DIRECTION					= -58
    GXPIO_INVALID_CHANNEL					= -59
    GXPIO_INVALID_CHANNEL_MODE				= -60
    GXPIO_INVALID_CHANNEL_PORT_DIRECTION	= -61
    GXPIO_INVALID_CHANNEL_CONVERSION_MODE	= -62
    GXPIO_INVALID_CHANNEL_STATE				= -63
    GXPIO_INVALID_PXI_TRIGGER_LINE			= -64

    #  execution error								
    GXPIO_COUNTER_PORT_NOT_INPUT			= -80
    GXPIO_UNABLE_TO_EMPTY_BUFFER			= -81
    GXPIO_BUFFER_TEST_FAIL					= -82
    GXPIO_BUFFER_WRITE_FAIL					= -83
    GXPIO_BUFFER_READ_FAIL					= -84

    '''****************************************************************************
      General purpose functions
     ****************************************************************************'''
    # VOID WINAPI GxPioGetErrorString(SHORT nError, PSTR pszMsg, SHORT nErrorMaxLen, PSHORT pnStatus);
    GxPioGetErrorString = GxPioLib.GxPioGetErrorString
    GxPioGetErrorString.restype = VOID
    GxPioGetErrorString.argtypes = [SHORT, PSTR, SHORT, PSHORT]

    # VOID WINAPI GxPioGetDriverSummary(PSTR pszSummary, SHORT nSummaryMaxLen, PDWORD pdwVersion, PSHORT pnStatus);
    GxPioGetDriverSummary = GxPioLib.GxPioGetDriverSummary
    GxPioGetDriverSummary.restype = VOID
    GxPioGetDriverSummary.argtypes = [PSTR, SHORT, PDWORD, PSHORT]

    #  GTXXXPanel() constants
    #  nMode for panel functions
    GXPIO_PANEL_MODELESS				= 0
    GXPIO_PANEL_MODAL					= 1

    '''***************************************************************************
       Gx5641 functions
    ***************************************************************************'''
    #  General
    # VOID WINAPI Gx5641Initialize(SHORT nSlot, PSHORT pnHandle, PSHORT pnStatus);
    Gx5641Initialize = GxPioLib.Gx5641Initialize
    Gx5641Initialize.restype = VOID
    Gx5641Initialize.argtypes = [SHORT, PSHORT, PSHORT]
  
    # VOID WINAPI Gx5641InitializeVisa(PCSTR szVisaResource, PSHORT pnHandle, PSHORT pnStatus);
    Gx5641InitializeVisa = GxPioLib.Gx5641InitializeVisa
    Gx5641InitializeVisa.restype = VOID
    Gx5641InitializeVisa.argtypes = [PCSTR, PSHORT, PSHORT]

    # VOID WINAPI Gx5641Reset(SHORT nHandle, PSHORT pnStatus);
    Gx5641Reset = GxPioLib.Gx5641Reset
    Gx5641Reset.restype = VOID
    Gx5641Reset.argtypes = [SHORT, PSHORT]

    # VOID WINAPI Gx5641Panel(PSHORT pnHandle, HWND hwndParent, SHORT nMode, HWND * phwndPanel, PSHORT pnStatus);
    Gx5641Panel = GxPioLib.Gx5641Panel
    Gx5641Panel.restype = VOID
    Gx5641Panel.argtypes = [PSHORT, HWND, SHORT, PHWND, PSHORT]
    
    # VOID WINAPI Gx5641GetBoardSummary(SHORT nHandle, PSTR pszSummary, SHORT nSumMaxLen, PSHORT pnStatus);
    Gx5641GetBoardSummary = GxPioLib.Gx5641GetBoardSummary
    Gx5641GetBoardSummary.restype = VOID
    Gx5641GetBoardSummary.argtypes = [SHORT, PSTR, SHORT, PSHORT]
 
    #  Channel Functions
    #  Channel Output Enable/Disable
    # VOID WINAPI Gx5641GetChannelOutputState(SHORT nHandle, SHORT nChannel, PSHORT pnState, PSHORT pnStatus);
    Gx5641GetChannelOutputState = GxPioLib.Gx5641GetChannelOutputState
    Gx5641GetChannelOutputState.restype = VOID
    Gx5641GetChannelOutputState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    
    # VOID WINAPI Gx5641SetChannelOutputState(SHORT nHandle, SHORT nChannel, SHORT nState, PSHORT pnStatus);
    Gx5641SetChannelOutputState = GxPioLib.Gx5641SetChannelOutputState
    Gx5641SetChannelOutputState.restype = VOID
    Gx5641SetChannelOutputState.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Channel Mode Conversion or Static Parallel I/O
    # VOID WINAPI Gx5641GetChannelMode(SHORT nHandle, SHORT nChannel, PSHORT pnMode, PSHORT pnStatus);
    Gx5641GetChannelMode = GxPioLib.Gx5641GetChannelMode
    Gx5641GetChannelMode.restype = VOID
    Gx5641GetChannelMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5641SetChannelMode(SHORT nHandle, SHORT nChannel, SHORT nMode, PSHORT pnStatus);
    Gx5641SetChannelMode = GxPioLib.Gx5641SetChannelMode
    Gx5641SetChannelMode.restype = VOID
    Gx5641SetChannelMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # TTL Port
    # Channel TTL Port Level
    # VOID WINAPI Gx5641GetChannelTTLPort(SHORT nHandle, SHORT nChannel, PBOOL pbData, PSHORT pnStatus);
    Gx5641GetChannelTTLPort = GxPioLib.Gx5641GetChannelTTLPort
    Gx5641GetChannelTTLPort.restype = VOID
    Gx5641GetChannelTTLPort.argtypes = [SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5641SetChannelTTLPort(SHORT nHandle, SHORT nChannel, BOOL bData, PSHORT pnStatus);
    Gx5641SetChannelTTLPort = GxPioLib.Gx5641SetChannelTTLPort
    Gx5641SetChannelTTLPort.restype = VOID
    Gx5641SetChannelTTLPort.argtypes = [SHORT, SHORT, BOOL, PSHORT]

    # Channel TTL Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5641GetChannelTTLPortDirection(SHORT nHandle, SHORT nChannel, PSHORT pnDirection, PSHORT pnStatus);
    Gx5641GetChannelTTLPortDirection = GxPioLib.Gx5641GetChannelTTLPortDirection
    Gx5641GetChannelTTLPortDirection.restype = VOID
    Gx5641GetChannelTTLPortDirection.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5641SetChannelTTLPortDirection(SHORT nHandle, SHORT nChannel, SHORT nDirection, PSHORT pnStatus);
    Gx5641SetChannelTTLPortDirection = GxPioLib.Gx5641SetChannelTTLPortDirection
    Gx5641SetChannelTTLPortDirection.restype = VOID
    Gx5641SetChannelTTLPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Channel Differential Port Level 
    # VOID WINAPI Gx5641GetChannelDifferentialPort(SHORT nHandle, SHORT nChannel, PBOOL pbData, PSHORT pnStatus);
    Gx5641GetChannelDifferentialPort = GxPioLib.Gx5641GetChannelDifferentialPort
    Gx5641GetChannelDifferentialPort.restype = VOID
    Gx5641GetChannelDifferentialPort.argtypes = [SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5641SetChannelDifferentialPort(SHORT nHandle, SHORT nChannel, BOOL bData, PSHORT pnStatus);
    Gx5641SetChannelDifferentialPort = GxPioLib.Gx5641SetChannelDifferentialPort
    Gx5641SetChannelDifferentialPort.restype = VOID
    Gx5641SetChannelDifferentialPort.argtypes = [SHORT, SHORT, BOOL, PSHORT]

    # Channel Differential Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5641GetChannelDifferentialPortDirection(SHORT nHandle, SHORT nChannel, PSHORT pnDirection, PSHORT pnStatus);
    Gx5641GetChannelDifferentialPortDirection = GxPioLib.Gx5641GetChannelDifferentialPortDirection
    Gx5641GetChannelDifferentialPortDirection.restype = VOID
    Gx5641GetChannelDifferentialPortDirection.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5641SetChannelDifferentialPortDirection(SHORT nHandle, SHORT nChannel, SHORT nDirection, PSHORT pnStatus);
    Gx5641SetChannelDifferentialPortDirection = GxPioLib.Gx5641SetChannelDifferentialPortDirection
    Gx5641SetChannelDifferentialPortDirection.restype = VOID
    Gx5641SetChannelDifferentialPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Channel Conversion Mode
    # VOID WINAPI Gx5641GetChannelConversionMode(SHORT nHandle, SHORT nChannel, PSHORT pnMode, PSHORT pnStatus);
    Gx5641GetChannelConversionMode = GxPioLib.Gx5641GetChannelConversionMode
    Gx5641GetChannelConversionMode.restype = VOID
    Gx5641GetChannelConversionMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5641SetChannelConversionMode(SHORT nHandle, SHORT nChannel, SHORT nMode, PSHORT pnStatus);
    Gx5641SetChannelConversionMode = GxPioLib.Gx5641SetChannelConversionMode
    Gx5641SetChannelConversionMode.restype = VOID
    Gx5641SetChannelConversionMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Group  Functions
    # VOID WINAPI Gx5641ResetGroup(SHORT nHandle, SHORT nGroup, PSHORT pnStatus);
    Gx5641ResetGroup = GxPioLib.Gx5641ResetGroup
    Gx5641ResetGroup.restype = VOID
    Gx5641ResetGroup.argtypes = [SHORT, SHORT, PSHORT]

    # Group Channels State Disable/Enable
    # VOID WINAPI Gx5641GetGroupOutputState(SHORT nHandle, SHORT nGroup, PDWORD pdwStates, PSHORT pnStatus);
    Gx5641GetGroupOutputState = GxPioLib.Gx5641GetGroupOutputState
    Gx5641GetGroupOutputState.restype = VOID
    Gx5641GetGroupOutputState.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupOutputState(SHORT nHandle, SHORT nGroup, DWORD dwStates, PSHORT pnStatus);
    Gx5641SetGroupOutputState = GxPioLib.Gx5641SetGroupOutputState
    Gx5641SetGroupOutputState.restype = VOID
    Gx5641SetGroupOutputState.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Mode Conversion or Parallel I/O
    # VOID WINAPI Gx5641GetGroupMode(SHORT nHandle, SHORT nGroup, PDWORD pdwMode, PSHORT pnStatus);
    Gx5641GetGroupMode = GxPioLib.Gx5641GetGroupMode
    Gx5641GetGroupMode.restype = VOID
    Gx5641GetGroupMode.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupMode(SHORT nHandle, SHORT nGroup, DWORD dwMode, PSHORT pnStatus);
    Gx5641SetGroupMode = GxPioLib.Gx5641SetGroupMode
    Gx5641SetGroupMode.restype = VOID
    Gx5641SetGroupMode.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels TTL Port Level
    # VOID WINAPI Gx5641GetGroupTTLPort(SHORT nHandle, SHORT nGroup, PDWORD pdwPortData, PSHORT pnStatus);
    Gx5641GetGroupTTLPort = GxPioLib.Gx5641GetGroupTTLPort
    Gx5641GetGroupTTLPort.restype = VOID
    Gx5641GetGroupTTLPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupTTLPort(SHORT nHandle, SHORT nGroup, DWORD dwPortData, PSHORT pnStatus);
    Gx5641SetGroupTTLPort = GxPioLib.Gx5641SetGroupTTLPort
    Gx5641SetGroupTTLPort.restype = VOID
    Gx5641SetGroupTTLPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels TTL Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5641GetGroupTTLPortDirection(SHORT nHandle, SHORT nGroup, PDWORD pdwDirection, PSHORT pnStatus);
    Gx5641GetGroupTTLPortDirection = GxPioLib.Gx5641GetGroupTTLPortDirection
    Gx5641GetGroupTTLPortDirection.restype = VOID
    Gx5641GetGroupTTLPortDirection.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupTTLPortDirection(SHORT nHandle, SHORT nGroup, DWORD dwDirection, PSHORT pnStatus);
    Gx5641SetGroupTTLPortDirection = GxPioLib.Gx5641SetGroupTTLPortDirection
    Gx5641SetGroupTTLPortDirection.restype = VOID
    Gx5641SetGroupTTLPortDirection.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Differential Port Level
    # VOID WINAPI Gx5641GetGroupDifferentialPort(SHORT nHandle, SHORT nGroup, PDWORD pdwPortData, PSHORT pnStatus);
    Gx5641GetGroupDifferentialPort = GxPioLib.Gx5641GetGroupDifferentialPort
    Gx5641GetGroupDifferentialPort.restype = VOID
    Gx5641GetGroupDifferentialPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupDifferentialPort(SHORT nHandle, SHORT nGroup, DWORD dwPortData, PSHORT pnStatus);
    Gx5641SetGroupDifferentialPort = GxPioLib.Gx5641SetGroupDifferentialPort
    Gx5641SetGroupDifferentialPort.restype = VOID
    Gx5641SetGroupDifferentialPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Differential Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5641GetGroupDifferentialPortDirection(SHORT nHandle, SHORT nGroup, PDWORD pdwDirection, PSHORT pnStatus);
    Gx5641GetGroupDifferentialPortDirection = GxPioLib.Gx5641GetGroupDifferentialPortDirection
    Gx5641GetGroupDifferentialPortDirection.restype = VOID
    Gx5641GetGroupDifferentialPortDirection.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupDifferentialPortDirection(SHORT nHandle, SHORT nGroup, DWORD dwDirection, PSHORT pnStatus);
    Gx5641SetGroupDifferentialPortDirection = GxPioLib.Gx5641SetGroupDifferentialPortDirection
    Gx5641SetGroupDifferentialPortDirection.restype = VOID
    Gx5641SetGroupDifferentialPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Group Channels Conversion Mode
    # VOID WINAPI Gx5641GetGroupConversionMode(SHORT nHandle, SHORT nGroup, PDWORD pdwMode, PSHORT pnStatus);
    Gx5641GetGroupConversionMode = GxPioLib.Gx5641GetGroupConversionMode
    Gx5641GetGroupConversionMode.restype = VOID
    Gx5641GetGroupConversionMode.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5641SetGroupConversionMode(SHORT nHandle, SHORT nGroup, PDWORD dwMode, PSHORT pnStatus);
    Gx5641SetGroupConversionMode = GxPioLib.Gx5641SetGroupConversionMode
    Gx5641SetGroupConversionMode.restype = VOID
    Gx5641SetGroupConversionMode.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # VOID WINAPI Gx5641LoadGroupDirectionFromDIPSwitch(SHORT nHandle, SHORT nGroup, PSHORT pnStatus);
    Gx5641LoadGroupDirectionFromDIPSwitch = GxPioLib.Gx5641LoadGroupDirectionFromDIPSwitch
    Gx5641LoadGroupDirectionFromDIPSwitch.restype = VOID
    Gx5641LoadGroupDirectionFromDIPSwitch.argtypes = [SHORT, SHORT, PSHORT]

    # PXI Trigger Bus Line to Group Output state 
    # VOID WINAPI Gx5641GetPxiTriggerBusToGroupOutputState(SHORT nHandle, SHORT nGroup, PSHORT pnLine, PBOOL pbEnable, PSHORT pnStatus);
    Gx5641GetPxiTriggerBusToGroupOutputState = GxPioLib.Gx5641GetPxiTriggerBusToGroupOutputState
    Gx5641GetPxiTriggerBusToGroupOutputState.restype = VOID
    Gx5641GetPxiTriggerBusToGroupOutputState.argtypes = [SHORT, SHORT, PSHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5641SetPxiTriggerBusToGroupOutputState(SHORT nHandle, SHORT nGroup, SHORT nLine, BOOL bEnable, PSHORT pnStatus);
    Gx5641SetPxiTriggerBusToGroupOutputState = GxPioLib.Gx5641SetPxiTriggerBusToGroupOutputState
    Gx5641SetPxiTriggerBusToGroupOutputState.restype = VOID
    Gx5641SetPxiTriggerBusToGroupOutputState.argtypes = [SHORT, SHORT, SHORT, SHORT, BOOL, PSHORT]

    # Groups numbers
    GX5641_GROUP0								= 0
    GX5641_GROUP1								= 1
    
    # Channels numbers									
    GX5641_FIRST_CHANNEL						= 0
    GX5641_LAST_CHANNEL							= 63
    
    # Channel otput enable/disable						
    GX5641_CHANNEL_OUTPUT_DISABLE				= 0
    GX5641_CHANNEL_OUTPUT_ENABLE				= 1
    
    # Channel operating mode
    GX5641_CHANNEL_MODE_CONVERSION				= 0
    GX5641_CHANNEL_MODE_STATIC_IO				= 1

    # Channel direction
    GX5641_CHANNEL_PORT_INPUT					= 0
    GX5641_CHANNEL_PORT_OUTPUT					= 1

    # Channel conversion mode
    GX5641_CHANNEL_CONVERT_DIFFERENTIAL_TO_TTL	= 0
    GX5641_CHANNEL_CONVERT_TTL_TO_DIFFERENTIAL	= 1

    # Channel port
    GX5641_CHANNEL_TTL_PORT						= 0
    GX5641_CHANNEL_DIFFERENTIAL_PORT			= 1

    # PXI Triger Line
    GX5641_PXI_TRIGGER_LINE0					= 0
    GX5641_PXI_TRIGGER_LINE1					= 1
    GX5641_PXI_TRIGGER_LINE2					= 2
    GX5641_PXI_TRIGGER_LINE3					= 3
    GX5641_PXI_TRIGGER_LINE4					= 4
    GX5641_PXI_TRIGGER_LINE5					= 5
    GX5641_PXI_TRIGGER_LINE6					= 6
    GX5641_PXI_TRIGGER_LINE7					= 7

    '''***************************************************************************
        Gx5642 functions
    ***************************************************************************'''
    # General
    # VOID WINAPI Gx5642Initialize(SHORT nSlot, PSHORT pnHandle, PSHORT pnStatus);
    Gx5642Initialize = GxPioLib.Gx5642Initialize
    Gx5642Initialize.restype = VOID
    Gx5642Initialize.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5642InitializeVisa(PCSTR szVisaResource, PSHORT pnHandle, PSHORT pnStatus);
    Gx5642InitializeVisa = GxPioLib.Gx5642InitializeVisa
    Gx5642InitializeVisa.restype = VOID
    Gx5642InitializeVisa.argtypes = [PCSTR, PSHORT, PSHORT]
    # VOID WINAPI Gx5642Reset(SHORT nHandle, PSHORT pnStatus);
    Gx5642Reset = GxPioLib.Gx5642Reset
    Gx5642Reset.restype = VOID
    Gx5642Reset.argtypes = [SHORT, PSHORT]
    # VOID WINAPI Gx5642Panel(PSHORT pnHandle, HWND hwndParent, SHORT nMode, HWND * phwndPanel, PSHORT pnStatus);
    Gx5642Panel = GxPioLib.Gx5642Panel
    Gx5642Panel.restype = VOID
    Gx5642Panel.argtypes = [SHORT, HWND, SHORT, PHWND, PSHORT]
    # VOID WINAPI Gx5642GetBoardSummary(SHORT nHandle, PSTR pszSummary, SHORT nSumMaxLen, PSHORT pnStatus);
    Gx5642GetBoardSummary = GxPioLib.Gx5642GetBoardSummary
    Gx5642GetBoardSummary.restype = VOID
    Gx5642GetBoardSummary.argtypes = [SHORT, PSTR, SHORT, PSHORT]

    # Channel Functions
    # Channel Output Enable/Disable
    # VOID WINAPI Gx5642GetChannelOutputState(SHORT nHandle, SHORT nChannel, PSHORT pnState, PSHORT pnStatus);
    Gx5642GetChannelOutputState = GxPioLib.Gx5642GetChannelOutputState
    Gx5642GetChannelOutputState.restype = VOID
    Gx5642GetChannelOutputState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5642SetChannelOutputState(SHORT nHandle, SHORT nChannel, SHORT nState, PSHORT pnStatus);
    Gx5642SetChannelOutputState = GxPioLib.Gx5642SetChannelOutputState
    Gx5642SetChannelOutputState.restype = VOID
    Gx5642SetChannelOutputState.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Channel Mode Conversion or Static Parallel I/O
    # VOID WINAPI Gx5642GetChannelMode(SHORT nHandle, SHORT nChannel, PSHORT pnMode, PSHORT pnStatus);
    Gx5642GetChannelMode = GxPioLib.Gx5642GetChannelMode
    Gx5642GetChannelMode.restype = VOID
    Gx5642GetChannelMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5642SetChannelMode(SHORT nHandle, SHORT nChannel, SHORT nMode, PSHORT pnStatus);
    Gx5642SetChannelMode = GxPioLib.Gx5642SetChannelMode
    Gx5642SetChannelMode.restype = VOID
    Gx5642SetChannelMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # TTL Port
    # Channel TTL Port Level
    # VOID WINAPI Gx5642GetChannelTTLPort(SHORT nHandle, SHORT nChannel, PBOOL pbData, PSHORT pnStatus);
    Gx5642GetChannelTTLPort = GxPioLib.Gx5642GetChannelTTLPort
    Gx5642GetChannelTTLPort.restype = VOID
    Gx5642GetChannelTTLPort.argtypes = [SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5642SetChannelTTLPort(SHORT nHandle, SHORT nChannel, BOOL bData, PSHORT pnStatus);
    Gx5642SetChannelTTLPort = GxPioLib.Gx5642SetChannelTTLPort
    Gx5642SetChannelTTLPort.restype = VOID
    Gx5642SetChannelTTLPort.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]

    # Channel TTL Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5642GetChannelTTLPortDirection(SHORT nHandle, SHORT nChannel, PSHORT pnDirection, PSHORT pnStatus);
    Gx5642GetChannelTTLPortDirection = GxPioLib.Gx5642GetChannelTTLPortDirection
    Gx5642GetChannelTTLPortDirection.restype = VOID
    Gx5642GetChannelTTLPortDirection.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5642SetChannelTTLPortDirection(SHORT nHandle, SHORT nChannel, SHORT nDirection, PSHORT pnStatus);
    Gx5642SetChannelTTLPortDirection = GxPioLib.Gx5642SetChannelTTLPortDirection
    Gx5642SetChannelTTLPortDirection.restype = VOID
    Gx5642SetChannelTTLPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Channel Differential Port Level 
    # VOID WINAPI Gx5642GetChannelDifferentialPort(SHORT nHandle, SHORT nChannel, PBOOL pbData, PSHORT pnStatus);
    Gx5642GetChannelDifferentialPort = GxPioLib.Gx5642GetChannelDifferentialPort
    Gx5642GetChannelDifferentialPort.restype = VOID
    Gx5642GetChannelDifferentialPort.argtypes = [SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5642SetChannelDifferentialPort(SHORT nHandle, SHORT nChannel, BOOL bData, PSHORT pnStatus);
    Gx5642SetChannelDifferentialPort = GxPioLib.Gx5642SetChannelDifferentialPort
    Gx5642SetChannelDifferentialPort.restype = VOID
    Gx5642SetChannelDifferentialPort.argtypes = [SHORT, SHORT, BOOL, PSHORT]

    # Channel Differential Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5642GetChannelDifferentialPortDirection(SHORT nHandle, SHORT nChannel, PSHORT pnDirection, PSHORT pnStatus);
    Gx5642GetChannelDifferentialPortDirection = GxPioLib.Gx5642GetChannelDifferentialPortDirection
    Gx5642GetChannelDifferentialPortDirection.restype = VOID
    Gx5642GetChannelDifferentialPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5642SetChannelDifferentialPortDirection(SHORT nHandle, SHORT nChannel, SHORT nDirection, PSHORT pnStatus);
    Gx5642SetChannelDifferentialPortDirection = GxPioLib.Gx5642SetChannelDifferentialPortDirection
    Gx5642SetChannelDifferentialPortDirection.restype = VOID
    Gx5642SetChannelDifferentialPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Channel Conversion Mode
    # VOID WINAPI Gx5642GetChannelConversionMode(SHORT nHandle, SHORT nChannel, PSHORT pnMode, PSHORT pnStatus);
    Gx5642GetChannelConversionMode = GxPioLib.Gx5642GetChannelConversionMode
    Gx5642GetChannelConversionMode.restype = VOID
    Gx5642GetChannelConversionMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5642SetChannelConversionMode(SHORT nHandle, SHORT nChannel, SHORT nMode, PSHORT pnStatus);
    Gx5642SetChannelConversionMode = GxPioLib.Gx5642SetChannelConversionMode
    Gx5642SetChannelConversionMode.restype = VOID
    Gx5642SetChannelConversionMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Group  Functions
    # VOID WINAPI Gx5642ResetGroup(SHORT nHandle, SHORT nGroup, PSHORT pnStatus);
    Gx5642ResetGroup = GxPioLib.Gx5642ResetGroup
    Gx5642ResetGroup.restype = VOID
    Gx5642ResetGroup.argtypes = [SHORT, SHORT, PSHORT]

    # Group Channels State Disable/Enable
    # VOID WINAPI Gx5642GetGroupOutputState(SHORT nHandle, SHORT nGroup, PDWORD pdwStates, PSHORT pnStatus);
    Gx5642GetGroupOutputState = GxPioLib.Gx5642GetGroupOutputState
    Gx5642GetGroupOutputState.restype = VOID
    Gx5642GetGroupOutputState.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupOutputState(SHORT nHandle, SHORT nGroup, DWORD dwStates, PSHORT pnStatus);
    Gx5642SetGroupOutputState = GxPioLib.Gx5642SetGroupOutputState
    Gx5642SetGroupOutputState.restype = VOID
    Gx5642SetGroupOutputState.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Mode Conversion or Parallel I/O
    # VOID WINAPI Gx5642GetGroupMode(SHORT nHandle, SHORT nGroup, PDWORD pdwMode, PSHORT pnStatus);
    Gx5642GetGroupMode = GxPioLib.Gx5642GetGroupMode
    Gx5642GetGroupMode.restype = VOID
    Gx5642GetGroupMode.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupMode(SHORT nHandle, SHORT nGroup, DWORD dwMode, PSHORT pnStatus);
    Gx5642SetGroupMode = GxPioLib.Gx5642SetGroupMode
    Gx5642SetGroupMode.restype = VOID
    Gx5642SetGroupMode.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels TTL Port Level
    # VOID WINAPI Gx5642GetGroupTTLPort(SHORT nHandle, SHORT nGroup, PDWORD pdwPortData, PSHORT pnStatus);
    Gx5642GetGroupTTLPort = GxPioLib.Gx5642GetGroupTTLPort
    Gx5642GetGroupTTLPort.restype = VOID
    Gx5642GetGroupTTLPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupTTLPort(SHORT nHandle, SHORT nGroup, DWORD dwPortData, PSHORT pnStatus);
    Gx5642SetGroupTTLPort = GxPioLib.Gx5642SetGroupTTLPort
    Gx5642SetGroupTTLPort.restype = VOID
    Gx5642SetGroupTTLPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels TTL Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5642GetGroupTTLPortDirection(SHORT nHandle, SHORT nGroup, PDWORD pdwDirection, PSHORT pnStatus);
    Gx5642GetGroupTTLPortDirection = GxPioLib.Gx5642GetGroupTTLPortDirection
    Gx5642GetGroupTTLPortDirection.restype = VOID
    Gx5642GetGroupTTLPortDirection.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupTTLPortDirection(SHORT nHandle, SHORT nGroup, DWORD dwDirection, PSHORT pnStatus);
    Gx5642SetGroupTTLPortDirection = GxPioLib.Gx5642SetGroupTTLPortDirection
    Gx5642SetGroupTTLPortDirection.restype = VOID
    Gx5642SetGroupTTLPortDirection.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Differential Port Level
    # VOID WINAPI Gx5642GetGroupDifferentialPort(SHORT nHandle, SHORT nGroup, PDWORD pdwPortData, PSHORT pnStatus);
    Gx5642GetGroupDifferentialPort = GxPioLib.Gx5642GetGroupDifferentialPort
    Gx5642GetGroupDifferentialPort.restype = VOID
    Gx5642GetGroupDifferentialPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupDifferentialPort(SHORT nHandle, SHORT nGroup, DWORD dwPortData, PSHORT pnStatus);
    Gx5642SetGroupDifferentialPort = GxPioLib.Gx5642SetGroupDifferentialPort
    Gx5642SetGroupDifferentialPort.restype = VOID
    Gx5642SetGroupDifferentialPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Differential Port Direction (Parallel I/O mode only)
    # VOID WINAPI Gx5642GetGroupDifferentialPortDirection(SHORT nHandle, SHORT nGroup, PDWORD pdwDirection, PSHORT pnStatus);
    Gx5642GetGroupDifferentialPortDirection = GxPioLib.Gx5642GetGroupDifferentialPortDirection
    Gx5642GetGroupDifferentialPortDirection.restype = VOID
    Gx5642GetGroupDifferentialPortDirection.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupDifferentialPortDirection(SHORT nHandle, SHORT nGroup, DWORD dwDirection, PSHORT pnStatus);
    Gx5642SetGroupDifferentialPortDirection = GxPioLib.Gx5642SetGroupDifferentialPortDirection
    Gx5642SetGroupDifferentialPortDirection.restype = VOID
    Gx5642SetGroupDifferentialPortDirection.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Group Channels Conversion Mode
    # VOID WINAPI Gx5642GetGroupConversionMode(SHORT nHandle, SHORT nGroup, PDWORD pdwMode, PSHORT pnStatus);
    Gx5642GetGroupConversionMode = GxPioLib.Gx5642GetGroupConversionMode
    Gx5642GetGroupConversionMode.restype = VOID
    Gx5642GetGroupConversionMode.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5642SetGroupConversionMode(SHORT nHandle, SHORT nGroup, DWORD dwMode, PSHORT pnStatus);
    Gx5642SetGroupConversionMode = GxPioLib.Gx5642SetGroupConversionMode
    Gx5642SetGroupConversionMode.restype = VOID
    Gx5642SetGroupConversionMode.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # VOID WINAPI Gx5642LoadGroupDirectionFromDIPSwitch(SHORT nHandle, SHORT nGroup, PSHORT pnStatus);
    Gx5642LoadGroupDirectionFromDIPSwitch = GxPioLib.Gx5642LoadGroupDirectionFromDIPSwitch
    Gx5642LoadGroupDirectionFromDIPSwitch.restype = VOID
    Gx5642LoadGroupDirectionFromDIPSwitch.argtypes = [SHORT, SHORT, PSHORT]

    # PXI Trigger Bus Line to Group Output state 
    # VOID WINAPI Gx5642SetPxiTriggerBusToGroupOutputState(SHORT nHandle, SHORT nGroup, PSHORT pnLine, PBOOL pbEnable, PSHORT pnStatus);
    Gx5642SetPxiTriggerBusToGroupOutputState = GxPioLib.Gx5642SetPxiTriggerBusToGroupOutputState
    Gx5642SetPxiTriggerBusToGroupOutputState.restype = VOID
    Gx5642SetPxiTriggerBusToGroupOutputState.argtypes = [SHORT, SHORT, PSHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5642SetPxiTriggerBusToGroupOutputState(SHORT nHandle, SHORT nGroup, SHORT nLine, BOOL bEnable, PSHORT pnStatus);
    Gx5642SetPxiTriggerBusToGroupOutputState = GxPioLib.Gx5642SetPxiTriggerBusToGroupOutputState
    Gx5642SetPxiTriggerBusToGroupOutputState.restype = VOID
    Gx5642SetPxiTriggerBusToGroupOutputState.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]


    # Groups numbers
    GX5642_GROUP0								= 0
    GX5642_GROUP1								= 1
    
    # Channels numbers									
    GX5642_FIRST_CHANNEL						= 0
    GX5642_LAST_CHANNEL							= 63
    
    # Channel otput enable/disable						
    GX5642_CHANNEL_OUTPUT_DISABLE				= 0
    GX5642_CHANNEL_OUTPUT_ENABLE				= 1
    
    # Channel operating mode                     
    GX5642_CHANNEL_MODE_CONVERSION				= 0
    GX5642_CHANNEL_MODE_STATIC_IO				= 1
    
    # Channel direction                         
    GX5642_CHANNEL_PORT_INPUT					= 0
    GX5642_CHANNEL_PORT_OUTPUT					= 1

    # Channel conversion mode
    GX5642_CHANNEL_CONVERT_DIFFERENTIAL_TO_TTL	= 0
    GX5642_CHANNEL_CONVERT_TTL_TO_DIFFERENTIAL	= 1
    
    # Channel port                              = 
    GX5642_CHANNEL_TTL_PORT						= 0
    GX5642_CHANNEL_DIFFERENTIAL_PORT			= 1
    
    # PXI Triger Line                           
    GX5642_PXI_TRIGGER_LINE0					= 0
    GX5642_PXI_TRIGGER_LINE1					= 1
    GX5642_PXI_TRIGGER_LINE2					= 2
    GX5642_PXI_TRIGGER_LINE3					= 3
    GX5642_PXI_TRIGGER_LINE4					= 4
    GX5642_PXI_TRIGGER_LINE5					= 5
    GX5642_PXI_TRIGGER_LINE6					= 6
    GX5642_PXI_TRIGGER_LINE7					= 7
   
    '''****************************************************************************
        Gx5731 functions
     ****************************************************************************'''
    # General
    # VOID WINAPI Gx5731Initialize(SHORT nSlot, PSHORT pnHandle, PSHORT pnStatus);
    Gx5731Initialize = GxPioLib.Gx5731Initialize
    Gx5731Initialize.restype = VOID
    Gx5731Initialize.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731InitializeVisa(PCSTR szVisaResource, PSHORT pnHandle, PSHORT pnStatus);
    Gx5731InitializeVisa = GxPioLib.Gx5731InitializeVisa
    Gx5731InitializeVisa.restype = VOID
    Gx5731InitializeVisa.argtypes = [PCSTR, PSHORT, PSHORT]
    # VOID WINAPI Gx5731Reset(SHORT nHandle, PSHORT pnStatus);
    Gx5731Reset = GxPioLib.Gx5731Reset
    Gx5731Reset.restype = VOID
    Gx5731Reset.argtypes = [SHORT, PSHORT]
    # VOID WINAPI Gx5731Panel(PSHORT pnHandle, HWND hwndParent, SHORT nMode, HWND * phwndPanel, PSHORT pnStatus);
    Gx5731Panel = GxPioLib.Gx5731Panel
    Gx5731Panel.restype = VOID
    Gx5731Panel.argtypes = [SHORT, HWND, SHORT, PHWND, PSHORT]
    # VOID WINAPI Gx5731GetBoardSummary(SHORT nHandle, PSTR pszSummary, SHORT nSumMaxLen, PSHORT pnStatus);
    Gx5731GetBoardSummary = GxPioLib.Gx5731GetBoardSummary
    Gx5731GetBoardSummary.restype = VOID
    Gx5731GetBoardSummary.argtypes = [SHORT, PSTR, SHORT, PSHORT]

    # ** Digital I/O Port
    # Port number
    GX5731_PORT0								= 0
    GX5731_PORT1								= 1
    GX5731_PORT2								= 2
    GX5731_PORT3								= 3
    GX5731_PORT4								= 4
    GX5731_PORT5								= 5
    GX5731_PORT6								= 6
    
    # Port Word position: low/high Word         
    GX5731_PORT_LOW_WORD						= 0
    GX5731_PORT_HIGH_WORD						= 1
    
    # Port Byte position: 0 to 3                 
    GX5731_PORT_BYTE0							= 0
    GX5731_PORT_BYTE1							= 1
    GX5731_PORT_BYTE2							= 2
    GX5731_PORT_BYTE3		                    = 3					
    
    # I/O port direction
    GX5731_PORT_DIRECTION_IN					= 0
    GX5731_PORT_DIRECTION_OUT					= 1
    
    # Module types                             
    GX5731_NO_MODULE_INSTALLED					= 5700
    GX5731_DIGITAL_INPUT_LATCH					= 5701
    GX5731_DIGITAL_OUTPUT_LATCH					= 5702
    GX5731_DIGITAL_POWER_OUTPUT_LATCH			= 5704
    GX5731_RS422_PORT_IO						= 5709
    GX5731_LVDS_TTL_BIDIRECTIONAL_CONVERTER		= 5711
    GX5731_RS422_TTL_BIDIRECTIONAL_CONVERTER	= 5712
    GX5731_DIGITAL_PORT_IO						= 5714
    GX5731_PORT_IN_ONLY							= 5715

    # Module State mode
    GX5731_MODULE_STATE_HALT					= 0
    GX5731_MODULE_STATE_RUN						= 1

    # Module output mode
    GX5731_MODULE_OUTPUT_DISABLE				= 0
    GX5731_MODULE_OUTPUT_ENABLE					= 1

    # Module operation mode
    GX5731_MODULE_OPERATION_BUFFERED			= 0
    GX5731_MODULE_OPERATION_PORT_IO				= 1

    # Module Handshake output mode
    GX5731_MODULE_HANDSHAKE_OUTPUT_DISABLE		= 0
    GX5731_MODULE_HANDSHAKE_OUTPUT_ENABLE		= 1

    # Module FIFO buffer size
    GX5731_MIN_BUFFER_SIZE						= 1
    GX5731_MAX_BUFFER_SIZE						= 4096

    # Module Flag mode
    GX5731_MODULE_BUFFER_MODE_FULL				= 0
    GX5731_MODULE_BUFFER_MODE_HALF_FULL			= 1

    # Module Flag state
    GX5731_MODULE_BUFFER_EMPTY					= 0
    GX5731_MODULE_BUFFER_FULL					= 1

    # Module Threshold Voltage
    GX5731_MODULE_MIN_VTHRESHOLD				= -30.0
    GX5731_MODULE_MAX_VTHRESHOLD				= 30.0

    # Output Strobe Width of 50nSec to 5uSec in steps of 50nSec
    GX5731_MODULE_MIN_STROBE_WIDTH				= 50
    GX5731_MODULE_MAX_STROBE_WIDTH				= 5000

    # Module Strobe source
    GX5731_MODULE_STROBE_INTERNAL				= 0
    GX5731_MODULE_STROBE_EXTERNAL				= 1

    # Module Strobe polarity
    GX5731_MODULE_STROBE_POSITIVE_EDGE			= 0
    GX5731_MODULE_STROBE_NEGATIVE_EDGE			= 1

    # Module Internal Strobe Source
    GX5731_MODULE_INTERNAL_STROBE_NOT_CONNECTED	= 0
    GX5731_MODULE_INTERNAL_STROBE_T0_CLOCK0		= 1
    GX5731_MODULE_INTERNAL_STROBE_T0_CLOCK1		= 2
    GX5731_MODULE_INTERNAL_STROBE_T0_CLOCK_IN2	= 3
    GX5731_MODULE_INTERNAL_STROBE_T0_CLOCK_IN3	= 4
    GX5731_MODULE_INTERNAL_STROBE_T0_CLOCK_IN4	= 5
    GX5731_MODULE_INTERNAL_STROBE_T0_CLOCK_IN5	= 6
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER0	= 7
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER1	= 8
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER2	= 9
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER3	= 10
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER4	= 11
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER5	= 12
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER6	= 13
    GX5731_MODULE_INTERNAL_STROBE_T0_XTRIGGER7	= 14

    # Clock numbers
    GX5731_CLOCK0								= 0
    GX5731_CLOCK1								= 1

    # Intrenal Clock Enable modes
    GX5731_DISABLE_INTERNAL_CLOCK				= 0
    GX5731_ENABLE_INTERNAL_CLOCK				= 1

    # Module State mode
    GX5731_MODULE_STATE_HALT					= 0
    GX5731_MODULE_STATE_RUN						= 1

    # Clock divider
    GX5731_MIN_CLOCK_DIVIDER					= 1
    GX5731_MAX_CLOCK_DIVIDER					= 0x10000000

    # Internal Clock0 source
    GX5731_INTERNAL_CLOCK0_T0_CLOCK_IN0			= 0
    GX5731_INTERNAL_CLOCK0_T0_PCI_CLOCK_33MHZ	= 1
    GX5731_INTERNAL_CLOCK0_T0_PXI_CLOCK_10MHZ	= 2
    GX5731_INTERNAL_CLOCK0_T0_STAR_TRIGGER		= 3
    GX5731_INTERNAL_CLOCK0_T0_EXT_TRIGGER0		= 4
    GX5731_INTERNAL_CLOCK0_T0_EXT_TRIGGER1		= 5
    GX5731_INTERNAL_CLOCK0_T0_EXT_TRIGGER2		= 6
    GX5731_INTERNAL_CLOCK0_T0_EXT_TRIGGER3		= 7

    # Internal Clock1 source
    GX5731_INTERNAL_CLOCK1_T0_CLOCK_IN1			= 0
    GX5731_INTERNAL_CLOCK1_T0_PCI_CLOCK_33MHZ	= 1
    GX5731_INTERNAL_CLOCK1_T0_PXI_CLOCK_10MHZ	= 2
    GX5731_INTERNAL_CLOCK1_T0_STAR_TRIGGER		= 3
    GX5731_INTERNAL_CLOCK1_T0_EXT_TRIGGER4		= 4
    GX5731_INTERNAL_CLOCK1_T0_EXT_TRIGGER5		= 5
    GX5731_INTERNAL_CLOCK1_T0_EXT_TRIGGER6		= 6
    GX5731_INTERNAL_CLOCK1_T0_EXT_TRIGGER7		= 7

    # PXI Triger Line
    GX5731_PXI_TRIGGER_LINE0					= 0
    GX5731_PXI_TRIGGER_LINE1					= 1
    GX5731_PXI_TRIGGER_LINE2					= 2
    GX5731_PXI_TRIGGER_LINE3					= 3
    GX5731_PXI_TRIGGER_LINE4					= 4
    GX5731_PXI_TRIGGER_LINE5					= 5
    GX5731_PXI_TRIGGER_LINE6					= 6
    GX5731_PXI_TRIGGER_LINE7					= 7

    # PXI Triger Line mode
    GX5731_PXI_TRIGGER_LINE_DISCONNECTED		= 0
    GX5731_PXI_TRIGGER_LINE_CONNECTED			= 1

    # External Triger Line
    GX5731_EXT_TRIGGER_LINE0					= 0
    GX5731_EXT_TRIGGER_LINE1					= 1
    GX5731_EXT_TRIGGER_LINE2					= 2
    GX5731_EXT_TRIGGER_LINE3					= 3
    GX5731_EXT_TRIGGER_LINE4					= 4
    GX5731_EXT_TRIGGER_LINE5					= 5
    GX5731_EXT_TRIGGER_LINE6					= 6
    GX5731_EXT_TRIGGER_LINE7					= 7

    # Modules 5709/5711/5712 constants
    # Direction
    GX5731_MODULE_DIRECTION_INPUT					= 0
    GX5731_MODULE_DIRECTION_OUTPUT					= 1

    # Termination
    GX5731_MODULE_TERMINATION_OFF					= 0
    GX5731_MODULE_TERMINATION_ON					= 1

    # Groups numbers (group has 16 lines/8 differentials)
    GX5731_MODULE_GROUP0							= 0
    GX5731_MODULE_GROUP1							= 1

    # Direction Differential to/from TTL
    GX5731_MODULE_DIRECTION_DIFFERENTIAL_TO_TTL		= 0
    GX5731_MODULE_DIRECTION_TTL_TO_DIFFERENTIAL		= 1

    # Modules Group Conversion Method Source
    GX5731_MODULE_DIRECTION_SOURCE_INTERNAL			= 0
    GX5731_MODULE_DIRECTION_SOURCE_EXTERNAL			= 1

    # Digital I/O Port functions
    # VOID WINAPI Gx5731ResetPort(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5731ResetPort = GxPioLib.Gx5731ResetPort
    Gx5731ResetPort.restype = VOID
    Gx5731ResetPort.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731GetPort(SHORT nHandle, SHORT nPort, PDWORD pdwValue, PSHORT pnStatus);
    Gx5731GetPort = GxPioLib.Gx5731GetPort
    Gx5731GetPort.restype = VOID
    Gx5731GetPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5731SetPort(SHORT nHandle, SHORT nPort, DWORD dwValue, PSHORT pnStatus);
    Gx5731SetPort = GxPioLib.Gx5731SetPort
    Gx5731SetPort.restype = VOID
    Gx5731SetPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]
    # VOID WINAPI Gx5731GetPortWord(SHORT nHandle, SHORT nPort, SHORT nWord, PWORD pwValue, PSHORT pnStatus);
    Gx5731GetPortWord = GxPioLib.Gx5731GetPortWord
    Gx5731GetPortWord.restype = VOID
    Gx5731GetPortWord.argtypes = [SHORT, SHORT, SHORT, PWORD, PSHORT]
    # VOID WINAPI Gx5731SetPortWord(SHORT nHandle, SHORT nPort, SHORT nWord, WORD wValue, PSHORT pnStatus);
    Gx5731SetPortWord = GxPioLib.Gx5731SetPortWord
    Gx5731SetPortWord.restype = VOID
    Gx5731SetPortWord.argtypes = [SHORT, SHORT, SHORT, WORD, PSHORT]
    # VOID WINAPI Gx5731GetPortByte(SHORT nHandle, SHORT nPort, SHORT nByte, PBYTE pucValue, PSHORT pnStatus);
    Gx5731GetPortByte = GxPioLib.Gx5731GetPortByte
    Gx5731GetPortByte.restype = VOID
    Gx5731GetPortByte.argtypes = [SHORT, SHORT, SHORT, PBYTE, PSHORT]
    # VOID WINAPI Gx5731SetPortByte(SHORT nHandle, SHORT nPort, SHORT nByte, BYTE ucValue, PSHORT pnStatus);
    Gx5731SetPortByte = GxPioLib.Gx5731SetPortByte
    Gx5731SetPortByte.restype = VOID
    Gx5731SetPortByte.argtypes = [SHORT, SHORT, SHORT, BYTE, PSHORT]
    # VOID WINAPI Gx5731GetPortBit(SHORT nHandle, SHORT nPort, SHORT nBit, PBOOL pbOn, PSHORT pnStatus);
    Gx5731GetPortBit = GxPioLib.Gx5731GetPortBit
    Gx5731GetPortBit.restype = VOID
    Gx5731GetPortBit.argtypes = [SHORT, SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5731SetPortBit(SHORT nHandle, SHORT nPort, SHORT nBit, BOOL bOn, PSHORT pnStatus);
    Gx5731SetPortBit = GxPioLib.Gx5731SetPortBit
    Gx5731SetPortBit.restype = VOID
    Gx5731SetPortBit.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]
    # VOID WINAPI Gx5731GetPortDirection(SHORT nHandle, SHORT nPort, PSHORT pnDirection, PSHORT pnStatus);
    Gx5731GetPortDirection = GxPioLib.Gx5731GetPortDirection
    Gx5731GetPortDirection.restype = VOID
    Gx5731GetPortDirection.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731SetPortDirection(SHORT nHandle, SHORT nPort, SHORT nDirection, PSHORT pnStatus);
    Gx5731SetPortDirection = GxPioLib.Gx5731SetPortDirection
    Gx5731SetPortDirection.restype = VOID
    Gx5642SetChannelConversionMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731GetPortByteDirection(SHORT nHandle, SHORT nPort, SHORT nByte, PBOOL pbInOut, PSHORT pnStatus);
    Gx5731GetPortByteDirection = GxPioLib.Gx5731GetPortByteDirection
    Gx5731GetPortByteDirection.restype = VOID
    Gx5731GetPortByteDirection.argtypes = [SHORT, SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5731SetPortByteDirection(SHORT nHandle, SHORT nPort, SHORT nByte, BOOL bInOut, PSHORT pnStatus);
    Gx5731SetPortByteDirection = GxPioLib.Gx5731SetPortByteDirection
    Gx5731SetPortByteDirection.restype = VOID
    Gx5731SetPortByteDirection.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]

    # Module's functions
    # VOID WINAPI Gx5731ModuleGetType(SHORT nHandle, SHORT nPort, PSHORT pnType, PSHORT pnStatus);
    Gx5731ModuleGetType = GxPioLib.Gx5731ModuleGetType
    Gx5731ModuleGetType.restype = VOID
    Gx5731ModuleGetType.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetRevision(SHORT nHandle, SHORT nPort, PSHORT pnRevision, PSHORT pnStatus);
    Gx5731ModuleGetRevision = GxPioLib.Gx5731ModuleGetRevision
    Gx5731ModuleGetRevision.restype = VOID
    Gx5731ModuleGetRevision.argtypes = [SHORT, SHORT, PSHORT, PSHORT]

    # VOID WINAPI Gx5731ModuleGetVThreshold(SHORT nHandle, SHORT nPort, PDOUBLE pdVThreshold, PSHORT pnStatus);
    Gx5731ModuleGetVThreshold = GxPioLib.Gx5731ModuleGetVThreshold
    Gx5731ModuleGetVThreshold.restype = VOID
    Gx5731ModuleGetVThreshold.argtypes = [SHORT, SHORT, PDOUBLE, PSHORT]
    # VOID WINAPI Gx5731ModuleSetVThreshold(SHORT nHandle, SHORT nPort, DOUBLE dVThreshold, PSHORT pnStatus);
    Gx5731ModuleSetVThreshold = GxPioLib.Gx5731ModuleSetVThreshold
    Gx5731ModuleSetVThreshold.restype = VOID
    Gx5731ModuleSetVThreshold.argtypes = [SHORT, SHORT, DOUBLE, PSHORT]

    # Module Read/write FIFO data
    # VOID WINAPI Gx5731ModuleBufferClear(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5731ModuleBufferClear = GxPioLib.Gx5731ModuleBufferClear
    Gx5731ModuleBufferClear.restype = VOID
    Gx5731ModuleBufferClear.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleBufferGetMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5731ModuleBufferGetMode = GxPioLib.Gx5731ModuleBufferGetMode
    Gx5731ModuleBufferGetMode.restype = VOID
    Gx5731ModuleBufferGetMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleBufferGetState(SHORT nHandle, SHORT nPort, PSHORT pnFlagState, PSHORT pnStatus);
    Gx5731ModuleBufferGetState = GxPioLib.Gx5731ModuleBufferGetState
    Gx5731ModuleBufferGetState.restype = VOID
    Gx5731ModuleBufferGetState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleBufferSetMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5731ModuleBufferSetMode = GxPioLib.Gx5731ModuleBufferSetMode
    Gx5731ModuleBufferSetMode.restype = VOID
    Gx5731ModuleBufferSetMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleBufferReadData(SHORT nHandle, SHORT nPort, PDWORD pdwVector, PDWORD pdwSize, PSHORT pnStatus);
    Gx5731ModuleBufferReadData = GxPioLib.Gx5731ModuleBufferReadData
    Gx5731ModuleBufferReadData.restype = VOID
    Gx5731ModuleBufferReadData.argtypes = [SHORT, SHORT, PDWORD, PDWORD, PSHORT]
    # VOID WINAPI Gx5731ModuleBufferWriteData(SHORT nHandle, SHORT nPort, PDWORD pdwVector, PDWORD pdwSize, PSHORT pnStatus);
    Gx5731ModuleBufferWriteData = GxPioLib.Gx5731ModuleBufferWriteData
    Gx5731ModuleBufferWriteData.restype = VOID
    Gx5731ModuleBufferWriteData.argtypes = [SHORT, SHORT, PDWORD, PDWORD, PSHORT]
    # VOID WINAPI Gx5731ModuleBufferTest(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5731ModuleBufferTest = GxPioLib.Gx5731ModuleBufferTest
    Gx5731ModuleBufferTest.restype = VOID
    Gx5731ModuleBufferTest.argtypes = [SHORT, SHORT, PSHORT]

    # Module Operation mode
    # VOID WINAPI Gx5731ModuleGetOperationMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5731ModuleGetOperationMode = GxPioLib.Gx5731ModuleGetOperationMode
    Gx5731ModuleGetOperationMode.restype = VOID
    Gx5731ModuleGetOperationMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetOperationMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5731ModuleSetOperationMode = GxPioLib.Gx5731ModuleSetOperationMode
    Gx5731ModuleSetOperationMode.restype = VOID
    Gx5731ModuleSetOperationMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module Output mode
    # VOID WINAPI Gx5731ModuleGetOutputMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5731ModuleGetOutputMode = GxPioLib.Gx5731ModuleGetOutputMode
    Gx5731ModuleGetOutputMode.restype = VOID
    Gx5731ModuleGetOutputMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetOutputMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5731ModuleSetOutputMode = GxPioLib.Gx5731ModuleSetOutputMode
    Gx5731ModuleSetOutputMode.restype = VOID
    Gx5731ModuleSetOutputMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module Handshake Output Mode
    # VOID WINAPI Gx5731ModuleGetHandshakeOutputMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5731ModuleGetHandshakeOutputMode = GxPioLib.Gx5731ModuleGetHandshakeOutputMode
    Gx5731ModuleGetHandshakeOutputMode.restype = VOID
    Gx5731ModuleGetHandshakeOutputMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetHandshakeOutputMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5731ModuleSetHandshakeOutputMode = GxPioLib.Gx5731ModuleSetHandshakeOutputMode
    Gx5731ModuleSetHandshakeOutputMode.restype = VOID
    Gx5731ModuleSetHandshakeOutputMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module Port Data
    # VOID WINAPI Gx5731ModuleGetPort(SHORT nHandle, SHORT nPort, PDWORD pdwData, PSHORT pnStatus);
    Gx5731ModuleGetPort = GxPioLib.Gx5731ModuleGetPort
    Gx5731ModuleGetPort.restype = VOID
    Gx5731ModuleGetPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5731ModuleSetPort(SHORT nHandle, SHORT nPort, DWORD dwData, PSHORT pnStatus);
    Gx5731ModuleSetPort = GxPioLib.Gx5731ModuleSetPort
    Gx5731ModuleSetPort.restype = VOID
    Gx5731ModuleSetPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Module Strobe settings
    # VOID WINAPI Gx5731ModuleGetExtStrobeEnablePolarity(SHORT nHandle, SHORT nPort, PSHORT pnPolarity, PSHORT pnStatus);
    Gx5731ModuleGetExtStrobeEnablePolarity = GxPioLib.Gx5731ModuleGetExtStrobeEnablePolarity
    Gx5731ModuleGetExtStrobeEnablePolarity.restype = VOID
    Gx5731ModuleGetExtStrobeEnablePolarity.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetExtStrobeEnableState(SHORT nHandle, SHORT nPort, PSHORT pnState, PSHORT pnStatus);
    Gx5731ModuleGetExtStrobeEnableState = GxPioLib.Gx5731ModuleGetExtStrobeEnableState
    Gx5731ModuleGetExtStrobeEnableState.restype = VOID
    Gx5731ModuleGetExtStrobeEnableState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetExtStrobePolarity(SHORT nHandle, SHORT nPort, PSHORT pnPolarity, PSHORT pnStatus);
    Gx5731ModuleGetExtStrobePolarity = GxPioLib.Gx5731ModuleGetExtStrobePolarity
    Gx5731ModuleGetExtStrobePolarity.restype = VOID
    Gx5731ModuleGetExtStrobePolarity.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetExtStrobeState(SHORT nHandle, SHORT nPort, PSHORT pnState, PSHORT pnStatus);
    Gx5731ModuleGetExtStrobeState = GxPioLib.Gx5731ModuleGetExtStrobeState
    Gx5731ModuleGetExtStrobeState.restype = VOID
    Gx5731ModuleGetExtStrobeState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetInternalStrobeSource(SHORT nHandle, SHORT nPort, PSHORT pnSource, PSHORT pnStatus);
    Gx5731ModuleGetInternalStrobeSource = GxPioLib.Gx5731ModuleGetInternalStrobeSource
    Gx5731ModuleGetInternalStrobeSource.restype = VOID
    Gx5731ModuleGetInternalStrobeSource.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetOutputStrobeWidth(SHORT nHandle, SHORT nPort, PSHORT pnStrobeWidth, PSHORT pnStatus);
    Gx5731ModuleGetOutputStrobeWidth = GxPioLib.Gx5731ModuleGetOutputStrobeWidth
    Gx5731ModuleGetOutputStrobeWidth.restype = VOID
    Gx5731ModuleGetOutputStrobeWidth.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetStrobeSource(SHORT nHandle, SHORT nPort, PSHORT pnSource, PSHORT pnStatus);
    Gx5731ModuleGetStrobeSource = GxPioLib.Gx5731ModuleGetStrobeSource
    Gx5731ModuleGetStrobeSource.restype = VOID
    Gx5731ModuleGetStrobeSource.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetExtStrobeEnablePolarity(SHORT nHandle, SHORT nPort, SHORT nPolarity, PSHORT pnStatus);
    Gx5731ModuleSetExtStrobeEnablePolarity = GxPioLib.Gx5731ModuleSetExtStrobeEnablePolarity
    Gx5731ModuleSetExtStrobeEnablePolarity.restype = VOID
    Gx5731ModuleSetExtStrobeEnablePolarity.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetExtStrobePolarity(SHORT nHandle, SHORT nPort, SHORT nPolarity, PSHORT pnStatus);
    Gx5731ModuleSetExtStrobePolarity = GxPioLib.Gx5731ModuleSetExtStrobePolarity
    Gx5731ModuleSetExtStrobePolarity.restype = VOID
    Gx5731ModuleSetExtStrobePolarity.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetInternalStrobeSource(SHORT nHandle, SHORT nPort, SHORT nSource, PSHORT pnStatus);
    Gx5731ModuleSetInternalStrobeSource = GxPioLib.Gx5731ModuleSetInternalStrobeSource
    Gx5731ModuleSetInternalStrobeSource.restype = VOID
    Gx5731ModuleSetInternalStrobeSource.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetOutputStrobeWidth(SHORT nHandle, SHORT nPort, SHORT nStrobeWidth, PSHORT pnStatus);
    Gx5731ModuleSetOutputStrobeWidth = GxPioLib.Gx5731ModuleSetOutputStrobeWidth
    Gx5731ModuleSetOutputStrobeWidth.restype = VOID
    Gx5731ModuleSetOutputStrobeWidth.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetStrobeSource(SHORT nHandle, SHORT nPort, SHORT nSource, PSHORT pnStatus);
    Gx5731ModuleSetStrobeSource = GxPioLib.Gx5731ModuleSetStrobeSource
    Gx5731ModuleSetStrobeSource.restype = VOID
    Gx5731ModuleSetStrobeSource.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module to Pxi trigger settings
    # VOID WINAPI Gx5731ModuleGetPxiTriggerBus(SHORT nHandle, SHORT nPort, PSHORT pnPxiTrigBus, PSHORT pnStatus);
    Gx5731ModuleGetPxiTriggerBus = GxPioLib.Gx5731ModuleGetPxiTriggerBus
    Gx5731ModuleGetPxiTriggerBus.restype = VOID
    Gx5731ModuleGetPxiTriggerBus.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetPxiTriggerLine(SHORT nHandle, SHORT nPort, SHORT nPxiTrig, PSHORT pnMode, PSHORT pnStatus);
    Gx5731ModuleGetPxiTriggerLine = GxPioLib.Gx5731ModuleGetPxiTriggerLine
    Gx5731ModuleGetPxiTriggerLine.restype = VOID
    Gx5731ModuleGetPxiTriggerLine.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetPxiTriggerBus(SHORT nHandle, SHORT nPort, SHORT nPxiTrigBus, PSHORT pnStatus);
    Gx5731ModuleSetPxiTriggerBus = GxPioLib.Gx5731ModuleSetPxiTriggerBus
    Gx5731ModuleSetPxiTriggerBus.restype = VOID
    Gx5731ModuleSetPxiTriggerBus.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleSetPxiTriggerLine(SHORT nHandle, SHORT nPort, SHORT nPxiTrigLine, SHORT nMode, PSHORT pnStatus);
    Gx5731ModuleSetPxiTriggerLine = GxPioLib.Gx5731ModuleSetPxiTriggerLine
    Gx5731ModuleSetPxiTriggerLine.restype = VOID
    Gx5731ModuleSetPxiTriggerLine.argtypes = [SHORT, SHORT, SHORT, SHORT, PSHORT]

    # Module Step
    # VOID WINAPI Gx5731ModuleStep(SHORT nHandle, SHORT nPort, DWORD dwSteps, PSHORT pnStatus);
    Gx5731ModuleStep = GxPioLib.Gx5731ModuleStep
    Gx5731ModuleStep.restype = VOID
    Gx5731ModuleStep.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Module State mode
    # VOID WINAPI Gx5731ModuleGetState(SHORT nHandle, SHORT nPort, PSHORT pnState, PSHORT pnStatus);
    Gx5731ModuleGetState = GxPioLib.Gx5731ModuleGetState
    Gx5731ModuleGetState.restype = VOID
    Gx5731ModuleGetState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleHalt(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5731ModuleHalt = GxPioLib.Gx5731ModuleHalt
    Gx5731ModuleHalt.restype = VOID
    Gx5731ModuleHalt.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleRun(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5731ModuleRun = GxPioLib.Gx5731ModuleRun
    Gx5731ModuleRun.restype = VOID
    Gx5731ModuleRun.argtypes = [SHORT, SHORT, PSHORT]

    # Modules 5709/5711/5712 termination
    # VOID WINAPI Gx5731ModuleSetTermination(SHORT nHandle, SHORT nPort, SHORT nTermination, PSHORT pnStatus);
    Gx5731ModuleSetTermination = GxPioLib.Gx5731ModuleSetTermination
    Gx5731ModuleSetTermination.restype = VOID
    Gx5731ModuleSetTermination.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetTermination(SHORT nHandle, SHORT nPort, PSHORT pnTermination, PSHORT pnStatus);
    Gx5731ModuleGetTermination = GxPioLib.Gx5731ModuleGetTermination
    Gx5731ModuleGetTermination.restype = VOID
    Gx5731ModuleGetTermination.argtypes = [SHORT, SHORT, PSHORT, PSHORT]

    # Modules Group Direction
    # VOID WINAPI Gx5731ModuleSetDirection(SHORT nHandle, SHORT nPort, SHORT nGroup, SHORT nDirection, PSHORT pnStatus);
    Gx5731ModuleSetDirection = GxPioLib.Gx5731ModuleSetDirection
    Gx5731ModuleSetDirection.restype = VOID
    Gx5731ModuleSetDirection.argtypes = [SHORT, SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetDirection(SHORT nHandle, SHORT nPort, SHORT nGroup, PSHORT pnDirection, PSHORT pnStatus);
    Gx5731ModuleGetDirection = GxPioLib.Gx5731ModuleGetDirection
    Gx5731ModuleGetDirection.restype = VOID
    Gx5731ModuleGetDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT, PSHORT]

    # Modules Group Direction Source
    # VOID WINAPI Gx5731ModuleSetDirectionSource(SHORT nHandle, SHORT nPort, SHORT nSource, PSHORT pnStatus);
    Gx5731ModuleSetDirectionSource = GxPioLib.Gx5731ModuleSetDirectionSource
    Gx5731ModuleSetDirectionSource.restype = VOID
    Gx5731ModuleSetDirectionSource.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731ModuleGetDirectionSource(SHORT nHandle, SHORT nPort, PSHORT pnSource, PSHORT pnStatus);
    Gx5731ModuleGetDirectionSource = GxPioLib.Gx5642SetChannelConversionMode
    Gx5731ModuleGetDirectionSource.restype = VOID
    Gx5731ModuleGetDirectionSource.argtypes = [SHORT, SHORT, PSHORT, PSHORT]

    # Internal Clock settings
    # VOID WINAPI Gx5731GetInternalClock(SHORT nHandle, SHORT nClock, PSHORT pnSource, PDWORD pdwDivider, PSHORT pnStatus);
    Gx5731GetInternalClock = GxPioLib.Gx5731GetInternalClock
    Gx5731GetInternalClock.restype = VOID
    Gx5731GetInternalClock.argtypes = [SHORT, SHORT, PSHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5731GetInternalClockEnable(SHORT nHandle, SHORT nClock, PSHORT pnEnable, PSHORT pnStatus);
    Gx5731GetInternalClockEnable = GxPioLib.Gx5731GetInternalClockEnable
    Gx5731GetInternalClockEnable.restype = VOID
    Gx5731GetInternalClockEnable.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731SetInternalClock(SHORT nHandle, SHORT nClock, SHORT nSource, DWORD dwDivider, PSHORT pnStatus);
    Gx5731SetInternalClock = GxPioLib.Gx5731SetInternalClock
    Gx5731SetInternalClock.restype = VOID
    Gx5731SetInternalClock.argtypes = [SHORT, SHORT, SHORT, DWORD, PSHORT]
    # VOID WINAPI Gx5731SetInternalClockEnable(SHORT nHandle, SHORT nClock, SHORT nEnable, PSHORT pnStatus);
    Gx5731SetInternalClockEnable = GxPioLib.Gx5731SetInternalClockEnable
    Gx5731SetInternalClockEnable.restype = VOID
    Gx5731SetInternalClockEnable.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # PXI trigger settings
    # VOID WINAPI Gx5731GetStrobeToPxiTriggerBusState(SHORT nHandle, PSHORT pnBusState, PSHORT pnStatus);
    Gx5731GetStrobeToPxiTriggerBusState = GxPioLib.Gx5731GetStrobeToPxiTriggerBusState
    Gx5731GetStrobeToPxiTriggerBusState.restype = VOID
    Gx5731GetStrobeToPxiTriggerBusState.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731GetStrobeToPxiTriggerLineState(SHORT nHandle, SHORT nLine, PSHORT pnState, PSHORT pnStatus);
    Gx5731GetStrobeToPxiTriggerLineState = GxPioLib.Gx5731GetStrobeToPxiTriggerLineState
    Gx5731GetStrobeToPxiTriggerLineState.restype = VOID
    Gx5731GetStrobeToPxiTriggerLineState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731SetStrobeToPxiTriggerBusState(SHORT nHandle, SHORT nBusState, PSHORT pnStatus);
    Gx5731SetStrobeToPxiTriggerBusState = GxPioLib.Gx5731SetStrobeToPxiTriggerBusState
    Gx5731SetStrobeToPxiTriggerBusState.restype = VOID
    Gx5731SetStrobeToPxiTriggerBusState.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731SetStrobeToPxiTriggerLineState(SHORT nHandle, SHORT nLine, SHORT nState, PSHORT pnStatus);
    Gx5731SetStrobeToPxiTriggerLineState = GxPioLib.Gx5731SetStrobeToPxiTriggerLineState
    Gx5731SetStrobeToPxiTriggerLineState.restype = VOID
    Gx5731SetStrobeToPxiTriggerLineState.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # External trigger to PXI trigger settings
    # VOID WINAPI Gx5731GetExtTriggerToPxiTriggerBus(SHORT nHandle, PSHORT pnPxiTrigBus, PSHORT pnStatus);
    Gx5731GetExtTriggerToPxiTriggerBus = GxPioLib.Gx5731GetExtTriggerToPxiTriggerBus
    Gx5731GetExtTriggerToPxiTriggerBus.restype = VOID
    Gx5731GetExtTriggerToPxiTriggerBus.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731GetExtTriggerToPxiTriggerLine(SHORT nHandle, SHORT nPxiTrigLine, PSHORT pnMode, PSHORT pnStatus);
    Gx5731GetExtTriggerToPxiTriggerLine = GxPioLib.Gx5731GetExtTriggerToPxiTriggerLine
    Gx5731GetExtTriggerToPxiTriggerLine.restype = VOID
    Gx5731GetExtTriggerToPxiTriggerLine.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5731SetExtTriggerToPxiTriggerBus(SHORT nHandle, SHORT nPxiTrigBus, PSHORT pnStatus);
    Gx5731SetExtTriggerToPxiTriggerBus = GxPioLib.Gx5731SetExtTriggerToPxiTriggerBus
    Gx5731SetExtTriggerToPxiTriggerBus.restype = VOID
    Gx5731SetExtTriggerToPxiTriggerBus.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5731SetExtTriggerToPxiTriggerLine(SHORT nHandle, SHORT nPxiTrigLine, SHORT nMode, PSHORT pnStatus);
    Gx5731SetExtTriggerToPxiTriggerLine = GxPioLib.Gx5731SetExtTriggerToPxiTriggerLine
    Gx5731SetExtTriggerToPxiTriggerLine.restype = VOID
    Gx5731SetExtTriggerToPxiTriggerLine.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    '''****************************************************************************
        Gx5732 functions
    ****************************************************************************'''
    # General
    # VOID WINAPI Gx5732Initialize(SHORT nSlot, PSHORT pnHandle, PSHORT pnStatus);
    Gx5732Initialize = GxPioLib.Gx5732Initialize
    Gx5732Initialize.restype = VOID
    Gx5732Initialize.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5732InitializeVisa(PCSTR szVisaResource, PSHORT pnHandle, PSHORT pnStatus);
    Gx5732InitializeVisa = GxPioLib.Gx5732InitializeVisa
    Gx5732InitializeVisa.restype = VOID
    Gx5732InitializeVisa.argtypes = [PCSTR, PSHORT, PSHORT]
    # VOID WINAPI Gx5732Reset(SHORT nHandle, PSHORT pnStatus);
    Gx5732Reset = GxPioLib.Gx5732Reset
    Gx5732Reset.restype = VOID
    Gx5732Reset.argtypes = [SHORT, PSHORT]
    # VOID WINAPI Gx5732Panel(PSHORT pnHandle, HWND hwndParent, SHORT nMode, HWND * phwndPanel, PSHORT pnStatus);
    Gx5732Panel = GxPioLib.Gx5732Panel
    Gx5732Panel.restype = VOID
    Gx5732Panel.argtypes = [PSHORT, HWND, SHORT, PHWND, PSHORT]
    # VOID WINAPI Gx5732GetBoardSummary(SHORT nHandle, PSTR pszSummary, SHORT nSumMaxLen, PSHORT pnStatus);
    Gx5732GetBoardSummary = GxPioLib.Gx5732GetBoardSummary
    Gx5732GetBoardSummary.restype = VOID
    Gx5732GetBoardSummary.argtypes = [SHORT, PSTR, SHORT, PSHORT]

    # Digital I/O functions

    # Port number
    GX5732_PORT0							= 0
    GX5732_PORT1							= 1
    GX5732_PORT2							= 2
    GX5732_PORT3							= 3
    GX5732_PORT4							= 4
    GX5732_PORT5							= 5
    GX5732_PORT6							= 6

    # Port Word position: low/high Word
    GX5732_PORT_LOW_WORD					= 0
    GX5732_PORT_HIGH_WORD					= 1

    # Port Byte position: 0 to 3
    GX5732_PORT_BYTE0						= 0
    GX5732_PORT_BYTE1						= 1
    GX5732_PORT_BYTE2						= 2
    GX5732_PORT_BYTE3						= 3

    # VOID WINAPI Gx5732ResetPort(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5732ResetPort = GxPioLib.Gx5732ResetPort
    Gx5732ResetPort.restype = VOID
    Gx5732ResetPort.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5732GetPort(SHORT nHandle, SHORT nPort, PDWORD pdwValue, PSHORT pnStatus);
    Gx5732GetPort = GxPioLib.Gx5732GetPort
    Gx5732GetPort.restype = VOID
    Gx5732GetPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5732SetPort(SHORT nHandle, SHORT nPort, DWORD dwValue, PSHORT pnStatus);
    Gx5732SetPort = GxPioLib.Gx5732SetPort
    Gx5732SetPort.restype = VOID
    Gx5732SetPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]
    # VOID WINAPI Gx5732GetPortWord(SHORT nHandle, SHORT nPort, SHORT nWord, PWORD pwValue, PSHORT pnStatus);
    Gx5732GetPortWord = GxPioLib.Gx5732GetPortWord
    Gx5732GetPortWord.restype = VOID
    Gx5732GetPortWord.argtypes = [SHORT, SHORT, SHORT, PWORD, PSHORT]
    # VOID WINAPI Gx5732SetPortWord(SHORT nHandle, SHORT nPort, SHORT nWord, WORD wValue, PSHORT pnStatus);
    Gx5732SetPortWord = GxPioLib.Gx5732SetPortWord
    Gx5732SetPortWord.restype = VOID
    Gx5732SetPortWord.argtypes = [SHORT, SHORT, SHORT, WORD, PSHORT]
    # VOID WINAPI Gx5732GetPortByte(SHORT nHandle, SHORT nPort, SHORT nByte, PBYTE pucValue, PSHORT pnStatus);
    Gx5732GetPortByte = GxPioLib.Gx5732GetPortByte
    Gx5732GetPortByte.restype = VOID
    Gx5732GetPortByte.argtypes = [SHORT, SHORT, SHORT, PBYTE, PSHORT]
    # VOID WINAPI Gx5732SetPortByte(SHORT nHandle, SHORT nPort, SHORT nByte, BYTE ucValue, PSHORT pnStatus);
    Gx5732SetPortByte = GxPioLib.Gx5732SetPortByte
    Gx5732SetPortByte.restype = VOID
    Gx5732SetPortByte.argtypes = [SHORT, SHORT, SHORT, BYTE, PSHORT]
    # VOID WINAPI Gx5732GetPortBit(SHORT nHandle, SHORT nPort, SHORT nBit, PBYTE pucValue, PSHORT pnStatus);
    Gx5732GetPortBit = GxPioLib.Gx5732GetPortBit
    Gx5732GetPortBit.restype = VOID
    Gx5732GetPortBit.argtypes = [SHORT, SHORT, SHORT, PBYTE, PSHORT]
    # VOID WINAPI Gx5732SetPortBit(SHORT nHandle, SHORT nPort, SHORT nBit, BYTE ucValue, PSHORT pnStatus);
    Gx5732SetPortBit = GxPioLib.Gx5732SetPortBit
    Gx5732SetPortBit.restype = VOID
    Gx5732SetPortBit.argtypes = [SHORT, SHORT, SHORT, BYTE, PSHORT]

    # VOID WINAPI Gx5732GetPortDirection(SHORT nHandle, SHORT nPort, PSHORT pnDirection, PSHORT pnStatus);
    Gx5732GetPortDirection = GxPioLib.Gx5732GetPortDirection
    Gx5732GetPortDirection.restype = VOID
    Gx5732GetPortDirection.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5732SetPortDirection(SHORT nHandle, SHORT nPort, SHORT nDirection, PSHORT pnStatus);
    Gx5732SetPortDirection = GxPioLib.Gx5732SetPortDirection
    Gx5732SetPortDirection.restype = VOID
    Gx5732SetPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5732GetPortByteDirection(SHORT nHandle, SHORT nPort, SHORT nByte, PBOOL bInOut, PSHORT pnStatus);
    Gx5732GetPortByteDirection = GxPioLib.Gx5732GetPortByteDirection
    Gx5732GetPortByteDirection.restype = VOID
    Gx5732GetPortByteDirection.argtypes = [SHORT, SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5732SetPortByteDirection(SHORT nHandle, SHORT nPort, SHORT nByte, BOOL bInOut, PSHORT pnStatus);
    Gx5732SetPortByteDirection = GxPioLib.Gx5732SetPortByteDirection
    Gx5732SetPortByteDirection.restype = VOID
    Gx5732SetPortByteDirection.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]

    # Counters functions

    # Counter number
    GX5732_COUNTER0								= 0
    GX5732_COUNTER1								= 1
    GX5732_COUNTER2								= 2
    GX5732_COUNTER3								= 3

    # Counter Clock source
    GX5731_COUNTER_TO_CLOCK0					= 0
    GX5731_COUNTER_TO_CLOCK1					= 1
    GX5732_COUNTER_TO_USER_LINE0				= 2
    GX5732_COUNTER_TO_USER_LINE1				= 3
    GX5732_COUNTER_TO_USER_LINE2				= 4
    GX5732_COUNTER_TO_USER_LINE3				= 5
    GX5732_COUNTER_TO_USER_LINE4				= 6
    GX5732_COUNTER_TO_USER_LINE5				= 7

    # Polarity
    GX5732_POSITIVE_EDGE						= 0
    GX5732_NEGATIVE_EDGE						= 1

    # Internal Clock numbers
    GX5731_CLOCK0								= 0
    GX5731_CLOCK1								= 1

    # Internal Clock source
    GX5732_INTERNAL_CLOCK_T0_PCI_CLOCK_33MHZ	= 0
    GX5732_INTERNAL_CLOCK_T0_PXI_CLOCK_10MHZ	= 1
    GX5732_INTERNAL_CLOCK_T0_USER_LINE0			= 2
    GX5732_INTERNAL_CLOCK_T0_USER_LINE1			= 3
    GX5732_INTERNAL_CLOCK_T0_USER_LINE2			= 4
    GX5732_INTERNAL_CLOCK_T0_USER_LINE3			= 5
    GX5732_INTERNAL_CLOCK_T0_USER_LINE4			= 6
    GX5732_INTERNAL_CLOCK_T0_USER_LINE5			= 7

    # Counter Gate Source
    GX5732_COUNTER_GATE_ENABLE_ALWAYS			= 0
    GX5732_COUNTER_GATE_CARRY_COUNTER1			= 1
    GX5732_COUNTER_GATE_USER_LINE0				= 2
    GX5732_COUNTER_GATE_USER_LINE1				= 3
    GX5732_COUNTER_GATE_USER_LINE2				= 4
    GX5732_COUNTER_GATE_USER_LINE3				= 5
    GX5732_COUNTER_GATE_USER_LINE4				= 6
    GX5732_COUNTER_GATE_USER_LINE5				= 7 

    # Terminal Count Ouput Mode
    GX5732_TERMINAL_COUNT_OUPUT_COUNTER0				= 0
    GX5732_TERMINAL_COUNT_OUPUT_COUNTER1				= 1
    GX5732_TERMINAL_COUNT_OUPUT_COUNTER2				= 2
    GX5732_TERMINAL_COUNT_OUPUT_COUNTER3				= 3
    GX5732_TERMINAL_COUNT_OUPUT_ALLCOUNTERS_AND_CLOCKS	= 4

    # Counter Port Load Control
    GX5732_COUNTER_PORT_LOAD_CONTROL_NONE		= 0
    GX5732_COUNTER_PORT_LOAD_CONTROL_IMMEDIATE	= 1
    GX5732_COUNTER_PORT_LOAD_CONTROL_USERLINE0	= 2
    GX5732_COUNTER_PORT_LOAD_CONTROL_USERLINE1	= 3
    GX5732_COUNTER_PORT_LOAD_CONTROL_USERLINE2	= 4
    GX5732_COUNTER_PORT_LOAD_CONTROL_USERLINE3	= 5
    GX5732_COUNTER_PORT_LOAD_CONTROL_USERLINE4	= 6
    GX5732_COUNTER_PORT_LOAD_CONTROL_USERLINE5	= 7

    # Counter Port Direction
    GX5732_COUNTER_PORT_DIRECTION_IN			= 0
    GX5732_COUNTER_PORT_DIRECTION_OUT			= 1

    # Clock divider
    GX5732_MIN_CLOCK_DIVIDER					= 1
    GX5732_MAX_CLOCK_DIVIDER					= 0x1000000

    # Terminal Count Mode
    GX5732_TERMINAL_COUNT_POS_PULSE				= 0
    GX5732_TERMINAL_COUNT_NEG_PULSE				= 1		
    GX5732_TERMINAL_COUNT_POS_SQUARE			= 2
    GX5732_TERMINAL_COUNT_NEG_SQUARE			= 3

    # bTerminalCountState :  1=overflow

    # VOID WINAPI Gx5732ResetCounter(SHORT nHandle, SHORT nCounter, PSHORT pnStatus);
    Gx5732ResetCounter = GxPioLib.Gx5732ResetCounter
    Gx5732ResetCounter.restype = VOID
    Gx5732ResetCounter.argtypes = [SHORT, SHORT, PSHORT]

    # VOID WINAPI Gx5732GetCounterEnable(SHORT nHandle, SHORT nCounter, PBOOL pbEnable, PSHORT pnStatus);
    Gx5732GetCounterEnable = GxPioLib.Gx5732GetCounterEnable
    Gx5732GetCounterEnable.restype = VOID
    Gx5732GetCounterEnable.argtypes = [SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5732SetCounterEnable(SHORT nHandle, SHORT nCounter, BOOL bEnable, PSHORT pnStatus);
    Gx5732SetCounterEnable = GxPioLib.Gx5732SetCounterEnable
    Gx5732SetCounterEnable.restype = VOID
    Gx5732SetCounterEnable.argtypes = [SHORT, SHORT, BOOL, PSHORT]

    # VOID WINAPI Gx5732GetCounterValue(SHORT nHandle, SHORT nCounter, PBYTE pucValue, PBOOL pbTerminalCountState, PSHORT pnStatus);
    Gx5732GetCounterValue = GxPioLib.Gx5732GetCounterValue
    Gx5732GetCounterValue.restype = VOID
    Gx5732GetCounterValue.argtypes = [SHORT, SHORT, PBYTE, PBOOL, PSHORT]
    # VOID WINAPI Gx5732SetCounterValue(SHORT nHandle, SHORT nCounter, BYTE ucValue, PSHORT pnStatus);
    Gx5732SetCounterValue = GxPioLib.Gx5732SetCounterValue
    Gx5732SetCounterValue.restype = VOID
    Gx5732SetCounterValue.argtypes = [SHORT, SHORT, BYTE, PSHORT]

    # VOID WINAPI Gx5732GetCounterMode(SHORT nHandle, SHORT nCounter, PBOOL pbOneShot, PBOOL pbUpDown, PSHORT pnTerminalCounterMode, PSHORT pnStatus);
    Gx5732GetCounterMode = GxPioLib.Gx5732GetCounterMode
    Gx5732GetCounterMode.restype = VOID
    Gx5732GetCounterMode.argtypes = [SHORT, SHORT, PBOOL, PBOOL, PSHORT, PSHORT]
    # VOID WINAPI Gx5732SetCounterMode(SHORT nHandle, SHORT nCounter, BOOL bOneShot, BOOL bUpDown, SHORT nTerminalCounterMode, PSHORT pnStatus);
    Gx5732SetCounterMode = GxPioLib.Gx5732SetCounterMode
    Gx5732SetCounterMode.restype = VOID
    Gx5732SetCounterMode.argtypes = [SHORT, SHORT, BOOL, BOOL, SHORT, PSHORT]
    # VOID WINAPI Gx5732GetCounterClock(SHORT nHandle, SHORT nCounter, PSHORT pnClockSource, PBOOL pbClockPolarity, PSHORT pnStatus);
    Gx5732GetCounterClock = GxPioLib.Gx5732GetCounterClock
    Gx5732GetCounterClock.restype = VOID
    Gx5732GetCounterClock.argtypes = [SHORT, SHORT, PSHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5732SetCounterClock(SHORT nHandle, SHORT nCounter, SHORT nClockSource, BOOL bClockPolarity, PSHORT pnStatus);
    Gx5732SetCounterClock = GxPioLib.Gx5732SetCounterClock
    Gx5732SetCounterClock.restype = VOID
    Gx5732SetCounterClock.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]
    # VOID WINAPI Gx5732GetCounterGate(SHORT nHandle, SHORT nCounter, PSHORT pnGateSource, PBOOL pbGatePolarity, PSHORT pnStatus);
    Gx5732GetCounterGate = GxPioLib.Gx5732GetCounterGate
    Gx5732GetCounterGate.restype = VOID
    Gx5732GetCounterGate.argtypes = [SHORT, SHORT, PSHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5732SetCounterGate(SHORT nHandle, SHORT nCounter, SHORT nGateSource, BOOL bGatePolarity, PSHORT pnStatus);
    Gx5732SetCounterGate = GxPioLib.Gx5732SetCounterGate
    Gx5732SetCounterGate.restype = VOID
    Gx5732SetCounterGate.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]

    # VOID WINAPI Gx5732GetTerminalCountPortConnection(SHORT nHandle, PSHORT pnCounterOrAllTerminalCountsAndClocks,PSHORT pnStatus);
    Gx5732GetTerminalCountPortConnection = GxPioLib.Gx5732GetTerminalCountPortConnection
    Gx5732GetTerminalCountPortConnection.restype = VOID
    Gx5732GetTerminalCountPortConnection.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5732SetTerminalCountPortConnection(SHORT nHandle, SHORT nCounterOrAllTerminalCountsAndClocks, PSHORT pnStatus);
    Gx5732SetTerminalCountPortConnection = GxPioLib.Gx5732SetTerminalCountPortConnection
    Gx5732SetTerminalCountPortConnection.restype = VOID
    Gx5732SetTerminalCountPortConnection.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5732GetCounterPort(SHORT nHandle, PBOOL pbInOut, PSHORT pnCounter, PSHORT pnInLoadControl, PSHORT pnStatus);
    Gx5732GetCounterPort = GxPioLib.Gx5732GetCounterPort
    Gx5732GetCounterPort.restype = VOID
    Gx5732GetCounterPort.argtypes = [SHORT, PBOOL, PSHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5732SetCounterPort(SHORT nHandle, BOOL bInOut, SHORT nCounter, SHORT nInLoadControl, PSHORT pnStatus);
    Gx5732SetCounterPort = GxPioLib.Gx5732SetCounterPort
    Gx5732SetCounterPort.restype = VOID
    Gx5732SetCounterPort.argtypes = [SHORT, BOOL, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5732LoadCounterCounterPort(SHORT nHandle, PSHORT pnStatus);
    Gx5732LoadCounterCounterPort = GxPioLib.Gx5732LoadCounterCounterPort
    Gx5732LoadCounterCounterPort.restype = VOID
    Gx5732LoadCounterCounterPort.argtypes = [SHORT, PSHORT]
    # VOID WINAPI Gx5732GetInternalClock(SHORT nHandle, SHORT nClock, PSHORT pnSource, PDWORD pdwDivider, PSHORT pnStatus);
    Gx5732GetInternalClock = GxPioLib.Gx5732GetInternalClock
    Gx5732GetInternalClock.restype = VOID
    Gx5732GetInternalClock.argtypes = [SHORT, SHORT, PSHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5732SetInternalClock(SHORT nHandle, SHORT nClock, SHORT nSource, DWORD dwDivider, PSHORT pnStatus);
    Gx5732SetInternalClock = GxPioLib.Gx5732SetInternalClock
    Gx5732SetInternalClock.restype = VOID
    Gx5732SetInternalClock.argtypes = [SHORT, SHORT, SHORT, DWORD, PSHORT]

    '''****************************************************************************
    # Gx5733 functions
     ****************************************************************************'''
    # General
    # VOID WINAPI Gx5733Initialize(SHORT nSlot, PSHORT pnHandle, PSHORT pnStatus);
    Gx5733Initialize = GxPioLib.Gx5733Initialize
    Gx5733Initialize.restype = VOID
    Gx5733Initialize.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733InitializeVisa(PCSTR szVisaResource, PSHORT pnHandle, PSHORT pnStatus);
    Gx5733InitializeVisa = GxPioLib.Gx5733InitializeVisa
    Gx5733InitializeVisa.restype = VOID
    Gx5733InitializeVisa.argtypes = [PCSTR, PSHORT, PSHORT]
    # VOID WINAPI Gx5733Reset(SHORT nHandle, PSHORT pnStatus);
    Gx5733Reset = GxPioLib.Gx5733Reset
    Gx5733Reset.restype = VOID
    Gx5733Reset.argtypes = [SHORT, PSHORT]
   # VOID WINAPI Gx5733Panel(PSHORT pnHandle, HWND hwndParent, SHORT nMode, HWND * phwndPanel, PSHORT pnStatus);
    Gx5733Panel = GxPioLib.Gx5733Panel
    Gx5733Panel.restype = VOID
    Gx5733Panel.argtypes = [PSHORT, HWND, SHORT, PHWND, PSHORT]
    # VOID WINAPI Gx5733GetBoardSummary(SHORT nHandle, PSTR pszSummary, SHORT nSumMaxLen, PSHORT pnStatus);
    Gx5733GetBoardSummary = GxPioLib.Gx5733GetBoardSummary
    Gx5733GetBoardSummary.restype = VOID
    Gx5733GetBoardSummary.argtypes = [SHORT, PSTR, SHORT, PSHORT]

    # ** Digital I/O Port
    # Port number
    GX5733_PORT0								= 0
    GX5733_PORT1								= 1
    GX5733_PORT2								= 2
    GX5733_PORT3								= 3

    # Port Word position: low/high Word
    GX5733_PORT_LOW_WORD						= 0
    GX5733_PORT_HIGH_WORD						= 1

    # Port Byte position: 0 to 3
    GX5733_PORT_BYTE0							= 0
    GX5733_PORT_BYTE1							= 1
    GX5733_PORT_BYTE2							= 2
    GX5733_PORT_BYTE3							= 3

    # I/O port direction
    GX5733_PORT_DIRECTION_IN					= 0
    GX5733_PORT_DIRECTION_OUT					= 1

    # Module types
    GX5733_NO_MODULE_INSTALLED					= 5700
    GX5733_DIGITAL_INPUT_LATCH					= 5701
    GX5733_DIGITAL_OUTPUT_LATCH					= 5702
    GX5733_DIGITAL_POWER_OUTPUT_LATCH			= 5704
    GX5733_RS422_PORT_IO						= 5709
    GX5733_LVDS_TTL_BIDIRECTIONAL_CONVERTER		= 5711
    GX5733_RS422_TTL_BIDIRECTIONAL_CONVERTER	= 5712
    GX5733_DIGITAL_PORT_IO						= 5714
    GX5733_PORT_IN_ONLY							= 5715

    # Module State mode
    GX5733_MODULE_STATE_HALT					= 0
    GX5733_MODULE_STATE_RUN						= 1

    # Module output mode
    GX5733_MODULE_OUTPUT_DISABLE				= 0
    GX5733_MODULE_OUTPUT_ENABLE					= 1

    # Module operation mode
    GX5733_MODULE_OPERATION_BUFFERED			= 0
    GX5733_MODULE_OPERATION_PORT_IO				= 1

    # Module Handshake output mode
    GX5733_MODULE_HANDSHAKE_OUTPUT_DISABLE		= 0
    GX5733_MODULE_HANDSHAKE_OUTPUT_ENABLE		= 1

    # Module FIFO buffer size
    GX5733_MIN_BUFFER_SIZE						= 1
    GX5733_MAX_BUFFER_SIZE						= 4096

    # Module Flag mode
    GX5733_MODULE_BUFFER_MODE_FULL				= 0
    GX5733_MODULE_BUFFER_MODE_HALF_FULL			= 1

    # Module Flag state
    GX5733_MODULE_BUFFER_EMPTY					= 0
    GX5733_MODULE_BUFFER_FULL					= 1

    # Module Threshold Voltage
    GX5733_MODULE_MIN_VTHRESHOLD				= -30.0
    GX5733_MODULE_MAX_VTHRESHOLD				= 30.0

    # Output Strobe Width of 50nSec to 5uSec in steps of 50nSec
    GX5733_MODULE_MIN_STROBE_WIDTH				= 50
    GX5733_MODULE_MAX_STROBE_WIDTH				= 5000

    # Module Strobe source
    GX5733_MODULE_STROBE_INTERNAL				= 0
    GX5733_MODULE_STROBE_EXTERNAL				= 1

    # Module Strobe polarity
    GX5733_MODULE_STROBE_POSITIVE_EDGE			= 0
    GX5733_MODULE_STROBE_NEGATIVE_EDGE			= 1

    # Module Internal Strobe Source
    GX5733_MODULE_INTERNAL_STROBE_NOT_CONNECTED	= 0
    GX5733_MODULE_INTERNAL_STROBE_T0_CLOCK0		= 1
    GX5733_MODULE_INTERNAL_STROBE_T0_CLOCK1		= 2
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER0	= 7
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER1	= 8
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER2	= 9
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER3	= 10
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER4	= 11
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER5	= 12
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER6	= 13
    GX5733_MODULE_INTERNAL_STROBE_T0_XTRIGGER7	= 14

    # Clock numbers
    GX5733_CLOCK0								= 0
    GX5733_CLOCK1								= 1

    # Intrenal Clock Enable modes
    GX5733_DISABLE_INTERNAL_CLOCK				= 0
    GX5733_ENABLE_INTERNAL_CLOCK				= 1

    # Module State mode
    GX5733_MODULE_STATE_HALT	            	= 0
    GX5733_MODULE_STATE_RUN		            	= 1

    # Clock divider
    GX5733_MIN_CLOCK_DIVIDER					= 1
    GX5733_MAX_CLOCK_DIVIDER					= 0x10000000

    # Internal Clock0 source
    GX5733_INTERNAL_CLOCK0_NOT_CONNECTED		= 0
    GX5733_INTERNAL_CLOCK0_T0_PCI_CLOCK_33MHZ	= 1
    GX5733_INTERNAL_CLOCK0_T0_PXI_CLOCK_10MHZ	= 2
    GX5733_INTERNAL_CLOCK0_T0_STAR_TRIGGER		= 3

    # Internal Clock1 source
    GX5733_INTERNAL_CLOCK1_NOT_CONNECTED		= 0
    GX5733_INTERNAL_CLOCK1_T0_PCI_CLOCK_33MHZ	= 1
    GX5733_INTERNAL_CLOCK1_T0_PXI_CLOCK_10MHZ	= 2
    GX5733_INTERNAL_CLOCK1_T0_STAR_TRIGGER		= 3

    # PXI Triger Line
    GX5733_PXI_TRIGGER_LINE0					= 0
    GX5733_PXI_TRIGGER_LINE1					= 1
    GX5733_PXI_TRIGGER_LINE2					= 2
    GX5733_PXI_TRIGGER_LINE3					= 3
    GX5733_PXI_TRIGGER_LINE4					= 4
    GX5733_PXI_TRIGGER_LINE5					= 5
    GX5733_PXI_TRIGGER_LINE6					= 6
    GX5733_PXI_TRIGGER_LINE7					= 7

    # PXI Triger Line mode
    GX5733_PXI_TRIGGER_LINE_DISCONNECTED		= 0
    GX5733_PXI_TRIGGER_LINE_CONNECTED			= 1

    # Modules 5709/5711/5712 constants
    # Direction
    GX5733_MODULE_DIRECTION_INPUT				= 0
    GX5733_MODULE_DIRECTION_OUTPUT				= 1

    # Termination
    GX5733_MODULE_TERMINATION_OFF				= 0
    GX5733_MODULE_TERMINATION_ON				= 1

    # Groups numbers (group has 16 lines/8 differentials)
    GX5733_MODULE_GROUP0							= 0
    GX5733_MODULE_GROUP1							= 1

    # Direction Differential to/from TTL
    GX5733_MODULE_DIRECTION_DIFFERENTIAL_TO_TTL		= 0
    GX5733_MODULE_DIRECTION_TTL_TO_DIFFERENTIAL		= 1

    # Modules Group Conversion Method Source
    GX5733_MODULE_DIRECTION_SOURCE_INTERNAL			= 0
    GX5733_MODULE_DIRECTION_SOURCE_EXTERNAL			= 1

    # Digital I/O Port functions
    # VOID WINAPI Gx5733ResetPort(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5733ResetPort = GxPioLib.Gx5733ResetPort
    Gx5733ResetPort.restype = VOID
    Gx5733ResetPort.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733GetPort(SHORT nHandle, SHORT nPort, PDWORD pdwValue, PSHORT pnStatus);
    Gx5733GetPort = GxPioLib.Gx5733GetPort
    Gx5733GetPort.restype = VOID
    Gx5733GetPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5733SetPort(SHORT nHandle, SHORT nPort, DWORD dwValue, PSHORT pnStatus);
    Gx5733SetPort = GxPioLib.Gx5733SetPort
    Gx5733SetPort.restype = VOID
    Gx5733SetPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]
    # VOID WINAPI Gx5733GetPortWord(SHORT nHandle, SHORT nPort, SHORT nWord, PWORD pwValue, PSHORT pnStatus);
    Gx5733GetPortWord = GxPioLib.Gx5733GetPortWord
    Gx5733GetPortWord.restype = VOID
    Gx5733GetPortWord.argtypes = [SHORT, SHORT, SHORT, PWORD, PSHORT]
    # VOID WINAPI Gx5733SetPortWord(SHORT nHandle, SHORT nPort, SHORT nWord, WORD wValue, PSHORT pnStatus);
    Gx5733SetPortWord = GxPioLib.Gx5733SetPortWord
    Gx5733SetPortWord.restype = VOID
    Gx5733SetPortWord.argtypes = [SHORT, SHORT, SHORT, WORD, PSHORT]
    # VOID WINAPI Gx5733GetPortByte(SHORT nHandle, SHORT nPort, SHORT nByte, PBYTE pucValue, PSHORT pnStatus);
    Gx5733GetPortByte = GxPioLib.Gx5733GetPortByte
    Gx5733GetPortByte.restype = VOID
    Gx5733GetPortByte.argtypes = [SHORT, SHORT, SHORT, PBYTE, PSHORT]
    # VOID WINAPI Gx5733SetPortByte(SHORT nHandle, SHORT nPort, SHORT nByte, BYTE ucValue, PSHORT pnStatus);
    Gx5733SetPortByte = GxPioLib.Gx5733SetPortByte
    Gx5733SetPortByte.restype = VOID
    Gx5733SetPortByte.argtypes = [SHORT, SHORT, SHORT, BYTE, PSHORT]
    # VOID WINAPI Gx5733GetPortBit(SHORT nHandle, SHORT nPort, SHORT nBit, PBOOL pbOn, PSHORT pnStatus);
    Gx5733GetPortBit = GxPioLib.Gx5733GetPortBit
    Gx5733GetPortBit.restype = VOID
    Gx5733GetPortBit.argtypes = [SHORT, SHORT, SHORT, PBOOL, PSHORT]
    # VOID WINAPI Gx5733SetPortBit(SHORT nHandle, SHORT nPort, SHORT nBit, BOOL bOn, PSHORT pnStatus);
    Gx5733SetPortBit = GxPioLib.Gx5733SetPortBit
    Gx5733SetPortBit.restype = VOID
    Gx5733SetPortBit.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]
    # VOID WINAPI Gx5733GetPortDirection(SHORT nHandle, SHORT nPort, PSHORT pnDirection, PSHORT pnStatus);
    Gx5733GetPortDirection = GxPioLib.Gx5733GetPortDirection
    Gx5733GetPortDirection.restype = VOID
    Gx5733GetPortDirection.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733SetPortDirection(SHORT nHandle, SHORT nPort, SHORT nDirection, PSHORT pnStatus);
    Gx5733SetPortDirection = GxPioLib.Gx5733SetPortDirection
    Gx5733SetPortDirection.restype = VOID
    Gx5733SetPortDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733GetPortByteDirection(SHORT nHandle, SHORT nPort, SHORT nByte, PBOOL bInOut, PSHORT pnStatus);
    Gx5733GetPortByteDirection = GxPioLib.Gx5733GetPortByteDirection
    Gx5733GetPortByteDirection.restype = VOID
    Gx5733GetPortByteDirection.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]
    # VOID WINAPI Gx5733SetPortByteDirection(SHORT nHandle, SHORT nPort, SHORT nByte, BOOL bInOut, PSHORT pnStatus);
    Gx5733SetPortByteDirection = GxPioLib.Gx5733SetPortByteDirection
    Gx5733SetPortByteDirection.restype = VOID
    Gx5733SetPortByteDirection.argtypes = [SHORT, SHORT, SHORT, BOOL, PSHORT]

    # Module's functions
    # VOID WINAPI Gx5733ModuleGetType(SHORT nHandle, SHORT nPort, PSHORT pnType, PSHORT pnStatus);
    Gx5733ModuleGetType = GxPioLib.Gx5733ModuleGetType
    Gx5733ModuleGetType.restype = VOID
    Gx5733ModuleGetType.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetRevision(SHORT nHandle, SHORT nPort, PSHORT pnRevision, PSHORT pnStatus);
    Gx5733ModuleGetRevision = GxPioLib.Gx5733ModuleGetRevision
    Gx5733ModuleGetRevision.restype = VOID
    Gx5733ModuleGetRevision.argtypes = [SHORT, SHORT, PSHORT, PSHORT]

    # VOID WINAPI Gx5733ModuleGetVThreshold(SHORT nHandle, SHORT nPort, PDOUBLE pdVThreshold, PSHORT pnStatus);
    Gx5733ModuleGetVThreshold = GxPioLib.Gx5733ModuleGetVThreshold
    Gx5733ModuleGetVThreshold.restype = VOID
    Gx5733ModuleGetVThreshold.argtypes = [SHORT, SHORT, PDOUBLE, PSHORT]
    # VOID WINAPI Gx5733ModuleSetVThreshold(SHORT nHandle, SHORT nPort, DOUBLE dVThreshold, PSHORT pnStatus);
    Gx5733ModuleSetVThreshold = GxPioLib.Gx5733ModuleSetVThreshold
    Gx5733ModuleSetVThreshold.restype = VOID
    Gx5733ModuleSetVThreshold.argtypes = [SHORT, SHORT, DOUBLE, PSHORT]

    # Module Read/write FIFO data
    # VOID WINAPI Gx5733ModuleBufferClear(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5733ModuleBufferClear = GxPioLib.Gx5733ModuleBufferClear
    Gx5733ModuleBufferClear.restype = VOID
    Gx5733ModuleBufferClear.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleBufferGetMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5733ModuleBufferGetMode = GxPioLib.Gx5733ModuleBufferGetMode
    Gx5733ModuleBufferGetMode.restype = VOID
    Gx5733ModuleBufferGetMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleBufferGetState(SHORT nHandle, SHORT nPort, PSHORT pnFlagState, PSHORT pnStatus);
    Gx5733ModuleBufferGetState = GxPioLib.Gx5733ModuleBufferGetState
    Gx5733ModuleBufferGetState.restype = VOID
    Gx5733ModuleBufferGetState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleBufferSetMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5733ModuleBufferSetMode = GxPioLib.Gx5733ModuleBufferSetMode
    Gx5733ModuleBufferSetMode.restype = VOID
    Gx5733ModuleBufferSetMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleBufferReadData(SHORT nHandle, SHORT nPort, PDWORD pdwVector, PDWORD pdwSize, PSHORT pnStatus);
    Gx5733ModuleBufferReadData = GxPioLib.Gx5733ModuleBufferReadData
    Gx5733ModuleBufferReadData.restype = VOID
    Gx5733ModuleBufferReadData.argtypes = [SHORT, SHORT, PDWORD, PDWORD, PSHORT]
    # VOID WINAPI Gx5733ModuleBufferWriteData(SHORT nHandle, SHORT nPort, PDWORD pdwVector, PDWORD pdwSize, PSHORT pnStatus);
    Gx5733ModuleBufferWriteData = GxPioLib.Gx5733ModuleBufferWriteData
    Gx5733ModuleBufferWriteData.restype = VOID
    Gx5733ModuleBufferWriteData.argtypes = [SHORT, SHORT, PDWORD, PDWORD, PSHORT]
    # VOID WINAPI Gx5733ModuleBufferTest(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5733ModuleBufferTest = GxPioLib.Gx5733ModuleBufferTest
    Gx5733ModuleBufferTest.restype = VOID
    Gx5733ModuleBufferTest.argtypes = [SHORT, SHORT, PSHORT]

    # Module Operation mode
    # VOID WINAPI Gx5733ModuleGetOperationMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5733ModuleGetOperationMode = GxPioLib.Gx5733ModuleGetOperationMode
    Gx5733ModuleGetOperationMode.restype = VOID
    Gx5733ModuleGetOperationMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetOperationMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5733ModuleSetOperationMode = GxPioLib.Gx5733ModuleSetOperationMode
    Gx5733ModuleSetOperationMode.restype = VOID
    Gx5733ModuleSetOperationMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module Output mode
    # VOID WINAPI Gx5733ModuleGetOutputMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5733ModuleGetOutputMode = GxPioLib.Gx5733ModuleGetOutputMode
    Gx5733ModuleGetOutputMode.restype = VOID
    Gx5733ModuleGetOutputMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetOutputMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5733ModuleSetOutputMode = GxPioLib.Gx5733ModuleSetOutputMode
    Gx5733ModuleSetOutputMode.restype = VOID
    Gx5733ModuleSetOutputMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module Handshake Output Mode
    # VOID WINAPI Gx5733ModuleGetHandshakeOutputMode(SHORT nHandle, SHORT nPort, PSHORT pnMode, PSHORT pnStatus);
    Gx5733ModuleGetHandshakeOutputMode = GxPioLib.Gx5733ModuleGetHandshakeOutputMode
    Gx5733ModuleGetHandshakeOutputMode.restype = VOID
    Gx5733ModuleGetHandshakeOutputMode.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetHandshakeOutputMode(SHORT nHandle, SHORT nPort, SHORT nMode, PSHORT pnStatus);
    Gx5733ModuleSetHandshakeOutputMode = GxPioLib.Gx5733ModuleSetHandshakeOutputMode
    Gx5733ModuleSetHandshakeOutputMode.restype = VOID
    Gx5733ModuleSetHandshakeOutputMode.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module Port Data
    # VOID WINAPI Gx5733ModuleGetPort(SHORT nHandle, SHORT nPort, PDWORD pdwData, PSHORT pnStatus);
    Gx5733ModuleGetPort = GxPioLib.Gx5733ModuleGetPort
    Gx5733ModuleGetPort.restype = VOID
    Gx5733ModuleGetPort.argtypes = [SHORT, SHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5733ModuleSetPort(SHORT nHandle, SHORT nPort, DWORD dwData, PSHORT pnStatus);
    Gx5733ModuleSetPort = GxPioLib.Gx5733ModuleSetPort
    Gx5733ModuleSetPort.restype = VOID
    Gx5733ModuleSetPort.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Module Strobe settings
    # VOID WINAPI Gx5733ModuleGetExtStrobeEnablePolarity(SHORT nHandle, SHORT nPort, PSHORT pnPolarity, PSHORT pnStatus);
    Gx5733ModuleGetExtStrobeEnablePolarity = GxPioLib.Gx5733ModuleGetExtStrobeEnablePolarity
    Gx5733ModuleGetExtStrobeEnablePolarity.restype = VOID
    Gx5733ModuleGetExtStrobeEnablePolarity.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetExtStrobeEnableState(SHORT nHandle, SHORT nPort, PSHORT pnState, PSHORT pnStatus);
    Gx5733ModuleGetExtStrobeEnableState = GxPioLib.Gx5733ModuleGetExtStrobeEnableState
    Gx5733ModuleGetExtStrobeEnableState.restype = VOID
    Gx5733ModuleGetExtStrobeEnableState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetExtStrobePolarity(SHORT nHandle, SHORT nPort, PSHORT pnPolarity, PSHORT pnStatus);
    Gx5733ModuleGetExtStrobePolarity = GxPioLib.Gx5733ModuleGetExtStrobePolarity
    Gx5733ModuleGetExtStrobePolarity.restype = VOID
    Gx5733ModuleGetExtStrobePolarity.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetExtStrobeState(SHORT nHandle, SHORT nPort, PSHORT pnState, PSHORT pnStatus);
    Gx5733ModuleGetExtStrobeState = GxPioLib.Gx5733ModuleGetExtStrobeState
    Gx5733ModuleGetExtStrobeState.restype = VOID
    Gx5733ModuleGetExtStrobeState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetInternalStrobeSource(SHORT nHandle, SHORT nPort, PSHORT pnSource, PSHORT pnStatus);
    Gx5733ModuleGetInternalStrobeSource = GxPioLib.Gx5733ModuleGetInternalStrobeSource
    Gx5733ModuleGetInternalStrobeSource.restype = VOID
    Gx5733ModuleGetInternalStrobeSource.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetOutputStrobeWidth(SHORT nHandle, SHORT nPort, PSHORT pnStrobeWidth, PSHORT pnStatus);
    Gx5733ModuleGetOutputStrobeWidth = GxPioLib.Gx5733ModuleGetOutputStrobeWidth
    Gx5733ModuleGetOutputStrobeWidth.restype = VOID
    Gx5733ModuleGetOutputStrobeWidth.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetStrobeSource(SHORT nHandle, SHORT nPort, PSHORT pnSource, PSHORT pnStatus);
    Gx5733ModuleGetStrobeSource = GxPioLib.Gx5733ModuleGetStrobeSource
    Gx5733ModuleGetStrobeSource.restype = VOID
    Gx5733ModuleGetStrobeSource.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetExtStrobeEnablePolarity(SHORT nHandle, SHORT nPort, SHORT nPolarity, PSHORT pnStatus);
    Gx5733ModuleSetExtStrobeEnablePolarity = GxPioLib.Gx5733ModuleSetExtStrobeEnablePolarity
    Gx5733ModuleSetExtStrobeEnablePolarity.restype = VOID
    Gx5733ModuleSetExtStrobeEnablePolarity.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetExtStrobePolarity(SHORT nHandle, SHORT nPort, SHORT nPolarity, PSHORT pnStatus);
    Gx5733ModuleSetExtStrobePolarity = GxPioLib.Gx5733ModuleSetExtStrobePolarity
    Gx5733ModuleSetExtStrobePolarity.restype = VOID
    Gx5733ModuleSetExtStrobePolarity.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetInternalStrobeSource(SHORT nHandle, SHORT nPort, SHORT nSource, PSHORT pnStatus);
    Gx5733ModuleSetInternalStrobeSource = GxPioLib.Gx5733ModuleSetInternalStrobeSource
    Gx5733ModuleSetInternalStrobeSource.restype = VOID
    Gx5733ModuleSetInternalStrobeSource.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetOutputStrobeWidth(SHORT nHandle, SHORT nPort, SHORT nStrobeWidth, PSHORT pnStatus);
    Gx5733ModuleSetOutputStrobeWidth = GxPioLib.Gx5733ModuleSetOutputStrobeWidth
    Gx5733ModuleSetOutputStrobeWidth.restype = VOID
    Gx5733ModuleSetOutputStrobeWidth.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetStrobeSource(SHORT nHandle, SHORT nPort, SHORT nSource, PSHORT pnStatus);
    Gx5733ModuleSetStrobeSource = GxPioLib.Gx5733ModuleSetStrobeSource
    Gx5733ModuleSetStrobeSource.restype = VOID
    Gx5733ModuleSetStrobeSource.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # Module to Pxi trigger settings
    # VOID WINAPI Gx5733ModuleGetPxiTriggerBus(SHORT nHandle, SHORT nPort, PSHORT pnPxiTrigBus, PSHORT pnStatus);
    Gx5733ModuleGetPxiTriggerBus = GxPioLib.Gx5733ModuleGetPxiTriggerBus
    Gx5733ModuleGetPxiTriggerBus.restype = VOID
    Gx5733ModuleGetPxiTriggerBus.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetPxiTriggerLine(SHORT nHandle, SHORT nPort, SHORT nPxiTrig, PSHORT pnMode, PSHORT pnStatus);
    Gx5733ModuleGetPxiTriggerLine = GxPioLib.Gx5733ModuleGetPxiTriggerLine
    Gx5733ModuleGetPxiTriggerLine.restype = VOID
    Gx5733ModuleGetPxiTriggerLine.argtypes = [SHORT, SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetPxiTriggerBus(SHORT nHandle, SHORT nPort, SHORT nPxiTrigBus, PSHORT pnStatus);
    Gx5733ModuleSetPxiTriggerBus = GxPioLib.Gx5733ModuleSetPxiTriggerBus
    Gx5733ModuleSetPxiTriggerBus.restype = VOID
    Gx5733ModuleSetPxiTriggerBus.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleSetPxiTriggerLine(SHORT nHandle, SHORT nPort, SHORT nPxiTrigLine, SHORT nMode, PSHORT pnStatus);
    Gx5733ModuleSetPxiTriggerLine = GxPioLib.Gx5733ModuleSetPxiTriggerLine
    Gx5733ModuleSetPxiTriggerLine.restype = VOID
    Gx5733ModuleSetPxiTriggerLine.argtypes = [SHORT, SHORT, SHORT, SHORT, PSHORT]

    # Module Step
    # VOID WINAPI Gx5733ModuleStep(SHORT nHandle, SHORT nPort, DWORD dwSteps, PSHORT pnStatus);
    Gx5733ModuleStep = GxPioLib.Gx5733ModuleStep
    Gx5733ModuleStep.restype = VOID
    Gx5733ModuleStep.argtypes = [SHORT, SHORT, DWORD, PSHORT]

    # Module State mode
    # VOID WINAPI Gx5733ModuleGetState(SHORT nHandle, SHORT nPort, PSHORT pnState, PSHORT pnStatus);
    Gx5733ModuleGetState = GxPioLib.Gx5733ModuleGetState
    Gx5733ModuleGetState.restype = VOID
    Gx5733ModuleGetState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleHalt(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5733ModuleHalt = GxPioLib.Gx5733ModuleHalt
    Gx5733ModuleHalt.restype = VOID
    Gx5733ModuleHalt.argtypes = [SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleRun(SHORT nHandle, SHORT nPort, PSHORT pnStatus);
    Gx5733ModuleRun = GxPioLib.Gx5733ModuleRun
    Gx5733ModuleRun.restype = VOID
    Gx5733ModuleRun.argtypes = [SHORT, SHORT, PSHORT]

    # Modules 5709/5711/5712 termination
    # VOID WINAPI Gx5733ModuleSetTermination(SHORT nHandle, SHORT nPort, SHORT nTermination, PSHORT pnStatus);
    Gx5733ModuleSetTermination = GxPioLib.Gx5733ModuleSetTermination
    Gx5733ModuleSetTermination.restype = VOID
    Gx5733ModuleSetTermination.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetTermination(SHORT nHandle, SHORT nPort, PSHORT pnTermination, PSHORT pnStatus);
    Gx5733ModuleGetTermination = GxPioLib.Gx5733ModuleGetTermination
    Gx5733ModuleGetTermination.restype = VOID
    Gx5733ModuleGetTermination.argtypes = [SHORT, SHORT, PSHORT, PSHORT]

    # Modules Group Direction
    # VOID WINAPI Gx5733ModuleSetDirection(SHORT nHandle, SHORT nPort, SHORT nGroup, SHORT nDirection, PSHORT pnStatus);
    Gx5733ModuleSetDirection = GxPioLib.Gx5733ModuleSetDirection
    Gx5733ModuleSetDirection.restype = VOID
    Gx5733ModuleSetDirection.argtypes = [SHORT, SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetDirection(SHORT nHandle, SHORT nPort, SHORT nGroup, PSHORT pnDirection, PSHORT pnStatus);
    Gx5733ModuleGetDirection = GxPioLib.Gx5733ModuleGetDirection
    Gx5733ModuleGetDirection.restype = VOID
    Gx5733ModuleGetDirection.argtypes = [SHORT, SHORT, SHORT, PSHORT, PSHORT]

    # Modules Group Direction Source
    # VOID WINAPI Gx5733ModuleSetDirectionSource(SHORT nHandle, SHORT nPort, SHORT nSource, PSHORT pnStatus);
    Gx5733ModuleSetDirectionSource = GxPioLib.Gx5733ModuleSetDirectionSource
    Gx5733ModuleSetDirectionSource.restype = VOID
    Gx5733ModuleSetDirectionSource.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733ModuleGetDirectionSource(SHORT nHandle, SHORT nPort, PSHORT pnSource, PSHORT pnStatus);
    Gx5733ModuleGetDirectionSource = GxPioLib.Gx5733ModuleGetDirectionSource
    Gx5733ModuleGetDirectionSource.restype = VOID
    Gx5733ModuleGetDirectionSource.argtypes = [SHORT, SHORT, PSHORT, PSHORT]

    # Internal Clock settings
    # VOID WINAPI Gx5733GetInternalClock(SHORT nHandle, SHORT nClock, PSHORT pnSource, PDWORD pdwDivider, PSHORT pnStatus);
    Gx5733GetInternalClock = GxPioLib.Gx5733GetInternalClock
    Gx5733GetInternalClock.restype = VOID
    Gx5733GetInternalClock.argtypes = [SHORT, SHORT, PSHORT, PDWORD, PSHORT]
    # VOID WINAPI Gx5733GetInternalClockEnable(SHORT nHandle, SHORT nClock, PSHORT pnEnable, PSHORT pnStatus);
    Gx5733GetInternalClockEnable = GxPioLib.Gx5733GetInternalClockEnable
    Gx5733GetInternalClockEnable.restype = VOID
    Gx5733GetInternalClockEnable.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733SetInternalClock(SHORT nHandle, SHORT nClock, SHORT nSource, DWORD dwDivider, PSHORT pnStatus);
    Gx5733SetInternalClock = GxPioLib.Gx5733SetInternalClock
    Gx5733SetInternalClock.restype = VOID
    Gx5733SetInternalClock.argtypes = [SHORT, SHORT, SHORT, DWORD, PSHORT]
    # VOID WINAPI Gx5733SetInternalClockEnable(SHORT nHandle, SHORT nClock, SHORT nEnable, PSHORT pnStatus);
    Gx5733SetInternalClockEnable = GxPioLib.Gx5733SetInternalClockEnable
    Gx5733SetInternalClockEnable.restype = VOID
    Gx5733SetInternalClockEnable.argtypes = [SHORT, SHORT, SHORT, PSHORT]

    # PXI trigger settings
    # VOID WINAPI Gx5733GetStrobeToPxiTriggerBusState(SHORT nHandle, PSHORT pnBusState, PSHORT pnStatus);
    Gx5733GetStrobeToPxiTriggerBusState = GxPioLib.Gx5733GetStrobeToPxiTriggerBusState
    Gx5733GetStrobeToPxiTriggerBusState.restype = VOID
    Gx5733GetStrobeToPxiTriggerBusState.argtypes = [SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733GetStrobeToPxiTriggerLineState(SHORT nHandle, SHORT nLine, PSHORT pnState, PSHORT pnStatus);
    Gx5733GetStrobeToPxiTriggerLineState = GxPioLib.Gx5733GetStrobeToPxiTriggerLineState
    Gx5733GetStrobeToPxiTriggerLineState.restype = VOID
    Gx5733GetStrobeToPxiTriggerLineState.argtypes = [SHORT, SHORT, PSHORT, PSHORT]
    # VOID WINAPI Gx5733SetStrobeToPxiTriggerBusState(SHORT nHandle, SHORT nBusState, PSHORT pnStatus);
    Gx5733SetStrobeToPxiTriggerBusState = GxPioLib.Gx5733SetStrobeToPxiTriggerBusState
    Gx5733SetStrobeToPxiTriggerBusState.restype = VOID
    Gx5733SetStrobeToPxiTriggerBusState.argtypes = [SHORT, SHORT, SHORT, PSHORT]
    # VOID WINAPI Gx5733SetStrobeToPxiTriggerLineState(SHORT nHandle, SHORT nLine, SHORT nState, PSHORT pnStatus);
    Gx5733SetStrobeToPxiTriggerLineState = GxPioLib.Gx5733SetStrobeToPxiTriggerLineState
    Gx5733SetStrobeToPxiTriggerLineState.restype = VOID
    Gx5733SetStrobeToPxiTriggerLineState.argtypes = [SHORT, SHORT, SHORT, PSHORT]


"""****************************************************************************
    END - OF - FILE
****************************************************************************"""
