1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     hio_SharedMemoryChannel.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: 19036 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_HIO_CTR_HIO_SHAREDMEMORYCHANNEL_H_
17 #define NN_HIO_CTR_HIO_SHAREDMEMORYCHANNEL_H_
18 #ifdef  NN_SWITCH_ENABLE_HOST_IO
19 
20 /*! @file
21     @brief      SharedMemoryChannel クラスを定義します。
22 
23     :include nn/hio.h
24 
25 */
26 
27 
28 #include <nn/types.h>
29 
30 namespace nn {
31 namespace hio {
32 namespace CTR {
33 
34     /*!
35     @brief      共有メモリを使用するためのチャンネルを表すクラスです。
36 
37                 PC側でも同一のチャンネルを共有メモリとして開くことでPCと通信することができます。
38 
39                 お互いにチャンネルを開いている間、共有メモリを使うことができます。
40     */
41     class SharedMemoryChannel
42     {
43     private:
44         s32     m_Ch;
45 
46     public:
47         /*!
48         @brief  コンストラクタです。別途 @ref Open によって、チャンネルを開く必要があります。
49         */
SharedMemoryChannel()50         SharedMemoryChannel() : m_Ch(-1) {}
51 
52         /*!
53         @brief  デストラクタです。チャンネルがオープンされている場合は閉じます。
54         */
~SharedMemoryChannel()55         ~SharedMemoryChannel()
56         {
57             if( m_Ch >= 0 )
58             {
59                 Close();
60             }
61         }
62 
63         /*!
64         @brief                  チャンネルを開きます。
65 
66         @param[in]  ch          使用するチャンネル番号。
67         @param[in]  pWorkMemory ライブラリが使用するワークメモリを指定します。ワークメモリは デバイス用のメモリ である必要があり、サイズは @ref WORKMEMORY_SIZE です。
68 
69         @return                 処理の結果を返します。
70         */
71         Result Open(int ch, void* pWorkMemory);
72 
73 
74         /*!
75         @brief                  チャンネルを閉じます。
76 
77         @return                 処理の結果を返します。
78 
79         */
80         Result Close();
81 
82         /*!
83         @brief                  共有メモリのサイズを取得します。
84 
85         @return                 共有メモリのサイズを返します。
86 
87         */
88         size_t GetSpaceSize();
89 
90 
91         /*!
92         @brief                  共有メモリからデータを読み込み、処理結果を返します。
93 
94                                 ホストとターゲットの両方が、共有メモリ用のチャンネルを開いている必要があります。
95 
96         @param[out] buf         データ読み込み先のバッファ。
97         @param[in]  length      読み込みサイズ。
98         @param[in]  offset      読み込み開始位置を共有メモリの先頭からのオフセットで指定します。
99 
100         @return                 処理結果を返します。
101         */
102         Result Read(void* buf, size_t length, int offset);
103 
104 
105         /*!
106         @brief                  共有メモリへデータを書き込み、処理結果を返します。
107 
108                                 ホストとターゲットの両方が、共有メモリ用のチャンネルを開いている必要があります。
109 
110         @param[in]  buf         データ書き込み元のバッファ。
111         @param[in]  length      書き込みサイズ。
112         @param[in]  offset      書き込み開始位置を共有メモリの先頭からのオフセットで指定します。
113 
114         @return                 処理結果を返します。
115         */
116         Result Write(const void* buf, size_t length, int offset);
117     };
118 
119 }
120 }
121 }
122 
123 
124 #endif  // ifdef NN_SWITCH_ENABLE_HOST_IO
125 #endif  // ifndef NN_HIO_CTR_HIO_SHAREDMEMORYCHANNEL_H_
126