1/*
2    File:       IrDscInfo.h
3
4    Contains:   Methods for implementing IrDscInfo (IrLMP's XID discovery/device info)
5
6
7*/
8
9
10#ifndef __IRDSCINFO_H
11#define __IRDSCINFO_H
12
13#include "IrDATypes.h"
14
15
16// Constants
17
18// Max nickname length (must be shorter if more than one service hints byte)
19#define kMaxNicknameLen     21
20
21enum DevInfoHints
22{
23    kDevInfoHintPnPSupport  = 0x00000001,
24    kDevInfoHintPDA         = 0x00000002,
25    kDevInfoHintComputer    = 0x00000004,
26    kDevInfoHintPrinter     = 0x00000008,
27    kDevInfoHintModem       = 0x00000010,
28    kDevInfoHintFAX         = 0x00000020,
29    kDevInfoHintLANAccess   = 0x00000040,
30    kDevInfoHintExtension1  = 0x00000080,   // Not a real hint, an implementation gizmo
31
32    kDevInfoHintTelephony   = 0x00000100,
33    kDevInfoHintFileServer  = 0x00000200,
34    kDevInfoHintIrCOMM      = 0x00000400,
35    kDevInfoHintReserved1   = 0x00000800,
36    kDevInfoHintReserved2   = 0x00001000,
37    kDevInfoHintReserved3   = 0x00002000,
38    kDevInfoHintReserved4   = 0x00004000,
39    kDevInfoHintExtension2  = 0x00008000,   // Not a real hint, an implementation gizmo
40
41    kDevInfoHintExtension3  = 0x00800000    // Not a real hint, an implementation gizmo
42};
43
44#define kHintCount  32
45
46class CBufferSegment;
47
48// Classes
49
50// --------------------------------------------------------------------------------------------------------------------
51//                      TIrDscInfo
52// --------------------------------------------------------------------------------------------------------------------
53
54class TIrDscInfo : public OSObject
55{
56	    OSDeclareDefaultStructors(TIrDscInfo);
57public:
58	    static TIrDscInfo * tIrDscInfo();
59	    bool    init(void);
60	    void    free(void);
61
62
63	    // Specify DeviceInfo fields
64	    void                SetVersion(UByte version)           { fVersion = version;   }
65	    void                SetServiceHints(ULong hintBits);
66	    void                RemoveServiceHints( ULong hintBits );
67	    void                SetDeviceAddr(ULong address)        { fDevAddr = address;   }
68	    void                SetCharacterSet(UByte charset)      { fCharset = charset;   }
69	    IrDAErr             SetNickname(const char* name);
70
71	    // Obtain DeviceInfo fields
72	    UByte               GetVersion()                        { return fVersion;      }
73	    UByte               GetCharacterSet()                   { return fCharset;      }
74	    ULong               GetServiceHints()                   { return fHints;        }
75	    ULong               GetDeviceAddr()                     { return fDevAddr;      }
76	    void                GetNickname(UChar* name, int maxnamelen);
77
78	    // Put/Get DevInfo part of the discovery info (service hints, char set, nickname)
79	    ULong               AddDevInfoToBuffer(UByte* buffer, ULong maxBytes);
80	    IrDAErr             ExtractDevInfoFromBuffer(CBufferSegment* buffer);
81
82    private:
83
84	    ULong               fDevAddr;
85	    ULong               fHints;
86	    UByte               fVersion;       // Of IrLAP supported
87	    UByte               fCharset;
88	    UByte               fNickname[kMaxNicknameLen+1];
89	    UByte               fHintCount[kHintCount];
90};
91
92#endif // __IRDSCINFO_H
93