1 /*--------------------------------------------------------------------------
2   Project:  Horizon
3   File:     rdt_Result.h
4 
5   Copyright (C)2010 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: 28630 $
14  *-------------------------------------------------------------------------*/
15 
16 ////#include <stdafx.h>
17 
18 #ifndef NN_RDT_RESULT_H_
19 #define NN_RDT_RESULT_H_
20 
21 #include <nn/Result.h>
22 
23 
24 namespace nn { namespace rdt { namespace CTR {
25 
26 
27 enum Description
28 {
29     DESCRIPTION_RESET_RECEIVED = 1,   //!< 相手からリセット信号を受け取ったので、こちらはCLOSED状態に移行する
30     DESCRIPTION_UNTIMELY_CALL  = 2,   //!< 状態に対する関数呼び出しが不適切
31     DESCRIPTION_INVALID_VALUE  = 3    //!< 引数の値が不正
32 };
33 
34 
35 /*!
36   @class nn::rdt::CTR::ResultAlreadyInitialized
37   @brief 既に初期化は済んでいたので、何もせずに関数を抜けたことを示します(非エラー)。
38 
39          初期化関数を2回以上呼び出したりすると、このリザルトコードが返されることがあります。
40  */
41 NN_DEFINE_RESULT_CONST(
42     ResultAlreadyInitialized,
43     Result::LEVEL_INFO,
44     Result::SUMMARY_NOTHING_HAPPENED,
45     Result::MODULE_NN_RDT,
46     Result::DESCRIPTION_ALREADY_INITIALIZED);
47 
48 
49 /*!
50   @class nn::rdt::CTR::ResultDoNothing
51   @brief 何もせずに関数を抜けたことを示します(非エラー)。
52 
53          例えば、ゼロバイトのデータ送信を試みた場合などに、このリザルトコードが返されます。
54 */
55 NN_DEFINE_RESULT_CONST(
56     ResultDoNothing,
57     Result::LEVEL_INFO,
58     Result::SUMMARY_NOTHING_HAPPENED,
59     Result::MODULE_NN_RDT,
60     Result::DESCRIPTION_SUCCESS);
61 
62 
63 /*!
64     @class nn::rdt::CTR::ResultNotInitialized
65     @brief インスタンスが初期化されていなかったことを示します。
66 
67            ほとんどのRDT APIは、インスタンスが初期化されていなければ使用することはできません。
68            RDT APIを呼び出す前に、初期化関数を呼び出し、インスタンスを初期化して下さい。
69 */
70 NN_DEFINE_RESULT_CONST(
71     ResultNotInitialized,
72     Result::LEVEL_USAGE,
73     Result::SUMMARY_INVALID_STATE,
74     Result::MODULE_NN_RDT,
75     Result::DESCRIPTION_NOT_INITIALIZED);
76 
77 
78 /*!
79   @class nn::rdt::CTR::ResultSendBufferIsNotAvailable
80   @brief @ref Sender::Sendでデータを送信バッファに書き込もうとしましたが、送信バッファの空きが不足していたことを示します。
81 
82          送信バッファに空きを作るには、@ref Sender::Processを呼び出して下さい。
83          @ref Sender::Processは実際の送信処理を実行しますので、送信バッファにコピーされた
84          データは次第に捌けていきます(もちろん、通信相手が適切にデータを受信できていることが前提です)
85          このリザルトコードに遭遇しても、何度か@ref Sender::Processを呼び出してから
86          再び@ref Sender::Sendを試みれば、成功する可能性があります。
87  */
88 NN_DEFINE_RESULT_CONST(
89     ResultSendBufferIsNotAvailable,
90     Result::LEVEL_TEMPORARY,
91     Result::SUMMARY_OUT_OF_RESOURCE,
92     Result::MODULE_NN_RDT,
93     Result::DESCRIPTION_OUT_OF_MEMORY);
94 
95 
96 /*!
97   @class nn::rdt::CTR::ResultInvalidSize
98   @brief 引数のサイズ指定が誤っていることを示します。
99 
100          例えばバッファのサイズとして、ゼロを指定したりすると、このリザルトコードが返されます。
101  */
102 NN_DEFINE_RESULT_CONST(
103     ResultInvalidSize,
104     Result::LEVEL_USAGE,
105     Result::SUMMARY_INVALID_ARGUMENT,
106     Result::MODULE_NN_RDT,
107     Result::DESCRIPTION_INVALID_SIZE);
108 
109 
110 /*!
111   @class nn::rdt::CTR::ResultMisalignedAddress
112   @brief 引数として渡されたメモリアドレスのアライメントが誤っていたことを示します。
113 
114          RDTライブラリには、8バイトアライメントが要求される箇所があります。
115          このようなケースでは、適切にアライメントのとれたメモリアドレスを
116          渡す必要があります。
117  */
118 NN_DEFINE_RESULT_CONST(
119     ResultMisalignedAddress,
120     Result::LEVEL_USAGE,
121     Result::SUMMARY_INVALID_ARGUMENT,
122     Result::MODULE_NN_RDT,
123     Result::DESCRIPTION_MISALIGNED_ADDRESS);
124 
125 
126 /*!
127   @class nn::rdt::CTR::ResultNullPointer
128   @brief 引数にヌルポインタが指定されたことによるエラーを示します。
129 
130          例えば、ワークメモリのためにメモリアドレスを渡したり、データ書き込み先の
131          メモリアドレスを渡しているような箇所でヌルポインタを使うことはできません。
132  */
133 NN_DEFINE_RESULT_CONST(
134     ResultNullPointer,
135     Result::LEVEL_USAGE,
136     Result::SUMMARY_INVALID_ARGUMENT,
137     Result::MODULE_NN_RDT,
138     Result::DESCRIPTION_INVALID_POINTER);
139 
140 
141 /*!
142   @class nn::rdt::CTR::ResultResetReceived
143   @brief 通信相手(ピア)からリセット信号を受信し、CLOSED状態に遷移したことを表します。
144 
145          リセット信号は、誤った接続要求に対する応答として送出されたり、@ref Sender::Cancel、
146          @ref Receiver::Cancel の実行によって送出されたりします。このリセット信号を受信すると、
147          インスタンスはCLOSED状態に遷移しますので、状況に応じて再接続を試みたり、
148          通信を中断するなどの対応をとって下さい。
149  */
150 NN_DEFINE_RESULT_CONST(
151     ResultResetReceived,
152     Result::LEVEL_STATUS,
153     Result::SUMMARY_STATUS_CHANGED,
154     Result::MODULE_NN_RDT,
155             DESCRIPTION_RESET_RECEIVED);
156 
157 
158 /*!
159   @class nn::rdt::CTR::ResultResendQueueIsFull
160   @brief RDTライブラリ内部の再送キューが満杯だったことを示します。
161 
162          これは、RDTライブラリのバグが強く疑われる内部エラーです。もし開発中に
163          このエラーを発見されましたら、任天堂へのご連絡をお願いいたします。
164  */
165 NN_DEFINE_RESULT_CONST(
166     ResultResendQueueIsFull,
167     Result::LEVEL_RESET,
168     Result::SUMMARY_OUT_OF_RESOURCE,
169     Result::MODULE_NN_RDT,
170     Result::DESCRIPTION_OUT_OF_MEMORY);
171 
172 
173 /*!
174   @class nn::rdt::CTR::ResultUntimelyFunctionCall
175   @brief その関数を呼ぶべき状態ではなかったことを示します。
176 
177          @ref Sender::Open, @ref Receiver::Wait などは、関数を呼び出すべきタイミング
178          (インスタンスの状態)が存在します。例えば、既に SENDER_STATE_OPENED 状態である状況で
179          @ref Sender::Openを呼び出すのは誤りです。このような場合にこのリザルトコードが返されます。
180  */
181 NN_DEFINE_RESULT_CONST(
182     ResultUntimelyFunctionCall,
183     Result::LEVEL_STATUS,
184     Result::SUMMARY_INVALID_STATE,
185     Result::MODULE_NN_RDT,
186             DESCRIPTION_UNTIMELY_CALL);
187 
188 
189 /*!
190   @class nn::rdt::CTR::ResultNoData
191   @brief ライブラリ内部でのみ使用されるリザルトコードです。受信セグメントが存在しない(まだ到着していない)ことを示します。
192 
193          このリザルトコードはRDTライブラリ内部でのみ使用されるものですので、
194          アプリケーション開発者がこれをケアする必要はありません。
195  */
196 NN_DEFINE_RESULT_CONST(
197     ResultNoData,
198     Result::LEVEL_TEMPORARY,
199     Result::SUMMARY_NOT_FOUND,
200     Result::MODULE_NN_RDT,
201     Result::DESCRIPTION_NO_DATA);
202 
203 
204 /*!
205   @class nn::rdt::CTR::ResultInvalidValue
206   @brief 引数の値が不正だったことを示すリザルトコードです。
207 
208          RDT APIが期待していない値を受け取ったときに返されます。
209  */
210 NN_DEFINE_RESULT_CONST(
211     ResultInvalidValue,
212     Result::LEVEL_USAGE,
213     Result::SUMMARY_INVALID_ARGUMENT,
214     Result::MODULE_NN_RDT,
215             DESCRIPTION_INVALID_VALUE);
216 
217 
218 }}} // namespace nn::rdt::CTR
219 
220 #endif  // end of NN_RDT_RESULT_H_
221