Subject: kommentiertes m_layer.h Date: Mon, 15 Mar 1999 23:09:06 +0100 (MET) From: Jens-Uwe RumstichTo: freund@informatik.hu-berlin.de (Sebastian Freund) CC: hepp@informatik.hu-berlin.de (Derrick Hepp) #ifndef __M_LAYER_H #define __M_LAYER_H #ifdef __cplusplus extern "C" { #endif ; /* delete me, semi colon only here for editor indent ;) */ /* * High Level Layer der Motoransteuerung. * Funktionen von ausserhalb sollten diese benutzen und nicht die * aus m_motcom.h bzw. m_mothw.h * * mFunctionName = funktion benutzt den aktivierten Motor * mlFunctionName = funktion benutzt den Motor mit der uebergebenen * MotorID (mid) * Achse = ein Motor, der eine bestimmte Achse bewegt * * Viele hier benutzte Typen werden in comhead.h definiert, auf * jeden Fall einmal anschauen. * In m_motcom.h stehen einige kurzroutinen!! * * Kommentare: Jens-Uwe Rumstich, 18. Februar 1999. */ /* prototypes for export functions */ /* initialisiere DLL. * TRUE = initialisierung erfolgreich * FALSE = sonst */ BOOL WINAPI mlInitializeMotorsDLL (void); /* Auswahl der aktiven Axis (Motor). * Auswahl des Motors, der danach direkt ueber die mFuntionsname * Fumktionen angesprochen wird. * Moegliche Eingaben sind die in der enumneration TAxisType (comhead.h) * angegebenen werte (??) * TRUE = Auswahl erfolgreich * FALSE = Auswahl schlug fehl (z.B. Motor/Axis existiert nicht) */ BOOL WINAPI mlSetAxis (int); /* Ermittle derzeit aktivierte Axe * Siehe mlSetAxis fuer mehr */ int WINAPI mlGetAxis (void); /* Returns ID-Number of AxisType. * -1 = Fehler, diese Axe wurde noch nicht initialisiert! * AxisType might be one of X, Y, Z, Omega, Theta, Phi, Spi, Encoder, * Monochromator, Absorber, Collimator, DF, DC, Tilt, Rotation * siehe auch comhead.h*/ int WINAPI mlGetIdByName (TAxisType); /* Ermittle Distance des Motors mit der gegebenen Motor ID. * TRUE = Ok, Distanz konnte ermittelt werden -> Distanz steht im Double-Parameter!! * FALSE = sorry, funktion ging schief */ BOOL WINAPI mlGetDistance (int,double&); /* returns the value of TValueType of the motor. * TValueType might be one of : Distance, MinDistance, MaxDistance, * Speed, Width. Diese Funktion ermittelt also verschiedene Werte, * abhaengig vom Inhalt von TValueType! * fuer TValueType siehe auch comhead.h */ double WINAPI mlGetValue (int,TValueType); /* move given motor (mid) to distance (double) */ BOOL WINAPI mlMoveToDistance (int,double); /* Feststellen, ob sich der Motor noch bewegt. * TRUE : motor finished to move (stands still) oder befindet sich in einem toten Bereich */ BOOL WINAPI mlIsMoveFinish (int); /* returns Offset (dAngleBias) * dAngleBias, Winkel. Bias = Keil, Ueberhang, Neigung *Vielleicht Winkel des Motors in Grundstellung?? * Wenn Offset != 0, dann bezieht sich alles auf relative Null.*/ double WINAPI mlGetOffset (int); /* Umwandeln eines Strings in einen AxisType. * Allows more than one name for the same axis type. for example will * all of AzimutalRotation, AZ, Rotation and Azimute get to axis type * Rotation. * wird zum Beispiel ueber mehrere Ecken von ParsingCmd in m_steering.cpp * benutzt. useless ?? */ TAxisType WINAPI mlParsingAxis (LPSTR); /* herausfinden, ob eine bestimmte Achse initialisiert wurde * TRUE = Achse wurde bereits initialisiert * FALSE = sonst */ BOOL WINAPI mlIsAxisValid (TAxisType); /* wurde Motors.DLL geladen und initialisiert? * TRUE = ja, * FALSE = noe */ BOOL WINAPI mlIsServerOK (void); /* Ermitteln der Anzahl der Achsen. (nLastdrive+1) * Siehe Definition von GetAxisNumber in m_motcom.h */ int WINAPI mlGetAxisNumber (void); /* Abspeichern der Settings der Motoren in ein File (motors.cpp) */ void WINAPI mlSaveModuleSettings (void); /* Setzen der Defaults fuer Winkel (dAngleBias auf 0 ) und der * (erlaubten ?)Winkelbereiche (SetAngleRange). Die Werte brauchen nicht * uebergeben zu werden. */ void WINAPI mlSetAngleDefault (void); /* Rueckgabe der Versionsnummer von der m_layer-Schicht */ LPCSTR WINAPI mlGetVersion (void); /* returns instance of module */ HINSTANCE WINAPI mlGetInstance (void); /* move given motor (mid) to distance (double). * Die Distanz wird im Bogenmass uebergeben */ BOOL WINAPI mMoveToDistance (double); /* Bewege Motor relative zur aktuellen Position um eine bestimmte Distanz. * Distanz wird im Winkelmass uebergeben */ BOOL WINAPI mMoveByDistance (double); BOOL WINAPI mSetLine (int,BOOL); /* Feststellen, ob sich der Motor noch bewegt. * TRUE : motor finished to move (stands still) oder befindet sich in einem toten Bereich */ BOOL WINAPI mIsMoveFinish (void); /* Feststellen, ob ein Motor (vielleicht auch nur frueher berechneter * Winkel, wird in Translate gesetzt) ausserhalb des erlaubten Bereich * ist. * TRUE = Ausserhalb des erlaubten Bereichs, Fehler! * FALSE = Innerhalb des erlaubten Bereichs, kein Problem :-) */ BOOL WINAPI mIsRangeHit (void); BOOL WINAPI mIsCalibrated (void); /* TRUE = WinkelOffset != 0, sprich der Winkel bezieht sich auf * relative Null * FALSE = WinkelOffset = 0.*/ BOOL WINAPI mIsDistanceRelative (void); /* Wenn FALSE, dann wird Befehl auf der 812 ignoriert !!! BUG ?? * Stoppen des Motors. * Der Bool-Wert gibt eventuell an, ob der Motor wieder neu gestartet * werden soll. Leider Source ohne Doc nicht lesbar :-( */ void WINAPI mStopDrive (BOOL); /* Ermittle Distance des Motors mit der gegebenen Motor ID. * TRUE = Ok, Distanz konnte ermittelt werden -> Distanz steht im Double-Parameter!! * FALSE = sorry, funktion ging schief */ BOOL WINAPI mGetDistance (double&); double WINAPI mGetDistanceProcess (void); /* return the value of TValueType of the motor. * TValueType might be one of : Distance, MinDistance, MaxDistance, Speed, Width */ double WINAPI mGetValue (TValueType); /* returns Unittype. * this might be one of Grad,Minuten,Sekunden,Millimeter,Mikrometer * Channel. See comhead.h for deklaration of TUniType */ TUnitType WINAPI mGetUnitType (void); /* set value of a special ValueType. TValueType might be Speed or Width. * Distance, MaxDistance, MinDistance allways return false an can not be set! * TRUE : Function successfull * FALSE: Fuction failed * This fuction depends on a LowLevel-Driver to return false/true correctly */ BOOL WINAPI mSetValue (TValueType,double); /* Aktiviere einen Motor (Ansteuerungskarte?) * Dieses geschieht direkt auf der Hardware Ebene*/ void WINAPI mActivateDrive (void); /* der Correctionstate wird entweder ON oder OFF (oder 0) geschaltet */ void WINAPI mSetCorrectionState (BOOL); /* was ergibt pCharacteristic ?? */ LPCSTR WINAPI mGetAxisName (void); /* ausgabe von szUnit. Wird aus ini-file ausgelesen */ LPCSTR WINAPI mGetAxisUnit (void); /* rueckgabe eines String. Siehe DFmt in motors.cpp.*/ LPCSTR WINAPI mGetDF (void); /* rueckgabe eines String. Siehe SFmt in motors.cpp */ LPCSTR WINAPI mGetSF (void); /* Setzen der Defaults fuer Winkel (dAngleBias auf 0 ) und der * (erlaubten ?)Winkelbereiche (SetAngleRange). Die Werte brauchen nicht * uebergeben zu werden. */ vvoid WINAPI mSetAngleDefault (void); /* setzen der relativen Null. * Wenn Bool = yes -> der Wert in double wird von Winkel Offset abgezogen. * = no -> Der Winkel Offset wird auf 0 gesetzt. */ void WINAPI mSetRelativeZero (BOOL,double); /* Ausfuehren des Kommandos in LPSTR direkt auf der Karte/dem Motor. * * sollte solcherlei direktes Ansprechen der Hardware in diesem * High-Level-Layer nicht unmoeglich sein? */ int WINAPI mExecuteCmd (LPSTR); /* Zwischenspeichern von dAngle, dAngleMin, dAngleMax, dAngleWidth und * dSpeed. Achtung, es werden eventuell frueher gespeicherte Werte * ueberschrieben. Zwischen 2 PushSettings muss also ein PopSettings * erfolgen, sonst gehen diese Werte verloren! * Frage: ist es wirklich sinnvoll, eine solche Routine nach aussen * anzubieten? Sollte so etwas nicht irgendwie abgeschirmt werden?*/ void WINAPI mPushSettings (void); /* Zurueckschreiben der (letzten) mit PushSettings gespeicherten * Werte in die entsprechenden Variablen! */ void WINAPI mPopSettings (TMParameter); /* keine ahnung, wird in mSavePosition in m_layer.cpp gesetzt*/ int WINAPI mGetMoveFinishIdx (void); /* Sorry, keine Ahnung. Was ist ein CallBack ?? */ void CALLBACK mSavePosition (UINT,UINT,DWORD,DWORD,DWORD); /* returns the ScanSize. * nScanSize is a constant defined in m_layer.h (150 at the moment) */ int WINAPI mGetScanSize (void); /* siehe m_layer.cpp, Routines for optimizing the motors */ LPLONG WINAPI mGetMoveScan (void); void WINAPI mStartMoveScan (int,int); #ifdef __cplusplus } #endif /* verschiedene Type-Definitionen */ #ifdef __WIN32__ typedef BOOL WINAPI (*TInitializeMotorsDLL) (void); typedef BOOL WINAPI (*TSetAxis) (int); typedef int WINAPI (*TGetAxis) (void); typedef BOOL WINAPI (*TSetLine) (int,BOOL); typedef BOOL WINAPI (*TIsMoveFinish) (void); typedef BOOL WINAPI (*TGetDistance) (double&); typedef BOOL WINAPI (*TIsServerOK) (void); typedef BOOL WINAPI (*TMoveToDistance) (double); typedef BOOL WINAPI (*TMoveByDistance) (double); typedef BOOL WINAPI (*TSetAxisWithName) (TAxisType); typedef int WINAPI (*TGetScanSize) (void); typedef LPLONG WINAPI (*TGetMoveScan) (void); typedef void WINAPI (*TStartMoveScan) (int,int); typedef int WINAPI (*TGetMoveFinishIdx) (void); typedef void CALLBACK (*TSavePosition) (UINT,UINT,DWORD,DWORD,DWORD); /* table with several functions */ typedef struct { public: TInitializeMotorsDLL InitializeMotorsDLL; TSetAxis SetAxis; TSetAxisWithName SetAxisWithName; TGetAxis GetAxis; TGetScanSize GetScanSize; TGetMoveScan GetMoveScan; TStartMoveScan StartMoveScan; TMoveToDistance MoveToDistance; TMoveByDistance MoveByDistance; TSetLine SetLine; TIsMoveFinish IsMoveFinish; TGetDistance GetDistance; TIsServerOK IsServerOK; TGetMoveFinishIdx GetMoveFinishIdx; TSavePosition SavePosition; } TMFunctionTable; /* ich habe alles mit DLG im Namen hierhin an das Ende verbannt. Alles mit * Dialogen hat hier nichts zu suchen und sollte an eine entsprechende * Files bewegt werden!! */ /* start InquireReferencePoint-Dialog */ void WINAPI mlInquireReferencePointDlg (int); /* start PositionControl-Dialog */ void WINAPI mlPositionControlDlg (void); /* start SetParameter-Dialog */ void WINAPI mlSetParametersDlg (void); /* send cm_CallExecuteScan. and start OptimizingDialog. * should be moved out of m_layer !!!*/ void WINAPI mlOptimizingDlg(void); #endif /* ifdef __WIN32__ */ #endif /* ifdef __M_LAYER_H */ // __LastLine__