INTRODUCTION Overview Download and Install Documentation Publications REPOSITORY Libraries DEVELOPER Dev Guide Dashboard PEOPLE Contributors Users Project Download Mailing lists
|
serialport.h00001 /* 00002 * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics 00003 * http://gearbox.sf.net/ 00004 * Copyright (c) 2008 Geoffrey Biggs 00005 * 00006 * flexiport flexible hardware data communications library. 00007 * 00008 * This distribution is licensed to you under the terms described in the LICENSE file included in 00009 * this distribution. 00010 * 00011 * This work is a product of the National Institute of Advanced Industrial Science and Technology, 00012 * Japan. Registration number: H20PRO-881 00013 * 00014 * This file is part of flexiport. 00015 * 00016 * flexiport is free software: you can redistribute it and/or modify it under the terms of the GNU 00017 * Lesser General Public License as published by the Free Software Foundation, either version 3 of 00018 * the License, or (at your option) any later version. 00019 * 00020 * flexiport is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 00021 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00022 * Lesser General Public License for more details. 00023 * 00024 * You should have received a copy of the GNU Lesser General Public License along with flexiport. 00025 * If not, see <http://www.gnu.org/licenses/>. 00026 */ 00027 00028 #ifndef __SERIALPORT_H 00029 #define __SERIALPORT_H 00030 00031 #include "port.h" 00032 00033 #include <map> 00034 #include <string> 00035 #if defined (WIN32) 00036 #include <Windows.h> 00037 #endif 00038 00043 namespace flexiport 00044 { 00045 00072 class FLEXIPORT_EXPORT SerialPort : public Port 00073 { 00074 public: 00075 SerialPort (std::map<std::string, std::string> options); 00076 ~SerialPort (); 00077 00079 void Open (); 00081 void Close (); 00083 ssize_t Read (void * const buffer, size_t count); 00085 ssize_t ReadFull (void * const buffer, size_t count); 00087 ssize_t BytesAvailable (); 00093 ssize_t BytesAvailableWait (); 00095 ssize_t Write (const void * const buffer, size_t count); 00097 void Flush (); 00099 void Drain (); 00101 std::string GetStatus () const; 00103 void SetTimeout (Timeout timeout); 00105 void SetCanRead (bool canRead); 00107 void SetCanWrite (bool canWrite); 00109 bool IsOpen () const { return _open; } 00110 00112 void SetBaudRate (unsigned int baud); 00114 unsigned int GetBaudRate () const { return _baud; } 00115 00116 private: 00117 #if defined (WIN32) 00118 HANDLE _fd; // Serial device handle 00119 #else 00120 int _fd; // Serial device file descriptor 00121 #endif 00122 00123 std::string _device; 00124 unsigned int _baud; 00125 unsigned int _dataBits; 00126 unsigned int _stopBits; 00127 typedef enum {PAR_NONE, PAR_EVEN, PAR_ODD} Parity; 00128 Parity _parity; 00129 bool _hwFlowCtrl; 00130 bool _open; 00131 00132 void CheckPort (bool read); 00133 bool ProcessOption (const std::string &option, const std::string &value); 00134 00135 bool IsDataAvailable (); 00136 #if !defined (WIN32) 00137 typedef enum {TIMED_OUT, DATA_AVAILABLE, CAN_WRITE} WaitStatus; 00138 WaitStatus WaitForDataOrTimeout (); 00139 WaitStatus WaitForWritableOrTimeout (); 00140 #endif 00141 void SetPortSettings (); 00142 void SetPortTimeout (); 00143 }; 00144 00145 } // namespace flexiport 00146 00149 #endif // __SERIALPORT_H |