/*---------------------------------------------------------------------------* Project: Horizon File: pl_PedometerApi.h Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 31469 $ *---------------------------------------------------------------------------*/ #ifndef NN_PL_CTR_PL_PEDOMETER_API_H_ #define NN_PL_CTR_PL_PEDOMETER_API_H_ #include #include #include #ifdef __cplusplus namespace nn { namespace pl { namespace CTR { namespace detail{ typedef enum _IPCPortType { PORT_PEDOMETER = 0, PORT_PEDOMETER_HID, PORT_PEDOMETER_SYS, NUM_OF_IPC_PORTS } IPCPortType; } const char PORT_NAME_PEDOMETER[] = "ptm:pdm"; const char PORT_NAME_PEDOMETER_HID[] = "ptm:pdmh"; const char PORT_NAME_PEDOMETER_SYS[] = "ptm:pdms"; /*! @name 歩数ライブラリ @{ */ const s32 MAX_MONTHDAYS = 31; //!< 一ヶ月分のエントリに保存される日数 const s32 DAYHOURS = 24; //!< 一日分のエントリに保存される時間数 const s32 NUM_FREESPACE = 2; //!< 内部用のエントリ数 const s32 NUM_MONTHHISTORIES = 12 * 10; //!< 歩数ライブラリが保持する月ごとのエントリ数の最大値 const s32 MAX_MONTHHISTORIES = NUM_MONTHHISTORIES + NUM_FREESPACE; //!< 月ごとのエントリ数の内部での保存値 const s32 NUM_MONTHHISTORYENTRIES = MAX_MONTHDAYS * DAYHOURS; //!< 1ヶ月分の保存データ数 const u16 INVALID_COUNTER = 0xffff; //!< 無効なエントリを意味する値 /*! @brief 歩数エントリの記録年月を保持する構造体です。 @ref GetStepHistoryAll で取得した歩数エントリに対応しています。 */ struct PedometerMonthHeader { u16 unusedCounter; //!< 値が @ref INVALID_COUNTER であれば、このエントリが未使用であることを示します。 s16 year; //!< このエントリの年です。 s16 month; //!< このエントリの月です。 }; /*! @brief 歩数データのヘッダ情報を意味する構造体です。 @ref GetStepHistoryAll で取得できますが、totalStepCount, monthInfo 以外は使う必要はありません。 */ struct PedometerHistoryHeader { s32 version; //!< バージョン情報です。 u32 totalStepCount; //!< トータル歩数です。@ref GetTotalStepCount で取得できる値を同じです。 nn::fnd::DateTime startRecordTime; //!< 前回の記録時刻です。 PedometerMonthHeader monthInfo[MAX_MONTHHISTORIES]; //!< 歩数エントリの記録年月の情報です。 NN_PADDING4; }; /*! @brief 一ヶ月分の歩数を保持する型です。 */ typedef u16 PedometerMonthData[NUM_MONTHHISTORYENTRIES]; /*! @brief 歩数ライブラリが保持する全歩数データ(10年分)を保持する型です。 */ typedef PedometerMonthData PedometerHistoryData[MAX_MONTHHISTORIES]; /* @brief Result コードの詳細 */ enum Description { DESCRIPTION_PEDOMETER_IS_WRITING = 1 //!< 歩数データの書き出し処理中であるため、取得できませんでした。 }; /*! @class nn::pl::CTR::ResultIsWriting @brief @ref 歩数データの書き出し処理が実行中であることを示します。時間をおいてリトライするようにしてください。 */ NN_DEFINE_RESULT_CONST( ResultIsWriting, Result::LEVEL_STATUS, Result::SUMMARY_NOTHING_HAPPENED, Result::MODULE_NN_PTM, DESCRIPTION_PEDOMETER_IS_WRITING ); /*! @brief 歩数の記録されている年月を表すエントリの構造体です。 */ struct PedometerEntry { s16 year; s16 month; }; /*! @brief 歩数計の状態を返します。 @return 歩数計が歩数をカウントしているなら true を返し、カウントしていないなら false を返します。 */ bool GetPedometerState(); /*! @brief ライブラリが記録している歩数のエントリ情報を取得します。 @return エントリ情報の個数を返します。 */ s8 GetStepHistoryEntry(PedometerEntry* pEntry); /*! @brief 時間ごとに記録された歩数を取得します。 @param[out] pStepCounts 取得した歩数を格納します。 @param[in] numHours 取得する時間を指定します。 @param[in] start 取得する期間の開始日時を指定します。 */ void GetStepHistory( u16 pStepCounts[], s32 numHours, nn::fnd::DateTime start ); /*! @brief 累計歩数を取得します。 @return 累積歩数を返します。 */ u32 GetTotalStepCount(); /*! @brief ライブラリが保持する全歩数データを取得します。 取得した header の monthInfo に記録されているエントリ情報は、data の PedometerMonthData の並びに対応しています。 @param[out] header 取得した歩数エントリのヘッダ情報を格納します。 @param[out] data 取得した歩数エントリの情報を格納します。 @return 関数の実行結果を返します。以下に挙げる Result を返します。 @retval ResultIsWriting 歩数のマージ処理が実行中です。時間をおいてリトライしてください。 */ nn::Result GetStepHistoryAll( PedometerHistoryHeader& header, PedometerHistoryData& data ); /*! @} */ } // namespace CTR { } // namespace pl { } // namespace nn { #endif #endif // #ifndef NN_PL_CTR_PL_PEDOMETER_API_H_