1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_NsData.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: 26304 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_BOSS_BOSS_NSDATA_H_
17 #define NN_BOSS_BOSS_NSDATA_H_
18 
19 #include <nn/fnd/fnd_DateTime.h>
20 #include <nn/boss/boss_Const.h>
21 #include <nn/boss/boss_Result.h>
22 #include <nn/boss/boss_Types.h>
23 
24 #ifdef __cplusplus
25 
26 namespace nn {
27 namespace boss {
28 
29 /*!
30   @brief        NSデータを表すクラスです。NSデータの操作(Readなど)に利用します。
31 */
32 class NsData
33 {
34 public:
35     static const s32 NN_BOSS_NSDATA_READ_ERROR_GET_HEADER = -1;  //!< NSデータのReadNsDataエラー定義。NSデータヘッダの取得に失敗した。
36     static const s32 NN_BOSS_NSDATA_READ_ERROR_READ_DATA  = -2;  //!< NSデータのReadNsDataエラー定義。NSデータの読み込みに失敗した。
37     static const s32 NN_BOSS_NSDATA_READ_ERROR_IPC        = -3;  //!< NSデータのReadNsDataエラー定義。IPCでエラーが発生した。
38     NN_PADDING4;
39 
40 /*!
41   @brief        コンストラクタです。
42 */
43     explicit NsData(void);
44 
45 /*!
46   @brief        デストラクタです。
47 */
48     virtual ~NsData(void);
49 
50 /*!
51   @brief        シリアルIDを指定してNSデータを取得します。
52   @param[in]    serial  シリアルIDを指定します。
53   @return       処理の結果が返ります。<BR>
54 */
55     nn::Result Initialize(u32 serial);
56 
57 /*!
58   @brief        NSDを削除します。
59   @return       処理の結果が返ります。<BR>
60   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
61   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
62 */
63     nn::Result Delete(void);
64 
65 /*!
66   @brief  NSAヘッダ情報を読込みます。
67   @param[in]    type            ヘッダの要素種別を指定します。
68   @param[out]   pValue          ヘッダ情報の格納バッファを指定します。
69   @param[in]    size            バッファサイズを指定します。
70   @return       処理の結果が返ります。<BR>
71   @retval       Description== @ref ER_INVALID_NSDATA_VALUE  「NSDATA格納領域のポインタがNULLです。」を表すエラー
72   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
73   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
74   @retval       Description== @ref ER_INVALID_NSDATA_GETHEAD_SIZE  「不正なNSDATAのSIZEパラメータ指定」を表すエラー
75   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
76 */
77     nn::Result GetHeaderInfo(HeaderInfoType type, void* pValue, size_t size);
78 
79 /*!
80   @brief        NSDを読込みます。
81   @param[out]   pDataBuf         NSDのバッファを指定します。
82   @param[in]    bufLen           NSDのバッファ長を指定します。
83   @return       読み込んだバイト数を返します。終端に達したときは 0 を返します。<BR>
84   @retval       Description== @ref ER_INVALID_NSDATA_VALUE  「NSDATA格納領域のポインタがNULLです。」を表すエラー
85   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
86   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
87   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
88 */
89     s32 ReadData(u8* pDataBuf, size_t bufLen);
90 
91 /*!
92   @brief        NSDの読み込み位置を変更します。
93   @param[in]    position 読み込み位置の変更する位置を指定します。
94   @param[in]    base     読み込み位置の変更する基準を指定します。
95   @return       処理の結果が返ります。<BR>
96   @retval       Description== @ref ER_INVALID_NSDATA_SEEK_POSITION  「NSDATAのシーク位置がデータサイズを超えています。」を表すエラー
97   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
98   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
99   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
100 */
101     nn::Result SetReadDataPosition(s64 position, PositionBase base);
102 
103 /*!
104   @brief        NSデータの付加情報を設定します。
105   @param[in]    info            設定する付加情報を指定します。
106   @return       処理の結果が返ります。<BR>
107   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
108   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
109   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
110 */
111     nn::Result SetAdditionalInfo(u32 info);
112 
113 /*!
114   @brief        NSデータの付加情報を取得します。
115   @param[in]    info            現在の付加情報が返ります。
116   @return       処理の結果が返ります。<BR>
117   @retval       Description== @ref ER_INVALID_NSDATA_INFO  「NSDATA追加情報を格納するポインタがNULLです。」を表すエラー
118   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
119   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
120   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
121 */
122     nn::Result GetAdditionalInfo(u32* pInfo);
123 
124 /*!
125   @brief        NSデータの既読未読フラグを設定します。
126   @param[in]    flag            取得するフラグを指定します。 true:既読
127   @return       処理の結果が返ります。<BR>
128   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
129   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
130   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
131 */
132     nn::Result SetReadFlag(bool flag);
133 
134 /*!
135   @brief        NSデータの既読未読フラグを取得します。
136   @param[out]   flag            取得したフラグが返ります。true:既読
137   @return       処理の結果が返ります。<BR>
138   @retval       Description== @ref ER_INVALID_NSDATA_READFLAG  「NSDATAリードフラグの格納領域のポインタがNULLです。」を表すエラー
139   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
140   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
141   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
142 */
143     nn::Result GetReadFlag(bool* pFlag);
144 
145 /*!
146   @brief        NSDの更新日時を取得します。
147   @param[out]   pTime       更新したタイムスタンプが返ります。
148   @return       処理の結果が返ります。<BR>
149   @retval       Description== @ref ER_INVALID_NSDATA_TIME  「NSDATAのUPDATEタイムの格納領域のポインタがNULLです。」を表すエラー
150   @retval       Description== @ref ER_NSDATA_NOTFOUND  「NSD Data なし」を表すエラー
151   @retval       Description== @ref ER_NSDATA_INVALID_FORMAT  「NSD Data フォーマット異常」を表すエラー
152   @retval       Description== @ref ER_FILE_ACCESS  「ファイルアクセスに失敗」を表すエラー
153 */
154     nn::Result GetLastUpdated(nn::fnd::DateTime* pTime);
155 
156 protected:
157     bool            m_Privileged;
158     NN_PADDING3;
159     u32             m_SerialId;
160     s32             m_dataSize;
161     NN_PADDING4;
162     AppIdType       m_AppId;
163     s64             m_ReadDataPos;
164 
165 };
166 
167 
168 } // end of namespace boss
169 } // end of namespace nn
170 
171 #endif // __cplusplus
172 
173 #endif /* NN_BOSS_BOSS_NSDATA_H_ */
174