1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: cec_Message.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: 33743 $ 14 *---------------------------------------------------------------------------*/ 15 #ifndef NN_CEC_CTR_CEC_TYPES_H_ 16 #define NN_CEC_CTR_CEC_TYPES_H_ 17 18 #include <nn/types.h> 19 #include <nn/cec/CTR/cec_Const.h> 20 #include <nn/cec/CTR/cec_MessageId.h> 21 22 namespace nn { 23 namespace cec { 24 namespace CTR { 25 /*! 26 @brief すれちがい通信IDの形式です。@ref MakeCecTitleId で、この 32ビットの値を生成することができます。 27 */ 28 typedef u32 TitleId; 29 typedef u32 GroupId; 30 typedef bit64 SenderId; 31 32 //! @name SendMode 33 //@{ 34 /*! 35 * @brief Messageの送信方式です。Messageに指定します。 36 37 SENDMODE_RECV : 受信のみ<br> 38 SENDMODE_SEND : 送信のみ<br> 39 SENDMODE_SENDRECV : 送受信<br> 40 SENDMODE_EXCHANGE : 交換<br> 41 <br> 42 「受信のみ」に設定されたMessageは送信されず、相手の送信を待つのみになります。<br> 43 「交換」に設定されたMessageは、送信が成功しなかった場合(※)、 44 そのとき受信したMessageは保存されません。<br> 45 また、受信したMessageには、交換で送信されたMessageのMessageIdが記録され、どのMessageと交換されたかを追跡することができます。このMessageIdは、Message::GetMessageId_Pair で取得できます。<br><br> 46 ※ 送信が完了したときに成功と判定し、相手のデータ保存が完了したことの確認は行われません。 47 受信データ保存中に中断された( @ref CecControl::StopScanning )、相手側の受信ボックス内で重複していた等で、 48 相手側が受信したと判定できなかったときも、送信は成功として処理されます。 49 50 */ 51 typedef u8 SendMode; 52 53 static const u8 SENDMODE_RECV = 0x1; //!< 受信のみ 54 static const u8 SENDMODE_SEND = 0x2; //!< 送信のみ 55 static const u8 SENDMODE_SENDRECV = 0x3; //!< 送受信 56 static const u8 SENDMODE_EXCHANGE = 0x0; //!< 交換 57 58 static const u8 CEC_SENDMODE_RECV = SENDMODE_RECV; 59 static const u8 CEC_SENDMODE_SEND = SENDMODE_SEND; 60 static const u8 CEC_SENDMODE_SENDRECV = SENDMODE_SENDRECV; 61 static const u8 CEC_SENDMODE_EXCHANGE = SENDMODE_EXCHANGE; 62 //@} 63 64 65 //! @name MessageTypeFlag 66 //@{ 67 /*! 68 * @brief 送信相手によって Message を切り替える為のフラグです。Messageに指定します。 69 70 MESSAGE_TYPEFLAG_NON_FRIEND : 非Friendが受信可<br> 71 MESSAGE_TYPEFLAG_FRIEND : Friendが受信可<br> 72 非Friend/Friend問わず送信するデータには、 (MESSAGE_TYPEFLAG_NON_FRIEND | MESSAGE_TYPEFLAG_FRIEND) を指定します。<br> 73 groupId と組み合わせることで、送信相手がFriendか非FriendかでMessageを切り替えて送信することができます。 74 75 */ 76 typedef u8 MessageTypeFlag; 77 78 static const u8 MESSAGE_TYPEFLAG_NON_FRIEND = 0x1; //!< 非Friendが受信可 79 static const u8 MESSAGE_TYPEFLAG_FRIEND = 0x2; //!< Friendが受信可 80 81 typedef MessageTypeFlag CecMessageTypeFlag; 82 //@} 83 84 85 //! @name MessageExHeaderType 86 //@{ 87 88 /*! 89 * @brief Message の拡張Headerのデータ種別です。 90 */ 91 typedef u32 MessageExHeaderType; 92 93 static const u32 MESSAGE_EXHEADER_TYPE_MFILTER = 0x00000001; // ModuleFilter 94 static const u32 MESSAGE_EXHEADER_TYPE_ICON = 0x00000002; //!< 個々の Message のアイコン 95 static const u32 MESSAGE_EXHEADER_TYPE_NAME = 0x00000003; // アプリ名 96 static const u32 MESSAGE_EXHEADER_TYPE_INFO = 0x00000004; //!< 個々の Message のデータの説明 97 static const u32 MESSAGE_EXHEADER_TYPE_REGION = 0x00000005; // REGION 98 99 typedef MessageExHeaderType CecMessageExHeaderType; 100 //@} 101 102 #define MESSAGE_MAGIC (0x6060) 103 #define MESSAGE_VERSION (0x00000000) 104 struct CecMessageHeader 105 { 106 u16 magic16; //!< マジックコード。固定値。 107 NN_PADDING2; 108 109 u32 messSize; //!< メッセージ全体のサイズ (messSize = headerSize + bodySize + hashSize) 110 u32 headerSize; //!< ヘッダのサイズ(ExHeaderを含む) 111 u32 bodySize; //!< Message 本文のサイズ 112 113 u32 cecTitleId; //!< Title固有ID 114 u32 cecTitleId_reserve; //!< Title固有ID(予備) 115 u32 groupId; //!< Title固有サブID 116 u32 sessionId; //!< 送信時に付与されるID(同時に送信されたMessageは同じIDになる) 117 u8 messageId[CEC_SIZEOF_MESSAGEID]; //!< メッセージ固有ID 118 u32 messVersion; //!< Messageバージョン 119 u8 messageId_pair[CEC_SIZEOF_MESSAGEID]; //!< メッセージ交換をした場合、対になるメッセージのID 120 u8 messageTypeFlag; //!< Friend/Anybody 121 u8 sendMode; //!< 送信/受信 122 bit8 flagUnread; //!< フラグ1 123 bit8 flagNew; //!< フラグ2 124 u64 senderId; //!< 送信者のID 125 u64 senderId2; //!< 送信者のID(予備) 126 nn::fnd::DateTimeParameters sendDate; //!< 送信日時(ms) 127 nn::fnd::DateTimeParameters recvDate; //!< 受信日時(ms) 128 nn::fnd::DateTimeParameters createDate; //!< 作成日時(ms) 129 u8 sendCount; //!< 送信回数 130 u8 propagationCount; //!< 伝播回数 131 bit16 tag; //!< タグ 132 //u32 PAD[4]; // 16 bytes 133 }; 134 135 136 } // namespace CTR 137 } // namespace cec 138 } // namespace nn 139 140 #endif //NN_CEC_CTR_CEC_TYPES_H_ 141