CigiOutgoingMsg.h

Go to the documentation of this file.
00001 
00072 #if !defined(_CIGI_OUTGOING_MESSAGE_INCLUDED_)
00073 #define _CIGI_OUTGOING_MESSAGE_INCLUDED_
00074 
00075 #include <string>
00076 #include <list>
00077 
00078 #include "CigiMessage.h"
00079 #include "CigiBasePacket.h"
00080 #include "CigiBaseEntityCtrl.h"
00081 #include "CigiBaseIGCtrl.h"
00082 #include "CigiBaseSOF.h"
00083 #include "CigiMessageBuffer.h"
00084 #include "CigiBaseVariableSizePckt.h"
00085 #include "CigiDefaultPacket.h"
00086 
00087 class CigiSession;
00088 
00089 //=========================================================
00092 class CIGI_SPEC CigiOutgoingMsg : public CigiMessage  
00093 {
00094 
00095    friend class CigiSession;
00096 
00097 public:
00098    //==> Management
00099 
00100    //=========================================================
00103    CigiOutgoingMsg();
00104 
00105    //=========================================================
00108    virtual ~CigiOutgoingMsg();
00109 
00110 
00111 
00112 
00113 
00114    //==> Buffer Packing Operators with References
00115 
00116    //=========================================================
00121    CigiOutgoingMsg & operator <<(CigiBaseIGCtrl &refPacket);
00122 
00123    //=========================================================
00128    inline CigiOutgoingMsg & pack(CigiBaseIGCtrl &refPacket)
00129    {
00130      return (*this) << refPacket;
00131    }
00132 
00133    //=========================================================
00138    CigiOutgoingMsg & operator <<(CigiBaseSOF &refPacket);
00139 
00140    //=========================================================
00145    CigiOutgoingMsg & pack(CigiBaseSOF &refPacket)
00146    {
00147      return (*this) << refPacket;
00148    }
00149 
00150    //=========================================================
00155    CigiOutgoingMsg & operator <<(CigiBaseEntityCtrl &refPacket);
00156 
00157    //=========================================================
00162    CigiOutgoingMsg & pack(CigiBaseEntityCtrl &refPacket)
00163    {
00164      return (*this) << refPacket;
00165    }
00166 
00167    //=========================================================
00173    CigiOutgoingMsg & operator <<(CigiBaseEnvCtrl &refPacket);
00174 
00175    //=========================================================
00181    CigiOutgoingMsg & pack(CigiBaseEnvCtrl &refPacket)
00182    {
00183      return (*this) << refPacket;
00184    }
00185 
00186    //=========================================================
00191    CigiOutgoingMsg & operator <<(CigiBaseVariableSizePckt &refPacket);
00192 
00193    //=========================================================
00198    CigiOutgoingMsg & pack(CigiBaseVariableSizePckt &refPacket)
00199    {
00200      return (*this) << refPacket;
00201    }
00202 
00203    //=========================================================
00208    CigiOutgoingMsg & operator <<(CigiBasePacket &refBasePacket);
00209 
00210    //=========================================================
00215    CigiOutgoingMsg & pack(CigiBasePacket &refBasePacket)
00216    {
00217      return (*this) << refBasePacket;
00218    }
00219 
00220 
00221    //==> Buffer Packing Operators with Pointers
00222 
00223    //=========================================================
00228    CigiOutgoingMsg & operator <<(CigiBaseIGCtrl *refPacket)
00229    {
00230       return(operator<<(*refPacket));
00231    }
00232 
00233    //=========================================================
00238    CigiOutgoingMsg & pack(CigiBaseIGCtrl *refPacket)
00239    {
00240      return this->pack(*refPacket);
00241    }
00242 
00243    //=========================================================
00248    CigiOutgoingMsg & operator <<(CigiBaseSOF *refPacket)
00249    {
00250       return(operator<<(*refPacket));
00251    }
00252 
00253    //=========================================================
00258    CigiOutgoingMsg & pack(CigiBaseSOF *refPacket)
00259    {
00260      return this->pack(*refPacket);
00261    }
00262 
00263    //=========================================================
00268    CigiOutgoingMsg & operator <<(CigiBaseEntityCtrl *refPacket)
00269    {
00270       return(operator<<(*refPacket));
00271    }
00272 
00273    //=========================================================
00278    CigiOutgoingMsg & pack(CigiBaseEntityCtrl *refPacket)
00279    {
00280      return this->pack(*refPacket);
00281    }
00282 
00283    //=========================================================
00289    CigiOutgoingMsg & operator <<(CigiBaseEnvCtrl *refPacket)
00290    {
00291       return(operator<<(*refPacket));
00292    }
00293 
00294    //=========================================================
00300    CigiOutgoingMsg & pack(CigiBaseEnvCtrl *refPacket)
00301    {
00302      return this->pack(*refPacket);
00303    }
00304 
00305    //=========================================================
00310    CigiOutgoingMsg & operator <<(CigiBaseVariableSizePckt *refPacket)
00311    {
00312       return(operator<<(*refPacket));
00313    }
00314 
00315    //=========================================================
00320    CigiOutgoingMsg & pack(CigiBaseVariableSizePckt *refPacket)
00321    {
00322      return this->pack(*refPacket);
00323    }
00324 
00325    //=========================================================
00330    CigiOutgoingMsg & operator <<(CigiBasePacket *refBasePacket)
00331    {
00332       return(operator<<(*refBasePacket));
00333    }
00334 
00335    //=========================================================
00340    CigiOutgoingMsg & pack(CigiBasePacket *refBasePacket)
00341    {
00342      return this->pack(*refBasePacket);
00343    }
00344 
00345 
00346 
00347    //==> Buffer Packing Managers
00348 
00349    //=========================================================
00355         int BeginMsg(void)
00356    {
00357       if(Buffers.empty())
00358          AdvanceBuffer();
00359       return(CIGI_SUCCESS);
00360    }
00361 
00362    //=========================================================
00369         int UpdateFrameCntr(void);
00370 
00371    //=========================================================
00381         int UpdateFrameCntr(Cigi_uint8 *OutgoingMsg, Cigi_uint8 *IncomingMsg = NULL);
00382 
00383    //=========================================================
00391         int UpdateIGCtrl(Cigi_uint8 *OutgoingMsg, Cigi_uint8 *IncomingMsg);
00392 
00393    //=========================================================
00401         int UpdateSOF(Cigi_uint8 *OutgoingMsg, Cigi_uint8 *IncomingMsg = NULL)
00402    {
00403       return(UpdateFrameCntr(OutgoingMsg,IncomingMsg));
00404    }
00405 
00406    //=========================================================
00412    int LockMsg(void);
00413 
00414    //=========================================================
00419 
00422         Cigi_uint8 * GetMsg(int &length);
00423 
00424    //=========================================================
00428    Cigi_uint8 * GetBuffer(void);
00429 
00430    //=========================================================
00435    int GetMsgLength(void);
00436 
00437    //=========================================================
00444    std::string GetBufferString(void);
00445 
00446    //=========================================================
00452    int UnlockMsg(void);
00453 
00454    //=========================================================
00465         int PackageMsg(Cigi_uint8 **Msg, int &length);
00466 
00467    //=========================================================
00478         int GetCurrentlyPackagedMsg(Cigi_uint8 **Msg, int &length)
00479    {
00480       if(PackagedMsg != NULL)
00481       {
00482          *Msg = PackagedMsg->Buffer;
00483          length = PackagedMsg->BufferFillCnt;
00484          return(CIGI_SUCCESS);
00485       }
00486       else
00487       {
00488          *Msg = (Cigi_uint8 *)0;  // equivalent to NULL
00489          length = 0;
00490          return(CIGI_ERROR_UNEXPECTED_NULL);
00491       }
00492    }
00493 
00494    //=========================================================
00500    int FreeMsg(void);
00501 
00502    //+> Frame Count
00503 
00504    //=========================================================
00508    void SetFrameCnt(const Cigi_uint32 FrameCntIn) { FrameCnt = FrameCntIn; }
00509 
00510    //=========================================================
00514    Cigi_uint32 GetFrameCnt(void) const { return(FrameCnt); }
00515 
00516    //+> Synchronous Operation
00517 
00518    //=========================================================
00526    void SetSynchronous(const bool Sync) { };
00527 
00528    //=========================================================
00534    bool IsSynchronous(void) const;
00535 
00536 
00537    //+> Registering
00538 
00539    //=========================================================
00551         int RegisterUserPacket(CigiBasePacket *Packet,
00552                           Cigi_uint8 PacketID,
00553                           bool HostSend,
00554                           bool IGSend);
00555 
00556 
00557 
00558 
00559 protected:
00560 
00561 
00562    //=========================================================
00568         int Reset(void);
00569 
00570    //=========================================================
00576         int InitMsg(void)
00577    {
00578       AdvanceBuffer();
00579       return(CIGI_SUCCESS);
00580    }
00581 
00582    //=========================================================
00592         int SetOutgoingCigiVersion(CigiVersionID &Version,
00593                               bool bndchk=true);
00594 
00595    //=========================================================
00605         CigiVersionID GetOutgoingCigiVersion(void)
00606    {
00607       return(OutgoingVersion);
00608    }
00609 
00610    //=========================================================
00612    //    Cigi Version of an incoming message received.
00619         void SetMostMatureReceivedCigiVersion(CigiVersionID &Version);
00620 
00621    //=========================================================
00628    void SetLastRcvdFrame(Cigi_uint32 LastRcvdFrameIn)
00629    {
00630       LastRcvdFrame = LastRcvdFrameIn;
00631    }
00632 
00633    //=========================================================
00637         void ChangeBufferCigiVersion(CigiVersionID &Version);
00638 
00639    //=========================================================
00643    void ClearHandlerTable(void);
00644 
00645    //=========================================================
00649         void SetOutgoingHostV1Tbls(void);
00650 
00651    //=========================================================
00655         void SetOutgoingIGV1Tbls(void);
00656 
00657    //=========================================================
00661         void SetOutgoingHostV2Tbls(void);
00662 
00663    //=========================================================
00667         void SetOutgoingIGV2Tbls(void);
00668 
00669    //=========================================================
00673         void SetOutgoingHostV3Tbls(void);
00674 
00675    //=========================================================
00679         void SetOutgoingIGV3Tbls(void);
00680 
00681    //=========================================================
00685         void AdvanceBuffer(void);
00686 
00687    //=========================================================
00694    CigiOutgoingMsg &  PackObj(CigiBasePacket &DataPacket,
00695                               CigiBasePacket &PackingPacket,
00696                               void *Spec);
00697 
00698    //=========================================================
00702    void ChangeOutgoingCigiVersion(CigiVersionID &Version);
00703 
00704    //=========================================================
00707    CigiVersionID OutgoingVersion;
00708 
00709    //=========================================================
00712    bool CmdVersionChng;
00713 
00714    //=========================================================
00717    CigiVersionID CmdVersion;
00718 
00719    //=========================================================
00722    CigiVersionID MostMatureVersionReceived;
00723 
00724    //=========================================================
00727    CigiDefaultPacket DefaultPacket;
00728 
00729    //=========================================================
00732    CigiBasePacket *OutgoingHandlerTbl[256];
00733 
00734    //=========================================================
00737    bool VldSnd[256];
00738 
00739    //=========================================================
00742    Cigi_uint32 FrameCnt;
00743 
00744    //=========================================================
00747    Cigi_uint32 LastRcvdFrame;
00748 
00749    //=========================================================
00752    CigiBaseIGCtrl *pIGCtrlPck[6];
00753 
00754    //=========================================================
00757    CigiBaseSOF *pSOFPck[5];
00758 
00759 
00760 
00761 
00762 };
00763 
00764 #endif // !defined(_CIGI_OUTGOING_MESSAGE_INCLUDED_)

Generated on Wed Apr 29 08:59:57 2009 for CCL by  doxygen 1.4.7