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