1 /*---------------------------------------------------------------------------*
2   Project:  Host I/O API for EXI-USB
3   File:     hio2.h
4 
5   (C)2005 HUDSON SOFT
6 
7   $Header: /home/cvsroot/SDK/include/revolution/hio2.h,v 1.2 2006/03/09 12:28:43 yasuh-to Exp $
8 
9   $NoKeywords: $
10  *---------------------------------------------------------------------------*/
11 
12 #ifndef	__HIO2_H__
13 #define	__HIO2_H__
14 
15 #ifdef	WIN32	// PC include here
16 
17 #   include <windows.h>
18 #   include <win32/dolphin.types.h>
19 
20 #	ifdef HIO2API_DLL_EXPORTS
21 #		define	HIO2API __declspec(dllexport)
22 #	else
23 #		define	HIO2API __declspec(dllimport)
24 #	endif
25 
26 #else	// WIN32
27 
28 #   include <dolphin/types.h>
29 
30 #	define	HIO2API
31 
32 #endif	// WIN32
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 //-----------------------------------------------------------------------------
39 // define
40 
41 //---- EXI-USB shared memory size
42 #define	HIO2_BUFFER_SIZE	(8 * 1024)
43 
44 //---- status
45 #define HIO2_STATUS_TX	0x00000001
46 #define HIO2_STATUS_RX	0x00000002
47 
48 //---- EXI channel number
49 enum
50 {
51 	HIO2_CHAN_INVALID = -1,
52 	HIO2_CHAN_0,		// EXI0
53 	HIO2_CHAN_1,		// EXI1
54 	HIO2_CHAN_MAX
55 };
56 
57 //---- invalid handle
58 #define	HIO2_INVALID_HANDLE_VALUE	((HIO2Handle)HIO2_CHAN_INVALID)
59 
60 //-----------------------------------------------------------------------------
61 // type definition
62 
63 #ifdef	WIN32
64 
65 //---- HIO2 handle
66 typedef LPVOID	HIO2Handle;
67 
68 //----- HIO2 device (PC only)
69 #ifndef	HW0
70 typedef	LPCSTR	HIO2DevicePath;
71 #else	// HW0
72 typedef int		HIO2DevicePath;
73 #	endif	// HW0
74 
75 #else	// WIN32
76 //---- HIO2 handle
77 typedef s32		HIO2Handle;
78 #endif	// WIN32
79 
80 //---- HIO2 device type (NNGC only)
81 typedef enum
82 {
83 	HIO2_DEVICE_INVALID = -1,
84 	HIO2_DEVICE_EXI2USB_0,		// EXI-USB EXI0
85 	HIO2_DEVICE_EXI2USB_1,		// EXI-USB EXI1
86 	HIO2_DEVICE_MrEXI			// Mr.EXI-USB
87 } HIO2DeviceType;
88 
89 //---- notify event (PC only)
90 typedef enum
91 {
92 	HIO2_NOTIFY_INIT_REQUEST = 1,
93 	HIO2_NOTIFY_EXIT_DONE
94 } HIO2NotifyEvent;
95 
96 //----- error code
97 typedef enum
98 {
99 	HIO2_ERROR_NONE = 0,			// no error
100 	HIO2_ERROR_UNINITIALIZED,		// HIO2 is not initialized
101 	HIO2_ERROR_INVALID_HANDLE,		// invalid HIO2 handle
102 	HIO2_ERROR_INVALID_PARAMETER,	// invalid function parameter
103 	HIO2_ERROR_CHANNEL_BUSY,		// channel already used
104 	HIO2_ERROR_CHANNEL_FULL,		// all channels are used
105 	HIO2_ERROR_CANNOT_USE,			// this console cannot use HIO2
106 	HIO2_ERROR_NOT_FIND,			// EXI-USB not find
107 	HIO2_ERROR_INTERNAL				// internal error (EXI error)
108 } HIO2Error;
109 
110 //---- callback prototypes
111 
112 // enum EXI device
113 #ifdef	WIN32
114 typedef BOOL	(*HIO2EnumCallback)( HIO2DevicePath path, void* param );
115 #else	// WIN32
116 typedef BOOL	(*HIO2EnumCallback)( HIO2DeviceType type );
117 #endif	// WIN32
118 
119 // receive mail
120 typedef void	(*HIO2ReceiveCallback)( HIO2Handle h );
121 
122 // ReadAsync/WriteAsync done
123 typedef void	(*HIO2DmaCallback)( HIO2Handle h );
124 
125 // disconnect EXI device (NNGC only)
126 typedef void	(*HIO2DisconnectCallback)( HIO2Handle h );
127 
128 // notify (PC only)
129 typedef int		(*HIO2NotifyCallback)( HIO2NotifyEvent event, void* param );
130 
131 //-----------------------------------------------------------------------------
132 // function prototypes
133 
134 HIO2API BOOL		HIO2Init			( void );
135 
136 #ifdef	WIN32
137 
138 HIO2API s32			HIO2EnumDevices		( HIO2EnumCallback callback, void* param );
139 HIO2API HIO2Handle	HIO2Open			( HIO2DevicePath pathName, HIO2ReceiveCallback callback, HIO2NotifyCallback notify, void* param );
140 #else	// WIN32
141 
142 BOOL			HIO2EnumDevices			( HIO2EnumCallback callback );
143 HIO2Handle		HIO2Open				( HIO2DeviceType type, HIO2ReceiveCallback callback, HIO2DisconnectCallback disconnect );
144 HIO2DeviceType	HIO2GetDeviceType		( HIO2Handle h );
145 
146 #endif	// WIN32
147 
148 HIO2API BOOL		HIO2Close			( HIO2Handle h );
149 HIO2API BOOL		HIO2ReadMailbox		( HIO2Handle h, u32* mail );
150 HIO2API BOOL		HIO2WriteMailbox	( HIO2Handle h, u32  mail );
151 HIO2API BOOL		HIO2Read			( HIO2Handle h, u32 addr, void* buffer, s32 size );
152 HIO2API BOOL		HIO2Write			( HIO2Handle h, u32 addr, const void* buffer, s32 size );
153 HIO2API BOOL		HIO2ReadAsync		( HIO2Handle h, u32 addr, void* buffer, s32 size, HIO2DmaCallback callback );
154 HIO2API BOOL		HIO2WriteAsync		( HIO2Handle h, u32 addr, const void* buffer, s32 size,
155 										  HIO2DmaCallback callback );
156 HIO2API BOOL		HIO2ReadStatus		( HIO2Handle h, u32* status );
157 HIO2API void		HIO2Exit			( void );
158 HIO2API HIO2Error	HIO2GetLastError	( void );
159 
160 #ifdef	WIN32
161 
162 //-----------------------------------------------------------------------------
163 // EXPORT function (for hio2[D].dll)
164 
165 //---- type definition
166 typedef BOOL		(*HIO2InitType)			( void );
167 typedef s32			(*HIO2EnumDevicesType)	( HIO2EnumCallback callback, void* param );
168 typedef HIO2Handle	(*HIO2OpenType)			( HIO2DevicePath pathName, HIO2ReceiveCallback callback, HIO2NotifyCallback notify, void* param);
169 typedef BOOL		(*HIO2CloseType)		( HIO2Handle h );
170 typedef BOOL		(*HIO2ReadMailboxType)	( HIO2Handle h, u32* mail );
171 typedef BOOL		(*HIO2WriteMailboxType)	( HIO2Handle h, u32  mail );
172 typedef BOOL		(*HIO2ReadType)			( HIO2Handle h, u32 addr, void* buffer, s32 size );
173 typedef BOOL		(*HIO2WriteType)		( HIO2Handle h, u32 addr, const void* buffer, s32 size );
174 typedef BOOL		(*HIO2ReadAsyncType)	( HIO2Handle h, u32 addr, void* buffer, s32 size, HIO2DmaCallback callback );
175 typedef BOOL		(*HIO2WriteAsyncType)	( HIO2Handle h, u32 addr, const void* buffer, s32 size, HIO2DmaCallback callback );
176 typedef BOOL		(*HIO2ReadStatusType)	( HIO2Handle h, u32* status );
177 typedef void		(*HIO2ExitType)			( void );
178 typedef HIO2Error	(*HIO2GetLastErrorType)	( void );
179 
180 //---- string (EXPORT function name) definition
181 #define HIO2InitStr			"HIO2Init"
182 #define HIO2EnumDevicesStr	"HIO2EnumDevices"
183 #define HIO2OpenStr			"HIO2Open"
184 #define HIO2CloseStr		"HIO2Close"
185 #define HIO2ReadMailboxStr	"HIO2ReadMailbox"
186 #define HIO2WriteMailboxStr	"HIO2WriteMailbox"
187 #define HIO2ReadStr			"HIO2Read"
188 #define HIO2WriteStr		"HIO2Write"
189 #define HIO2ReadAsyncStr	"HIO2ReadAsync"
190 #define HIO2WriteAsyncStr	"HIO2WriteAsync"
191 #define HIO2ReadStatusStr	"HIO2ReadStatus"
192 #define HIO2ExitStr			"HIO2Exit"
193 #define HIO2GetLastErrorStr	"HIO2GetLastError"
194 
195 #endif	// WIN32
196 
197 #ifdef __cplusplus
198 }
199 #endif
200 
201 #endif	// __HIO2_H__
202