Show
Ignore:
Timestamp:
12/03/07 14:26:22 (15 years ago)
Author:
ppalmers
Message:

- simplify IsoHandler?
- fix some small issues

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/libieee1394/IsoHandler.h

    r753 r754  
    4949public: 
    5050    enum EHandlerType { 
    51             EHT_Receive, 
    52             EHT_Transmit 
     51            eHT_Receive, 
     52            eHT_Transmit 
    5353    }; 
    54     IsoHandler(IsoHandlerManager& manager); 
    55     IsoHandler(IsoHandlerManager& manager, unsigned int buf_packets, unsigned int max_packet_size, int irq); 
    56     virtual ~IsoHandler(); 
     54    IsoHandler(IsoHandlerManager& manager, enum EHandlerType t); 
     55    IsoHandler(IsoHandlerManager& manager, enum EHandlerType t, 
     56               unsigned int buf_packets, unsigned int max_packet_size, int irq); 
     57    IsoHandler(IsoHandlerManager& manager, enum EHandlerType t, 
     58               unsigned int buf_packets, unsigned int max_packet_size, int irq, enum raw1394_iso_speed speed); 
     59    ~IsoHandler(); 
    5760 
     61private: // the ISO callback interface 
     62    static enum raw1394_iso_disposition 
     63    iso_receive_handler(raw1394handle_t handle, unsigned char *data, 
     64                        unsigned int length, unsigned char channel, 
     65                        unsigned char tag, unsigned char sy, unsigned int cycle, 
     66                        unsigned int dropped); 
     67 
     68    enum raw1394_iso_disposition 
     69            putPacket(unsigned char *data, unsigned int length, 
     70                        unsigned char channel, unsigned char tag, unsigned char sy, 
     71                        unsigned int cycle, unsigned int dropped); 
     72 
     73    static enum raw1394_iso_disposition iso_transmit_handler(raw1394handle_t handle, 
     74                    unsigned char *data, unsigned int *length, 
     75                    unsigned char *tag, unsigned char *sy, 
     76                    int cycle, unsigned int dropped); 
     77    enum raw1394_iso_disposition 
     78            getPacket(unsigned char *data, unsigned int *length, 
     79                    unsigned char *tag, unsigned char *sy, 
     80                    int cycle, unsigned int dropped); 
     81 
     82public: 
    5883    // runnable interface 
    59     virtual bool Init(); 
    60     virtual bool Execute(); 
     84    bool Init(); 
     85    bool Execute(); 
    6186    int getFileDescriptor() { return raw1394_get_fd(m_handle);}; 
    6287    bool setThreadParameters(bool rt, int priority); 
    6388 
    64     virtual bool init(); 
    65     virtual bool prepare(); 
     89    bool init(); 
     90    bool prepare(); 
    6691 
    6792    bool iterate(); 
    6893    void setVerboseLevel(int l); 
    6994 
    70     virtual bool enable() {return enable(-1);}; 
    71     virtual bool enable(int cycle); 
    72     virtual bool disable(); 
     95    bool enable() {return enable(-1);}; 
     96    bool enable(int cycle); 
     97    bool disable(); 
    7398 
    74     virtual void flush() = 0; 
     99    void flush(); 
     100    enum EHandlerType getType() {return m_type;}; 
    75101 
    76102    bool isEnabled() 
     
    88114    void resetDroppedCount() {m_dropped=0;}; 
    89115 
    90     virtual enum EHandlerType getType() = 0; 
     116    unsigned int getPreBuffers() {return m_prebuffers;}; 
     117    void setPreBuffers(unsigned int n) {m_prebuffers=n;}; 
    91118 
    92     virtual void dumpInfo(); 
     119    void dumpInfo(); 
    93120 
    94121    bool inUse() {return (m_Client != 0) ;}; 
    95     virtual bool isStreamRegistered(Streaming::StreamProcessor *s) {return (m_Client == s);}; 
     122    bool isStreamRegistered(Streaming::StreamProcessor *s) {return (m_Client == s);}; 
    96123 
    97     virtual bool registerStream(Streaming::StreamProcessor *); 
    98     virtual bool unregisterStream(Streaming::StreamProcessor *); 
     124    bool registerStream(Streaming::StreamProcessor *); 
     125    bool unregisterStream(Streaming::StreamProcessor *); 
    99126 
    100     protected: 
    101         IsoHandlerManager& m_manager; 
    102         raw1394handle_t m_handle; 
    103         unsigned int    m_buf_packets; 
    104         unsigned int    m_max_packet_size; 
    105         int             m_irq_interval; 
     127private: 
     128    IsoHandlerManager& m_manager; 
     129    enum EHandlerType m_type; 
     130    raw1394handle_t m_handle; 
     131    unsigned int    m_buf_packets; 
     132    unsigned int    m_max_packet_size; 
     133    int             m_irq_interval; 
    106134 
    107         int m_packetcount; 
    108         int m_dropped; 
    109         Streaming::StreamProcessor *m_Client; 
     135    int m_packetcount; 
     136    int m_dropped; 
     137    Streaming::StreamProcessor *m_Client; 
    110138 
    111         virtual int handleBusReset(unsigned int generation); 
    112         DECLARE_DEBUG_MODULE; 
    113     private: 
    114         static int busreset_handler(raw1394handle_t handle, unsigned int generation); 
     139    int handleBusReset(unsigned int generation); 
    115140 
    116         struct pollfd   m_poll_fd; 
    117         int             m_poll_timeout; 
    118         // threading 
    119         bool            m_realtime; 
    120         int             m_priority; 
    121         Util::Thread *  m_Thread; 
     141    static int busreset_handler(raw1394handle_t handle, unsigned int generation); 
     142 
     143    struct pollfd   m_poll_fd; 
     144    int             m_poll_timeout; 
     145    // threading 
     146    bool            m_realtime; 
     147    int             m_priority; 
     148    Util::Thread *  m_Thread; 
     149 
     150    enum raw1394_iso_speed m_speed; 
     151    unsigned int m_prebuffers; 
    122152 
    123153    // the state machine 
    124     protected: 
    125         enum EHandlerStates { 
    126             E_Created, 
    127             E_Initialized, 
    128             E_Prepared, 
    129             E_Running, 
    130             E_Error 
    131         }; 
    132         enum EHandlerStates m_State; 
    133 }; 
    134  
    135 /*! 
    136 \brief ISO receive handler class (not multichannel) 
    137 */ 
    138  
    139 class IsoRecvHandler : public IsoHandler 
    140 
    141  
    142     public: 
    143         IsoRecvHandler(IsoHandlerManager& manager); 
    144         IsoRecvHandler(IsoHandlerManager& manager, unsigned int buf_packets, unsigned int max_packet_size, int irq); 
    145         virtual ~IsoRecvHandler(); 
    146  
    147         bool init(); 
    148         enum EHandlerType getType() { return EHT_Receive;}; 
    149         bool enable(int cycle); 
    150         virtual bool prepare(); 
    151         virtual void flush(); 
    152  
    153     protected: 
    154         int handleBusReset(unsigned int generation); 
    155     private: 
    156         static enum raw1394_iso_disposition 
    157         iso_receive_handler(raw1394handle_t handle, unsigned char *data, 
    158                             unsigned int length, unsigned char channel, 
    159                             unsigned char tag, unsigned char sy, unsigned int cycle, 
    160                             unsigned int dropped); 
    161  
    162         enum raw1394_iso_disposition 
    163                 putPacket(unsigned char *data, unsigned int length, 
    164                           unsigned char channel, unsigned char tag, unsigned char sy, 
    165                           unsigned int cycle, unsigned int dropped); 
    166 }; 
    167  
    168 /*! 
    169 \brief ISO transmit handler class 
    170 */ 
    171  
    172 class IsoXmitHandler  : public IsoHandler 
    173 
    174     public: 
    175         IsoXmitHandler(IsoHandlerManager& manager); 
    176         IsoXmitHandler(IsoHandlerManager& manager, unsigned int buf_packets, 
    177                         unsigned int max_packet_size, int irq); 
    178         IsoXmitHandler(IsoHandlerManager& manager, unsigned int buf_packets, 
    179                         unsigned int max_packet_size, int irq, 
    180                         enum raw1394_iso_speed speed); 
    181         virtual ~IsoXmitHandler(); 
    182  
    183         bool init(); 
    184         enum EHandlerType getType() { return EHT_Transmit;}; 
    185         unsigned int getPreBuffers() {return m_prebuffers;}; 
    186         void setPreBuffers(unsigned int n) {m_prebuffers=n;}; 
    187         virtual bool enable(int cycle); 
    188         virtual bool prepare(); 
    189         virtual void flush() {}; 
    190  
    191         void dumpInfo(); 
    192     protected: 
    193         int handleBusReset(unsigned int generation); 
    194  
    195     private: 
    196         static enum raw1394_iso_disposition iso_transmit_handler(raw1394handle_t handle, 
    197                         unsigned char *data, unsigned int *length, 
    198                         unsigned char *tag, unsigned char *sy, 
    199                         int cycle, unsigned int dropped); 
    200         enum raw1394_iso_disposition 
    201                 getPacket(unsigned char *data, unsigned int *length, 
    202                         unsigned char *tag, unsigned char *sy, 
    203                         int cycle, unsigned int dropped); 
    204  
    205         enum raw1394_iso_speed m_speed; 
    206         unsigned int m_prebuffers; 
     154    enum EHandlerStates { 
     155        E_Created, 
     156        E_Initialized, 
     157        E_Prepared, 
     158        E_Running, 
     159        E_Error 
     160    }; 
     161    enum EHandlerStates m_State; 
     162    DECLARE_DEBUG_MODULE; 
    207163}; 
    208164