00001 /* ======================================================================== 00002 * Copyright (c) 2006, 00003 * Institute for Computer Graphics and Vision 00004 * Graz University of Technology 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are 00009 * met: 00010 * 00011 * Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the following disclaimer. 00013 * 00014 * Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the distribution. 00017 * 00018 * Neither the name of the Graz University of Technology nor the names of 00019 * its contributors may be used to endorse or promote products derived from 00020 * this software without specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00023 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00024 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00025 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 00026 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00027 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00028 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00029 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00030 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00031 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 * ======================================================================== 00034 * PROJECT: OpenTracker 00035 * ======================================================================== */ 00043 /* ======================================================================= */ 00044 00045 #ifndef _GPS_HANDLER_H 00046 #define _GPS_HANDLER_H 00047 00048 #include <ace/Version.h> 00049 #include <ace/Connector.h> 00050 #include <ace/TTY_IO.h> 00051 #include <ace/DEV_Connector.h> 00052 #include <ace/Svc_Handler.h> 00053 #include "../OpenTracker.h" 00054 00055 00056 #ifndef OT_NO_GPS_SUPPORT 00057 00058 00059 namespace ot { 00060 00061 00062 class GPSDriver; 00063 00064 #define NMEABUFSZ (8 * 1024) 00065 00074 // If you get errors in the code below, please adapt the version number in the 00075 // #if statement according to your ACE version. 00076 #define ACE_VERSION_NUM(a, b, c) (((a) << 16) + ((b) << 8) + (c)) 00077 #define ACE_VERSION_CURRENT ACE_VERSION_NUM(ACE_MAJOR_VERSION, ACE_MINOR_VERSION, ACE_BETA_VERSION) 00078 00079 #if (ACE_VERSION_CURRENT < ACE_VERSION_NUM(5, 4, 7)) || (defined(_WIN32_WCE) && (_MSC_VER<1300)) 00080 class GPS_Handler : public ACE_Svc_Handler<ACE_TTY_IO, ACE_TTY_IO::PEER_ADDR, ACE_NULL_SYNCH> 00081 #else 00082 class GPS_Handler : public ACE_Svc_Handler<ACE_TTY_IO, ACE_NULL_SYNCH> 00083 #endif 00084 { 00085 public: 00087 GPS_Handler() {}; 00088 00089 GPS_Handler( GPSDriver * parent_ ); 00090 virtual ~GPS_Handler(); 00091 00092 virtual int open( void * factory ); 00093 virtual int handle_input(ACE_HANDLE fd=ACE_INVALID_HANDLE); 00094 virtual int handle_signal( int, siginfo_t *, ucontext_t * ); 00095 00096 protected: 00097 char * nmeaRead( char * nmeabuf, int incnt, int & outnt ); 00098 GPSDriver * parent; 00099 int nmeaind; 00100 char nmeabuf[NMEABUFSZ]; 00101 }; 00102 00103 #undef ACE_VERSION_NUM 00104 #undef ACE_VERSION_CURRENT 00105 00106 typedef ACE_Connector<GPS_Handler, ACE_DEV_CONNECTOR> GPS_Connector; 00107 00108 00109 } // namespace ot 00110 00111 00112 #endif // OT_NO_GPS_SUPPORT 00113 00114 00115 #endif // !defined(_GPS_HANDLER_H) 00116 00117 /* 00118 * ------------------------------------------------------------ 00119 * End of GPS_Handler.h 00120 * ------------------------------------------------------------ 00121 * Automatic Emacs configuration follows. 00122 * Local Variables: 00123 * mode:c++ 00124 * c-basic-offset: 4 00125 * eval: (c-set-offset 'substatement-open 0) 00126 * eval: (c-set-offset 'case-label '+) 00127 * eval: (c-set-offset 'statement 'c-lineup-runin-statements) 00128 * eval: (setq indent-tabs-mode nil) 00129 * End: 00130 * ------------------------------------------------------------ 00131 */
1.4.6