Go to the documentation of this file.00001 #include <iostream>
00002
00003 #include <serial/serial.h>
00004 #include <serial/utils/serial_listener.h>
00005
00006 using namespace serial;
00007 using namespace serial::utils;
00008
00009 void default_handler(std::string token) {
00010 std::cout << "default_handler got a: " << token << std::endl;
00011 }
00012
00013 void callback(std::string token) {
00014 std::cout << "callback got a: " << token << std::endl;
00015 }
00016
00017 int run() {
00018
00019 Serial serial("/dev/tty.usbserial-A900cfJA", 115200);
00020
00021 SerialListener listener;
00022 listener.startListening(serial);
00023
00024
00025
00026
00027
00028 listener.setTokenizer(SerialListener::delimeter_tokenizer("\r"));
00029
00030
00031
00032 FilterPtr f1 =
00033 listener.createFilter(SerialListener::startsWith("pre"), callback);
00034 SerialListener::sleep(15);
00035 listener.removeFilter(f1);
00036
00037
00038
00039 {
00040 BlockingFilterPtr f2 =
00041 listener.createBlockingFilter(SerialListener::endsWith("post"));
00042 for (size_t i = 0; i < 3; i++) {
00043 std::string token = f2->wait(100);
00044 if (token != "")
00045 std::cout << "Found something ending with 'post'" << std::endl;
00046 else
00047 std::cout << "Did not find something ending with 'post'" << std::endl;
00048 }
00049 }
00050
00051
00052
00053
00054
00055
00056 {
00057
00058 BufferedFilterPtr f3 =
00059 listener.createBufferedFilter(SerialListener::contains("substr"), 10);
00060 SerialListener::sleep(75);
00061 std::cout << "Caught " << f3->count();
00062 std::cout << " tokens containing 'substr'" << std::endl;
00063 for(size_t i = 0; i < 20; ++i) {
00064 std::string token = f3->wait(5);
00065 if (token == "")
00066 break;
00067 }
00068 f3->clear();
00069 if (f3->wait(0) == "")
00070 std::cout << "We won the race condition!" << std::endl;
00071 else
00072 std::cout << "We lost the race condition..." << std::endl;
00073
00074 }
00075
00076
00077
00078
00079
00080 listener.setDefaultHandler(default_handler);
00081 SerialListener::sleep(25);
00082
00083 return 0;
00084
00085 }
00086
00087 int main(void) {
00088 try {
00089 return run();
00090 } catch (std::exception &e) {
00091 std::cerr << e.what() << std::endl;
00092 return 1;
00093 }
00094 }