1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     uds_Result.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: 29889 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_UDS_CTR_UDS_RESULT_H_
17 #define NN_UDS_CTR_UDS_RESULT_H_
18 
19 #include <nn/Result.h>
20 
21 /*! @file
22     @brief      UDS ライブラリの Result 群です。
23 */
24 
25 
26 namespace nn {
27 namespace uds {
28 namespace CTR {
29 //新しい定義
30 
31     /*
32         @brief Result コードの詳細
33     */
34     enum Description
35     {
36         DESCRIPTION_NETWORK_IS_FULL          = 1,        //!< ネットワークに接続している台数が最大に達していたために接続できませんでした。
37         DESCRIPTION_WIFI_OFF                 = 2,        //!< システムが無線 OFF モードになっているため失敗しました
38         DESCRIPTION_INVALID_PARAMS           = 3,        //!< @ref nn::uds::CTR::ResultOutOfRange 、 @ref nn::uds::CTR::ResultTooLarge 、 @ref ResultNotAuthorized 以外の引数エラーです。
39         DESCRIPTION_MISCELLANOUS_SYSTEM_ERROR= 4,        //!< システム起因で API が成功しなかった、かつ再度 API を実行すれば成功する可能性があるエラー
40         DESCRIPTION_MALFORMED_DATA           = 5,        //!< 改ざんの可能性を検知しました。
41         DESCRIPTION_MAX
42     };
43 
44 /*!
45   @name   Result 値
46   @{
47 */
48 
49 /*!
50     :category   Result
51     @class nn::uds::CTR::ResultNotFoundNetwork
52     @brief @ref ConnectNetork で接続しようとしたネットワークが見つからなかったことを示します。
53 */
54     NN_DEFINE_RESULT_CONST(
55         ResultNotFoundNetwork,
56         Result::LEVEL_STATUS, Result::SUMMARY_NOT_FOUND, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_FOUND
57     );
58 
59 /*!
60     :category   Result
61     @class nn::uds::CTR::ResultAlreadyNetworkIsFull
62     @brief @ref ConnectNetork で接続しようとしたネットワークが既に最大接続台数に達していたことを示します。
63 */
64     NN_DEFINE_RESULT_CONST(
65         ResultAlreadyNetworkIsFull,
66         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_UDS, DESCRIPTION_NETWORK_IS_FULL
67     );
68 
69 /*!
70     :category   Result
71     @class nn::uds::CTR::ResultDeniedFromMaster
72     @brief @ref ConnectNetork で接続しようとしたネットワークの Master に何らかの理由で接続を拒否されたことを示します。
73 */
74     NN_DEFINE_RESULT_CONST(
75         ResultDeniedFromMaster,
76         Result::LEVEL_STATUS, Result::SUMMARY_CANCELLED, Result::MODULE_NN_UDS, Result::DESCRIPTION_CANCEL_REQUESTED
77     );
78 
79 /*!
80     :category   Result
81     @class nn::uds::CTR::ResultConnectionTimeout
82     @brief @ref ConnectNetork で接続しようとしたネットワークへの接続処理中にタイムアウトが発生したことを示します。
83 */
84     NN_DEFINE_RESULT_CONST(
85         ResultConnectionTimeout,
86         Result::LEVEL_STATUS, Result::SUMMARY_CANCELLED, Result::MODULE_NN_UDS, Result::DESCRIPTION_TIMEOUT
87     );
88 
89 /*!
90     :category   Result
91     @class nn::uds::CTR::ResultInvalidState
92     @brief API が実行できるステートではなかったことを示します。通信中に接続が切れる場合などでも発生します。
93 */
94     NN_DEFINE_RESULT_CONST(
95         ResultInvalidState,
96         Result::LEVEL_STATUS, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_AUTHORIZED
97     );
98 
99 /*!
100     :category   Result
101     @class nn::uds::CTR::ResultInvalidNode
102     @brief 指定したノードID のノードがネットワークに存在しないことを示します。
103            自身宛にパケット送信を使用とした場合、対象がネットワークから切断した場合などでも発生します。
104 */
105     NN_DEFINE_RESULT_CONST(
106         ResultInvalidNode,
107         Result::LEVEL_STATUS, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_FOUND
108     );
109 
110 /*!
111     :category   Result
112     @class nn::uds::CTR::ResultOutOfResource
113     @brief ライブラリ内部でリソース不足が発生したことを示します。@ref Attach で指定した受信バッファの総量が
114     @ref Initialize 時に指定したバッファを超えた場合などに発生します。
115 */
116     NN_DEFINE_RESULT_CONST(
117         ResultOutOfResource,
118         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_UDS, Result::DESCRIPTION_OUT_OF_MEMORY
119     );
120 
121 /*!
122     :category   Result
123     @class nn::uds::CTR::ResultBufferIsFull
124     @brief 主に高頻度に @ref SendTo を呼び出し、送信処理が滞った場合に発生します。エラー時には送信データはロストします。
125 */
126     NN_DEFINE_RESULT_CONST(
127         ResultBufferIsFull,
128         Result::LEVEL_STATUS, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_UDS, Result::DESCRIPTION_BUSY
129     );
130 
131 /*!
132     :category   Result
133     @class nn::uds::CTR::ResultWirelessOff
134     @brief UDS ライブラリを初期化後に無線 OFF モードに遷移したことを示します。
135 
136     一度無線 OFF モードに遷移すると、UDS ライブラリはその後無線 ON モードに遷移したとしても @ref Finalize するまで無線 OFF モードだと判定します。
137     再度 UDS 通信を行う場合は無線 ON モードで再度 @ref Initialize からやり直す必要があります。
138 */
139     NN_DEFINE_RESULT_CONST(
140         ResultWirelessOff,
141         Result::LEVEL_STATUS, Result::SUMMARY_STATUS_CHANGED, Result::MODULE_NN_UDS, DESCRIPTION_WIFI_OFF
142     );
143 
144 /*!
145     :category   Result
146     @class nn::uds::CTR::ResultNotInitialized
147     @brief ライブラリが初期化されていないことを示します。 @ref Initalize を実行することで解決します。
148 */
149     NN_DEFINE_RESULT_CONST(
150         ResultNotInitialized,
151         Result::LEVEL_USAGE, Result::SUMMARY_INVALID_STATE, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_INITIALIZED
152     );
153 
154 /*!
155     :category   Result
156     @class nn::uds::CTR::ResultAlreadyOccupiedWirelessDevice
157     @brief 既に別の通信が行われており、UDS 通信が利用できない状態であることを示します。
158 */
159     NN_DEFINE_RESULT_CONST(
160         ResultAlreadyOccupiedWirelessDevice,
161         Result::LEVEL_USAGE, Result::SUMMARY_OUT_OF_RESOURCE, Result::MODULE_NN_UDS, Result::DESCRIPTION_ALREADY_INITIALIZED
162     );
163 
164 /*!
165     :category   Result
166     @class nn::uds::CTR::ResultOutOfRange
167     @brief 引数のなかに 本来指定すべき範囲を超えたパラメータ があったことを示します。
168 */
169     NN_DEFINE_RESULT_CONST(
170         ResultOutOfRange,
171         Result::LEVEL_USAGE, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_UDS, Result::DESCRIPTION_OUT_OF_RANGE
172     );
173 
174 /*!
175     :category   Result
176     @class nn::uds::CTR::ResultTooLarge
177     @brief 引数のなかに 最大サイズを超えたデータ があったことを示します。送信系 の API で発生します。
178 */
179     NN_DEFINE_RESULT_CONST(
180         ResultTooLarge,
181         Result::LEVEL_USAGE, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_UDS, Result::DESCRIPTION_TOO_LARGE
182     );
183 
184 /*!
185     :category   Result
186     @class nn::uds::CTR::ResultNotAuthorized
187     @brief 引数のなかに 特殊なケースでのみ使用が許されている値 があったことを示します。
188 */
189     NN_DEFINE_RESULT_CONST(
190         ResultNotAuthorized,
191         Result::LEVEL_USAGE, Result::SUMMARY_WRONG_ARGUMENT, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_AUTHORIZED
192     );
193 
194 /*!
195     :category   Result
196     @class nn::uds::CTR::ResultMiscellaneousSystemError
197     @brief システム側の都合による一時的な失敗です。通常、同じ引数でリトライすれば API 成功します。
198 */
199     NN_DEFINE_RESULT_CONST(
200         ResultMiscellaneousSystemError,
201         Result::LEVEL_TEMPORARY, Result::SUMMARY_INTERNAL, Result::MODULE_NN_UDS, DESCRIPTION_MISCELLANOUS_SYSTEM_ERROR
202     );
203 
204 /*!
205     :category   Result
206     @class nn::uds::CTR::ResultNotImplemented
207     @brief API は用意されているものの、現在実装がされていないことを示します。
208 */
209     NN_DEFINE_RESULT_CONST(
210         ResultNotImplemented,
211         Result::LEVEL_STATUS, Result::SUMMARY_NOT_SUPPORTED, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_IMPLEMENTED
212     );
213 
214 /*!
215     :category   Result
216     @class nn::uds::CTR::ResultMalformedData
217     @brief 受信したデータが改ざんの可能性のある適切でないデータだったことを示します。
218 */
219         NN_DEFINE_RESULT_CONST(
220             ResultMalformedData,
221             Result::LEVEL_USAGE, Result::SUMMARY_CANCELLED, Result::MODULE_NN_UDS, DESCRIPTION_MALFORMED_DATA
222         );
223 /*!
224   @}
225 */
226     // ライブラリ内部でのみ利用する Result
227     namespace detail
228     {
229 
230     /*!
231         下位レイヤが意図しない動作をした場合にこのエラーを返します。これは一時的に用意するもので最終的にはなくなります。
232     */
233         NN_DEFINE_RESULT_CONST(
234             ResultFatalError,
235             Result::LEVEL_FATAL, Result::SUMMARY_NOT_SUPPORTED, Result::MODULE_NN_UDS, Result::DESCRIPTION_NOT_AUTHORIZED
236         );
237     }
238 /******************************
239    下記は CTR-SDK 0.10.2 以前の UDS ライブラリで使用していた古い Result です。
240    過去との互換性の維持のため、しばらくの間残しておきます。
241    CTR-SDK 1.0 正式版までには削除予定ですので、順次対応をお願いします。
242 ******************************/
243 
244 /*--- 成功扱い ---*/
245     //既に処理は完了している
MakeResultAlreadyDone()246     inline nn::Result MakeResultAlreadyDone()
247     {
248         return ResultSuccess();
249     }
250 
251     //取得すべきデータが存在しなかった
MakeResultNoData()252     inline nn::Result MakeResultNoData()
253     {
254         return ResultSuccess();
255     }
256 
257 /*--- 接続失敗 ---*/
258     //対象となるネットワークが見つからなかった
MakeResultNotFoundNetwork()259     inline nn::Result MakeResultNotFoundNetwork()
260     {
261         return ResultNotFoundNetwork();
262     }
263     //対象となるネットワークのリソースが不足している
MakeResultInsufficientResourceAtMaster()264     inline nn::Result MakeResultInsufficientResourceAtMaster()
265     {
266         return ResultAlreadyNetworkIsFull();
267     }
268     //Master から接続を拒否された
MakeResultDeniedFromMaster()269     inline nn::Result MakeResultDeniedFromMaster()
270     {
271         return ResultDeniedFromMaster();
272     }
273     //接続処理中にタイムアウト
MakeResultConnectionTimeout()274     inline nn::Result MakeResultConnectionTimeout()
275     {
276         return ResultConnectionTimeout();
277     }
278 
279 /*--- 一般的なエラー ---*/
280     //現在のステートが実行可能ステートではない
MakeResultInvalidState()281     inline nn::Result MakeResultInvalidState()
282     {
283         return ResultInvalidState();
284     }
285     //ライブラリが初期化されていない
MakeResultNotInitialized()286     inline nn::Result MakeResultNotInitialized()
287     {
288         return ResultNotInitialized();
289     }
290     //既に初期化されている
MakeResultAlreadyInitialized()291     inline nn::Result MakeResultAlreadyInitialized()
292     {
293         return ResultAlreadyOccupiedWirelessDevice();
294     }
295     //引数が不正
MakeResultInvalidParam()296     inline nn::Result MakeResultInvalidParam()
297     {
298         return ResultOutOfRange();
299     }
300     //バッファが一杯
MakeResultBufferFull()301     inline nn::Result MakeResultBufferFull()
302     {
303         return ResultBufferIsFull();
304     }
305     //データが大きすぎる
MakeResultTooLarge()306     inline nn::Result MakeResultTooLarge()
307     {
308         return ResultTooLarge();
309     }
310     //対象となるノードが存在しない
MakeResultNotFoundTarget()311     inline nn::Result MakeResultNotFoundTarget()
312     {
313         return ResultInvalidNode();
314     }
315     //機能が未実装
MakeResultNotImplemented()316     inline nn::Result MakeResultNotImplemented()
317     {
318         return ResultNotImplemented();
319     }
320     //リソースが足りない
MakeResultOutOfResouece()321     inline nn::Result MakeResultOutOfResouece()
322     {
323         return ResultNotImplemented();
324     }
325 
326 } // namespace CTR
327 } // namespace uds
328 } // namespace nn
329 
330 #endif //NN_UDS_CTR_UDS_RESULT_H_
331