1/*
2    File:       IrDiscovery.h
3
4    Contains:   Class definitions for discovery module
5
6*/
7
8#ifndef __IRDISCOVERY__
9#define __IRDISCOVERY__
10
11#include "IrDATypes.h"
12#include "IrStream.h"
13#include "IrEvent.h"
14//  #include "IrExec.h"
15//#include "IrDscInfo.h"
16
17
18enum DiscoverEvent {
19    kMaxDiscoverSlots           = 16,
20    kDiscoverDefaultSlotCount   = 8
21};
22
23
24enum DiscoverState {
25    kDiscoverIdle,
26    kDiscoverActive
27};
28
29
30class TIrLMP;
31class TIrGlue;
32class TIrDscInfo;
33
34class CIrDiscovery : public TIrStream
35{
36    OSDeclareDefaultStructors(CIrDiscovery);
37
38public:
39
40    static CIrDiscovery *cIrDiscovery(TIrGlue * glue);
41    void    free();
42
43    Boolean Init(TIrGlue * glue);
44
45    void            PassiveDiscovery    (TIrDscInfo * dscInfo);
46    void            GetRemoteDeviceName (UInt32 lapAddr, UInt8 * name, int maxnamelen);
47    TIrDscInfo      *GetDiscoveryInfo(void);
48
49	//***************** TESTING
50	//Boolean           ExtDiscoveryAvailable(void);            // true if not busy (testing?)
51
52    IrDAErr         ExtDiscoverStart(UInt32  numSlots); // ,
53					    //ExtDiscoveryUserCallBackUPP       callback,
54					    //ExtDiscoveryBlock             *userData);
55
56    private:
57
58	void        NextState(ULong event);             // TIrStream override
59	void        DiscoverStart(void);                // start a discover
60	void        HandleDiscoverComplete(void);       // discover finished
61	void        DeleteDiscoveredDevicesList(void);
62
63	UInt32      fState;                             // idle or discovering
64
65	CList       *fPendingDiscoverList;              // list of pending discover request events
66	CList       *fDiscoveredDevices;                // list of discovered devices (IrDscInfo)
67	TIrDscInfo  *fMyDscInfo;                        // discovery info for this host
68
69	void        HandleExtDiscoverComplete(TIrDiscoverReply * reply);        // TESTING ONLY
70};
71
72inline TIrDscInfo * CIrDiscovery::GetDiscoveryInfo( void ) { return fMyDscInfo; }
73//inline Boolean CIrDiscovery::ExtDiscoveryAvailable( void ) { return fExtDiscRequest == nil; }
74
75#endif // __IRDISCOVERY__
76
77