#ifndef __IRGLUE_H
#define __IRGLUE_H
#include "IrDAStats.h"
#include "IrDATypes.h"
enum IrLSAPIds
{
kNameServerLSAPId = 0x00,
kAssignDynamicLSAPId = 0x00,
kLastValidLSAPId = 0x6F,
kInvalidLSAPId = 0xFF,
kPendingConnectLSAPId = 0xFF
};
class TIrStream;
class CBuffer;
class TLSAPConn;
class TIASService;
class TIrEvent;
class CIrDevice;
class TIrLAP;
class TIrLMP;
class TIrLAPConn;
class CIrDiscovery;
class TIASService;
class TIASServer;
class CTimer;
class TIrQOS;
class CList;
class TIrDscInfo;
class AppleIrDASerial;
class AppleIrDA;
struct USBIrDAQoS;
enum {
kNumTimers = 3, kTimer_LAP = 0, kTimer_LMP = 1, kTimer_LAPConn = 2 };
class IOWorkLoop;
class TIrGlue : public OSObject
{
OSDeclareDefaultStructors(TIrGlue);
public:
static TIrGlue *tIrGlue(AppleIrDASerial *driver, AppleIrDA *appleirda, IOWorkLoop *work, USBIrDAQoS *qos);
Boolean init(AppleIrDASerial *driver, AppleIrDA *appleirda, IOWorkLoop *work, USBIrDAQoS *qos);
void free(void);
void ReadComplete(UInt8 *buffer, UInt32 length); void RunQueue();
void TransmitComplete(Boolean worked);
void SetSpeedComplete(Boolean worked);
void Start(void); void Stop(void);
IrDAErr RegisterMyNameAndLSAPId( UChar* className, UChar* attrName, UInt32 * lsapId );
IrDAErr ConnectStart ( TIrStream * client,
UInt32 myLSAPId,
UInt32 devAddr,
UInt32 peerLSAPId,
CBuffer * clientData,
TLSAPConn ** theLSAP );
IrDAErr ListenStart ( TIrStream * client, UInt32 lsapId, CBuffer * clientData, TLSAPConn ** theLSAP );
IrDAErr ObtainLSAPId ( UInt32 & desiredLSAPId );
void ReleaseLSAPId ( UInt32 lsapId );
TIASService *GetNameService(void);
void Disconnected(Boolean reset_lap);
void StartTimer(int id, TTimeout timeDelay, UInt32 refCon);
void StopTimer(int id);
void TimerComplete(UInt32 refCon);
TIrEvent *GrabEventBlock(UInt32 event = 0, UInt32 size = 0); void ReleaseEventBlock(TIrEvent *reqBlock);
TIrLAP *GetLAP (void);
TIrLMP *GetLMP (void);
TIrLAPConn *GetLAPConn (void);
CIrDevice *GetIrDevice (void);
TIrQOS *GetMyQOS (void);
TIrQOS *GetPeerQOS (void);
CIrDiscovery *GetDiscovery (void);
Boolean IsLAPConnected(void); void DoIdleDisconnect(void);
CTimer *GetTimer(int id);
void GetIrDAStatus(IrDAStatus *status);
private:
Boolean InitNameService(void);
CTimer *fTimers[kNumTimers]; UInt32 fLSAPIdsInUse;
TIrLAP *fIrLAP; TIrLMP *fIrLMP; TIrLAPConn *fIrLAPConn; CIrDevice *fIrDevice; CIrDiscovery *fIrDiscovery; TIrQOS *fMyQOS;
TIrQOS *fPeerQOS;
TIASService *fNameService; TIASServer *fNameServer;
AppleIrDA *fAppleIrDA; UInt8 fLastState; };
#define CheckReturn(x) { check(x); return (x); }
inline CTimer * TIrGlue::GetTimer(int id) { CheckReturn(fTimers[id]); }
inline TIASService * TIrGlue::GetNameService(void) { CheckReturn(fNameService); }
inline TIrLAP * TIrGlue::GetLAP(void) { CheckReturn(fIrLAP); }
inline TIrLMP * TIrGlue::GetLMP(void) { CheckReturn(fIrLMP); }
inline TIrLAPConn * TIrGlue::GetLAPConn(void) { CheckReturn(fIrLAPConn); }
inline CIrDevice * TIrGlue::GetIrDevice(void) { CheckReturn(fIrDevice); }
inline TIrQOS * TIrGlue::GetMyQOS(void) { CheckReturn(fMyQOS); }
inline TIrQOS * TIrGlue::GetPeerQOS(void) { CheckReturn(fPeerQOS); }
inline CIrDiscovery * TIrGlue::GetDiscovery(void) { CheckReturn(fIrDiscovery); }
#endif // __IRGLUE_H