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)
29 #define _MOTORCLASS __declspec(dllexport)
30 #elif defined(Use_Motors)
31 #define _MOTORCLASS __declspec(dllimport)
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