1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     uds_Type.h
4   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Rev: 37513 $
11  *---------------------------------------------------------------------------
12 
13 
14 */
15 
16 /* Please see man pages for details
17 
18 */
19 
20 #ifndef NN_UDS_CTR_UDS_TYPE_H_
21 #define NN_UDS_CTR_UDS_TYPE_H_
22 
23 #include <nn.h>
24 #include <nn/cfg.h>
25 
26 namespace nn {
27 namespace uds {
28 namespace CTR {
29 
30     namespace
31     {
32         const char PORT_NAME_UDS[]    = "nwm::UDS";
33     }
34 
35 const u16 BROADCAST_NODE_ID = 0xffff;               //
36 
37 const u8 NODE_MAX     = 16;                         //
38 const u8 ENDPOINT_MAX = 16;                         //
39 
40 
41 /* Please see man pages for details
42 
43 
44 */
45 const u8  NET_DESC_APPDATA_SIZE_MAX      = 200;     //
46 const u16 UDS_PACKET_PAYLOAD_MAX_SIZE   = 1478;     //
47 const size_t ATTACH_BUFFER_SIZE_MIN     = (UDS_PACKET_PAYLOAD_MAX_SIZE + 128); 	//
48 const size_t ATTACH_BUFFER_SIZE_DEFAULT = (UDS_PACKET_PAYLOAD_MAX_SIZE * 8);   	//
49 /*
50 
51 */
52 /* Please see man pages for details
53 
54 
55 */
56 const size_t UDS_PASSPHRASE_LENGTH_MIN = 8;         //
57 const size_t UDS_PASSPHRASE_LENGTH_MAX = 255;       //
58 /* Please see man pages for details
59 
60 */
61 
62 /* Please see man pages for details
63 
64 
65 */
66 const bit8 NO_WAIT = 0x01;         //
67 const bit8 FORCE_DIRECT_BC = 0x02; //
68 const bit8 FORCE_UNICAST   = 0x04; //
69 /*
70 
71 */
72 
73 const u8 MAC_ADDRESS_SIZE   = 6;
74 const u8 OUI_SIZE           = 3;
75 
76 /* Please see man pages for details
77 
78 */
79 enum State
80 {
81     STATE_NONE,                     //
82     STATE_PROCESSING_INITIALIZE,    //
83     STATE_PROCESSING_FINALIZE,      //
84     STATE_DISCONNECTED,             //
85     STATE_CREATING_NETWORK,         //
86     STATE_DESTROYING_NETWORK,       //
87     STATE_MASTER,                   //
88     STATE_CONNECTING_NETWORK,       //
89     STATE_DISCONNECTING_NETWORK,    //
90     STATE_CLIENT,                   //
91     STATE_SPECTATOR,                //
92     STATE_ERROR,                    //
93     STATE_MAX,
94     STATE_MAX_BIT = (1u << 31)
95 
96 };
97 
98 const State STATE_AUDIENCE = STATE_SPECTATOR;
99 
100 /* Please see man pages for details
101 
102 */
103 enum DisconnectReason
104 {
105     BEFORE_COMMUNICATION,       //
106     NETWORK_IS_AVAILABLE,       //
107     REQUEST_FROM_MYSELF,        //
108     REQUEST_FROM_SYSTEM,        //
109     DISCARDED_FROM_NETWORK,     //
110     CONNECTION_LOST,            //
111     UNKNOWN_DISCONNECT_REASON,   //
112     DISCONNECT_REASON_MAX,
113     DISCONNECT_REASON_MAX_BIT = (1u << 31)
114 };
115 
116 /* Please see man pages for details
117 
118 */
119 enum ConnectType
120 {
121     CONNECT_AS_CLIENT = 1,          //
122     CONNECT_AS_SPECTATOR,           //
123     CONNECT_AS_MASTER               //
124 };
125 
126 const ConnectType CONNECT_AS_AUDIENCE  = CONNECT_AS_SPECTATOR ;
127 
128 /* Please see man pages for details
129 
130 */
131 enum PowerSaveMode
132 {
133     ALWAYS_ACTIVE,      //
134     POWERSAVE_NORMAL,   //
135     POWERSAVE_HIGH,      //
136     POWERSAVE_MODE_MAX
137 };
138 
139 /* Please see man pages for details
140 
141 */
142 enum LinkLevel
143 {
144     LINK_LEVEL_0 = 0,   //
145     LINK_LEVEL_1,       //
146     LINK_LEVEL_2,       //
147     LINK_LEVEL_3        //
148 };
149 
150 
151 
152 /* Please see man pages for details
153 
154 */
155 struct ConnectionStatus
156 {
157     State               nowState;                   //
158     DisconnectReason    disconnectReason;           //
159     u16                 myNodeId;                   //
160     bit16               updateNodeBitmap;           //
161     u16                 nodeIdList[NODE_MAX];       //
162     u8                  nowEntry;                   //
163     u8                  maxEntry;                   //
164     bit16               slotBitmap;                 //
165 };
166 
167 static const size_t SCRAMBLED_LOCAL_FRINED_CODE_SIZE = 12; //
168 
169 /* Please see man pages for details
170 
171 
172 
173 
174 
175 
176 
177 */
178 struct ScrambledLocalFriendCode
179 {
180         bit16 value[SCRAMBLED_LOCAL_FRINED_CODE_SIZE/sizeof(bit16)];    //
181 };
182 
183 /* Please see man pages for details
184 
185 */
186 struct NodeInformation
187 {
188     ScrambledLocalFriendCode scrambledLocalFriendCode; //
189     nn::cfg::CTR::UserName userName; //
190     u16     nodeId;             //
191     NN_PADDING2;
192 };
193 
194 const u8 NODE_INFORMATION_SIZE = sizeof(NodeInformation);
195 
196 /* Please see man pages for details
197 
198 
199 
200 */
201 struct EndpointDescriptor
202 {
203     u32  id;                 //
204 };
205 
206 
207 //The following definitions are used in internal processes.
208 namespace detail{
209 
210     /* Please see man pages for details
211 
212 
213     */
214     struct RadioStrength
215     {
216         s8   rssi;
217         bool isValid;
218     };
219 
220     /* Please see man pages for details
221 
222 
223 
224 
225     */
226     class RadioStrengthInfo
227     {
228     public:
RadioStrengthInfo()229         RadioStrengthInfo(){m_IsInitialized = false;}
230         void Initialize( const RadioStrength& masterLink, const RadioStrength directLink[NODE_MAX] );
~RadioStrengthInfo()231         ~RadioStrengthInfo(){m_IsInitialized = false;}
232 
233         s8 GetAverage();    //
234         s8 GetMinimum();    //
235         s8 GetMaximum();    //
236         s8 GetMasterLink(); //
237 
238     private:
239         bool m_IsInitialized;
240         void GetRawData(s8 rawLink[NODE_MAX] ); //
241 
242         RadioStrength m_MasterLink;
243         RadioStrength m_DirectLink[NODE_MAX];
244     };
245 
246     // During DestroyEndpoint, the results of receiving for each obtainable Endpoint
247     struct ReceiveReport
248     {
249         u32 id;             //
250         u16 targetNodeId;   //
251         u16 port;           //
252         u32 receiveCount;   //
253         u32 lostCount;      //
254     };
255 
UDS_BE2LE16(u16 value)256     inline u16 UDS_BE2LE16( u16 value )
257     {
258         return static_cast<u16>( (((value) & 0xFF00UL) >> 8UL) | (((value) & 0x00FFUL) << 8UL));
259     }
260 
UDS_BE2LE32(u32 value)261     inline u32 UDS_BE2LE32( u32 value )
262     {
263     return static_cast<u32>( (((value) & 0xFF000000UL) >> 24UL) | (((value) & 0x00FF0000UL) >> 8UL) | (((value) & 0x0000FF00UL) << 8UL) | (((value) & 0x000000FFUL) << 24UL));
264     }
265 
UDS_BE2LE64(u64 value)266     inline u64 UDS_BE2LE64( u64 value )
267     {
268         u64 returnValue;
269         u32* tmpA = reinterpret_cast<u32*>(&(returnValue));
270         u32* tmpB = reinterpret_cast<u32*>(&(value));
271 
272         tmpA[0] = UDS_BE2LE32(tmpB[1]);
273         tmpA[1] = UDS_BE2LE32(tmpB[0]);
274 
275         return returnValue;
276     }
277 
UDS_LE2BE32(u32 value)278     inline u32 UDS_LE2BE32( u32 value)
279     {
280         return static_cast<u32>( (((value) & 0xFF000000UL) >> 24UL) | (((value) & 0x00FF0000UL) >> 8UL) | (((value) & 0x0000FF00UL) << 8UL) | (((value) & 0x000000FFUL) << 24UL));
281     }
282 
UDS_LE2BE16(u16 value)283     inline u16 UDS_LE2BE16( u16 value )
284     {
285         return static_cast<u16>( (((value) & 0xFF00UL) >> 8UL) | (((value) & 0x00FFUL) << 8UL));
286     }
287 
UDS_LE2BE64(u64 value)288     inline u64 UDS_LE2BE64( u64 value )
289     {
290         u64 returnValue;
291         u32* tmpA = reinterpret_cast<u32*>(&(returnValue));
292         u32* tmpB = reinterpret_cast<u32*>(&(value));
293 
294         tmpA[0] = UDS_LE2BE32(tmpB[1]);
295         tmpA[1] = UDS_LE2BE32(tmpB[0]);
296 
297         return returnValue;
298     }
299 
300     #define NN_UDS_DEFINE_UDS_VERSION(major, minor)  ((bit16)major<<8 | (bit16)minor&0x00FF)
301     const   bit16  UDS_SDK_VERSION = NN_UDS_DEFINE_UDS_VERSION(2, 0);
302 
303 /*
304 inline u32 UDS_LE2BE32( u32 value)
305 {
306     NN_ASM("rev value, value");
307     return value;
308 }
309 */
310 
311 } //end of namespace detail
312 
313 } // end of namespace CTR
314 } // end of namespace uds
315 } // end of namespace nn
316 
317 #endif /* NN_UDS_CTR_UDS_TYPE_H_ */
318