1/* 2 File: IrEvent.h 3 4 Contains: Defines and classes for event messages 5 6*/ 7 8 9#ifndef __IREVENT_H 10#define __IREVENT_H 11 12#include "IrDATypes.h" 13 14 15// Forward reference 16class TIrStream; 17class TIrClient; 18class TLSAPConn; 19class TIASAttribute; 20class TIrQOS; 21class CBuffer; 22class CList; 23 24// Constants 25 26// names for these events are in IrStream.cpp, change there too. 27// keep replies = requests + 1 28 29enum IrEvents 30{ 31 // Non-timer events 32 kIrOutputCompleteEvent = 1, // 1: output has completed 33 kIrInputCompleteEvent, // 2: input has completed 34 35 // Requests/replies 36 kIrDiscoverRequestEvent, // 3 37 kIrDiscoverReplyEvent = kIrDiscoverRequestEvent+1, // 4 38 39 kIrConnectRequestEvent, // 5 40 kIrConnectReplyEvent = kIrConnectRequestEvent+1, // 6 41 42 kIrListenRequestEvent, // 7 43 kIrListenReplyEvent = kIrListenRequestEvent+1, // 8 44 45 kIrAcceptRequestEvent, // 9 46 kIrAcceptReplyEvent = kIrAcceptRequestEvent+1, // a 47 48 kIrGetDataRequestEvent, // b 49 kIrGetDataReplyEvent = kIrGetDataRequestEvent+1, // c 50 51 kIrPutDataRequestEvent, // d 52 kIrPutDataReplyEvent = kIrPutDataRequestEvent+1, // e 53 54 kIrLookupRequestEvent, // f 55 kIrLookupReplyEvent = kIrLookupRequestEvent+1, // 10 56 57 kIrCancelGetRequestEvent, // 11 58 kIrCancelGetReplyEvent = kIrCancelGetRequestEvent+1, // 12 59 60 kIrCancelPutRequestEvent, // 13 61 kIrCancelPutReplyEvent = kIrCancelPutRequestEvent+1, // 14 62 63 kIrReleaseRequestEvent, // 15 64 kIrReleaseReplyEvent = kIrReleaseRequestEvent+1, // 16 65 66 kIrDisconnectRequestEvent, // 17 67 kIrDisconnectReplyEvent = kIrDisconnectRequestEvent+1, // 18 68 69 70 // LAP level events 71 kIrLocalBusyEvent, // 19 - all buffers in recv buffer pool in use 72 kIrLocalBusyClearedEvent, // 1a - recv buffer available again 73 74 // Timer events - LAP 75 kIrFirstIrLAPTimerEvent, // 1b 76 kIrMediaBusyTimerExpiredEvent, // 1c 77 kIrSlotTimerExpiredEvent, // 1d - discovery slot timer for primary 78 kIrQueryTimerExpiredEvent, // 1e - discovery query timer for secondary 79 kIrBackoffTimerExpiredEvent, // 1f - random delay before retrying connect 80 kIrFinalTimerExpiredEvent, // 20 81 kIrPollTimerExpiredEvent, // 21 82 kIrWatchdogTimerExpiredEvent, // 22 83 kIrTurnaroundTimerExpiredEvent, // 23 84 kIrLastIrLAPTimerEvent, // 24 85 86 // Timer events - LMP/LSAPConn 87 kIrFirstIrLMPTimerEvent, // 25 88 kIrConnWatchdogExpiredEvent, // 26 89 kIdleDisconnectEvent, // 27 .. jdg added for LapConn disconnect 90 kIrLastIrLMPTimerEvent, // 28 91 92 kIrChangeSpeedCompleteEvent, // 29 .. jdg added 6/26/2000 93 94 kIrMaxEventNumber = kIrChangeSpeedCompleteEvent // 29 - for sanity checks 95 96}; 97 98 99// Classes 100 101// ***NOTE: All of the Event messages based on TIrEvent can have no more additional (ULong) fields than kMaxSubClassFields 102//#define kMaxSubClassFields 7 103#define kMaxSubClassFields 10 // jdg, append get/puts to conn/listen 104 105// Comment will have one of three chars, '>', '<', or 'X'. A '>' indicates 106// that parameter is required for request. A '<' indicates that parameter 107// is valid on reply. A 'X' indicates that parameter is required for request 108// and is also valid (meaningful) on reply. In the case of connect/listen 109// requests the 'X' indicates that the parameters is required for connect, 110// but returned for listen. Sometimes a parameter may still have the values 111// passed in the request, but don't depend on it if it is not marked with an 'X'. 112 113 114class TIrEvent : public OSObject 115{ 116 OSDeclareDefaultStructors(TIrEvent); 117 118 public: 119 120 static IrDAErr InitEventLists(void); 121 static void DeleteEventLists(void); 122 123 static TIrEvent * GrabEventBlock(ULong event, ULong size); 124 static void ReleaseEventBlock(TIrEvent * eventBlock); 125 126 127 UByte fEvent; // X 128 UByte fPendEvent; // X LSAPConn saves original request here. 129 UByte fAllocated; // debugging 130 UByte fPadByte2; 131 IrDAErr fResult; // < 132 133 TIrStream *fClient; // Client who initiated this task 134 TIrStream *fDest; // Sream where this event is posted 135}; 136 137 138class TIrLargestEvent : public TIrEvent 139{ 140 OSDeclareDefaultStructors(TIrLargestEvent); 141 142 public: 143 144 static TIrLargestEvent * tIrLargestEvent(); // allocate a TIrEvent with room to morph (ugh!) 145 //ULong fSubClassFields[kMaxSubClassFields]; 146 uintptr_t fSubClassFields[kMaxSubClassFields]; // LP64 test 147}; 148 149 150class TIrDiscoverEvent : public TIrEvent 151{ 152 OSDeclareDefaultStructors(TIrDiscoverEvent); 153 154 public: 155 156 ULong fNumSlots; // > 157 ULong fConflictDevAddr; // > Set by IrLMP 158 CList* fDiscoveredDevices; // > 159 Boolean fPassiveDiscovery; // < Did peer discover me? 160}; 161 162class TIrExtDiscoverEvent : public TIrDiscoverEvent 163{ 164 OSDeclareDefaultStructors(TIrExtDiscoverEvent); 165 166 public: 167 void * fCallBack; 168 void * fUserData; 169}; 170 171// Discover requests and replies 172typedef TIrDiscoverEvent TIrDiscoverRequest; 173typedef TIrDiscoverEvent TIrDiscoverReply; 174 175typedef TIrExtDiscoverEvent TIrExtDiscoverRequest; 176typedef TIrExtDiscoverEvent TIrExtDiscoverReply; 177 178// The LSAP request/reply base class 179class TIrLSAPConnEvent : public TIrEvent 180{ 181 OSDeclareDefaultStructors(TIrLSAPConnEvent); 182 183 public: 184 185 TLSAPConn* fLSAPConn; // X Client making the request, set by LSAPConn 186}; 187 188// Disconnect, release requests and replies 189typedef TIrLSAPConnEvent TIrDisconnectEvent; 190typedef TIrDisconnectEvent TIrDisconnectRequest; 191typedef TIrDisconnectEvent TIrDisconnectReply; 192 193 194// The connect/listen/accept base class 195class TIrConnectEvent : public TIrLSAPConnEvent 196{ 197 OSDeclareDefaultStructors(TIrConnectEvent); 198 199 public: 200 201 ULong fDevAddr; // > Addr of device to connect to (for connect) 202 UByte fLSAPId; // X Addr of LSAP to connect to (for connect) 203 Boolean fPassiveConnect; // < Did my connect become a secondary citizen? 204 TIrQOS* fMyQOS; // > Preferred QOS 205 TIrQOS* fPeerQOS; // > Peer device's QOS 206 CBuffer* fData; // > Connect data to send w/conn or recv w/listen 207}; 208 209// Connect/listen/accept requests and replies 210typedef TIrConnectEvent TIrConnLstnRequest; 211typedef TIrConnectEvent TIrConnLstnReply; 212 213 214// The get/put base class 215 216// JDG: append get/put requests on end of a conn/listen so that when lsapconn turns 217// a listen into a get it doesn't smash the original record (ahem). 218 219//class TIrDataXferEvent : public TIrLSAPConnEvent 220class TIrDataXferEvent : public TIrConnectEvent 221{ 222 OSDeclareDefaultStructors(TIrDataXferEvent); 223 224 public: 225 226 //CBuffer* fData; // > Buffer to receive data 227 ULong fOffset; // X Offset in buffer to get the data 228 ULong fLength; // X Space available for received data 229 UByte fDstLSAPId; // X Destination LSAP selector id 230 UByte fSrcLSAPId; // X Source LSAP selector id 231 UByte fCtrlOpCode; // X Data frame or control frame indicator 232 UByte fCtrlInfo; // X Control frame results, status 233}; 234 235// Put requests and replies 236typedef TIrDataXferEvent TIrPutEvent; 237typedef TIrPutEvent TIrPutRequest; 238typedef TIrPutEvent TIrPutReply; 239 240// Get requests and replies 241typedef TIrDataXferEvent TIrGetEvent; 242typedef TIrGetEvent TIrGetRequest; 243typedef TIrGetEvent TIrGetReply; 244 245// Cancel get requests and replies 246typedef TIrLSAPConnEvent TIrCancelGetEvent; 247typedef TIrCancelGetEvent TIrCancelGetRequest; 248typedef TIrCancelGetEvent TIrCancelGetReply; 249 250// Cancel put requests and replies 251typedef TIrLSAPConnEvent TIrCancelPutEvent; 252typedef TIrCancelPutEvent TIrCancelPutRequest; 253typedef TIrCancelPutEvent TIrCancelPutReply; 254 255 256class TIrLookupEvent : public TIrEvent 257{ 258 OSDeclareDefaultStructors(TIrLookupEvent); 259 260 public: 261 262 UChar* fClassName; // > Class name of attr entry being searched for 263 UChar* fAttrName; // > Attr name of attr entry being searched for 264 TIASAttribute* fAttribute; // > Returned in reply 265 ULong fPeerLSAPId; // LSAP of requested Attribute 266}; 267 268// Lookup requests and replies 269typedef TIrLookupEvent TIrLookupRequest; 270typedef TIrLookupEvent TIrLookupReply; 271 272 273//---------------------------------------------------------------------------------------------- 274// IrEvent inlines 275//---------------------------------------------------------------------------------------------- 276 277inline ULong RequestIdToReplyId(ULong requestId) 278{ 279 return (ULong) (requestId + 1); 280} 281 282 283#endif // __IREVENT_H 284