#ifndef NDTSCOMMONHALPROTECTED_H
#define NDTSCOMMONHALPROTECTED_H

#ifdef __cplusplus
extern "C" {
#endif

#include "NDTSEnums.h"
#include "NDTSCommonHALConstants.h"
#include "NDTSCommonHALInternal.h"

#define NDTS_HAL_WILDCARD_SECONDARY_DEVICE_ID (NDTS_CardSecondaryIDs) -1


NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_EnumerateHALs(NDTS_HAL_ID *pHALIDs, unsigned long numberOfBufferedIDs, unsigned long *pNumberOfHALsPresent) ;
NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_InitialiseHAL(NDTS_HAL_ID *pHALID, NDTS_CardSecondaryIDs cardID, unsigned long *pHALIndex) ;
NDTSHAL_API void CALL_CONV NDTS_HAL_UninitialiseLastActiveHAL() ;

NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_GetBoardsIDs(unsigned long halIndex, unsigned short vendorID, unsigned short deviceID, NDTS_CardSecondaryIDs cardID, NDTS_HAL_BoardID **ppBoardIDs, unsigned long numberOfBufferedBoardIDs, unsigned long *pNumberOfBoards) ;
NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_RegisterBoard(NDTS_HAL_BoardID *pBoardID, NDTS_HAL_Info *pHALInfo) ;
NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_UnregisterBoard(NDTS_HAL_BoardID *pBoardID, NDTS_HAL_Info *pHALInfo) ;

NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_GetHALData(NDTS_CardSecondaryIDs cardID, unsigned long cardIndex, NDTS_HAL_Info **ppHALInfo, unsigned long *pInternalCardIndex) ;

NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_BoardByteCopy(NDTS_CardSecondaryIDs cardID, unsigned long cardIndex, unsigned long localAddress, void *pOut, unsigned long numberOfBytes) ;

NDTSHAL_API NDTS_Boolean CALL_CONV NDTS_HAL_WriteSecondaryDeviceID(unsigned long busIndex, unsigned long slotIndex, NDTS_CardSecondaryIDs cardID) ;


#ifdef __cplusplus
}
#endif

#endif