1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// MULTICAM.H -- MULTICAM DRIVER API
 
#ifndef _MULTICAM_
#define _MULTICAM_
 
#if defined(WINAPI)
#define MCAPI WINAPI
#elif defined(__BORLANDC__)
#if __BORLANDC__ >= 0x0570
#define MCAPI __stdcall
#else
#define MCAPI stdcall
#endif
#elif defined(__GNUC__)
#define MCAPI
#else
#define MCAPI _stdcall
#endif
 
#if defined(DLL_EXPORTS) && defined(__GNUC__)
#define DLL_API  __attribute__((visibility("default")))
#elif defined(DLL_EXPORTS)
#define DLL_API __declspec(dllexport) MCAPI
#elif defined(__BORLANDC__)
#define DLL_API _import MCAPI
#elif defined(__GNUC__)
#define DLL_API
#elif defined(EURESYS_STATIC)
#define DLL_API
#else
#define DLL_API __declspec(dllimport) MCAPI
#endif
 
// MULTICAM PARAMETERS AND DEFINITIONS
#include "McParams.h"
#include "McDef.h"
#include "McIo.h"
#if !defined(DLL_EXPORTS)
#include "McParamsCompat1x.h"
#endif
 
#include "MultiCam_DataTypes.h"
 
#ifdef __cplusplus
extern "C" {
#endif
 
typedef int MCSTATUS;
typedef UINT32 MCHANDLE, *PMCHANDLE;
typedef UINT32 MCPARAMID, *PMCPARAMID;
typedef int MCEVENT, MCSIGNAL;
 
 
// SIGNALING
typedef struct _MC_CALLBACK_INFO {
    PVOID Context;
    MCHANDLE Instance;
    MCSIGNAL Signal;
    UINT32 SignalInfo;
    UINT32 SignalContext;
} MCSIGNALINFO, *PMCSIGNALINFO, *PMCCALLBACKINFO, MCCALLBACKINFO;
 
typedef void (MCAPI *PMCCALLBACK)(PMCSIGNALINFO CbInfo);
typedef void (MCAPI *PMCCALLBACKEX)(PVOID Context);
 
// OBJECT CLASSES
#define MC_SURFACE_CLASS        0x4
#define MC_CHANNEL_CLASS        0x8
#define MC_CONFIG_CLASS            0x2
#define MC_BOARD_CLASS            0xE
 
 
// DEFAULT INSTANCE TEMPLATES
#define MC_DEFAULT_SURFACE_HANDLE (MCHANDLE)((MC_SURFACE_CLASS << 28) | 0x0FFFFFFF)
 
#define MC_CONFIGURATION            (MCHANDLE)((MC_CONFIG_CLASS << 28) | 0)
 
#define MC_BOARD                    (MCHANDLE)((MC_BOARD_CLASS << 28) | 0)
 
// CHANNEL CREATION MODELS
#define MC_CHANNEL                    (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0000FFFF)
#define MC_CHANNEL_ALPHA_X            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0007FFFF)
#define MC_CHANNEL_ALPHA_Y            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0008FFFF)
#define MC_CHANNEL_ALPHA_XBIS        (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0015FFFF)
#define MC_CHANNEL_ALPHA_YBIS        (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0016FFFF)
#define MC_CHANNEL_ALPHA_STEREOXY    (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x001CFFFF)
#define MC_CHANNEL_VALUE_M            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0009FFFF)
#define MC_CHANNEL_EXPERT_M            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x000AFFFF)
#define MC_CHANNEL_EXPERT_A            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x000BFFFF)
#define MC_CHANNEL_EXPERT_B            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x000CFFFF)
#define MC_CHANNEL_HARMONY            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x001EFFFF)
#define MC_CHANNEL_MELODY            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x001FFFFF)
#define MC_CHANNEL_AVENUE            (MCHANDLE)((MC_CHANNEL_CLASS << 28) | 0x0024FFFF)
 
 
#if !defined(MC_DYNAMIC_BINDING)
 
// STATIC INSTANCE OBJECTS
// FUNCTIONS
 
// Driver connections
MCSTATUS DLL_API McOpenDriver(PCCHAR InstanceName);
MCSTATUS DLL_API McCloseDriver(void);
 
// Object creation / deletion
MCSTATUS DLL_API McCreate(MCHANDLE ModelInstance, PMCHANDLE Instance);
MCSTATUS DLL_API McCreateNm(PCCHAR ModelInstanceName, PMCHANDLE Instance);
MCSTATUS DLL_API McDelete(MCHANDLE Instance);
 
// Acquisition control
MCSTATUS DLL_API McStartAcq(void);
MCSTATUS DLL_API McStopAcq(void);
 
// Parameter handling
MCSTATUS DLL_API McSetParamInt(MCHANDLE Instance, MCPARAMID Param, INT32 ValueInt);
MCSTATUS DLL_API McSetParamNmInt(MCHANDLE Instance, PCCHAR ParamName, INT32 ValueInt);
MCSTATUS DLL_API McSetParamStr(MCHANDLE Instance, MCPARAMID Param, PCCHAR ValueStr);
MCSTATUS DLL_API McSetParamNmStr(MCHANDLE Instance, PCCHAR ParamName, PCCHAR ValueStr);
MCSTATUS DLL_API McSetParamFloat(MCHANDLE Instance, MCPARAMID Param, FLOAT64 ValueFloat);
MCSTATUS DLL_API McSetParamNmFloat(MCHANDLE Instance, PCCHAR ParamName, FLOAT64 ValueFloat);
MCSTATUS DLL_API McSetParamInst(MCHANDLE Instance, MCPARAMID Param, MCHANDLE ValueInst);
MCSTATUS DLL_API McSetParamNmInst(MCHANDLE Instance, PCCHAR ParamName, MCHANDLE ValueInst);
MCSTATUS DLL_API McSetParamPtr(MCHANDLE Instance, MCPARAMID Param, PVOID ValuePtr);
MCSTATUS DLL_API McSetParamNmPtr(MCHANDLE Instance, PCCHAR ParamName, PVOID ValuePtr);
MCSTATUS DLL_API McSetParamInt64(MCHANDLE Instance, MCPARAMID Param, INT64 ValueInt64);
MCSTATUS DLL_API McSetParamNmInt64(MCHANDLE Instance, PCCHAR ParamName, INT64 ValueInt64);
 
MCSTATUS DLL_API McGetParamInt(MCHANDLE Instance, MCPARAMID Param, PINT32 ValueInt);
MCSTATUS DLL_API McGetParamNmInt(MCHANDLE Instance, PCCHAR ParamName, PINT32 ValueInt);
MCSTATUS DLL_API McGetParamStr(MCHANDLE Instance, MCPARAMID Param, PCHAR ValueStr, UINT32 MaxLength);
MCSTATUS DLL_API McGetParamNmStr(MCHANDLE Instance, PCCHAR ParamName, PCHAR ValueStr, UINT32 MaxLength);
MCSTATUS DLL_API McGetParamFloat(MCHANDLE Instance, MCPARAMID Param, PFLOAT64 ValueFloat);
MCSTATUS DLL_API McGetParamNmFloat(MCHANDLE Instance, PCCHAR ParamName, PFLOAT64 ValueFloat);
MCSTATUS DLL_API McGetParamInst(MCHANDLE Instance, MCPARAMID Param, PMCHANDLE ValueInst);
MCSTATUS DLL_API McGetParamNmInst(MCHANDLE Instance, PCCHAR ParamName, PMCHANDLE ValueInst);
MCSTATUS DLL_API McGetParamPtr(MCHANDLE Instance, MCPARAMID Param, PVOID *ValuePtr);
MCSTATUS DLL_API McGetParamNmPtr(MCHANDLE Instance, PCCHAR ParamName, PVOID *ValuePtr);
MCSTATUS DLL_API McGetParamInt64(MCHANDLE Instance, MCPARAMID Param, PINT64 ValueInt64);
MCSTATUS DLL_API McGetParamNmInt64(MCHANDLE Instance, PCCHAR ParamName, PINT64 ValueInt64);
 
// Callback registration for an object
MCSTATUS DLL_API McRegisterCallback(MCHANDLE Instance, PMCCALLBACK CallBackFunction, PVOID Context);
MCSTATUS DLL_API McRegisterCallbackEx(MCHANDLE Instance, PMCCALLBACK CallBackFunction, PMCCALLBACKEX ThreadStart, PMCCALLBACKEX ThreadEnd, PVOID Context);
 
// Event Management
MCSTATUS DLL_API McWaitSignal(MCHANDLE Instance, MCSIGNAL Signal, UINT32 Timeout, PMCSIGNALINFO Info);
MCSTATUS DLL_API McGetSignalInfo(MCHANDLE Instance, MCSIGNAL Signal, PMCSIGNALINFO Info);
 
#endif    // MC_DYNAMIC_BINDING
 
#ifdef __cplusplus
}
#endif // __cplusplus
 
#endif // _MULTICAM_