diff --git a/Findserial.cmake b/Findserial.cmake index 26877ab..cb839a6 100644 --- a/Findserial.cmake +++ b/Findserial.cmake @@ -1,6 +1,8 @@ -find_path(serial_INCLUDE_DIRS serial.h serial_listener.h /usr/include/serial "$ENV{NAMER_ROOT}") +find_path(serial_INCLUDE_DIRS serial.h serial_listener.h /usr/include/serial + /usr/local/include/serial "$ENV{NAMER_ROOT}") -find_library(serial_LIBRARIES serial /usr/lib "$ENV{NAMER_ROOT}") +find_library(serial_LIBRARIES serial /usr/lib /usr/local/lib + "$ENV{NAMER_ROOT}") set(serial_FOUND TRUE) diff --git a/include/serial/serial_listener.h b/include/serial/serial_listener.h index 781acbb..76ce0e3 100644 --- a/include/serial/serial_listener.h +++ b/include/serial/serial_listener.h @@ -90,6 +90,30 @@ typedef boost::function DataCallback; */ typedef boost::function ComparatorType; +/*! + * This function type describes the prototype for the tokenizer callback. + * + * The function should take a std::string reference and tokenize it into a + * several TokenPtr's and store them in the given std::vector + * reference. There are some default ones or the user can create their own. + * + * The last element in the std::vector of TokenPtr's should always be + * either an empty string ("") or the last partial message. The last element + * in the std::vector will be put back into the data buffer so that if it is + * incomplete it can be completed when more data is read. + * + * Example: A delimeter tokenizer with a delimeter of "\r". The result would + * be: "msg1\rmsg2\r" -> ["msg1", "msg2", ""] for two complete messages, or: + * "msg1\rpartial_msg2" -> ["msg1","partial_msg2"] for one complete message + * and one partial message. + * + * \see SerialListener::setTokenizer, serial::delimeter_tokenizer, + * serial::TokenPtr + */ +typedef boost::function&)> +TokenizerType; + +#if 0 /*! * This function type describes the prototype for the logging callbacks. * @@ -103,6 +127,7 @@ typedef boost::function ComparatorType; * SerialListener::setWarningHandler */ typedef boost::function LoggingCallback; +#endif /*! * This function type describes the prototype for the exception callback. @@ -115,29 +140,6 @@ typedef boost::function LoggingCallback; */ typedef boost::function ExceptionCallback; -/*! - * This function type describes the prototype for the tokenizer callback. - * - * The function should take a std::string reference and tokenize it into a - * several TokenPtr's and store them in the given std::vector - * reference. There are some default ones or the user can create their own. - * - * The last element in the std::vector of TokenPtr's should always be - * either an empty string ("") or the last partial message. The last element - * in the std::vector will be put back into the data buffer so that if it is - * incomplete it can be completed when more data is read. - * - * Example: A delimeter tokenizer with a delimeter of "\r". The result would - * be: "msg1\rmsg2\r" -> ["msg1", "msg2", ""] for two complete messages, or: - * "msg1\rpartial_msg2" -> ["msg1","partial_msg2"] for one complete message - * and one partial message. - * - * \see SerialListener::setTokenizer, serial::delimeter_tokenizer, - * serial::TokenPtr - */ -typedef boost::function&)> -TokenizerType; - /*! * Represents a filter which new data is passed through. * @@ -472,6 +474,7 @@ public: /***** Hooks and Handlers ******/ +#if 0 /*! * Sets the handler to be called when a lines is not caught by a filter. * @@ -579,6 +582,23 @@ public: setWarningHandler (LoggingCallback warning_handler) { this->warn = warning_handler; } +#endif + +/*! + * Sets the function to be called when an exception occurs internally. + * + * This allows you to hook into the exceptions that occur in threads inside + * the serial listener library. + * + * \param exception_handler A function pointer to the callback to handle new + * interal exceptions. + * + * \see serial::ExceptionCallback + */ +void +setWarningHandler (ExceptionCallback exception_handler) { + this->handle_exc = exception_handler; +} /***** Static Functions ******/ @@ -772,10 +792,12 @@ private: // Tokenizer TokenizerType tokenize; +#if 0 // Logging handlers LoggingCallback warn; LoggingCallback info; LoggingCallback debug; +#endif // Exception handler ExceptionCallback handle_exc; diff --git a/src/serial_listener.cc b/src/serial_listener.cc index b106d00..d5d0897 100644 --- a/src/serial_listener.cc +++ b/src/serial_listener.cc @@ -4,6 +4,7 @@ /***** Inline Functions *****/ +#if 0 inline void defaultWarningCallback(const std::string& msg) { std::cout << "SerialListener Warning: " << msg << std::endl; } @@ -15,6 +16,7 @@ inline void defaultDebugCallback(const std::string& msg) { inline void defaultInfoCallback(const std::string& msg) { std::cout << "SerialListener Info: " << msg << std::endl; } +#endif inline void defaultExceptionCallback(const std::exception &error) { std::cerr << "SerialListener Unhandled Exception: " << error.what(); @@ -38,9 +40,11 @@ SerialListener::default_handler(const std::string &token) { SerialListener::SerialListener() : listening(false), chunk_size_(5) { // Set default callbacks this->handle_exc = defaultExceptionCallback; +#if 0 this->info = defaultInfoCallback; this->debug = defaultDebugCallback; this->warn = defaultWarningCallback; +#endif // Default handler stuff this->_default_handler = NULL; @@ -112,9 +116,6 @@ SerialListener::stopListening() { this->data_buffer = ""; this->serial_port_ = NULL; - - // Delete all the filters - this->removeAllFilters(); } size_t