1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     uds_packet.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 27700 $
14  *---------------------------------------------------------------------------*/
15 
16 /*! @file
17     @brief    UDS 用 Vendor Specific IE の定義
18 */
19 
20 #ifndef LIBRARIES_UDS_CTR_UDS_IE_H_
21 #define LIBRARIES_UDS_CTR_UDS_IE_H_
22 
23 #include <nn.h>
24 
25 #include <nn/uds.h>
26 
27 namespace nn {
28 namespace uds {
29 namespace CTR {
30 namespace detail {
31 
32 const bit8 VSIE_OUI[3]       = {0x00, 0x1f, 0x32};  //!<  CTR 用 Vendor Specific IE で使用される OUI
33 const size_t VSIE_SIZE_MAX   = 250;
34 
35 //NetworkDescription に含める接続情報
36 const bit16 EJECT_SPECTAOTR_FLAG     = 0x0001; //!<接続中の Spectator を退去させるフラグ、新規接続も禁止
37 const bit16 DISALLOW_CONNECT_FLAG    = 0x0002; //!<Client の新規接続を禁止する
38 const bit16 DISALLOW_RECONNECT_FLAG  = 0x0004; //!<Client の再接続を禁止する。 @ref DISALLOW_CONNECT_FLAG が有効の場合にのみ参照される
39 const bit16 DIRECT_BROADCAST_FLAG    = 0x8000; //!<DirectBroadcast の使用可否フラグ、かならずこのフラグは立っている
40 
41 
42 /*!--------------------------------------------------------------------------*
43   @brief        UDS が使用する Vendor Specific IE の SubType
44  *---------------------------------------------------------------------------*/
45 enum SubType
46 {
47     NETWORK_DESCRIPTION_IE  = 21,   //!< NetworkDescription IE … 接続情報一式を格納 (Beacon)
48     SPECTATOR_PACKET_IE      = 22,   //!< Spectator から Master へのデータ送信用 (Probe Request)
49     SPECTATOR_ACK_IE         = 23,   //!< Master から Spectator への Acknowledge (Probe Response)
50     NODE_INFORMATION_IE_1   = 24,   //!< ノード情報 IE(1) … 8台分の ユーザー名とフレンドコードを格納
51     NODE_INFORMATION_IE_2   = 25    //!< ノード情報 IE(2) … 8台分の ユーザー名とフレンドコードを格納
52 };
53 
54 /*!--------------------------------------------------------------------------*
55   @brief        NetworkDescription IE の IE Body
56  *---------------------------------------------------------------------------*/
57 struct NetworkDescriptionElement
58 {
59     //共通ヘッダ
60     bit8  oui[3];           //!< OUI,      00:1f:32 固定
61     u8    subType;          //!< SubType,  21 固定
62     u32   gameId;           //!< プラットホームを越えて一意な、ゲームタイトル毎に割り振られるID
63     u8    subId;            //!< サブID, 1タイトル内で複数の通信方式を利用する場合に利用する
64     u8    sequenceNumber;   //!< シーケンス番号。ビーコン情報が更新される度にインクリメントされる
65     bit16 attribute;        //!< 接続属性, 観戦機能の可否、新規接続の可否をビットフィールドで表現
66     u32   temporaryId;      //!< MP 通信における TGID
67     u8    nowEntry;         //!< 現在の接続数
68     u8    maxEntry;         //!< 最大接続数
69     u8    tmpEntry;         //!< 一時的に接続しているノードの数 [TODO] 現状未使用で、使い方が定まっていない
70     bit8  platform;         //!< プラットホーム
71     u8    securityType;     //!< セキュリティタイプ, NWM の定義に従う
72     u8    reserved[10];     //!< 予約領域
73     u8    digest[20];         //!< ダイジェスト値
74     u8    appDataLength;    //!< 後に続くアプリデータのサイズ, 最大 @ref NET_DESC_APPDATA_SIZE_MAX (Byte) です。
75     bit8  appData[NET_DESC_APPDATA_SIZE_MAX];   //!< アプリが自由に格納できるデータ, 最大 @ref NET_DESC_APPDATA_SIZE_MAX Byte です。
76 };
77 
78 /*!--------------------------------------------------------------------------*
79   @brief        NodeInformation IE の IE Body
80  *---------------------------------------------------------------------------*/
81 struct NodeInformationElement
82 {
83     //共通ヘッダ
84     bit8  oui[3];           //!< OUI,      00:1f:32 固定
85     u8    subType;          //!< SubType,  前半8台分が 22, 後半8台分が 23
86     bit8  payload[VSIE_SIZE_MAX];
87 };
88 
89 } // end of namespace detail
90 } // end of namespace CTR
91 } // end of namespace uds
92 } // end of namespace nn
93 
94 #endif /* LIBRARIES_UDS_CTR_UDS_IE_H_ */
95