1 /*---------------------------------------------------------------------------* 2 Project: Host I/O Interface for HIO2 3 File: Hio2If.h 4 5 (C)2005 HUDSON SOFT 6 7 $Header: /home/cvsroot/SDK/build/demos/hio2demo/HioIf/include/Hio2If.h,v 1.2 2006/03/09 12:28:43 yasuh-to Exp $ 8 9 $NoKeywords: $ 10 *---------------------------------------------------------------------------*/ 11 12 // HIO2 API wrapper interface 13 14 #ifndef __HIO2IF_H__ 15 #define __HIO2IF_H__ 16 17 #include <revolution/hio2.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 //----------------------------------------------------------------------------- 24 // define 25 26 #define HIO2IF_INVALID_ID -1 27 28 // packet command (private) 29 // -> packet = ((EXI chan(8bit) << 8) | cmd(8bit)) 30 enum HIO2IF_CMD 31 { 32 HIO2IF_CMD_OPEN_RDONLY = 1, // NNGC -> PC 33 HIO2IF_CMD_OPEN_WRONLY, // NNGC -> PC 34 HIO2IF_CMD_OPEN_RDWR, // NNGC -> PC 35 HIO2IF_CMD_OPEN_RESULT, // NNGC <- PC 36 HIO2IF_CMD_SEND, // NNGC <-> PC 37 HIO2IF_CMD_SEND_RESULT, // NNGC <-> PC 38 HIO2IF_CMD_CLOSE, // NNGC <-> PC 39 40 HIO2IF_CMD_MASK = 0xFF 41 }; 42 43 // async mode (private) 44 enum HIO2IF_ASYNC 45 { 46 HIO2IF_ASYNC_NONE = 0x00000000, 47 HIO2IF_ASYNC_READ = 0x00000001, 48 HIO2IF_ASYNC_READ_FREE = 0x00000002, 49 HIO2IF_ASYNC_WRITE = 0x00000004, 50 HIO2IF_ASYNC_WRITE_FREE = 0x00000008 51 }; 52 53 //----------------------------------------------------------------------------- 54 // type definition 55 56 // ID 57 typedef int HIO2IF_ID; 58 59 // open mode 60 typedef enum 61 { 62 HIO2IF_MODE_NONE = -1, 63 HIO2IF_MODE_RDONLY, // receive only 64 HIO2IF_MODE_WRONLY, // send only 65 HIO2IF_MODE_RDWR // send and receive 66 } HIO2IF_MODE; 67 68 // interface result 69 typedef enum 70 { 71 HIO2IF_RESULT_FATAL = -1, // error generated in HIO2 API 72 HIO2IF_RESULT_SUCCESS, // Succeeded 73 HIO2IF_RESULT_ERROR // error (different mode, etc.) 74 } HIO2IF_RESULT; 75 76 // event 77 typedef enum 78 { 79 HIO2IF_EVENT_CONNECT, // Connection complete 80 HIO2IF_EVENT_DISCONNECT, // connection released 81 HIO2IF_EVENT_RECEIVED, // Data reception 82 HIO2IF_EVENT_SEND_POSSIBLE, // send possible (connection target receiving data) 83 HIO2IF_EVENT_READ_ASYNC_DONE, // Read Async has terminated 84 HIO2IF_EVENT_WRITE_ASYNC_DONE, // Write Async has terminated 85 HIO2IF_EVENT_INTERRUPT, // live connection interrupt generated (NNGC only) 86 HIO2IF_EVENT_UNKOWN 87 } HIO2IF_EVENT; 88 89 // event callback 90 typedef void (* HIO2IF_EVENT_CALLBACK)(HIO2IF_ID id, HIO2IF_EVENT event); 91 92 // error code 93 typedef enum 94 { 95 // error 96 HIO2IF_ERROR_NONE = 0, 97 HIO2IF_ERROR_CHAN_NOT_FIND, 98 HIO2IF_ERROR_CHAN_ALREADY_OPENED, 99 HIO2IF_ERROR_NOT_CONNECT, 100 HIO2IF_ERROR_WRITE_ONLY, 101 HIO2IF_ERROR_READ_ONLY, 102 HIO2IF_ERROR_NOT_RECV_DATA, 103 HIO2IF_ERROR_CANNOT_SEND_DATA, 104 HIO2IF_ERROR_BUSY, 105 HIO2IF_ERROR_INVALID_ID, 106 107 // fatal error 108 HIO2IF_FATAL_ENUMDEVICES, 109 HIO2IF_FATAL_INIT, 110 HIO2IF_FATAL_OPEN, 111 HIO2IF_FATAL_CLOSE, 112 HIO2IF_FATAL_READ, 113 HIO2IF_FATAL_WRITE, 114 HIO2IF_FATAL_READSTATUS, 115 HIO2IF_FATAL_LOAD_DLL, // PC only 116 117 HIO2IF_ERROR_MAX 118 } HIO2IF_ERROR; 119 120 // Host I/O interface 121 122 #ifndef WIN32 123 124 // status (private) 125 typedef struct 126 { 127 HIO2DeviceType nType; // HIO2 device path 128 s32 nPc; // (pseudo-) USB device number 129 HIO2Handle hHIO; // HIO2 API handle 130 HIO2IF_MODE nMode; // open mode 131 volatile BOOL bConnect; // PC connection state 132 volatile BOOL bReceived; // data receipt notification from PC 133 volatile BOOL bSendPossible; // sending to PC possible 134 volatile u32 dwAsyncMode; // async mode 135 volatile void* pReadAsyncPtr; // buffer specified by Read Async 136 volatile u32 dwReadAsyncSize; // size specified by Read Async 137 HIO2IF_EVENT_CALLBACK fncCallback; // callback function when even received 138 } HIO2IF_STATUS; 139 140 // Host I/O interface for NNGC (function prototypes) 141 142 // EXI channel information referencing function 143 s32 HIO2IFGetDeviceCount ( void ); 144 HIO2DeviceType HIO2IFGetDevice ( s32 index ); 145 146 // HIO2 API control function 147 HIO2IF_RESULT HIO2IFInit ( void ); 148 HIO2IF_RESULT HIO2IFOpen ( HIO2DeviceType type, HIO2IF_MODE mode, HIO2IF_EVENT_CALLBACK callback, HIO2IF_ID* id ); 149 HIO2IF_RESULT HIO2IFRead ( HIO2IF_ID id, u32 addr, void* buffer, s32 size, BOOL async ); 150 HIO2IF_RESULT HIO2IFReadFree ( HIO2IF_ID id, u32 addr, void* buffer, s32 size, BOOL async ); 151 HIO2IF_RESULT HIO2IFWrite ( HIO2IF_ID id, u32 addr, void* buffer, s32 size, BOOL async ); 152 HIO2IF_RESULT HIO2IFWriteFree ( HIO2IF_ID id, u32 addr, void* buffer, s32 size, BOOL async ); 153 HIO2IF_RESULT HIO2IFReadStatus ( HIO2IF_ID id, u32* status ); 154 HIO2IF_RESULT HIO2IFClose ( HIO2IF_ID id ); 155 void HIO2IFSync ( void ); 156 void HIO2IFExit ( void ); 157 158 // status referencing function 159 BOOL HIO2IFIsConnected ( HIO2IF_ID id ); 160 BOOL HIO2IFIsReceived ( HIO2IF_ID id ); 161 BOOL HIO2IFIsSendPossible ( HIO2IF_ID id ); 162 HIO2DeviceType HIO2IFGetDeviceType ( HIO2IF_ID id ); 163 s32 HIO2IFGetPcChan ( HIO2IF_ID id ); 164 165 // function to get error information 166 HIO2IF_ERROR HIO2IFGetLastError ( void ); 167 const char* HIO2IFGetErrorMessage ( void ); 168 169 #endif // WIN32 170 171 //----------------------------------------------------------------------------- 172 // macro definition 173 174 // packet (private) 175 #define HIO2IF_SET_PACKET(data, cmd) ((u32)(((data) << 8) | (cmd))) 176 #define HIO2IF_GET_PACKET_CMD(packet) ((packet) & HIO2IF_CMD_MASK) 177 #define HIO2IF_GET_PACKET_CHAN(packet) (s32)(((packet) >> 8) & HIO2IF_CMD_MASK) 178 179 // fatal error check 180 #define HIO2IF_FAILED(result) \ 181 (((result) == HIO2IF_RESULT_FATAL) ? TRUE : FALSE) 182 183 #define HIO2IF_SUCCESS(result) \ 184 (((result) == HIO2IF_RESULT_SUCCESS) ? TRUE : FALSE) 185 186 // async mode check (private) 187 #define HIO2IF_ASYNC_READ_MASK(mode) \ 188 ((mode) & (HIO2IF_ASYNC_READ | HIO2IF_ASYNC_READ_FREE)) 189 #define HIO2IF_ASYNC_WRITE_MASK(mode) \ 190 ((mode) & (HIO2IF_ASYNC_WRITE | HIO2IF_ASYNC_WRITE_FREE)) 191 192 #ifdef __cplusplus 193 } 194 #endif 195 #endif // __HIO2IF_H__ 196