| 1 | #ifndef COSY_MCosy | 
|---|
| 2 | #define COSY_MCosy | 
|---|
| 3 |  | 
|---|
| 4 | #include "coord.h" | 
|---|
| 5 | #include "msgqueue.h" | 
|---|
| 6 | #include "MThread.h" | 
|---|
| 7 | #include "MBending.h" | 
|---|
| 8 |  | 
|---|
| 9 | #ifndef COSY_Network | 
|---|
| 10 | #include "network.h" | 
|---|
| 11 | #endif | 
|---|
| 12 | #ifndef MARS_MObservatory | 
|---|
| 13 | #include "MObservatory.h" | 
|---|
| 14 | #endif | 
|---|
| 15 | #ifndef ROOT_TMutex | 
|---|
| 16 | #include <TMutex.h> | 
|---|
| 17 | #endif | 
|---|
| 18 |  | 
|---|
| 19 | #define kDEG ((char)0x9c)  // Linux 'ø' | 
|---|
| 20 |  | 
|---|
| 21 | #define WM_WAIT         WM_NULL | 
|---|
| 22 | //#define WM_PRESET       0x1000 | 
|---|
| 23 | #define WM_POSITION     0x1001 | 
|---|
| 24 | #define WM_TRACK        0x1002 | 
|---|
| 25 | #define WM_STOP         0x1003 | 
|---|
| 26 | //#define WM_CALIB        0x1004 | 
|---|
| 27 | #define WM_TPOINT       0x1005 | 
|---|
| 28 | #define WM_NEWTRACK     0x1006 | 
|---|
| 29 | #define WM_LOADBENDING  0x1007 | 
|---|
| 30 | #define WM_RESETBENDING 0x1008 | 
|---|
| 31 | #define WM_CALCALTAZ    0x1009 | 
|---|
| 32 | #define WM_HOME         0x100a | 
|---|
| 33 | #define WM_TESTSE       0x100b | 
|---|
| 34 | #define WM_GEAR         0x100c | 
|---|
| 35 | #define WM_DISPLAY      0x100d | 
|---|
| 36 | #define WM_TRACKPOS     0x100e | 
|---|
| 37 | #define WM_POSITION1    0x100f | 
|---|
| 38 | #define WM_ENDSWITCH    0x1010 | 
|---|
| 39 | #define WM_GRB          0x1011 | 
|---|
| 40 | #define WM_PREPS        0x1012 | 
|---|
| 41 | #define WM_ARM          0x1013 | 
|---|
| 42 |  | 
|---|
| 43 | class ShaftEncoder; | 
|---|
| 44 | class Macs; | 
|---|
| 45 | class MGCosy; | 
|---|
| 46 | class MCosy; | 
|---|
| 47 | class TH1; | 
|---|
| 48 | class MStarguider; | 
|---|
| 49 | class MDriveCom; | 
|---|
| 50 |  | 
|---|
| 51 | class MTTalk : public MThread | 
|---|
| 52 | { | 
|---|
| 53 | private: | 
|---|
| 54 | MCosy *fCosy; | 
|---|
| 55 |  | 
|---|
| 56 | void *Thread(); | 
|---|
| 57 |  | 
|---|
| 58 | public: | 
|---|
| 59 | MTTalk(MCosy *cosy) : MThread(false), fCosy(cosy) | 
|---|
| 60 | { | 
|---|
| 61 | SetPriority(10); | 
|---|
| 62 | Detach(); | 
|---|
| 63 | Start(); | 
|---|
| 64 | } | 
|---|
| 65 | ~MTTalk() { std::cout << "~MTTalk::MTTalk" << std::endl; } | 
|---|
| 66 | }; | 
|---|
| 67 |  | 
|---|
| 68 | class TTimer; | 
|---|
| 69 | class MCosy : public Network, public MsgQueue, public TObject | 
|---|
| 70 | { | 
|---|
| 71 | friend class MTTalk; | 
|---|
| 72 | friend class MPointing; | 
|---|
| 73 | friend class MTracking; | 
|---|
| 74 |  | 
|---|
| 75 | private: | 
|---|
| 76 | const MObservatory::LocationName_t fObservatory; | 
|---|
| 77 |  | 
|---|
| 78 | MStarguider *fStarguider; | 
|---|
| 79 |  | 
|---|
| 80 | ShaftEncoder *fZd1; | 
|---|
| 81 | ShaftEncoder *fZd2; | 
|---|
| 82 | ShaftEncoder *fAz; | 
|---|
| 83 |  | 
|---|
| 84 | Macs *fMac1; | 
|---|
| 85 | Macs *fMac2; | 
|---|
| 86 | Macs *fMac3; | 
|---|
| 87 |  | 
|---|
| 88 | MGCosy    *fWin; | 
|---|
| 89 | MDriveCom *fCom; | 
|---|
| 90 |  | 
|---|
| 91 | TTimer    *fUpdateGui; | 
|---|
| 92 | MTTalk    *fTTalk;    // should be outsourced, like the starguider. | 
|---|
| 93 | // with a generic interface to both... | 
|---|
| 94 | ZdAz fTrackingPos;    // [deg] Current tracking position | 
|---|
| 95 | ZdAz fTrackingPosRaw; // [deg] Raw tracking position | 
|---|
| 96 |  | 
|---|
| 97 | TMutex fMutexGui; | 
|---|
| 98 |  | 
|---|
| 99 | enum BackgroundAction_t | 
|---|
| 100 | { | 
|---|
| 101 | kBgdNone, | 
|---|
| 102 | //kBgdTracking, | 
|---|
| 103 | kBgdSeTest, | 
|---|
| 104 | kBgdSeTestDispl, | 
|---|
| 105 | kBgdGear, | 
|---|
| 106 | kBgdGearDispl | 
|---|
| 107 | }; | 
|---|
| 108 |  | 
|---|
| 109 | BackgroundAction_t fBackground;    // Flag for present backgroundthread | 
|---|
| 110 |  | 
|---|
| 111 | ZdAz  fTrackingError; // [rad] Tracking Offset between SE and calc-pos | 
|---|
| 112 | ZdAz  fZdAzSoll;      // [rad] Soll position when moving | 
|---|
| 113 | RaDec fRaDec;         // Position to track | 
|---|
| 114 | ZdAz  fAccuracy;      // Actual accuracy of Tracking | 
|---|
| 115 | ZdAz  fVelocity;      // Actual velocity of Tracking | 
|---|
| 116 | ZdAz  fMin; | 
|---|
| 117 | ZdAz  fMax; | 
|---|
| 118 |  | 
|---|
| 119 | TH1  *fHist; | 
|---|
| 120 | Bool_t fTriggerDisplay; | 
|---|
| 121 |  | 
|---|
| 122 | XY kResSE;   // describing the resolution of the system [se/U_tel] | 
|---|
| 123 | XY kResRE;   // describing the resolution of the system [re/U_mot] | 
|---|
| 124 | XY kGear;    // describing the resolution of the system [U_mot/U_tel] | 
|---|
| 125 | XY kGearTot; // describing the resolution of the system [re/U_tel] | 
|---|
| 126 |  | 
|---|
| 127 | MBending fBending; | 
|---|
| 128 |  | 
|---|
| 129 | UInt_t fStatus; | 
|---|
| 130 |  | 
|---|
| 131 | ofstream *fOutTp; | 
|---|
| 132 | MLog     *fOutRep; | 
|---|
| 133 |  | 
|---|
| 134 | ZdAz AlignTrackingPos(ZdAz pointing) const; | 
|---|
| 135 | Bool_t CheckRange(const ZdAz &d) const; | 
|---|
| 136 | Double_t Starguider(Double_t mjd, ZdAz &dest) const; | 
|---|
| 137 |  | 
|---|
| 138 | void SetStatus(UInt_t stat) { fStatus = stat; } | 
|---|
| 139 | UInt_t GetStatus() const { return fStatus; } | 
|---|
| 140 |  | 
|---|
| 141 | ZdAz GetRePos(); | 
|---|
| 142 | ZdAz GetRePosPdo(); | 
|---|
| 143 | ZdAz GetSePos() const; // [se] | 
|---|
| 144 | // FIXME: Must depend on the Shaftencoder mounted | 
|---|
| 145 | ZdAz GetSePosRad() const { return GetSePos()*TMath::TwoPi()/16384; } // [rad] | 
|---|
| 146 |  | 
|---|
| 147 | void InitSync(); | 
|---|
| 148 |  | 
|---|
| 149 | void TalkThread(); | 
|---|
| 150 | void TalkThreadSeTest(); | 
|---|
| 151 | void TalkThreadGear(); | 
|---|
| 152 |  | 
|---|
| 153 | void DisplayHistTestSe(Bool_t del=kTRUE); | 
|---|
| 154 | void DisplayHistGear(Bool_t del=kTRUE); | 
|---|
| 155 |  | 
|---|
| 156 | int  SetPosition(const ZdAz &dst, Bool_t track=kFALSE); | 
|---|
| 157 | void TrackPosition(const RaDec &dst); // ra, dec [rad] | 
|---|
| 158 | void TrackPositionGRB(const RaDec &dst); // ra, dec [rad] | 
|---|
| 159 |  | 
|---|
| 160 | void TerminateApp(); | 
|---|
| 161 |  | 
|---|
| 162 | int StopWaitingForSDO() const; | 
|---|
| 163 | void CheckForError(); | 
|---|
| 164 |  | 
|---|
| 165 | void StopMovement(); | 
|---|
| 166 |  | 
|---|
| 167 | void WaitForEndMovement(); | 
|---|
| 168 |  | 
|---|
| 169 | void Constructor(Int_t id1, Int_t id2, Int_t id3, Int_t id4, Int_t id5, Int_t id6); | 
|---|
| 170 | //void ConstructorSE(Int_t id1, Int_t id2, Int_t id3); | 
|---|
| 171 | //void ConstructorDemo(); | 
|---|
| 172 |  | 
|---|
| 173 | void ReadConfig(); | 
|---|
| 174 |  | 
|---|
| 175 | bool CheckNetwork(); | 
|---|
| 176 |  | 
|---|
| 177 | public: | 
|---|
| 178 | MCosy(/*int mode,*/ const char *dev, const int baud, MLog &out=gLog); | 
|---|
| 179 | ~MCosy(); | 
|---|
| 180 |  | 
|---|
| 181 | void Start(); | 
|---|
| 182 | void Stop(); | 
|---|
| 183 |  | 
|---|
| 184 | void *Proc(int msg, void *mp); | 
|---|
| 185 |  | 
|---|
| 186 | Bool_t HandleTimer(TTimer *t); | 
|---|
| 187 |  | 
|---|
| 188 | ZdAz GetPointingPos(void) const; | 
|---|
| 189 | void SetStarguider(MStarguider *s) { fStarguider = s; } | 
|---|
| 190 |  | 
|---|
| 191 | static TString GetFileName(const char *path, const char *name, const char *ext); | 
|---|
| 192 |  | 
|---|
| 193 | MGCosy *GetWin() { return fWin; } | 
|---|
| 194 |  | 
|---|
| 195 | ZdAz GetTrackingPosDeg() const { return fTrackingPos; }; | 
|---|
| 196 | ZdAz GetTrackingPosRaw() const { return fTrackingPosRaw; }; | 
|---|
| 197 | void SetTrackingPosRE(ZdAz za); | 
|---|
| 198 |  | 
|---|
| 199 | AltAz GetAltAzDeg() const | 
|---|
| 200 | { | 
|---|
| 201 | ZdAz sepos = GetSePos()*TMath::TwoPi()/kResSE; | 
|---|
| 202 | AltAz za1(TMath::Pi()/2-sepos.Zd(), sepos.Az()); | 
|---|
| 203 | za1 *= kRad2Deg; | 
|---|
| 204 | return za1; | 
|---|
| 205 | } | 
|---|
| 206 |  | 
|---|
| 207 | MLog *GetOutRep() { return fOutRep; } | 
|---|
| 208 |  | 
|---|
| 209 | //rwagner | 
|---|
| 210 | MDriveCom *GetDriveCom() { return fCom; } | 
|---|
| 211 |  | 
|---|
| 212 | // static ZdAz CorrectTarget(const ZdAz &src, const ZdAz &dst); | 
|---|
| 213 | //    static ZdAz RaDec2ZdAz(const double mjd, const RaDec &pos, const RaDec &pm=RaDec(0,0)); | 
|---|
| 214 |  | 
|---|
| 215 | ClassDef(MCosy, 0) | 
|---|
| 216 | }; | 
|---|
| 217 |  | 
|---|
| 218 | #endif | 
|---|