00001
00074 #ifndef INC_MI32_MGPS_H
00075 #define INC_MI32_MGPS_H
00076
00077 #ifdef USE_MGUI
00078
00079 #ifndef INC_MI32_OBSERVER_H
00080 #include <mi32/observer.h>
00081 #endif
00082
00083 #ifndef INC_MI32_SPATREF_H
00084 #include <mi32/spatref.h>
00085 #endif
00086
00087 #ifndef INC_MI32_POINT_H
00088 #include <mi32/point.h>
00089 #endif
00090
00091 #ifndef INC_MI32_COLOR_H
00092 #include <mi32/color.h>
00093 #endif
00094
00095 #ifndef INC_MI32_FILEPATH_H
00096 #include <mi32/filepath.h>
00097 #endif
00098
00099 #ifndef INC_MI32_XML_H
00100 #include <mi32/xml.h>
00101 #endif
00102
00103 #ifndef INC_RVC_OBJECTNAME_H
00104 #include <rvc/objectname.h>
00105 #endif
00106
00107 #ifndef INC_MGUI_TIMER_H
00108 #include <mgui/timer.h>
00109 #endif
00110
00111 #include <mi32/platformsupport.h>
00112
00113
00114
00115
00116 #ifndef GENERATING_DOXYGEN_OUTPUT
00117 class PORT;
00118 struct POINTSTYLE;
00119 class FILE_TEXT;
00120 namespace MGUI {
00121 class LAYOUT_PANE_BASE;
00122 class FORM;
00123 }
00124 namespace MGD {
00125 class CONTEXT;
00126 }
00127 namespace RVC {
00128 class STYLE;
00129 }
00130 #endif
00131
00132
00133 namespace MGPS {
00134
00135 class SOURCEMGR;
00136
00137
00138
00140 struct REPORT {
00141
00142 enum DATASRC {
00143 DATASRC_GPS2D = 0,
00144 DATASRC_GPS3D = 1,
00145 DATASRC_DGPS2D = 2,
00146 DATASRC_DGPS3D = 3,
00147 DATASRC_DR = 6,
00148 DATASRC_DegradedDR = 8,
00149 DATASRC_Unknown = 9
00150 };
00151
00152 enum VALID {
00153 VALID_None = 0x0000,
00154 VALID_PositionXY = 0x0001,
00155 VALID_PositionZ = 0x0002,
00156 VALID_VelocityXY = 0x0004,
00157 VALID_VelocityZ = 0x0008,
00158 VALID_Heading = 0x0010,
00159 VALID_Speed = 0x0020,
00160 VALID_NumSat = 0x0040,
00161 VALID_DateTime = 0x0080
00162 };
00163
00164 DPOINT3D Position;
00165 DPOINT3D Velocity;
00166 double Heading;
00167 double Speed;
00168 DATASRC DataSrc;
00169 VALID Valid;
00170 UINT16 Year;
00171 UINT8 Month;
00172 UINT8 Day;
00173 UINT8 Hour;
00174 UINT8 Minute;
00175 UINT8 Second;
00176 UINT8 NumSatellites;
00177 };
00178 #ifndef GENERATING_DOXYGEN_OUTPUT
00179 DEFINE_ENUM_OP_BITWISE(REPORT::VALID)
00180 #endif
00181
00182
00183
00185 class SYMBOL {
00186 public:
00187
00188 enum FLAGS {
00189 FLAG_None = 0,
00190 FLAG_PatternSymbol = 0x00000001,
00191 FLAG_PatternBitmap = 0x00000002,
00192 FLAG_SizeBySpeed = 0x00000004,
00193 FLAG_SizeLengthOnly = 0x00000008,
00194 FLAG_KeepUpright = 0x00000010
00195 };
00196
00197 enum ORIENT {
00198 ORIENT_HeadingUp = 0,
00199 ORIENT_HeadingRight = 1,
00200 ORIENT_HeadingDown = 2,
00201 ORIENT_HeadingLeft = 3
00202 };
00203
00205 SYMBOL (
00206 );
00207
00209 SYMBOL (
00210 const SYMBOL& rhs
00211 );
00212
00214 ~SYMBOL (
00215 );
00216
00218 SYMBOL& operator= (
00219 const SYMBOL& rhs
00220 );
00221
00223 bool Draw (
00224 MGD::CONTEXT* ggc,
00225 const DPOINT2D* point,
00226 const DPOINT2D* dirpoint,
00227 const DPOINT2D* waypoint,
00228 LRECT2D* retextents
00229 ) const;
00230
00232 const COLOR& GetColor (
00233 ) const { return (m_Color); }
00234
00236 UINT8 GetPatternNum (
00237 ) const { return (m_PatternNum); }
00238
00240 double GetSize (
00241 ) const { return (m_Size); }
00242
00244 ERRVALUE GetStyle (
00245 RVC::STYLE& ObjStyle,
00246 POINTSTYLE& Style
00247 ) const;
00248
00250 void ReadIniSettings (
00251 const char* IniGroup,
00252 const char* SymbolName,
00253 RVC::STYLE& ObjStyle
00254 );
00255
00257 void ReadPattern (
00258 RVC::STYLE& ObjStyle
00259 );
00260
00262 void SetColor (
00263 const COLOR& color
00264 ) { m_Color = color; }
00265
00267 void SetColor (
00268 const char *name
00269 ) { m_Color.SetByName(name); }
00270
00272 void SetPatternNum (
00273 UINT8 PatternNum
00274 ) { m_PatternNum = PatternNum; }
00275
00277 void SetSize (
00278 double size
00279 ) { m_Size = static_cast<float>(size); }
00280
00282 ERRVALUE SetStyle (
00283 RVC::STYLE& ObjStyle,
00284 const POINTSTYLE& Style
00285 );
00286
00288 void WriteIniSettings (
00289 const char* IniGroup,
00290 const char* SymbolName
00291 ) const;
00292
00293 private:
00294 #ifndef GENERATING_DOXYGEN_OUTPUT
00295 UINT8 m_PatternNum;
00296 ORIENT m_Orient;
00297 float m_Size;
00298 float m_Angle;
00299 FLAGS m_Flags;
00300 COLOR m_Color;
00301 RVC::OBJECTNAME m_PatternName;
00302 int m_PatternSize;
00303 void *m_Pattern;
00304 #endif // GENERATING_DOXYGEN_OUTPUT
00305 };
00306
00307 #ifndef GENERATING_DOXYGEN_OUTPUT
00308 DEFINE_ENUM_OP_BITWISE(SYMBOL::FLAGS)
00309 #endif
00310
00311
00312
00313
00315 class SOURCE {
00316 public:
00317
00318 enum STATUS {
00319 STATUS_Good = 0,
00320 STATUS_NoResponse = 1,
00321 STATUS_Initializing = 2,
00322 STATUS_Acquiring = 3,
00323 STATUS_SignalLost = 4,
00324 STATUS_EndOfLogFile = 5,
00325 STATUS_Error = 6
00326 };
00327
00328 enum SYMBOLTYPE {
00329 SYMBOLTYPE_Stopped = 0,
00330 SYMBOLTYPE_Moving = 1
00331 };
00332
00333 class OBSERVER;
00334 class DLG;
00335
00337 class OBSERVER : public OBSERVER_BASE {
00338 public:
00339
00341 OBSERVER (
00342 SOURCE *source
00343 ): OBSERVER_BASE(source->m_ObserverMgr) { }
00344
00346 virtual ~OBSERVER ();
00347
00349 void NotifyAdd (
00350 SOURCE *source
00351 ) { v_OnAdd(source); }
00352
00354 void NotifyClose (
00355 SOURCE *source
00356 ) { v_OnClose(source); }
00357
00359 void NotifyOpen (
00360 SOURCE *source
00361 ) { v_OnOpen(source); }
00362
00364 void NotifyPoll (
00365 const SOURCE *source,
00366 const REPORT& report
00367 ) { v_OnPoll(source,report); }
00368
00370 void NotifyRemove (
00371 SOURCE *source
00372 ) { v_OnRemove(source); }
00373
00374 private:
00375
00377 virtual void v_OnAdd (
00378 SOURCE *source
00379 );
00380
00382 virtual void v_OnClose (
00383 SOURCE *source
00384 );
00385
00387 virtual void v_OnOpen (
00388 SOURCE *source
00389 );
00390
00392 virtual void v_OnPoll (
00393 const SOURCE *source,
00394 const REPORT& report
00395 );
00396
00398 virtual void v_OnRemove (
00399 SOURCE *source
00400 );
00401 };
00402
00404 SOURCE (
00405 );
00406
00408 virtual ~SOURCE (
00409 );
00410
00411 void Close (
00412 );
00413
00415 void CloseControlDialog (
00416 );
00417
00418 #ifdef USE_MGUI
00420 MGUI::FORM* CreateControlForm (
00421 MGUI::LAYOUT_PANE_BASE& parentpane
00422 ) { return (v_CreateControlForm(parentpane)); }
00423 #endif
00424
00426 void DeleteFromIni (
00427 ) const { v_DeleteFromIni(); }
00428
00429 const SPATREF::COORDREFSYS& GetCoordRefSys (
00430 ) const { return (m_CoordRefSys); }
00431
00432 const char* GetIniGroupKey (
00433 ) const { return (m_IniGroup); }
00434
00437 const MISTRING& GetName (
00438 ) const { return (m_name); }
00439
00442 double GetPollInterval (
00443 ) const { return (m_PollInterval); }
00444
00447 const SYMBOL& GetSymbol (
00448 SYMBOLTYPE symboltype
00449 ) const {
00450 return ((symboltype == SYMBOLTYPE_Stopped) ? m_SymbolStopped : m_SymbolMoving);
00451 }
00452
00455 bool GetLastData (
00456 REPORT* gpsdata
00457 ) const {
00458 if (m_HasData) {
00459 *gpsdata = m_LastData;
00460 }
00461 return (m_HasData);
00462 }
00463
00466 STATUS GetStatus (
00467 ) const { return (m_LastStatus); }
00468
00470 bool IsDevice (
00471 ) const { return (v_IsDevice()); }
00472
00475 bool IsManaged (
00476 ) const { return (m_IsManaged); }
00477
00480 bool IsOpen (
00481 ) const { return (m_IsOpen); }
00482
00484 int Manage (
00485 );
00486
00488 ERRVALUE Open (
00489 );
00490
00492 void OpenControlDialog (
00493 );
00494
00496 int ReadNext (
00497 ) { return (v_ReadNext()); }
00498
00500 void SetName (
00501 const MISTRING& name
00502 ) { m_name = name; }
00503
00505 void SetPollInterval (
00506 double PollInterval
00507 );
00508
00510 void SetSymbol (
00511 SYMBOLTYPE symboltype,
00512 const SYMBOL& symbol,
00513 bool UpdateIni
00514 );
00515
00517 void Unmanage (
00518 );
00519
00520 protected:
00521
00523 void ClearLastData (
00524 ) { m_HasData = false; }
00525
00527 MDLGPARENT GetDlgParent (
00528 ) const { return (m_DlgParent); }
00529
00531 bool HasData (
00532 ) const { return (m_HasData); }
00533
00535 void ReadIniSettings (
00536 const char* IniGroup
00537 );
00538
00540 void SetCurrentData (
00541 const REPORT& gpsdata
00542 ) { m_HasData = true; m_LastData = gpsdata; }
00543
00545 void SetCurrentStatus (
00546 STATUS status
00547 ) { m_LastStatus = status; }
00548
00549 void SetDlgParent (
00550 MDLGPARENT dlgparent
00551 ) { m_DlgParent = dlgparent; }
00552
00553 private:
00554 #ifndef GENERATING_DOXYGEN_OUTPUT
00555
00556 class OBSERVERMGR : public SUBJECT<OBSERVER> {
00557 public:
00558 void NotifyAdd (SOURCE *source);
00559 void NotifyClose (SOURCE *source);
00560 void NotifyOpen (SOURCE *source);
00561 void NotifyPoll (const SOURCE *source, const REPORT& report);
00562 void NotifyRemove (SOURCE *source);
00563 };
00564
00565 OBSERVERMGR m_ObserverMgr;
00566 MISTRING m_name;
00567 char m_IniGroup[16];
00568 bool m_IsOpen;
00569 bool m_IsManaged;
00570 bool m_HasData;
00571 STATUS m_LastStatus;
00572 SYMBOL m_SymbolStopped;
00573 SYMBOL m_SymbolMoving;
00574 double m_PollInterval;
00575 SPATREF::COORDREFSYS m_CoordRefSys;
00576 REPORT m_LastData;
00577 MDLGPARENT m_DlgParent;
00578 DLG *m_pDlg;
00579
00580 #ifdef USE_MGUI
00581 MGUI::TIMER m_Timer;
00582 void OnTimer ();
00583 #endif
00584
00585 SOURCE (const SOURCE&);
00586 SOURCE& operator= (const SOURCE&);
00587
00588 friend class MGPS::SOURCE::OBSERVER;
00589 friend class MGPS::SOURCE::DLG;
00590 friend class MGPS::SOURCEMGR;
00591 #endif // GENERATING_DOXYGEN_OUTPUT
00592
00593
00594
00596 virtual void v_Close (
00597 );
00598
00599 #ifdef USE_MGUI
00601 virtual MGUI::FORM* v_CreateControlForm (
00602 MGUI::LAYOUT_PANE_BASE& parentpane
00603 ) = 0;
00604 #endif
00605
00607 virtual void v_DeleteFromIni (
00608 ) const;
00609
00611 virtual bool v_IsDevice (
00612 ) const;
00613
00615 virtual int v_Open (
00616 ) = 0;
00617
00619 virtual int v_ReadNext (
00620 ) = 0;
00621
00622 };
00623
00624
00625
00626
00628 class SOURCE_DEVICE : public SOURCE {
00629 public:
00630
00632 enum PROTOCOL {
00633 PROTOCOL_NoDevice = 0,
00634 PROTOCOL_NMEA = 1,
00635 PROTOCOL_TAIP = 2,
00636 PROTOCOL_GARMIN = 3
00637 };
00638
00640 enum FORMAT {
00641 FORMAT_GPX = 0,
00642 FORMAT_MI= 1
00643 };
00644
00646 class HWPARM {
00647 public:
00648
00650 HWPARM (
00651 );
00652
00653 ERRVALUE DlgEditSettings (
00654 MDLGPARENT dlgparent
00655 );
00656
00657 const MISTRING& GetDeviceDesc (
00658 ) const { return (m_devicedesc); }
00659
00660 int ReadIni (
00661 INIHANDLE IniHandle,
00662 UINT16 DeviceNum
00663 );
00664
00665 int ReadIni (
00666 UINT16 DeviceNum
00667 );
00668
00669 void SetPortName (
00670 const MISTRING& portname
00671 ) { m_portname = portname; }
00672
00673 void SetPortParm (
00674 const char *portparm
00675 ) { strcpy(m_portparm,portparm); }
00676
00677 void SetPortType (
00678 UINT16 porttypenum
00679 ) { m_porttypenum = porttypenum; }
00680
00681 void SetProtocol (
00682 PROTOCOL protocol
00683 ) { m_protocol = protocol; }
00684
00685 void WriteIni (
00686 INIHANDLE IniHandle
00687 ) const;
00688
00689 ERRVALUE WriteIni (
00690 );
00691
00692 private:
00693 #ifndef GENERATING_DOXYGEN_OUTPUT
00694 class DLG;
00695 friend class HWPARM::DLG;
00696
00697 UINT16 m_devicenum;
00698 UINT16 m_porttypenum;
00699 PROTOCOL m_protocol;
00700 MISTRING m_portname;
00701 char m_portparm[80];
00702 MISTRING m_devicedesc;
00703 double m_PollInterval;
00704
00705 friend class MGPS::SOURCE_DEVICE;
00706 #endif // GENERATING_DOXYGEN_OUTPUT
00707 };
00708
00710 static void CreateDefault ();
00711
00713 SOURCE_DEVICE (
00714 const HWPARM& portparm
00715 );
00716
00718 virtual ~SOURCE_DEVICE (
00719 );
00720
00722 int GetDeviceNum (
00723 ) const { return (m_hwparm.m_devicenum); }
00724
00726 ERRVALUE RecordStart (
00727 const FILEPATH& filepath
00728 );
00729
00731 void RecordStop (
00732 );
00733
00735 FORMAT GetFormat() const {return m_format;}
00736
00738 void SetFormat(FORMAT format) {m_format = format;}
00739
00740 private:
00741 #ifndef GENERATING_DOXYGEN_OUTPUT
00742
00743 HWPARM m_hwparm;
00744 PORT *m_port;
00745 XMLDOC *m_xmldoc;
00746 FILE_TEXT *m_pFileRecord;
00747 FILE_TEXT *m_pFileRawLog;
00748 FILEPATH m_filepath;
00749 time_t m_lastmsgtime;
00750 FORMAT m_format;
00751 char m_tempbuf[100];
00752
00753 void OpenRawLogFile ();
00754 int ReadChar (char& c, int failvalue = -3155);
00755 int ReadStr (char *str, int len);
00756 int ReadMsgNMEA (char *datastr);
00757 int ReadMsgTAIP (const char *msgid, char *datastr);
00758 int ReadNMEA (REPORT*);
00759 int ReadTAIP (REPORT*);
00760
00761 #ifdef PLATFORM_SUPPORTS_GARMIN
00762 int ReadGARMIN (REPORT*);
00763 #endif
00764
00765 SOURCE_DEVICE (const SOURCE_DEVICE&);
00766 SOURCE_DEVICE& operator= (const SOURCE_DEVICE&);
00767
00768
00769 virtual void v_Close ();
00770 #ifdef USE_MGUI
00771 virtual MGUI::FORM* v_CreateControlForm (MGUI::LAYOUT_PANE_BASE& parentpane);
00772 #endif
00773 virtual void v_DeleteFromIni () const;
00774 virtual bool v_IsDevice () const;
00775 virtual int v_Open ();
00776 virtual int v_ReadNext ();
00777
00778 #endif // GENERATING_DOXYGEN_OUTPUT
00779 };
00780
00781
00782
00783
00785 class SOURCE_LOGFILE : public SOURCE {
00786 public:
00787
00789 enum FORMAT {
00790 FORMAT_Automatic,
00791 FORMAT_MicroImages,
00792 FORMAT_NMEA,
00793 FORMAT_Satlok,
00794 FORMAT_GPX,
00795 FORMAT_Text
00796 };
00797
00799 enum DIRECTION {
00800 DIRECTION_Forward,
00801 DIRECTION_Reverse
00802 };
00803
00805 static ERRVALUE DlgCreate (
00806 MDLGPARENT dlgparent
00807 );
00808
00810 static ERRVALUE DlgCreateImport (
00811 MDLGPARENT dlgparent
00812 );
00813
00815 SOURCE_LOGFILE (
00816 const FILEPATH& filepath,
00817 FORMAT format = FORMAT_Automatic
00818 );
00819
00821 virtual ~SOURCE_LOGFILE (
00822 );
00823
00824 DIRECTION GetDirection (
00825 ) const { return (m_Direction); }
00826
00829 double GetPlaybackRate (
00830 ) const { return (m_PlaybackRate); }
00831
00832 bool IsAtStart (
00833 ) const { return (m_CurPosition <= 0); }
00834
00836 bool IsPaused (
00837 ) const { return (m_IsPaused); }
00838
00840 void SetAutoRepeat (
00841 bool AutoRepeat = true
00842 ) { m_AutoRepeat = AutoRepeat; }
00843
00845 void SetDirection (
00846 DIRECTION direction
00847 ) { m_Direction = direction; }
00848
00850 void SetPaused (
00851 bool Paused = true
00852 ) { m_IsPaused = Paused; }
00853
00855 void SetPosition (
00856 double position
00857 );
00858
00860 void SetPlaybackRate (
00861 double rate
00862 );
00863
00865 void SkipForward (
00866 );
00867
00869 void SkipReverse (
00870 );
00871
00872 private:
00873 #ifndef GENERATING_DOXYGEN_OUTPUT
00874
00875 enum PLAYBTN {
00876 PLAYBTN_Stop = 0,
00877 PLAYBTN_Pause = 1,
00878 PLAYBTN_FastRev = 2,
00879 PLAYBTN_Reverse = 3,
00880 PLAYBTN_Forward = 4,
00881 PLAYBTN_FastFwd = 5,
00882 PLAYBTN_COUNT
00883 };
00884
00885 class LOGPOINT {
00886 public:
00887 DPOINT2D Position;
00888 float Time;
00889 float Elevation;
00890 float Heading;
00891 float Speed;
00892 float VelocityZ;
00893 UINT8 DataSource;
00894 UINT8 NumSatellites;
00895 UINT16 ValidFlags;
00896 };
00897
00898 class SECTIONINFO {
00899 public:
00900 float m_StartTime;
00901 float m_EndTime;
00902 int m_FirstPoint;
00903 int m_NumPoints;
00904 };
00905
00906 FILEPATH m_filepath;
00907 FORMAT m_Format;
00908 int m_NumPoints;
00909 LOGPOINT *m_LogPoints;
00910 int m_NumSections;
00911 SECTIONINFO *m_SectionInfo;
00912 double m_BaseTime;
00913 float m_TotalTime;
00914 float m_CurPosition;
00915 int m_CurSection;
00916 int m_CurPoint;
00917 bool m_AutoRepeat;
00918 bool m_AtSectionEnd;
00919 bool m_IsPaused;
00920 double m_PlaybackRate;
00921 DIRECTION m_Direction;
00922
00923 int AddLogPoint (
00924 LOGPOINT& logpoint,
00925 int& PointsAlloc,
00926 int logday,
00927 double logtime
00928 );
00929
00930 int ReadLogGPX();
00931
00932 int ReadLogText();
00933
00934 int ReadLogMI (
00935 FILE_TEXT& file
00936 );
00937
00938 int ReadLogNMEA (
00939 FILE_TEXT& file
00940 );
00941
00942 int ReadLogSatlok (
00943 FILE_TEXT& file
00944 );
00945
00946 SOURCE_LOGFILE (const SOURCE_LOGFILE&);
00947 SOURCE_LOGFILE& operator= (const SOURCE_LOGFILE&);
00948
00949
00950 virtual void v_Close ();
00951 #ifdef USE_MGUI
00952 virtual MGUI::FORM* v_CreateControlForm (MGUI::LAYOUT_PANE_BASE& parentpane);
00953 #endif
00954 virtual int v_Open ();
00955 virtual int v_ReadNext ();
00956
00957 #endif // GENERATING_DOXYGEN_OUTPUT
00958 };
00959
00960
00961
00962
00963 typedef MILIST<SOURCE*> SOURCELIST;
00964
00966 class SOURCEMGR {
00967 public:
00968
00969 class OBSERVER;
00970
00972 class OBSERVER : public OBSERVER_BASE {
00973 public:
00974
00976 OBSERVER (
00977 ): OBSERVER_BASE(SOURCEMGR::s_ObserverMgr) { }
00978
00980 virtual ~OBSERVER ();
00981
00983 virtual void v_OnAdd (
00984 SOURCE *source
00985 );
00986
00988 virtual void v_OnClose (
00989 SOURCE *source
00990 );
00991
00993 virtual void v_OnOpen (
00994 SOURCE *source
00995 );
00996
00998 virtual void v_OnPoll (
00999 const SOURCE *source,
01000 const REPORT& report
01001 );
01002
01004 virtual void v_OnRemove (
01005 SOURCE *source
01006 );
01007 };
01008
01009 static void DestroyAllSources (
01010 );
01011
01012 static int GetNumSources (
01013 ) { return (s_SourceList.GetNumItems()); }
01014
01015 static const SOURCELIST& GetSourceList (
01016 ) { return (s_SourceList); }
01017
01018 static ERRVALUE OpenDialog (
01019 );
01020
01021 private:
01022 #ifndef GENERATING_DOXYGEN_OUTPUT
01023
01024 class OBSERVERMGR : public SUBJECT<OBSERVER> {
01025 public:
01026 void NotifyAdd (SOURCE *source);
01027 void NotifyClose (SOURCE *source);
01028 void NotifyOpen (SOURCE *source);
01029 void NotifyPoll (const SOURCE *source, const REPORT& report);
01030 void NotifyRemove (SOURCE *source);
01031 };
01032
01033 class DLG;
01034
01035 static OBSERVERMGR s_ObserverMgr;
01036 static SOURCELIST s_SourceList;
01037 static DLG *s_pDlg;
01038
01039 static void Add (SOURCE *source);
01040 static void Remove (SOURCE *source);
01041
01043 SOURCEMGR (const SOURCEMGR&);
01044 SOURCEMGR& operator= (const SOURCEMGR&);
01045
01046 friend class MGPS::SOURCE;
01047 friend class MGPS::SOURCE::OBSERVERMGR;
01048 friend class MGPS::SOURCEMGR::OBSERVER;
01049 #endif // GENERATING_DOXYGEN_OUTPUT
01050 };
01051
01052
01053
01054
01055 }
01056
01057 #endif // USE_MGUI
01058
01059 #endif // INC_MI32_MGPS_H