|
From: <gb...@us...> - 2008-09-30 03:48:08
|
Revision: 310
http://gearbox.svn.sourceforge.net/gearbox/?rev=310&view=rev
Author: gbiggs
Date: 2008-09-30 03:47:56 +0000 (Tue, 30 Sep 2008)
Log Message:
-----------
Added flexiport python bindings (still a work in progress, off by default)
Modified Paths:
--------------
gearbox/trunk/src/flexiport/CMakeLists.txt
Added Paths:
-----------
gearbox/trunk/src/flexiport/python/
gearbox/trunk/src/flexiport/python/CMakeLists.txt
gearbox/trunk/src/flexiport/python/flexiport.cpp
gearbox/trunk/src/flexiport/python/logreaderport.cpp
gearbox/trunk/src/flexiport/python/logwriterport.cpp
gearbox/trunk/src/flexiport/python/port.cpp
gearbox/trunk/src/flexiport/python/serialport.cpp
gearbox/trunk/src/flexiport/python/tcpport.cpp
gearbox/trunk/src/flexiport/python/test/
gearbox/trunk/src/flexiport/python/test/CMakeLists.txt
gearbox/trunk/src/flexiport/python/test/serial_example.py
gearbox/trunk/src/flexiport/python/timeout.cpp
Modified: gearbox/trunk/src/flexiport/CMakeLists.txt
===================================================================
--- gearbox/trunk/src/flexiport/CMakeLists.txt 2008-09-30 03:40:31 UTC (rev 309)
+++ gearbox/trunk/src/flexiport/CMakeLists.txt 2008-09-30 03:47:56 UTC (rev 310)
@@ -54,7 +54,7 @@
ADD_SUBDIRECTORY (test)
ENDIF (GBX_BUILD_TESTS)
- OPTION (FLEXIPORT_BUILD_BINDINGS "Build the Python bindings for Flexiport" ON)
+ OPTION (FLEXIPORT_BUILD_BINDINGS "Build the Python bindings for Flexiport" OFF)
IF (FLEXIPORT_BUILD_BINDINGS)
ADD_SUBDIRECTORY (python)
ENDIF (FLEXIPORT_BUILD_BINDINGS)
Added: gearbox/trunk/src/flexiport/python/CMakeLists.txt
===================================================================
--- gearbox/trunk/src/flexiport/python/CMakeLists.txt (rev 0)
+++ gearbox/trunk/src/flexiport/python/CMakeLists.txt 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,70 @@
+# Find the Python libraries and headers
+FIND_PACKAGE (PythonLibs)
+IF (NOT PYTHON_LIBRARIES)
+ MESSAGE (STATUS "Python libaries not found. Cannot build Python bindings for Flexiport.")
+ENDIF (NOT PYTHON_LIBRARIES)
+
+# Find Boost::Python
+# There is a new, much better, FindBoost.cmake in 2.6
+IF (CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 6)
+ OPTION (Boost_USE_STATIC_LIBS "Use the static versions of the Boost libraries" OFF)
+ MARK_AS_ADVANCED (Boost_USE_STATIC_LIBS)
+
+ SET (BOOST_COMPONENTS python)
+ FIND_PACKAGE (Boost COMPONENTS ${BOOST_COMPONENTS})
+ IF (Boost_FOUND)
+ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIR})
+ LINK_DIRECTORIES (${Boost_LIBRARY_DIRS})
+
+ IF (Boost_PYTHON_FOUND)
+ GET_FILENAME_COMPONENT (boostPythonLib ${Boost_PYTHON_LIBRARY} NAME_WE CACHE)
+ # Chop off the lib at the front, too, if present
+ STRING (REGEX REPLACE "^lib" "" boostPythonLib ${boostPythonLib})
+ MESSAGE (STATUS
+ "PlayerC++ client library will be built with Boost::Thread support.")
+ ELSE (Boost_PYTHON_FOUND)
+ MESSAGE (STATUS
+ "Boost::Python library was not found. Cannot build Python bindings for Flexiport.")
+ ENDIF (Boost_PYTHON_FOUND)
+ ELSE (Boost_FOUND)
+ MESSAGE (STATUS
+ "Boost libraries were not found. Cannot build Python bindings for Flexiport.")
+ ENDIF (Boost_FOUND)
+ELSE (CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 6)
+ FIND_PACKAGE (Boost)
+ IF (Boost_FOUND)
+ # For 2.4, assume that if boost is found then boost::python is present
+ OPTION (Boost_USE_MULTITHREAD "Use the multithreaded versions of the Boost libraries" ON)
+ MARK_AS_ADVANCED (Boost_USE_MULTITHREAD)
+ IF (Boost_USE_MULTITHREAD)
+ SET (BOOST_LIB_SUFFIX "-mt" CACHE STRING "Boost library name suffix")
+ ELSE (Boost_USE_MULTITHREAD)
+ SET (BOOST_LIB_SUFFIX "" CACHE STRING "Boost library name suffix")
+ ENDIF (Boost_USE_MULTITHREAD)
+ MARK_AS_ADVANCED (BOOST_LIB_SUFFIX)
+
+ SET (boostPythonLib boost_python${BOOST_LIB_SUFFIX})
+ INCLUDE_DIRECTORIES (${Boost_INCLUDE_DIRS})
+ LINK_DIRECTORIES (${Boost_LIBRARY_DIRS})
+ ELSE (Boost_FOUND)
+ MESSAGE (STATUS
+ "Boost libraries were not found. Cannot build Python bindings for Flexiport.")
+ ENDIF (Boost_FOUND)
+ENDIF (CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 6)
+
+IF (PYTHON_LIBRARIES AND Boost_FOUND AND GBX_DEFAULT_LIB_TYPE STREQUAL SHARED)
+ MESSAGE (STATUS "Flexiport Python bindings will be built.")
+ SET (srcs flexiport.cpp logreaderport.cpp logwriterport.cpp port.cpp
+ serialport.cpp tcpport.cpp timeout.cpp)
+
+ SET (pyModuleTarget flexiportpy)
+ INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/src/flexiport ${PYTHON_INCLUDE_PATH})
+ ADD_LIBRARY (${pyModuleTarget} MODULE ${srcs})
+ TARGET_LINK_LIBRARIES (${pyModuleTarget} flexiport ${boostPythonLib} ${PYTHON_LIBRARIES})
+ SET_TARGET_PROPERTIES (${pyModuleTarget} PROPERTIES PREFIX "" OUTPUT_NAME "flexiport")
+ INSTALL (TARGETS ${pyModuleTarget} LIBRARY DESTINATION lib/python/site-packages)
+
+ ADD_SUBDIRECTORY (test)
+ELSEIF (NOT GBX_DEFAULT_LIB_TYPE STREQUAL SHARED)
+ MESSAGE (STATUS "Flexiport Python bindings will not be built - must build flexiport as a shared library.")
+ENDIF (PYTHON_LIBRARIES AND Boost_FOUND AND GBX_DEFAULT_LIB_TYPE STREQUAL SHARED)
\ No newline at end of file
Added: gearbox/trunk/src/flexiport/python/flexiport.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/flexiport.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/flexiport.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,49 @@
+#include <flexiport.h>
+#include <port.h>
+using namespace flexiport;
+
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+void TimeoutClassDef (void);
+void PortClassDef (void);
+void SerialPortClassDef (void);
+void TCPPortClassDef (void);
+void LogWriterPortClassDef (void);
+void LogReaderPortClassDef (void);
+
+class PortExceptionWrap : public PortException, public boost::python::wrapper<PortException>
+{
+ public:
+ const char* what (void) const throw ()
+ {
+ if (boost::python::override f = get_override ("what"))
+ return f ();
+ return PortException::what ();
+ }
+ const char* Defaultwhat (void) const throw ()
+ { return PortException::what (); }
+};
+
+Port* (*CreatePort1) (std::map<std::string, std::string>) = &CreatePort;
+Port* (*CreatePort2) (std::string) = &CreatePort;
+
+BOOST_PYTHON_MODULE (flexiport)
+{
+ using namespace boost::python;
+
+ class_<PortException> ("PortException", init<const char*> ())
+ .def (init<const std::string&> ())
+ .def ("what", &PortException::what, &PortExceptionWrap::Defaultwhat)
+ ;
+
+ def ("CreatePort", CreatePort1, return_value_policy<manage_new_object> ());
+ def ("CreatePort", CreatePort2, return_value_policy<manage_new_object> ());
+
+ TimeoutClassDef ();
+ PortClassDef ();
+ SerialPortClassDef ();
+ TCPPortClassDef ();
+ LogWriterPortClassDef ();
+ LogReaderPortClassDef ();
+}
Added: gearbox/trunk/src/flexiport/python/logreaderport.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/logreaderport.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/logreaderport.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,28 @@
+#include <logreaderport.h>
+using namespace flexiport;
+
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+void LogReaderPortClassDef (void)
+{
+ using namespace boost::python;
+
+ class_<LogReaderPort, bases<Port>, boost::noncopyable> ("LogReaderPort",
+ init<std::map<std::string, std::string> > ())
+ .def ("Open", &LogReaderPort::Open)
+ .def ("Close", &LogReaderPort::Close)
+ .def ("Read", &LogReaderPort::Read)
+ .def ("ReadFull", &LogReaderPort::ReadFull)
+ .def ("BytesAvailable", &LogReaderPort::BytesAvailable)
+ .def ("BytesAvailableWait", &LogReaderPort::BytesAvailableWait)
+ .def ("Write", &LogReaderPort::Write)
+ .def ("Flush", &LogReaderPort::Flush)
+ .def ("Drain", &LogReaderPort::Drain)
+ .def ("GetStatus", &LogReaderPort::GetStatus)
+ .def ("SetTimeout", &LogReaderPort::SetTimeout)
+ .def ("SetCanRead", &LogReaderPort::SetCanRead)
+ .def ("SetCanWrite", &LogReaderPort::SetCanWrite)
+ .def ("IsOpen", &LogReaderPort::IsOpen)
+ ;
+}
Added: gearbox/trunk/src/flexiport/python/logwriterport.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/logwriterport.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/logwriterport.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,30 @@
+#include <logwriterport.h>
+using namespace flexiport;
+
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+void LogWriterPortClassDef (void)
+{
+ using namespace boost::python;
+
+ class_<LogWriterPort, bases<Port>, boost::noncopyable> ("LogWriterPort",
+ init<std::map<std::string, std::string> > ())
+ .def ("Open", &LogWriterPort::Open)
+ .def ("Close", &LogWriterPort::Close)
+ .def ("Read", &LogWriterPort::Read)
+ .def ("ReadFull", &LogWriterPort::ReadFull)
+ .def ("Skip", &LogWriterPort::Skip)
+ .def ("SkipUntil", &LogWriterPort::SkipUntil)
+ .def ("BytesAvailable", &LogWriterPort::BytesAvailable)
+ .def ("BytesAvailableWait", &LogWriterPort::BytesAvailableWait)
+ .def ("Write", &LogWriterPort::Write)
+ .def ("Flush", &LogWriterPort::Flush)
+ .def ("Drain", &LogWriterPort::Drain)
+ .def ("GetStatus", &LogWriterPort::GetStatus)
+ .def ("SetTimeout", &LogWriterPort::SetTimeout)
+ .def ("SetCanRead", &LogWriterPort::SetCanRead)
+ .def ("SetCanWrite", &LogWriterPort::SetCanWrite)
+ .def ("IsOpen", &LogWriterPort::IsOpen)
+ ;
+}
Added: gearbox/trunk/src/flexiport/python/port.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/port.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/port.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,195 @@
+#include <port.h>
+using namespace flexiport;
+
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+class PortWrap: public Port, public boost::python::wrapper<Port>
+{
+ public:
+ void Open (void) { get_override ("Open") (); }
+ void Close (void) { get_override ("Close") (); }
+
+ ssize_t Read (void * const buffer, size_t count)
+ { return get_override ("Read") (buffer, count); }
+ ssize_t ReadFull (void * const buffer, size_t count)
+ { return get_override ("ReadFull") (buffer, count); }
+
+ ssize_t ReadString (std::string &buffer)
+ {
+ if (boost::python::override f = get_override ("ReadString"))
+ return f (buffer);
+ return Port::ReadString (buffer);
+ }
+ ssize_t DefaultReadString (std::string &buffer)
+ { return Port::ReadString (buffer); }
+
+ ssize_t ReadUntil (void * const buffer, size_t count, uint8_t terminator)
+ {
+ if (boost::python::override f = get_override ("ReadUntil"))
+ return f (buffer, count, terminator);
+ return Port::ReadUntil (buffer, count, terminator);
+ }
+ ssize_t DefaultReadUntil (void * const buffer, size_t count, uint8_t terminator)
+ { return Port::ReadUntil (buffer, count, terminator); }
+
+ ssize_t ReadStringUntil (std::string &buffer, char terminator)
+ {
+ if (boost::python::override f = get_override ("ReadStringUntil"))
+ return f (buffer, terminator);
+ return Port::ReadStringUntil (buffer, terminator);
+ }
+ ssize_t DefaultReadStringUntil (std::string &buffer, char terminator)
+ { return Port::ReadStringUntil (buffer, terminator); }
+
+ ssize_t ReadLine1 (char * const buffer, size_t count)
+ {
+ if (boost::python::override f = get_override ("ReadLine"))
+ return f (buffer, count);
+ return Port::ReadLine (buffer, count);
+ }
+ ssize_t DefaultReadLine1 (char * const buffer, size_t count)
+ { return Port::ReadLine (buffer, count); }
+
+ ssize_t ReadLine2 (std::string &buffer)
+ {
+ if (boost::python::override f = get_override ("ReadLine"))
+ return f (buffer);
+ return Port::ReadLine (buffer);
+ }
+ ssize_t DefaultReadLine2 (std::string &buffer)
+ { return Port::ReadLine (buffer); }
+
+ ssize_t Skip (size_t count)
+ {
+ if (boost::python::override f = get_override ("Skip"))
+ return f (count);
+ return Port::Skip (count);
+ }
+ ssize_t DefaultSkip (size_t count)
+ { return Port::Skip (count); }
+
+ ssize_t SkipUntil (uint8_t terminator, unsigned int count)
+ {
+ if (boost::python::override f = get_override ("SkipUntil"))
+ return f (terminator, count);
+ return Port::SkipUntil (terminator, count);
+ }
+ ssize_t DefaultSkipUntil (uint8_t terminator, unsigned int count)
+ { return Port::SkipUntil (terminator, count); }
+
+ ssize_t BytesAvailable (void) { return get_override ("BytesAvailable") (); }
+ ssize_t BytesAvailableWait (void) { return get_override ("BytesAvailableWait") (); }
+ ssize_t Write (const void * const buffer, size_t count)
+ { return get_override ("Write") (buffer, count); }
+
+ ssize_t WriteFull (const void * const buffer, size_t count)
+ {
+ if (boost::python::override f = get_override ("WriteFull"))
+ return f (buffer, count);
+ return Port::WriteFull (buffer, count);
+ }
+ ssize_t DefaultWriteFull (const void * const buffer, size_t count)
+ { return Port::WriteFull (buffer, count); }
+
+ ssize_t WriteString1 (const char * const buffer)
+ {
+ if (boost::python::override f = get_override ("WriteString"))
+ return f (buffer);
+ return Port::WriteString (buffer);
+ }
+ ssize_t DefaultWriteString1 (const char * const buffer)
+ { return Port::WriteString (buffer); }
+
+ ssize_t WriteString2 (const std::string &buffer)
+ {
+ if (boost::python::override f = get_override ("WriteString"))
+ return f (buffer);
+ return Port::WriteString (buffer);
+ }
+ ssize_t DefaultWriteString2 (const std::string &buffer)
+ { return Port::WriteString (buffer); }
+
+ void Flush (void) { get_override ("Flush") (); }
+ void Drain (void) { get_override ("Drain") (); }
+
+ std::string GetStatus (void) const
+ {
+ if (boost::python::override f = get_override ("GetStatus"))
+ return f ();
+ return Port::GetStatus ();
+ }
+ std::string DefaultGetStatus (void) const
+ { return Port::GetStatus (); }
+
+ void SetTimeout (Timeout timeout) { get_override ("SetTimeout") (timeout); }
+ Timeout GetTimeout (void) const
+ {
+ if (boost::python::override f = get_override ("GetTimeout"))
+ return f ();
+ return Port::GetTimeout ();
+ }
+ Timeout DefaultGetTimeout (void) const
+ { return Port::GetTimeout (); }
+
+ void SetCanRead (bool canRead) { get_override ("SetCanRead") (canRead); }
+ bool CanRead (void) const
+ {
+ if (boost::python::override f = get_override ("CanRead"))
+ return f ();
+ return Port::CanRead ();
+ }
+ bool DefaultCanRead (void) const
+ { return Port::CanRead (); }
+
+ void SetCanWrite (bool canWrite) { get_override ("SetCanWrite") (canWrite); }
+ bool CanWrite (void) const
+ {
+ if (boost::python::override f = get_override ("CanWrite"))
+ return f ();
+ return Port::CanWrite ();
+ }
+ bool DefaultCanWrite (void) const
+ { return Port::CanWrite (); }
+
+ bool IsOpen (void) const { return get_override ("IsOpen") (); }
+};
+
+void PortClassDef (void)
+{
+ using namespace boost::python;
+
+ class_<PortWrap, boost::noncopyable> ("Port", no_init)
+ .def ("Open", pure_virtual (&Port::Open))
+ .def ("Close", pure_virtual (&Port::Close))
+ .def ("Read", pure_virtual (&Port::Read))
+ .def ("ReadFull", pure_virtual (&Port::ReadFull))
+ .def ("ReadString", &Port::ReadString, &PortWrap::DefaultReadString)
+ .def ("ReadUntil", &Port::ReadUntil, &PortWrap::DefaultReadUntil)
+ .def ("ReadStringUntil", &Port::ReadStringUntil, &PortWrap::ReadStringUntil)
+ // The boost::python docs show how to do overloaded functions, and how to do virtual
+ // functions, but not both at the same time... TODO: Figure this out later.
+// .def ("ReadLine", &PortWrap::ReadLine1, &PortWrap::DefaultReadLine1)
+// .def ("ReadLine", &PortWrap::ReadLine2, &PortWrap::DefaultReadLine2)
+ .def ("Skip", &Port::Skip, &PortWrap::DefaultSkip)
+ .def ("SkipUntil", &Port::SkipUntil, &PortWrap::DefaultSkipUntil)
+ .def ("BytesAvailable", pure_virtual (&Port::BytesAvailable))
+ .def ("BytesAvailableWait", pure_virtual (&Port::BytesAvailableWait))
+ .def ("Write", pure_virtual (&Port::Write))
+ .def ("WriteFull", &Port::WriteFull, &PortWrap::DefaultWriteFull)
+// .def ("WriteString", &PortWrap::WriteString1, &PortWrap::DefaultWriteString1)
+// .def ("WriteString", &PortWrap::WriteString2, &PortWrap::DefaultWriteString2)
+ .def ("Flush", pure_virtual (&Port::Flush))
+ .def ("Drain", pure_virtual (&Port::Drain))
+ .def ("GetStatus", &Port::GetStatus, &PortWrap::DefaultGetStatus)
+ .add_property ("portType", &Port::GetPortType)
+ .add_property ("debug", &Port::GetDebug, &Port::SetDebug)
+ .def ("GetTimeout", &Port::GetTimeout, &PortWrap::DefaultGetTimeout)
+ .def ("IsBlocking", &Port::IsBlocking)
+ .def ("SetCanRead", pure_virtual (&Port::SetCanRead))
+ .def ("CanRead", &Port::CanRead, &PortWrap::DefaultCanRead)
+ .def ("SetCanWrite", pure_virtual (&Port::SetCanWrite))
+ .def ("CanWrite", &Port::CanWrite, &PortWrap::DefaultCanWrite)
+ .def ("IsOpen", pure_virtual (&Port::IsOpen))
+ ;
+}
Added: gearbox/trunk/src/flexiport/python/serialport.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/serialport.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/serialport.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,30 @@
+#include <serialport.h>
+using namespace flexiport;
+
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+void SerialPortClassDef (void)
+{
+ using namespace boost::python;
+
+ class_<SerialPort, bases<Port>, boost::noncopyable> ("SerialPort",
+ init<std::map<std::string, std::string> > ())
+ .def ("Open", &SerialPort::Open)
+ .def ("Close", &SerialPort::Close)
+ .def ("Read", &SerialPort::Read)
+ .def ("ReadFull", &SerialPort::ReadFull)
+ .def ("BytesAvailable", &SerialPort::BytesAvailable)
+ .def ("BytesAvailableWait", &SerialPort::BytesAvailableWait)
+ .def ("Write", &SerialPort::Write)
+ .def ("Flush", &SerialPort::Flush)
+ .def ("Drain", &SerialPort::Drain)
+ .def ("GetStatus", &SerialPort::GetStatus)
+ .def ("SetTimeout", &SerialPort::SetTimeout)
+ .def ("SetCanRead", &SerialPort::SetCanRead)
+ .def ("SetCanWrite", &SerialPort::SetCanWrite)
+ .def ("IsOpen", &SerialPort::IsOpen)
+ .def ("SetBaudRate", &SerialPort::SetBaudRate)
+ .def ("GetBaudRate", &SerialPort::GetBaudRate)
+ ;
+}
Added: gearbox/trunk/src/flexiport/python/tcpport.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/tcpport.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/tcpport.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,28 @@
+#include <tcpport.h>
+using namespace flexiport;
+
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+void TCPPortClassDef (void)
+{
+ using namespace boost::python;
+
+ class_<TCPPort, bases<Port>, boost::noncopyable> ("TCPPort",
+ init<std::map<std::string, std::string> > ())
+ .def ("Open", &TCPPort::Open)
+ .def ("Close", &TCPPort::Close)
+ .def ("Read", &TCPPort::Read)
+ .def ("ReadFull", &TCPPort::ReadFull)
+ .def ("BytesAvailable", &TCPPort::BytesAvailable)
+ .def ("BytesAvailableWait", &TCPPort::BytesAvailableWait)
+ .def ("Write", &TCPPort::Write)
+ .def ("Flush", &TCPPort::Flush)
+ .def ("Drain", &TCPPort::Drain)
+ .def ("GetStatus", &TCPPort::GetStatus)
+ .def ("SetTimeout", &TCPPort::SetTimeout)
+ .def ("SetCanRead", &TCPPort::SetCanRead)
+ .def ("SetCanWrite", &TCPPort::SetCanWrite)
+ .def ("IsOpen", &TCPPort::IsOpen)
+ ;
+}
Added: gearbox/trunk/src/flexiport/python/test/CMakeLists.txt
===================================================================
--- gearbox/trunk/src/flexiport/python/test/CMakeLists.txt (rev 0)
+++ gearbox/trunk/src/flexiport/python/test/CMakeLists.txt 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1 @@
+INSTALL (FILES serial_example.py DESTINATION share/${PROJECT_NAME}/flexiport/example)
Added: gearbox/trunk/src/flexiport/python/test/serial_example.py
===================================================================
--- gearbox/trunk/src/flexiport/python/test/serial_example.py (rev 0)
+++ gearbox/trunk/src/flexiport/python/test/serial_example.py 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+
+import flexiport, sys, time
+
+def Usage ():
+ print 'Usage: ' + sys.argv[0] + ' [-o portoptions]'
+ print '-o portoptions\tString of options for the port.'
+
+
+def main ():
+ portOptions = 'type=serial,device=/dev/ttyS0,timeout=1'
+
+ if len (sys.argv) == 3:
+ if sys.argv[1] == '-o':
+ portOptions = sys.argv[2]
+ else:
+ Usage ()
+ sys.exit (1)
+ elif len (sys.argv) != 1:
+ Usage ()
+ sys.exit (1)
+
+ try:
+ port = flexiport.CreatePort (portOptions)
+ port.Open ()
+ port.Flush ()
+ print port.GetStatus ()
+
+ print 'Writing data to port, should read same data back.'
+ #stringMessage = 'Message #1'
+ #print 'Writing "' + stringMessage + '" using WriteString()'
+ #if port.WriteString (stringMessage) != len (stringMessage):
+ #print 'Test failed: did not write enough bytes.'
+ #sys.exit (1)
+ #time.sleep (0.1)
+ #print 'Testing ReadString ()'
+ #if port.ReadString (stringBuffer) < 0:
+ #print 'Timeout: Test failed.'
+ #sys.exit (1)
+ #print 'Read back using ReadString(): "' + stringBuffer + '"'
+ #if stringBuffer != stringMessage:
+ #print 'Test failed.'
+ #sys.exit (1)
+
+ stringMessage = 'Message #2'
+ print 'Writing "' + stringMessage + '" plus NULL using Write()'
+ if port.Write (stringMessage, len (stringMessage) + 1) != len (stringMessage) + 1:
+ print 'Test failed: did not write enough bytes.'
+ sys.exit (1)
+ print 'Testing ReadStringUntil()'
+ if port.ReadStringUntil (stringBuffer, '\n') < 0:
+ print 'Timeout: Test failed.'
+ sys.exit (1)
+ print 'Received \"' + stringBuffer + '"'
+ if stringBuffer != stringMessage:
+ print 'Test failed.'
+ sys.exit (1)
+
+ port.Close ()
+ except flexiport.PortException, e:
+ print 'Caught exception: ' + e.what ()
+ sys.exit (1)
+
+
+if __name__ == '__main__':
+ main ()
Added: gearbox/trunk/src/flexiport/python/timeout.cpp
===================================================================
--- gearbox/trunk/src/flexiport/python/timeout.cpp (rev 0)
+++ gearbox/trunk/src/flexiport/python/timeout.cpp 2008-09-30 03:47:56 UTC (rev 310)
@@ -0,0 +1,22 @@
+#include <boost/python.hpp>
+#include <boost/python/def.hpp>
+
+#include <timeout.h>
+using namespace flexiport;
+
+void TimeoutClassDef (void)
+{
+ using namespace boost::python;
+
+ class_<Timeout> ("Timeout", init<int, int> ())
+ .def (init<const Timeout&> ())
+
+ .def ("AsTimeval", &Timeout::AsTimeval)
+ .def ("FromTimeval", &Timeout::FromTimeval)
+ .def ("AsTimespec", &Timeout::AsTimespec)
+ .def ("FromTimespec", &Timeout::FromTimespec)
+
+ .def_readwrite ("_sec", &Timeout::_sec)
+ .def_readwrite ("_usec", &Timeout::_usec)
+ ;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|