1 |
39 |
julius |
/*++
|
2 |
|
|
|
3 |
|
|
FTC MPSSE Interface DLLs - Copyright © FTDI Ltd. 2009
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
The source code to the FTCI2C, FTCJTAG and FTCSPI DLLs is provided as-is and no warranty is made as to its function or reliability.
|
7 |
|
|
|
8 |
|
|
This source code may be freely modified and redistributed, provided that the FTDI Ltd. copyright notice remains intact.
|
9 |
|
|
|
10 |
|
|
Copyright (c) 2005 Future Technology Devices International Ltd.
|
11 |
|
|
|
12 |
|
|
Module Name:
|
13 |
|
|
|
14 |
|
|
ftcjtag.h
|
15 |
|
|
|
16 |
|
|
Abstract:
|
17 |
|
|
|
18 |
|
|
API DLL for FT2232C Dual Device setup to simulate the Joint Test Action Group(JTAG) synchronous protocol.
|
19 |
|
|
FTCJTAG library definitions
|
20 |
|
|
|
21 |
|
|
Environment:
|
22 |
|
|
|
23 |
|
|
kernel & user mode
|
24 |
|
|
|
25 |
|
|
Revision History:
|
26 |
|
|
|
27 |
|
|
07/02/05 kra Created.
|
28 |
|
|
|
29 |
|
|
--*/
|
30 |
|
|
|
31 |
|
|
|
32 |
|
|
#ifndef win_FTCJTAG_H
|
33 |
|
|
#define win_FTCJTAG_H
|
34 |
|
|
|
35 |
|
|
|
36 |
|
|
// The following ifdef block is the standard way of creating macros
|
37 |
|
|
// which make exporting from a DLL simpler. All files within this DLL
|
38 |
|
|
// are compiled with the FTCJTAG_EXPORTS symbol defined on the command line.
|
39 |
|
|
// This symbol should not be defined on any project that uses this DLL.
|
40 |
|
|
// This way any other project whose source files include this file see
|
41 |
|
|
// FTCJTAG_API functions as being imported from a DLL, whereas this DLL
|
42 |
|
|
// sees symbols defined with this macro as being exported.
|
43 |
|
|
|
44 |
|
|
#ifdef FTCJTAG_EXPORTS
|
45 |
|
|
#define FTCJTAG_API __declspec(dllexport)
|
46 |
|
|
#else
|
47 |
|
|
#define FTCJTAG_API __declspec(dllimport)
|
48 |
|
|
#endif
|
49 |
|
|
|
50 |
|
|
typedef DWORD FTC_HANDLE;
|
51 |
|
|
typedef ULONG FTC_STATUS;
|
52 |
|
|
|
53 |
|
|
#define TEST_LOGIC_STATE 1
|
54 |
|
|
#define RUN_TEST_IDLE_STATE 2
|
55 |
|
|
#define PAUSE_TEST_DATA_REGISTER_STATE 3
|
56 |
|
|
#define PAUSE_INSTRUCTION_REGISTER_STATE 4
|
57 |
|
|
#define SHIFT_TEST_DATA_REGISTER_STATE 5
|
58 |
|
|
#define SHIFT_INSTRUCTION_REGISTER_STATE 6
|
59 |
|
|
|
60 |
|
|
#define FTC_SUCCESS 0 // FTC_OK
|
61 |
|
|
#define FTC_INVALID_HANDLE 1 // FTC_INVALID_HANDLE
|
62 |
|
|
#define FTC_DEVICE_NOT_FOUND 2 //FTC_DEVICE_NOT_FOUND
|
63 |
|
|
#define FTC_DEVICE_NOT_OPENED 3 //FTC_DEVICE_NOT_OPENED
|
64 |
|
|
#define FTC_IO_ERROR 4 //FTC_IO_ERROR
|
65 |
|
|
#define FTC_INSUFFICIENT_RESOURCES 5 // FTC_INSUFFICIENT_RESOURCES
|
66 |
|
|
|
67 |
|
|
#define FTC_FAILED_TO_COMPLETE_COMMAND 20 // cannot change, error code mapped from FT2232c classes
|
68 |
|
|
#define FTC_FAILED_TO_SYNCHRONIZE_DEVICE_MPSSE 21 // cannot change, error code mapped from FT2232c classes
|
69 |
|
|
#define FTC_INVALID_DEVICE_NAME_INDEX 22 // cannot change, error code mapped from FT2232c classes
|
70 |
|
|
#define FTC_NULL_DEVICE_NAME_BUFFER_POINTER 23 // cannot change, error code mapped from FT2232c classes
|
71 |
|
|
#define FTC_DEVICE_NAME_BUFFER_TOO_SMALL 24 // cannot change, error code mapped from FT2232c classes
|
72 |
|
|
#define FTC_INVALID_DEVICE_NAME 25 // cannot change, error code mapped from FT2232c classes
|
73 |
|
|
#define FTC_INVALID_LOCATION_ID 26 // cannot change, error code mapped from FT2232c classes
|
74 |
|
|
#define FTC_DEVICE_IN_USE 27 // cannot change, error code mapped from FT2232c classes
|
75 |
|
|
#define FTC_TOO_MANY_DEVICES 28 // cannot change, error code mapped from FT2232c classes
|
76 |
|
|
#define FTC_INVALID_CLOCK_DIVISOR 29
|
77 |
|
|
#define FTC_NULL_INPUT_OUTPUT_BUFFER_POINTER 30
|
78 |
|
|
#define FTC_INVALID_NUMBER_BITS 31
|
79 |
|
|
#define FTC_NULL_WRITE_DATA_BUFFER_POINTER 32
|
80 |
|
|
#define FTC_INVALID_NUMBER_BYTES 33
|
81 |
|
|
#define FTC_NUMBER_BYTES_TOO_SMALL 34
|
82 |
|
|
#define FTC_INVALID_TAP_CONTROLLER_STATE 35
|
83 |
|
|
#define FTC_NULL_READ_DATA_BUFFER_POINTER 36
|
84 |
|
|
#define FTC_COMMAND_SEQUENCE_BUFFER_FULL 37
|
85 |
|
|
#define FTC_NULL_READ_CMDS_DATA_BUFFER_POINTER 38
|
86 |
|
|
#define FTC_NO_COMMAND_SEQUENCE 39
|
87 |
|
|
#define FTC_NULL_DLL_VERSION_BUFFER_POINTER 40
|
88 |
|
|
#define FTC_DLL_VERSION_BUFFER_TOO_SMALL 41
|
89 |
|
|
#define FTC_NULL_LANGUAGE_CODE_BUFFER_POINTER 42
|
90 |
|
|
#define FTC_NULL_ERROR_MESSAGE_BUFFER_POINTER 43
|
91 |
|
|
#define FTC_ERROR_MESSAGE_BUFFER_TOO_SMALL 44
|
92 |
|
|
#define FTC_INVALID_LANGUAGE_CODE 45
|
93 |
|
|
#define FTC_INVALID_STATUS_CODE 46
|
94 |
|
|
|
95 |
|
|
#ifdef __cplusplus
|
96 |
|
|
extern "C" {
|
97 |
|
|
#endif
|
98 |
|
|
|
99 |
|
|
FTCJTAG_API
|
100 |
|
|
FTC_STATUS WINAPI JTAG_GetNumDevices(LPDWORD lpdwNumDevices);
|
101 |
|
|
|
102 |
|
|
FTCJTAG_API
|
103 |
|
|
FTC_STATUS WINAPI JTAG_GetDeviceNameLocID(DWORD dwDeviceNameIndex, LPSTR lpDeviceNameBuffer, DWORD dwBufferSize, LPDWORD lpdwLocationID);
|
104 |
|
|
|
105 |
|
|
FTCJTAG_API
|
106 |
|
|
FTC_STATUS WINAPI JTAG_OpenEx(LPSTR lpDeviceName, DWORD dwLocationID, FTC_HANDLE *pftHandle);
|
107 |
|
|
|
108 |
|
|
FTCJTAG_API
|
109 |
|
|
FTC_STATUS WINAPI JTAG_Open(FTC_HANDLE *pftHandle);
|
110 |
|
|
|
111 |
|
|
FTCJTAG_API
|
112 |
|
|
FTC_STATUS WINAPI JTAG_Close(FTC_HANDLE ftHandle);
|
113 |
|
|
|
114 |
|
|
FTCJTAG_API
|
115 |
|
|
FTC_STATUS WINAPI JTAG_InitDevice(FTC_HANDLE ftHandle, DWORD dwClockDivisor);
|
116 |
|
|
|
117 |
|
|
FTCJTAG_API
|
118 |
|
|
FTC_STATUS WINAPI JTAG_GetClock(DWORD dwClockDivisor, LPDWORD lpdwClockFrequencyHz);
|
119 |
|
|
|
120 |
|
|
FTCJTAG_API
|
121 |
|
|
FTC_STATUS WINAPI JTAG_SetClock(FTC_HANDLE ftHandle, DWORD dwClockDivisor, LPDWORD lpdwClockFrequencyHz);
|
122 |
|
|
|
123 |
|
|
FTCJTAG_API
|
124 |
|
|
FTC_STATUS WINAPI JTAG_SetLoopback(FTC_HANDLE ftHandle, BOOL bLoopbackState);
|
125 |
|
|
|
126 |
|
|
typedef struct Ft_Input_Output_Pins{
|
127 |
|
|
BOOL bPin1InputOutputState;
|
128 |
|
|
BOOL bPin1LowHighState;
|
129 |
|
|
BOOL bPin2InputOutputState;
|
130 |
|
|
BOOL bPin2LowHighState;
|
131 |
|
|
BOOL bPin3InputOutputState;
|
132 |
|
|
BOOL bPin3LowHighState;
|
133 |
|
|
BOOL bPin4InputOutputState;
|
134 |
|
|
BOOL bPin4LowHighState;
|
135 |
|
|
}FTC_INPUT_OUTPUT_PINS, *PFTC_INPUT_OUTPUT_PINS;
|
136 |
|
|
|
137 |
|
|
FTCJTAG_API
|
138 |
|
|
FTC_STATUS WINAPI JTAG_SetGPIOs(FTC_HANDLE ftHandle, BOOL bControlLowInputOutputPins,
|
139 |
|
|
PFTC_INPUT_OUTPUT_PINS pLowInputOutputPinsData,
|
140 |
|
|
BOOL bControlHighInputOutputPins,
|
141 |
|
|
PFTC_INPUT_OUTPUT_PINS pHighInputOutputPinsData);
|
142 |
|
|
|
143 |
|
|
typedef struct Ft_Low_High_Pins{
|
144 |
|
|
BOOL bPin1LowHighState;
|
145 |
|
|
BOOL bPin2LowHighState;
|
146 |
|
|
BOOL bPin3LowHighState;
|
147 |
|
|
BOOL bPin4LowHighState;
|
148 |
|
|
}FTC_LOW_HIGH_PINS, *PFTC_LOW_HIGH_PINS;
|
149 |
|
|
|
150 |
|
|
FTCJTAG_API
|
151 |
|
|
FTC_STATUS WINAPI JTAG_GetGPIOs(FTC_HANDLE ftHandle, BOOL bControlLowInputOutputPins,
|
152 |
|
|
PFTC_LOW_HIGH_PINS pLowPinsInputData,
|
153 |
|
|
BOOL bControlHighInputOutputPins,
|
154 |
|
|
PFTC_LOW_HIGH_PINS pHighPinsInputData);
|
155 |
|
|
|
156 |
|
|
#define MAX_WRITE_DATA_BYTES_BUFFER_SIZE 65536 // 64k bytes
|
157 |
|
|
|
158 |
|
|
typedef BYTE WriteDataByteBuffer[MAX_WRITE_DATA_BYTES_BUFFER_SIZE];
|
159 |
|
|
typedef WriteDataByteBuffer *PWriteDataByteBuffer;
|
160 |
|
|
|
161 |
|
|
FTCJTAG_API
|
162 |
|
|
FTC_STATUS WINAPI JTAG_Write(FTC_HANDLE ftHandle, BOOL bInstructionTestData, DWORD dwNumBitsToWrite,
|
163 |
|
|
PWriteDataByteBuffer pWriteDataBuffer, DWORD dwNumBytesToWrite,
|
164 |
|
|
DWORD dwTapControllerState);
|
165 |
|
|
|
166 |
|
|
#define MAX_READ_DATA_BYTES_BUFFER_SIZE 65536 // 64k bytes
|
167 |
|
|
|
168 |
|
|
typedef BYTE ReadDataByteBuffer[MAX_READ_DATA_BYTES_BUFFER_SIZE];
|
169 |
|
|
typedef ReadDataByteBuffer *PReadDataByteBuffer;
|
170 |
|
|
|
171 |
|
|
FTCJTAG_API
|
172 |
|
|
FTC_STATUS WINAPI JTAG_Read(FTC_HANDLE ftHandle, BOOL bInstructionTestData, DWORD dwNumBitsToRead,
|
173 |
|
|
PReadDataByteBuffer pReadDataBuffer, LPDWORD lpdwNumBytesReturned,
|
174 |
|
|
DWORD dwTapControllerState);
|
175 |
|
|
|
176 |
|
|
FTCJTAG_API
|
177 |
|
|
FTC_STATUS WINAPI JTAG_WriteRead(FTC_HANDLE ftHandle, BOOL bInstructionTestData, DWORD dwNumBitsToWriteRead,
|
178 |
|
|
PWriteDataByteBuffer pWriteDataBuffer, DWORD dwNumBytesToWrite,
|
179 |
|
|
PReadDataByteBuffer pReadDataBuffer, LPDWORD lpdwNumBytesReturned,
|
180 |
|
|
DWORD dwTapControllerState);
|
181 |
|
|
|
182 |
|
|
FTCJTAG_API
|
183 |
|
|
FTC_STATUS WINAPI JTAG_ClearCmdSequence(void);
|
184 |
|
|
|
185 |
|
|
FTCJTAG_API
|
186 |
|
|
FTC_STATUS WINAPI JTAG_AddWriteCmd(BOOL bInstructionTestData, DWORD dwNumBitsToWrite,
|
187 |
|
|
PWriteDataByteBuffer pWriteDataBuffer, DWORD dwNumBytesToWrite,
|
188 |
|
|
DWORD dwTapControllerState);
|
189 |
|
|
|
190 |
|
|
FTCJTAG_API
|
191 |
|
|
FTC_STATUS WINAPI JTAG_AddReadCmd(BOOL bInstructionTestData, DWORD dwNumBitsToRead, DWORD dwTapControllerState);
|
192 |
|
|
|
193 |
|
|
FTCJTAG_API
|
194 |
|
|
FTC_STATUS WINAPI JTAG_AddWriteReadCmd(BOOL bInstructionTestData, DWORD dwNumBitsToWriteRead,
|
195 |
|
|
PWriteDataByteBuffer pWriteDataBuffer, DWORD dwNumBytesToWrite,
|
196 |
|
|
DWORD dwTapControllerState);
|
197 |
|
|
|
198 |
|
|
#define MAX_READ_CMDS_DATA_BYTES_BUFFER_SIZE 131071 // 128K bytes
|
199 |
|
|
|
200 |
|
|
typedef BYTE ReadCmdSequenceDataByteBuffer[MAX_READ_CMDS_DATA_BYTES_BUFFER_SIZE];
|
201 |
|
|
typedef ReadCmdSequenceDataByteBuffer *PReadCmdSequenceDataByteBuffer;
|
202 |
|
|
|
203 |
|
|
FTCJTAG_API
|
204 |
|
|
FTC_STATUS WINAPI JTAG_ClearDeviceCmdSequence(FTC_HANDLE ftHandle);
|
205 |
|
|
|
206 |
|
|
FTCJTAG_API
|
207 |
|
|
FTC_STATUS WINAPI JTAG_AddDeviceWriteCmd(FTC_HANDLE ftHandle, BOOL bInstructionTestData, DWORD dwNumBitsToWrite,
|
208 |
|
|
PWriteDataByteBuffer pWriteDataBuffer, DWORD dwNumBytesToWrite,
|
209 |
|
|
DWORD dwTapControllerState);
|
210 |
|
|
|
211 |
|
|
FTCJTAG_API
|
212 |
|
|
FTC_STATUS WINAPI JTAG_AddDeviceReadCmd(FTC_HANDLE ftHandle, BOOL bInstructionTestData, DWORD dwNumBitsToRead, DWORD dwTapControllerState);
|
213 |
|
|
|
214 |
|
|
FTCJTAG_API
|
215 |
|
|
FTC_STATUS WINAPI JTAG_AddDeviceWriteReadCmd(FTC_HANDLE ftHandle, BOOL bInstructionTestData, DWORD dwNumBitsToWriteRead,
|
216 |
|
|
PWriteDataByteBuffer pWriteDataBuffer, DWORD dwNumBytesToWrite,
|
217 |
|
|
DWORD dwTapControllerState);
|
218 |
|
|
|
219 |
|
|
FTCJTAG_API
|
220 |
|
|
FTC_STATUS WINAPI JTAG_ExecuteCmdSequence(FTC_HANDLE ftHandle, PReadCmdSequenceDataByteBuffer pReadCmdSequenceDataBuffer,
|
221 |
|
|
LPDWORD lpdwNumBytesReturned);
|
222 |
|
|
|
223 |
|
|
FTCJTAG_API
|
224 |
|
|
FTC_STATUS WINAPI JTAG_GetDllVersion(LPSTR lpDllVersionBuffer, DWORD dwBufferSize);
|
225 |
|
|
|
226 |
|
|
FTCJTAG_API
|
227 |
|
|
FTC_STATUS WINAPI JTAG_GetErrorCodeString(LPSTR lpLanguage, FTC_STATUS StatusCode,
|
228 |
|
|
LPSTR lpErrorMessageBuffer, DWORD dwBufferSize);
|
229 |
|
|
|
230 |
|
|
|
231 |
|
|
#ifdef __cplusplus
|
232 |
|
|
}
|
233 |
|
|
#endif
|
234 |
|
|
|
235 |
|
|
|
236 |
|
|
#endif /* win_FTCJTAG_H */
|