1/* 2 File: IrGlue.h 3 4 Contains: Top of the IrDA stack 5 6 7*/ 8 9 10#ifndef __IRGLUE_H 11#define __IRGLUE_H 12 13#include "IrDAStats.h" 14#include "IrDATypes.h" 15 16 17// Constants 18 19 20enum IrLSAPIds 21{ 22 kNameServerLSAPId = 0x00, 23 kAssignDynamicLSAPId = 0x00, 24 kLastValidLSAPId = 0x6F, 25 kInvalidLSAPId = 0xFF, 26 kPendingConnectLSAPId = 0xFF 27}; 28 29 30class TIrStream; 31class CBuffer; 32class TLSAPConn; 33class TIASService; 34class TIrEvent; 35class CIrDevice; 36class TIrLAP; 37class TIrLMP; 38class TIrLAPConn; 39class CIrDiscovery; 40class TIASService; 41class TIASServer; 42class CTimer; 43class TIrQOS; 44class CList; 45class TIrDscInfo; 46class AppleIrDASerial; 47class AppleIrDA; 48struct USBIrDAQoS; 49 50enum { 51 kNumTimers = 3, // we have 3 timers, id's 0,1,2 52 kTimer_LAP = 0, // LAP's timer 53 kTimer_LMP = 1, // LMP's 1 second timer (LSAPConn) 54 kTimer_LAPConn = 2 // LAPConn's idle disconnect timer 55}; 56 57class IOWorkLoop; 58 59class TIrGlue : public OSObject 60{ 61 OSDeclareDefaultStructors(TIrGlue); 62 63public: 64 65 static TIrGlue *tIrGlue(AppleIrDASerial *driver, AppleIrDA *appleirda, IOWorkLoop *work, USBIrDAQoS *qos); 66 67 Boolean init(AppleIrDASerial *driver, AppleIrDA *appleirda, IOWorkLoop *work, USBIrDAQoS *qos); 68 void free(void); 69 70 // Packets coming in from the driver 71 void ReadComplete(UInt8 *buffer, UInt32 length); // add return code? 72 void RunQueue(); // shorthand for TIrStream::RunQueue 73 74 // Device transmit finished, hand back to driver 75 void TransmitComplete(Boolean worked); 76 77 // Device finished changing speed 78 void SetSpeedComplete(Boolean worked); 79 80 void Start(void); // do any runtime startup. 81 void Stop(void); // usb driver isn't available anymore 82 83 // Client Methods 84 85 IrDAErr RegisterMyNameAndLSAPId( UChar* className, UChar* attrName, UInt32 * lsapId ); 86 87 IrDAErr ConnectStart ( TIrStream * client, 88 UInt32 myLSAPId, 89 UInt32 devAddr, 90 UInt32 peerLSAPId, 91 CBuffer * clientData, 92 TLSAPConn ** theLSAP ); 93 94 IrDAErr ListenStart ( TIrStream * client, // Caller 95 UInt32 lsapId, // Preallocated LSAP Id 96 CBuffer * clientData, // Data to pass with connect 97 TLSAPConn ** theLSAP ); // The allocated LSAP 98 99 100 // LSAPId management routines for LSAPConn 101 IrDAErr ObtainLSAPId ( UInt32 & desiredLSAPId ); 102 void ReleaseLSAPId ( UInt32 lsapId ); 103 104 // Temp(?!) until this is cleaned up some more 105 TIASService *GetNameService(void); // get nameservice 106 107 // Lower Layer methods 108 109 // Terminate helper routine for IrLAP 110 void Disconnected(Boolean reset_lap); 111 112 // Timer helper routines for IrLMP, IrLAP. Id is [0..2] 113 void StartTimer(int id, TTimeout timeDelay, UInt32 refCon); 114 void StopTimer(int id); 115 116 void TimerComplete(UInt32 refCon); 117 118 // Event related management 119 120 TIrEvent *GrabEventBlock(UInt32 event = 0, UInt32 size = 0); // size is currently ignored 121 void ReleaseEventBlock(TIrEvent *reqBlock); 122 123 // Inline member getters 124 TIrLAP *GetLAP (void); 125 TIrLMP *GetLMP (void); 126 TIrLAPConn *GetLAPConn (void); 127 CIrDevice *GetIrDevice (void); 128 TIrQOS *GetMyQOS (void); 129 TIrQOS *GetPeerQOS (void); 130 CIrDiscovery *GetDiscovery (void); 131 132 Boolean IsLAPConnected(void); // check with lap re our connection status 133 void DoIdleDisconnect(void); // tell lapconn to hurry up and disconnect now if idle 134 135 CTimer *GetTimer(int id); // this is really just used by glue, move to private? 136 137 // statistics 138 void GetIrDAStatus(IrDAStatus *status); 139 140 private: 141 Boolean InitNameService(void); // set initial values for our IAS service 142 143 CTimer *fTimers[kNumTimers]; // our three timers 144 UInt32 fLSAPIdsInUse; // bitmap of allocated LSAP ids (bug? max 32 in use) 145 146 147 TIrLAP *fIrLAP; // one lap 148 TIrLMP *fIrLMP; // one lmp 149 TIrLAPConn *fIrLAPConn; // one lap link 150 CIrDevice *fIrDevice; // link back to IOKit's usb/irda bridge 151 CIrDiscovery *fIrDiscovery; // one discovery engine 152 TIrQOS *fMyQOS; 153 TIrQOS *fPeerQOS; 154 155 TIASService *fNameService; // The IAS name database 156 TIASServer *fNameServer; // Our server to access the IAS database 157 158 AppleIrDA *fAppleIrDA; // link to iokit message sender 159 UInt8 fLastState; // irda state change --> message to clients 160}; 161 162#define CheckReturn(x) { check(x); return (x); } 163 164inline CTimer * TIrGlue::GetTimer(int id) { CheckReturn(fTimers[id]); } 165inline TIASService * TIrGlue::GetNameService(void) { CheckReturn(fNameService); } 166 167inline TIrLAP * TIrGlue::GetLAP(void) { CheckReturn(fIrLAP); } 168inline TIrLMP * TIrGlue::GetLMP(void) { CheckReturn(fIrLMP); } 169inline TIrLAPConn * TIrGlue::GetLAPConn(void) { CheckReturn(fIrLAPConn); } 170inline CIrDevice * TIrGlue::GetIrDevice(void) { CheckReturn(fIrDevice); } 171inline TIrQOS * TIrGlue::GetMyQOS(void) { CheckReturn(fMyQOS); } 172inline TIrQOS * TIrGlue::GetPeerQOS(void) { CheckReturn(fPeerQOS); } 173inline CIrDiscovery * TIrGlue::GetDiscovery(void) { CheckReturn(fIrDiscovery); } 174 175#endif // __IRGLUE_H 176