WvStreams
wvstreamfunex.cc
00001 /*
00002  * A fun WvStream example.
00003  *
00004  * Some text about this example...
00005  */
00006 
00007 #include <wvistreamlist.h>
00008 #include <wvpipe.h>
00009 #include <wvlog.h>
00010 #include <wvmodem.h>
00011 
00012 void concallback(WvStream &con, void *userdata)
00013 {
00014     WvStream &modem = *(WvStream *)userdata;
00015     
00016     char *str = con.getline();
00017     if (str)
00018         modem.print("%s\r", str); // modems like CR, not newline
00019 }
00020 
00021 int main()
00022 {
00023     const char *argv1[] = { "sh", "-c",
00024                             "while :; do echo foo; sleep 3; done", NULL };
00025     const char *argv2[] = { "sh", "-c",
00026                             "while :; do echo snorkle; sleep 2; done", NULL };
00027 
00028     WvLog log("logger", WvLog::Info);
00029     WvLog modemlog("modem", WvLog::Info);
00030     WvPipe pipe1(argv1[0], argv1, false, true, false);
00031     WvPipe pipe2(argv2[0], argv2, false, true, false);
00032     WvModem modem("/dev/ttyS2", O_RDWR);
00033 
00034     pipe1.autoforward(log);
00035     pipe2.autoforward(log);
00036     wvcon->setcallback(concallback, &modem);
00037     modem.autoforward(modemlog);
00038     
00039     WvIStreamList l;
00040     l.append(&pipe1, false);
00041     l.append(&pipe2, false);
00042     l.append(&modem, false);
00043     l.append(wvcon, false);
00044     
00045     if (!modem.isok())
00046         modemlog(WvLog::Error, "%s\n", modem.errstr());
00047     
00048     while (wvcon->isok())
00049     {
00050         if (l.select(1000))
00051             l.callback();
00052         else
00053             log("[TICK]\n");
00054     }
00055 }