Files
2025-03-26 01:06:45 +08:00

148 lines
5.7 KiB
C

/*****************************************************************************
* CIOIIDeviceDefines.h
*****************************************************************************
*
* Project: HALCON/libhalcon
* Description: Defines for the integration interface for IO Devices
*
* (c) 2013-2018 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 */