File: INCLUDE\MOTRSTRG\M_LAYER.H
1 #ifndef __M_LAYER_H
2 #define __M_LAYER_H
3
4 #include "motrstrg\m_motcom.h"
5 #include "utils\u_utils.h"
6 #include "hardware\hwio.h"
7
8 //--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--//--||--\\--||--
9
10 /*
11 * High Level layer der Motoransteuerung.
12 * Funktionen von ausserhalb sollten diese benutzen und nicht die
13 * aus motors.h
14 *
15 * mFunctionName = funktion benutzt den aktivierten Motor
16 * mlFunctionName= funktion benutzt den Motor mit der uebergebenen
17 * MotorID (mid)
18 * Achse= ein Motor, der eine bestimmte Achse bewegt
19 *
20 * Viele hier benutzte Typen werden in comhead.h definiert, auf
21 * jeden Fall einmal anschauen.
22 * In m_motcom.h stehen einige Kurzroutinen!!
23 *
24 * Kommentare: Jens-Uwe Rumstich, 18. Februar 1999
25 * Stefan Lützkendorf, Februar 2001
26 */
27
28 #if defined (Build_Motors)
30 #elif defined(Use_Motors)
32 #else
33 #define _MOTORCLASS
34 #endif
35
36 #ifdef __cplusplus
37 extern "C"
38 {
39 #endif
40 // prototypes for export functions
41 /*******************************************************************************
42 ******************** MotorListen-Funktionen ***********************************
43 ******************************************************************************/
44
45 /* wurde Motors.DLL geladen und initialisiert?
46 * TRUE = ja,
47 * FALSE= no
48 */
49 BOOL _MOTORCLASS WINAPI mlIsServerOK( void );
50
51 /*******************************************************************************
52 ************************ Motor-Funktionen *************************************
53 ******************************************************************************/
54
55 BOOL _MOTORCLASS WINAPI mSetLine( int, BOOL );
56
57 /*******************************************************************************
58 ****** "MoveScan"-Funktionen **************************************************
59 *******************************************************************************
60 *
61 * Ein MoveScan setzt den Motor mit den aktuellen Parametern
62 * in Bewegung und tastet die Position in regelmäßigen Abständen
63 * ab. Der Entstehende Vektor von Positionsangaben steht danach zur
64 * Verfügung.
65 *
66 */
67
68 /* startet einen MoveScan für den aktuellen Motor
69 */
70 void _MOTORCLASS WINAPI mStartMoveScan( int, int );
71
72 /*******************************************************************************
73 ************************ Motor-Simulation *************************************
74 ******************************************************************************/
75 // bit 0 - hardware
76 // bit 1 - simulation
77 enum TSimulationType {
78 no_simulation= 1,
79 simulation_only= 2,
80 test_simulation= 3
81 };
82
83 /* legt Simulationstyp fest
84 *
85 * t == no_simulation
86 * keine Simulation, evtl. registierte callbacks werden
87 * ignoriert, es wird nur die Hardware angesteuert
88 * t == simulation_only
89 * keine Ansteuerung der Hardware, es werden für Schreib- und Lese-
90 * Operationen die registirerten callbacks verwendet
91 * t == test_simulation
92 * es wird erst die Hardware angesteuert und dann die über die
93 * registierten callbacks die Simulation, Lese-Operationen liefern
94 * zusätzlich die Hardwarewerte für den Vergleich mit der Simulation
95 */
96 void _MOTORCLASS WINAPI msSetSimulationType(TSimulationType t);
97
98 /* Typen für callback-Funktionen zur Kommunikation mit einer
99 * Motornensimulation
100 *
101 * GET-Funktionen sind Lese-Operationen aus Sicht der motors.dll
102 * PUT-Funktionen sind Schreib-Operationen
103 *
104 * die Parameter der GET-funktionen sind
105 * - die Quelle (addresse oder port)
106 * - der Hardware-Vergleichs-Wert falls der
107 * Simulationstype test_simulation ist
108 * die GET-Funktionen liefern den von der Simulation
109 * generierten Wert
110 *
111 * die Parameter der PUT-Funktionen sind
112 * - Ziel der Schreiboperation (addresse oder port)
113 * - der zu schreibende Wert
114 */
115 typedef char (WINAPI *T812ISA_GET_CALLBACK) (char* addr, char hw_value);
116 typedef void (WINAPI *T812ISA_PUT_CALLBACK) (char* addr, char put);
117 typedef int (WINAPI *T832_GET_CALLBACK) (unsigned port, int hw_value);
118 typedef void (WINAPI *T832_PUT_CALLBACK) (unsigned port, int put);
119
120 /* Funktionen zum Registrieren oben beschriebener callback-Funktionen
121 */
122 void _MOTORCLASS WINAPI msRegister_C812ISA_Get(T812ISA_GET_CALLBACK);
123 void _MOTORCLASS WINAPI msRegister_C812ISA_Put(T812ISA_PUT_CALLBACK);
124 void _MOTORCLASS WINAPI msRegister_C832_Get(T832_GET_CALLBACK);
125 void _MOTORCLASS WINAPI msRegister_C832_Put(T832_PUT_CALLBACK);
126
127
128 #ifdef __cplusplus
129
130 }
131 #endif
132
133 /* verschiedene Type-Definitionen (Function-Casts)
134 */
135 typedef BOOL (*TInitializeMotorsDLL)( void );
136 typedef BOOL (*TSetAxis)( int );
137 typedef int (*TGetAxis)( void );
138 typedef BOOL (*TSetLine)( int, BOOL );
139 typedef BOOL (*TIsMoveFinish)( void );
140 typedef BOOL (*TGetDistance)( double& );
141 typedef BOOL (*TIsServerOK)( void );
142 typedef BOOL (*TMoveToDistance)( double );
143 typedef BOOL (*TMoveByDistance)( double );
144 typedef BOOL (*TSetAxisWithName)( EAxisType );
145 typedef int (*TGetScanSize)( void );
146 typedef LPLONG (*TGetMoveScan)( void );
147 typedef void (*TStartMoveScan)( int, int );
148 typedef int (*TGetMoveFinishIdx)( void );
149 typedef void (*TSavePosition)( UINT, UINT, DWORD, DWORD, DWORD );
150
151 /* table with several functions
152 */
153 struct TMFunctionTable {
154 public:
155 TInitializeMotorsDLL InitializeMotorsDLL;
156 TSetAxis SetAxis;
157 TSetAxisWithName SetAxisWithName;
158 TGetAxis GetAxis;
159 TGetScanSize GetScanSize;
160 TGetMoveScan GetMoveScan;
161 TStartMoveScan StartMoveScan;
162 TMoveToDistance MoveToDistance;
163 TMoveByDistance MoveByDistance;
164 TSetLine SetLine;
165 TIsMoveFinish IsMoveFinish;
166 TGetDistance GetDistance;
167 TIsServerOK IsServerOK;
168 TGetMoveFinishIdx GetMoveFinishIdx;
169 TSavePosition SavePosition;
170 };
171
172
173 //liefert den der spezifizierten id entsprechenden Controller aus der spezifizierten
174 //Controllerliste -> instantiiert ggf. einen neuen Controller
175 Controller* GetController(EDeviceType DeviceID, LPTSTR HardwareID,
176 ControllerList* Controllers, DeviceList* Drivers, DWORD* index= 0);
177
178
179
180 #endif
181 // __LastLine__
182
183
184