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: 31623 $ 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 関数の実行結果を返します。以下に挙げる Result を返します。 54 @retval ResultSuccess 初期化に成功しました。 55 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 56 */ 57 nn::Result Initialize(u32 serial); 58 59 /*! 60 @brief NSDを削除します。他のアプリがすでに削除したり、NSAダウンロード時に領域が足らなくなり、 61 自動削除された場合など、対象のNSデータが見つからない場合がありますので、ご注意ください。 62 @return 関数の実行結果を返します。以下に挙げる Result を返します。 63 @retval ResultSuccess 削除に成功しました。 64 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 65 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 66 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 67 */ 68 nn::Result Delete(void); 69 70 /*! 71 @brief NSAヘッダ情報を読込みます。 72 下記のNSAヘッダ情報の種類を指定すると、相当する値が取得できます。 73 このとき、必要な領域が確保しておく必要があります。必要な領域のバイト以下であると @ref ResultInvalidNsDataGetHeadSize エラーが返ります。 74 NSD_TITLEID 64ビットのタイトルIDです。(s64) 75 NSD_FLAGS NSDのフラグです。 (bit32) 76 NSD_DATATYPE NSDのデータタイプです。 (bit32) 77 NSD_LENGTH NSDの長さです。 (s32) 78 NSD_SERIALID NSDのシリアルIDです。 (u32) 79 NSD_VERSION NSDのバージョン番号です。 (u32) 80 他のアプリがすでに削除したり、NSAダウンロード時に領域が足らなくなり、 81 自動削除された場合など、対象のNSデータが見つからない場合がありますので、ご注意ください。 82 @param[in] type ヘッダの要素種別を指定します。 83 @param[out] pValue ヘッダ情報の格納バッファを指定します。 84 @param[in] size バッファサイズを指定します。 85 @return 関数の実行結果を返します。以下に挙げる Result を返します。 86 @retval ResultSuccess 読込みに成功しました。 87 @retval ResultInvalidNsDataValue NSDATA格納領域のポインタがNULLです。 88 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 89 @retval ResultInvalidNsDataGetHeadSize GetHeaderInfo関数で指定したヘッダタイプに対応するサイズが一致しません。通常発生することはありませんが、何らかの異常が発生した可能性があります。 90 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 91 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 92 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 93 */ 94 nn::Result GetHeaderInfo(HeaderInfoType type, void* pValue, size_t size); 95 96 /*! 97 @brief NSDを読込みます。ファイルアクセスに似たインタフェースとなっています。 98 あらかじめ、適当なサイズのバッファを用意した後、繰り返し呼び出すことのより、NSデータ全体を読み込むことができます。 99 終端に達したときは 0 が返りますので、終了判定が可能です。 100 アプリは、一時点で1つのNSデータしか読み込めませんが、大きなNSDを読み込んでいても、同じNSデータをアクセスしない限り、 101 他のアプリのNSデータの読み込みをブロックしません。 102 他のアプリがすでに削除したり、NSAダウンロード時に領域が足らなくなり、 103 自動削除された場合など、対象のNSデータが見つからない場合は、エラーが返りますので、ご注意ください。 104 @param[out] pDataBuf NSデータのバッファを指定します。 105 @param[in] bufLen NSデータのバッファ長を指定します。 106 @return 読み込んだバイト数を返します。終端に達したときは 0 を返します。 107 @retval NN_BOSS_NSDATA_READ_ERROR_GET_HEADER NSデータヘッダの取得に失敗しました。 108 @retval NN_BOSS_NSDATA_READ_ERROR_READ_DATA NSデータの読み込みに失敗しました。 109 @retval NN_BOSS_NSDATA_READ_ERROR_IPC 内部エラーが発生しました。 110 */ 111 s32 ReadData(u8* pDataBuf, size_t bufLen); 112 113 /*! 114 @brief NSDの読み込み位置を変更します。ファイルアクセスに似たインタフェースとなっています。 115 読み込み位置の変更する基準は、@ref PositionBase を参照ください。 116 @param[in] position 読み込み位置の変更する位置を指定します。 117 @param[in] base 読み込み位置の変更する基準を指定します。 118 @return 関数の実行結果を返します。以下に挙げる Result を返します。 119 @retval ResultSuccess 読み込み位置を変更に成功しました。 120 @retval ResultInvalidNsDataSeekPosition NSデータのシーク位置がデータサイズを超えています。 121 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 122 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 123 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 124 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 125 */ 126 nn::Result SetReadDataPosition(s64 position, PositionBase base); 127 128 /*! 129 @brief NSデータの付加情報を設定します。NSデータの付加情報は、アプリが自由に使用できる情報ですが、 130 この付加情報は、新しいバージョンのNSデータのダウンロードがされると初期化されますので、ご注意ください。 131 @param[in] info 設定する付加情報を指定します。 132 @return 関数の実行結果を返します。以下に挙げる Result を返します。 133 @retval ResultSuccess 設定に成功しました。 134 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 135 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 136 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 137 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 138 */ 139 nn::Result SetAdditionalInfo(u32 info); 140 141 /*! 142 @brief NSデータの付加情報を取得します。NSデータの付加情報は、アプリが自由に使用できる情報ですが、 143 この付加情報は、新しいバージョンのNSデータのダウンロードがされると初期化されますので、ご注意ください。 144 @param[in] info 現在の付加情報が返ります。 145 @return 関数の実行結果を返します。以下に挙げる Result を返します。 146 @retval ResultSuccess 取得に成功しました。 147 @retval ResultInvalidNsDataInfo NSデータ追加情報を格納するポインタがNULLです。 148 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 149 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 150 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 151 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 152 */ 153 nn::Result GetAdditionalInfo(u32* pInfo); 154 155 /*! 156 @brief NSデータの既読フラグを設定します。アプリの判断で既読に設定できますが、 157 新しいバージョンのNSデータのダウンロードがされると未読に戻りますので、ご注意ください。 158 @param[in] flag 取得するフラグを指定します。 既読の場合、trueが返ります。 159 @return 関数の実行結果を返します。以下に挙げる Result を返します。 160 @retval ResultSuccess 設定に成功しました。 161 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 162 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 163 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 164 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 165 */ 166 nn::Result SetReadFlag(bool flag); 167 168 /*! 169 @brief NSデータの既読フラグを取得します。 170 @param[out] flag 取得したフラグが返ります。既読の場合、trueが返ります。 171 @return 関数の実行結果を返します。以下に挙げる Result を返します。 172 @retval ResultSuccess 取得に成功しました。 173 @retval ResultInvalidNsDataReadFlag NSデータリードフラグの格納領域のポインタがNULLです。 174 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 175 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 176 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 177 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 178 */ 179 nn::Result GetReadFlag(bool* pFlag); 180 181 /*! 182 @brief NSDの更新日時を取得します。 183 更新日時とは、実際にダウンロードした日時ですのでご注意ください。 184 @param[out] pTime 更新したタイムスタンプが返ります。 185 @return 関数の実行結果を返します。以下に挙げる Result を返します。 186 @retval ResultSuccess 取得に成功しました。 187 @retval ResultInvalidNsDataTime NSデータのUPDATEタイムの格納領域のポインタがNULLです。 188 @retval ResultNsDataNotFound 指定されたNSデータが見つかりません。自動削除によって削除された可能性があります。 189 @retval ResultStorageAccessPermission ストレージのアクセス権がありません。拡張セーブ領域へのアクセスできません、アクセス権があるかどうか再確認をしてください。 190 @retval ResultIpcNotSessionInitialized セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged の呼び出してください。 191 @retval 上記以外 想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。 192 */ 193 nn::Result GetLastUpdated(nn::fnd::DateTime* pTime); 194 195 protected: 196 bool m_Privileged; 197 NN_PADDING3; 198 u32 m_SerialId; 199 s32 m_dataSize; 200 NN_PADDING4; 201 AppIdType m_AppId; 202 s64 m_ReadDataPos; 203 204 }; 205 206 207 } // end of namespace boss 208 } // end of namespace nn 209 210 #endif // __cplusplus 211 212 #endif /* NN_BOSS_BOSS_NSDATA_H_ */ 213