www.pudn.com > HDTV_play_flash.rar > Tserial_event.h


/* ------------------------------------------------------------------------ -- 
--                                                                          -- 
--                        PC serial port connection object                  -- 
--                           for  event-driven programs                     -- 
--                                                                          -- 
--                                                                          -- 
--                                                                          -- 
--  Copyright @ 2001-2002     Thierry Schneider                             -- 
--                            thierry@tetraedre.com                         -- 
--                                                                          -- 
--                                                                          -- 
--                                                                          -- 
-- ------------------------------------------------------------------------ -- 
--                                                                          -- 
--  Filename : Tserial_event.cpp                                            -- 
--  Author   : Thierry Schneider                                            -- 
--  Created  : April 4th 2000                                               -- 
--  Modified : June 22nd 2002                                               -- 
--  Plateform: Windows 95, 98, NT, 2000, XP (Win32)                         -- 
-- ------------------------------------------------------------------------ -- 
--                                                                          -- 
--  This software is given without any warranty. It can be distributed      -- 
--  free of charge as long as this header remains, unchanged.               -- 
--                                                                          -- 
-- ------------------------------------------------------------------------ -- 
--                                                                          -- 
-- 01.04.24      Comments added                                             -- 
-- 01.04.28      Bug 010427 corrected. OnDisconnectedManager was not        -- 
--                initialized                                               -- 
-- 01.04.28      connect() function prototype modified to handle 7-bit      -- 
--                communication                                             -- 
-- 01.04.29      "ready" field added to remove a bug that occured during    -- 
--                 reconnect (event manager pointers cleared)               -- 
--                 I removed the "delete" in Tserial_event_thread_start     -- 
--                 because it was destroying the object even if we would    -- 
--                 use it again                                             -- 
--                                                                          -- 
-- 02.01.30      Version 2.0 of the serial event object                     -- 
--                                                                          -- 
--                                                                          -- 
-- 02.06.22      - wait for the thread termination before                   -- 
--                 quiting or restarting                                    -- 
--               - "owner" field added to be able to call C++ object from   -- 
--                  the event manager routine                               -- 
--               - Correction of a bug that occured when receiving data     -- 
--                 (setting twice the SIG_READ_DONE event)                  -- 
--                                                                          -- 
--                                                                          -- 
--                                                                          -- 
-- ------------------------------------------------------------------------ -- 
--                                                                          -- 
--    Note to Visual C++ users:  Don't forget to compile with the           -- 
--     "Multithreaded" option in your project settings                      -- 
--                                                                          -- 
--         See   Project settings                                           -- 
--                   |                                                      -- 
--                   *--- C/C++                                             -- 
--                          |                                               -- 
--                          *--- Code generation                            -- 
--                                       |                                  -- 
--                                       *---- Use run-time library         -- 
--                                                     |                    -- 
--                                                     *---- Multithreaded  -- 
--                                                                          -- 
--                                                                          -- 
--                                                                          -- 
-- ------------------------------------------------------------------------ */ 
 
 
#ifndef TSERIAL_EVENT_H 
#define TSERIAL_EVENT_H 
 
#include  
#include  
 
#include "BThread.h" 
#define SERIAL_PARITY_NONE 0 
#define SERIAL_PARITY_ODD  1 
#define SERIAL_PARITY_EVEN 2 
 
#define SERIAL_CONNECTED         0 
#define SERIAL_DISCONNECTED      1 
#define SERIAL_DATA_SENT         2 
#define SERIAL_DATA_ARRIVAL      3 
#define SERIAL_RING              4 
#define SERIAL_CD_ON             5 
#define SERIAL_CD_OFF            6 
 
typedef unsigned long uint32; 
typedef void (*type_myCallBack) (uint32 object, uint32 event); 
 
#ifndef __BORLANDC__ 
#define bool  BOOL 
#define true  TRUE 
#define false FALSE 
#endif 
 
 
#define SERIAL_SIGNAL_NBR 7         // number of events in the thread 
#define SERIAL_MAX_RX     1024       //wan old is: 256       // Input buffer max size 
#define SERIAL_MAX_TX     1024       //256       // output buffer max size 
 
/* -------------------------------------------------------------------- */ 
/* -----------------------------  Tserial  ---------------------------- */ 
/* -------------------------------------------------------------------- */ 
class Tserial_event 
{ 
    // -------------------------------------------------------- // 
public: 
    bool          ready; 
    bool          check_modem; 
    char          port[10];                          // port name "com1",... 
    int           rate;                              // baudrate 
    int           parityMode; 
 
    HANDLE        serial_events[SERIAL_SIGNAL_NBR];  // events to wait on 
    unsigned int  threadid;                          // ... 
    HANDLE        serial_handle;                     // ... 
    HANDLE        thread_handle;                     // ... 
    OVERLAPPED    ovReader;                          // Overlapped structure for ReadFile 
    OVERLAPPED    ovWriter;                          // Overlapped structure for WriteFile 
    OVERLAPPED    ovWaitEvent;                       // Overlapped structure for WaitCommEvent 
    char          tx_in_progress;                    // BOOL indicating if a WriteFile is 
    char          rx_in_progress;                    // BOOL indicating if a ReadFile is 
    char          WaitCommEventInProgress; 
    char          rxBuffer[SERIAL_MAX_RX]; 
    int           max_rx_size; 
    int           received_size; 
    char          txBuffer[SERIAL_MAX_TX]; 
    int           tx_size; 
    DWORD         dwCommEvent;                       // to store the result of the wait 
 
    // ............................................................ 
    void          OnCharArrival    (char c); 
    void          OnEvent          (unsigned long events); 
 
 
    // ++++++++++++++++++++++++++++++++++++++++++++++ 
    // .................. EXTERNAL VIEW ............. 
    // ++++++++++++++++++++++++++++++++++++++++++++++ 
public: 
    type_myCallBack manager; 
    void         *owner;                // do what you want with this 
    void          run          (void); 
                  Tserial_event(); 
                 ~Tserial_event(); 
    int           connect          (char *port, int rate, int parity, 
                                    char ByteSize, bool modem_events); 
 
    void          setManager       (type_myCallBack manager); 
    void          setRxSize        (int size); 
    void          sendData         (char *buffer, int size); 
    int           getNbrOfBytes    (void); 
    int           getDataInSize    (void); 
    char *        getDataInBuffer  (void); 
    void          dataHasBeenRead  (void); 
    void          disconnect       (void); 
    BThread *     MyThread; 
    bool	  FirstTime; 
    int           SPoint;          //一个一个字节发送,指针;字节间等待2ms      
}; 
/* -------------------------------------------------------------------- */ 
#endif TSERIAL_EVENT_H