00001
00002
00003
00004
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);
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 }