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