123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /*****************************************************************************
- * CIOIIDeviceDefines.h
- *****************************************************************************
- *
- * Project: HALCON/libhalcon
- * Description: Defines for the integration interface for IO Devices
- *
- * (c) 2013-2020 by MVTec Software GmbH
- * www.mvtec.com
- *
- *****************************************************************************
- *
- *
- *****************************************************************************/
- #ifndef CIO_IIDEVICE_DEFINES_H
- #define CIO_IIDEVICE_DEFINES_H
- #ifndef HC_NO_IOIINTERFACE
- # define HIOII_VERSION 1300
- # define HIOGET_IOII_VERSION(IOI_VERSION) ((IOI_VERSION) >> 16)
- # define HIOGET_IOII_HMAJOR(IOI_VERSION) \
- (HIOGET_IOII_VERSION(IOI_VERSION) / 100)
- # define HIOGET_IOII_HMINOR(IOI_VERSION) \
- (HIOGET_IOII_VERSION(IOI_VERSION) % 100)
- # define HIOGET_IOI_REVISION(IOI_VERSION) (((IOI_VERSION) >> 8) & 0xFF)
- # define HIOGET_IOI_BUILD(IOI_VERSION) ((IOI_VERSION)&0xFF)
- # define HIOI_VERSION(IOI_REVISION, IOI_BUILD) \
- (((HIOII_VERSION) << 16) | ((IOI_REVISION) << 8) | (IOI_BUILD))
- # if !defined HIOI_PREFIX
- # if defined H_PARALLEL
- # define HIOI_PREFIX "hio"
- # else
- # define HIOI_PREFIX "seqhio"
- # endif
- # endif
- # if !defined HIOI_SUFFIX
- # if defined HC_LARGE_IMAGES
- # define HIOI_SUFFIX "xl"
- # else
- # define HIOI_SUFFIX ""
- # endif
- # endif
- # if defined(__cplusplus)
- extern "C" {
- # endif
- # ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
- /* sets the struct member alignment to avoid problems if
- * the settings of the user differ to those of the HALCON
- * version. (8 is the default alignment, generally) */
- # pragma pack(push, 8)
- # endif
- /* HIOInstance holds the general data of a (virtual) device instance */
- typedef struct _HIOInstance
- {
- struct _HIOClass* ioclass; /* backward reference to the interface
- * class handle */
- char* H_RESTRICT name; /* name of opened device */
- void* iochnl_list; /* list of opened device channels */
- void* H_RESTRICT usrinst; /* holds the device specific data, set by
- * the device interface. */
- } HIOInstance;
- /* HIOChannel holds the general data of a (virtual) channel */
- typedef struct _HIOChannel
- {
- char* H_RESTRICT name; /* name of opened channels */
- struct _HIOInstance* ioinst; /* backward reference to the interface
- * device instance */
- void* H_RESTRICT usrchnl; /* holds the channel specific data, set by
- * the device interface. */
- } HIOChannel;
- /* HIOClass holds the class information of a io device interface */
- typedef struct _HIOClass
- {
- /* -------------------------- internal ---------------------------------- */
- char* interface_name; /* name of io class */
- void* lib_handle; /* handle of interface library */
- INT4 interface_version; /* current HALCON io device interface version */
- INT4 flags; /* interface flags */
- void* ioinst_list; /* list of instantiated device interfaces */
- Hphandle handle; /* pointer to (shared) HALCON handle */
- HBOOL keep_open; /* If true, do not close the interface if no */
- /* instances are open. */
- /* ----------------- interface-specific functions ----------------------- */
- Herror (*Cleanup)(Hproc_handle ph, struct _HIOClass* ioclass);
- Herror (*QueryInterface)(Hproc_handle ph);
- Herror (*OpenDevice)(Hproc_handle ph, HIOInstance* const* ioinst,
- INT4_8* inst_num);
- Herror (*CloseDevice)(Hproc_handle ph, HIOInstance* const* ioinst,
- INT4_8 inst_num);
- Herror (*SetDeviceParam)(Hproc_handle ph, HIOInstance* H_RESTRICT ioinst);
- Herror (*GetDeviceParam)(Hproc_handle ph, HIOInstance const* ioinst);
- Herror (*QueryDevice)(Hproc_handle ph, HIOInstance const* ioinst);
- Herror (*OpenChannel)(Hproc_handle ph, HIOInstance const* ioinst,
- HIOChannel* const* iochnls, INT4_8* chnlnum);
- Herror (*CloseChannel)(Hproc_handle ph, HIOChannel* const* iochnls,
- INT4_8 chnlnum);
- Herror (*SetChannelParam)(Hproc_handle ph, HIOChannel* const* iochnls,
- INT4_8 chnlnum);
- Herror (*GetChannelParam)(Hproc_handle ph, HIOChannel const* const* iochnls,
- INT4_8 chnlnum);
- Herror (*ReadChannel)(Hproc_handle ph, HIOChannel const* const* iochnls,
- INT4_8 chnlnum);
- Herror (*WriteChannel)(Hproc_handle ph, HIOChannel* const* iochnls,
- INT4_8 chnlnum);
- /* These are optional */
- Herror (*ControlInterface)(Hproc_handle ph);
- Herror (*ControlDevice)(Hproc_handle ph, HIOInstance const* ioinst);
- Herror (*ControlChannel)(Hproc_handle ph, HIOChannel* const* iochnls,
- INT4_8 chnlnum);
- } HIOClass;
- typedef Herror (*HIOI_INIT_FUNC)(Hproc_handle, HIOClass*);
- # define HIOI_INIT_NAME "HIOIInit"
- # define HIOI_FLAGS_NAME "HIOIFlags"
- /*
- * Special IO interface flags. Tp set the flags, the interface should export
- * the symbol HIOI_FLAGS_NAME, which must be an INT4.
- *
- * The following flags are defined:
- *
- * HIO_FLAG_THREAD_INIT: if set, the interface cleanup function is called
- * from the same thread as the init function.
- */
- # define HIO_FLAG_THREAD_INIT (1 << 0)
- # ifndef HC_NO_STRUCT_MEMBER_ALIGNMENT
- # pragma pack(pop)
- # endif
- # if defined(__cplusplus)
- }
- # endif
- #endif /* ifndef HC_NO_IOIINTERFACE */
- #endif /* ifndef CIO_IIDEVICE_DEFINES_H */
|