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