1#ifndef __IRDEVICE_H
2#define __IRDEVICE_H
3
4#include "IrDATypes.h"
5#include "IrDAStats.h"
6
7class CBufferSegment;
8class TIrLAPPutBuffer;
9class TIrGlue;
10class AppleIrDASerial;
11
12class CIrDevice : public  OSObject
13{
14    OSDeclareDefaultStructors(CIrDevice);
15
16public:
17    static CIrDevice * cIrDevice(TIrGlue *irda, AppleIrDASerial *driver);
18    Boolean     Init(TIrGlue *irda, AppleIrDASerial *driver);
19    void        free();
20    void        Start(void);
21    void        Stop(void);
22
23    void        ReadComplete(UInt8 *buffer, UInt32 length);     // incoming packet from the hardware
24    void        TransmitComplete(Boolean worked);               // scc/usb write finished
25    void        SetSpeedComplete(Boolean worked);               // set speed finally finished
26
27    void        SetLAPAddress(UInt8 addr);          // Set our LAP address
28    UInt8       GetLAPAddress(void);                // return our current LAP address
29    Boolean     ValidFrameAddress(UInt8 aField);    // Check address field for broadcast or our address
30
31    //virtual       void    UpdatePrefData(PrefDataPtr prefs) = 0;  // override qos resources (needed??)
32
33    void    StartTransmit(TIrLAPPutBuffer* outputBuffer, ULong leadInCount);
34    void    StartReceive(CBufferSegment* inputBuffer);
35    void    StopReceive(void);
36
37    IrDAErr ChangeSpeed(unsigned long bps);
38    UInt32  GetSpeed(void);
39
40    Boolean GetMediaBusy(void);                 // true if any traffic since last reset
41    void    ResetMediaBusy(void);               // reset media busy flag
42
43
44    // Statistics
45    void    ResetStats(void);
46    void    GetStatus(IrDAStatus *stats);
47
48    void    Stats_DataPacketIn      (void);
49    void    Stats_DataPacketOut     (void);
50    void    Stats_CRCError          (void);
51    void    Stats_IOError           (void);
52    void    Stats_ReceiveTimeout    (void);
53    void    Stats_TransmitTimeout   (void);
54
55    void    Stats_IFrameRec         (void);
56    void    Stats_IFrameSent        (void);
57
58    void    Stats_UFrameRec         (void);
59    void    Stats_UFrameSent        (void);
60
61    void    Stats_PacketDropped     (void);
62    void    Stats_PacketResent      (void);
63
64    void    Stats_RRRec             (void);
65    void    Stats_RRSent            (void);
66
67    void    Stats_RNRRec            (void);
68    void    Stats_RNRSent           (void);
69
70    void    Stats_REJRec            (void);
71    void    Stats_REJSent           (void);
72
73    void    Stats_SREJRec           (void);
74    void    Stats_SREJSent          (void);
75
76private:
77    TIrGlue                 *fIrDA;             // hmmm
78    AppleIrDASerial         *fDriver;           // back to scc or usb driver
79    CBufferSegment          *fGetBuffer;        // input buffer or nil if no read pending
80    IrDAStatus              fIrStatus;
81    UInt8                   fLAPAddr;           // our lap address for packet filtering / validation
82    UInt32                  fSpeed;             // current speed (needed to save here?)
83    UInt32                  fBofs;              // current bof count (needed to save here?)
84
85    Boolean                 fXmitting;          // true if waiting for xmit complete
86};
87
88
89inline UInt8 CIrDevice::GetLAPAddress(void)         { return fLAPAddr; };
90inline UInt32 CIrDevice::GetSpeed(void)             { return fSpeed; };
91inline void CIrDevice::GetStatus(IrDAStatus *status)    { *status = fIrStatus; };
92
93inline void CIrDevice::Stats_DataPacketIn   (void)  { fIrStatus.dataPacketsIn++;    };
94inline void CIrDevice::Stats_DataPacketOut  (void)  { fIrStatus.dataPacketsOut++;   };
95inline void CIrDevice::Stats_CRCError       (void)  { fIrStatus.crcErrors++;        };
96inline void CIrDevice::Stats_IOError        (void)  { fIrStatus.ioErrors++;         };
97
98inline void CIrDevice::Stats_ReceiveTimeout (void)  { fIrStatus.recTimeout++;   };
99inline void CIrDevice::Stats_TransmitTimeout(void)  { fIrStatus.xmitTimeout++;  };
100
101
102inline void CIrDevice::Stats_IFrameRec      (void)  { fIrStatus.iFrameRec++;    };
103inline void CIrDevice::Stats_IFrameSent     (void)  { fIrStatus.iFrameSent++;   };
104inline void CIrDevice::Stats_UFrameRec      (void)  { fIrStatus.uFrameRec++;    };
105inline void CIrDevice::Stats_UFrameSent     (void)  { fIrStatus.uFrameSent++;   };
106
107inline void CIrDevice::Stats_PacketDropped  (void)  { fIrStatus.dropped++;      };
108inline void CIrDevice::Stats_PacketResent   (void)  { fIrStatus.resent++;       };
109
110inline void CIrDevice::Stats_RRRec          (void)  { fIrStatus.rrRec++;            };
111inline void CIrDevice::Stats_RRSent         (void)  { fIrStatus.rrSent++;       };
112
113inline void CIrDevice::Stats_RNRRec         (void)  { fIrStatus.rnrRec++;       };
114inline void CIrDevice::Stats_RNRSent        (void)  { fIrStatus.rnrSent++;      };
115
116inline void CIrDevice::Stats_REJRec         (void)  { fIrStatus.rejRec++;       };
117inline void CIrDevice::Stats_REJSent        (void)  { fIrStatus.rejSent++;      };
118
119inline void CIrDevice::Stats_SREJRec        (void)  { fIrStatus.srejRec++;      };
120inline void CIrDevice::Stats_SREJSent       (void)  { fIrStatus.srejSent++;     };
121
122
123#endif // __IRDEVICE_H
124