00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _SERIAL_CONVERGENCE_LAYER_H_
00018 #define _SERIAL_CONVERGENCE_LAYER_H_
00019
00020 #include <oasys/io/TTY.h>
00021 #include <oasys/serialize/Serialize.h>
00022
00023 #include "StreamConvergenceLayer.h"
00024
00025 namespace dtn {
00026
00030 class SerialConvergenceLayer : public StreamConvergenceLayer {
00031 public:
00035 static const u_int8_t SERIALCL_VERSION = 0x01;
00036
00040 static const u_char SYNC = '.';
00041
00045 SerialConvergenceLayer();
00046
00050 class SerialLinkParams : public StreamLinkParams {
00051 public:
00052 bool hexdump_;
00053 std::string initstr_;
00054 u_int ispeed_;
00055 u_int ospeed_;
00056 u_int sync_interval_;
00057
00058 protected:
00059
00060 SerialLinkParams(bool init_defaults);
00061 friend class SerialConvergenceLayer;
00062 };
00063
00067 static SerialLinkParams default_link_params_;
00068
00069 protected:
00071 bool set_link_defaults(int argc, const char* argv[],
00072 const char** invalidp);
00073 void dump_link(const LinkRef& link, oasys::StringBuffer* buf);
00075
00077 virtual LinkParams* new_link_params();
00078 virtual bool parse_link_params(LinkParams* params,
00079 int argc, const char** argv,
00080 const char** invalidp);
00081 virtual bool parse_nexthop(const LinkRef& link, LinkParams* params);
00082 virtual CLConnection* new_connection(const LinkRef& link,
00083 LinkParams* params);
00085
00095 class Connection : public StreamConvergenceLayer::Connection {
00096 public:
00100 Connection(SerialConvergenceLayer* cl,
00101 const LinkRef& link,
00102 SerialLinkParams* params);
00103
00107 virtual ~Connection();
00108
00112 virtual void serialize(oasys::SerializeAction *a);
00113
00114 protected:
00115 friend class SerialConvergenceLayer;
00116
00118 virtual void connect();
00119 virtual void disconnect();
00120 virtual void initialize_pollfds();
00121 virtual void handle_poll_timeout();
00122 virtual void handle_poll_activity();
00124
00126 void send_data();
00128
00130 void recv_data();
00131
00133 void send_sync();
00134
00139 SerialLinkParams* serial_lparams()
00140 {
00141 SerialLinkParams* ret = dynamic_cast<SerialLinkParams*>(params_);
00142 ASSERT(ret != NULL);
00143 return ret;
00144 }
00145
00146 oasys::TTY* tty_;
00147 struct pollfd* tty_pollfd_;
00148 bool synced_;
00149 };
00150 };
00151
00152 }
00153
00154 #endif