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