/* * Copyright (c) 2003 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ #ifndef __IRDEVICE_H #define __IRDEVICE_H #include "IrDATypes.h" #include "IrDAStats.h" class CBufferSegment; class TIrLAPPutBuffer; class TIrGlue; class AppleIrDASerial; class CIrDevice : public OSObject { OSDeclareDefaultStructors(CIrDevice); public: static CIrDevice * cIrDevice(TIrGlue *irda, AppleIrDASerial *driver); Boolean Init(TIrGlue *irda, AppleIrDASerial *driver); void free(); void Start(void); void Stop(void); void ReadComplete(UInt8 *buffer, UInt32 length); // incoming packet from the hardware void TransmitComplete(Boolean worked); // scc/usb write finished void SetSpeedComplete(Boolean worked); // set speed finally finished void SetLAPAddress(UInt8 addr); // Set our LAP address UInt8 GetLAPAddress(void); // return our current LAP address Boolean ValidFrameAddress(UInt8 aField); // Check address field for broadcast or our address //virtual void UpdatePrefData(PrefDataPtr prefs) = 0; // override qos resources (needed??) void StartTransmit(TIrLAPPutBuffer* outputBuffer, ULong leadInCount); void StartReceive(CBufferSegment* inputBuffer); void StopReceive(void); IrDAErr ChangeSpeed(unsigned long bps); UInt32 GetSpeed(void); Boolean GetMediaBusy(void); // true if any traffic since last reset void ResetMediaBusy(void); // reset media busy flag // Statistics void ResetStats(void); void GetStatus(IrDAStatus *stats); void Stats_DataPacketIn (void); void Stats_DataPacketOut (void); void Stats_CRCError (void); void Stats_IOError (void); void Stats_ReceiveTimeout (void); void Stats_TransmitTimeout (void); void Stats_IFrameRec (void); void Stats_IFrameSent (void); void Stats_UFrameRec (void); void Stats_UFrameSent (void); void Stats_PacketDropped (void); void Stats_PacketResent (void); void Stats_RRRec (void); void Stats_RRSent (void); void Stats_RNRRec (void); void Stats_RNRSent (void); void Stats_REJRec (void); void Stats_REJSent (void); void Stats_SREJRec (void); void Stats_SREJSent (void); private: TIrGlue *fIrDA; // hmmm AppleIrDASerial *fDriver; // back to scc or usb driver CBufferSegment *fGetBuffer; // input buffer or nil if no read pending IrDAStatus fIrStatus; UInt8 fLAPAddr; // our lap address for packet filtering / validation UInt32 fSpeed; // current speed (needed to save here?) UInt32 fBofs; // current bof count (needed to save here?) Boolean fXmitting; // true if waiting for xmit complete }; inline UInt8 CIrDevice::GetLAPAddress(void) { return fLAPAddr; }; inline UInt32 CIrDevice::GetSpeed(void) { return fSpeed; }; inline void CIrDevice::GetStatus(IrDAStatus *status) { *status = fIrStatus; }; inline void CIrDevice::Stats_DataPacketIn (void) { fIrStatus.dataPacketsIn++; }; inline void CIrDevice::Stats_DataPacketOut (void) { fIrStatus.dataPacketsOut++; }; inline void CIrDevice::Stats_CRCError (void) { fIrStatus.crcErrors++; }; inline void CIrDevice::Stats_IOError (void) { fIrStatus.ioErrors++; }; inline void CIrDevice::Stats_ReceiveTimeout (void) { fIrStatus.recTimeout++; }; inline void CIrDevice::Stats_TransmitTimeout(void) { fIrStatus.xmitTimeout++; }; inline void CIrDevice::Stats_IFrameRec (void) { fIrStatus.iFrameRec++; }; inline void CIrDevice::Stats_IFrameSent (void) { fIrStatus.iFrameSent++; }; inline void CIrDevice::Stats_UFrameRec (void) { fIrStatus.uFrameRec++; }; inline void CIrDevice::Stats_UFrameSent (void) { fIrStatus.uFrameSent++; }; inline void CIrDevice::Stats_PacketDropped (void) { fIrStatus.dropped++; }; inline void CIrDevice::Stats_PacketResent (void) { fIrStatus.resent++; }; inline void CIrDevice::Stats_RRRec (void) { fIrStatus.rrRec++; }; inline void CIrDevice::Stats_RRSent (void) { fIrStatus.rrSent++; }; inline void CIrDevice::Stats_RNRRec (void) { fIrStatus.rnrRec++; }; inline void CIrDevice::Stats_RNRSent (void) { fIrStatus.rnrSent++; }; inline void CIrDevice::Stats_REJRec (void) { fIrStatus.rejRec++; }; inline void CIrDevice::Stats_REJSent (void) { fIrStatus.rejSent++; }; inline void CIrDevice::Stats_SREJRec (void) { fIrStatus.srejRec++; }; inline void CIrDevice::Stats_SREJSent (void) { fIrStatus.srejSent++; }; #endif // __IRDEVICE_H