#ifndef __IRLMP_H
#define __IRLMP_H
#include "IrStream.h"
#include "IrEvent.h"
class TIrGlue;
class TIrLAPConn;
class TIrLAP;
class CIrDiscovery;
class CList;
class CBufferSegment;
#define kMaxReturnedAddrs 16 // Max slots => max addr
#define kMaxAddrConflicts 8 // I'm only dealing w/8 at most
enum IrLMPStates
{
kIrLMPReady,
kIrLMPDiscover,
kIrLMPResolveAddress
};
class TIrLMP : public TIrStream
{
OSDeclareDefaultStructors(TIrLMP);
public:
static TIrLMP * tIrLMP(TIrGlue* irda);
void free(void);
Boolean Init(TIrGlue* irda);
void Reset();
void Demultiplexor(CBufferSegment* inputBuffer);
ULong FillInLMPDUHeader(TIrPutRequest* putRequest, UByte* buffer);
void StartOneSecTicker();
void StopOneSecTicker();
void TimerComplete(ULong refCon);
private:
void NextState(ULong event);
void HandleReadyStateEvent(ULong event);
void HandleDiscoverStateEvent(ULong event);
void HandleResolveAddressStateEvent(ULong event);
Boolean AddrConflicts(CList* discoveredDevices, Boolean setAddrConflicts);
UByte fState;
UByte fTimerClients;
ULong fNumAddrConflicts;
ULong fAddrConflicts[kMaxAddrConflicts];
CList* fPendingRequests;
};
#endif // __IRLMP_H