Implement ftd2xx functions needed by mprog
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Mon Jul 20 07:24:06 CDT 2009
---
dlls/ftd2xx/ftd2xx.spec | 14 ++--
dlls/ftd2xx/ftd2xx_main.c | 152 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 159 insertions(+), 7 deletions(-)
diff --git a/dlls/ftd2xx/ftd2xx.spec b/dlls/ftd2xx/ftd2xx.spec
index f12e880..f38b0d5 100644
--- a/dlls/ftd2xx/ftd2xx.spec
+++ b/dlls/ftd2xx/ftd2xx.spec
@@ -1,5 +1,5 @@
-@ stub FT_Open
-@ stub FT_Close
+@ stdcall FT_Open(long ptr) FTD2XX_FT_Open
+@ stdcall FT_Close(long) FTD2XX_FT_Close
@ stub FT_Read
@ stub FT_Write
@ stub FT_IoCtl
@@ -25,15 +25,15 @@
@ stub FT_WaitOnMask
@ stub FT_SetDivisor
@ stub FT_OpenEx
-@ stub FT_ListDevices
+@ stdcall FT_ListDevices(ptr ptr long) FTD2XX_FT_ListDevices
@ stub FT_SetLatencyTimer
@ stub FT_GetLatencyTimer
@ stub FT_SetBitMode
@ stub FT_GetBitMode
@ stub FT_SetUSBParameters
-@ stub FT_EraseEE
-@ stub FT_ReadEE
-@ stub FT_WriteEE
+@ stdcall FT_EraseEE(long) FTD2XX_FT_EraseEE
+@ stdcall FT_ReadEE(long long ptr) FTD2XX_FT_ReadEE
+@ stdcall FT_WriteEE(long long long) FTD2XX_FT_WriteEE
@ stub FT_EE_Program
@ stub FT_EE_Read
@ stub FT_EE_UARead
@@ -58,7 +58,7 @@
@ stub FT_W32_SetCommTimeouts
@ stub FT_W32_SetupComm
@ stub FT_W32_WaitCommEvent
-@ stub FT_GetDeviceInfo
+@ stdcall FT_GetDeviceInfo(long ptr ptr ptr ptr ptr) FTD2XX_FT_GetDeviceInfo
@ stub FT_W32_CancelIo
@ stub FT_StopInTask
@ stub FT_RestartInTask
diff --git a/dlls/ftd2xx/ftd2xx_main.c b/dlls/ftd2xx/ftd2xx_main.c
index 148fd04..5c71dd6 100644
--- a/dlls/ftd2xx/ftd2xx_main.c
+++ b/dlls/ftd2xx/ftd2xx_main.c
@@ -47,3 +47,155 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
return TRUE;
}
+typedef DWORD *FT_HANDLE;
+typedef ULONG FT_STATUS;
+
+/* Device status */
+
+enum {
+ FT_OK,
+ FT_INVALID_HANDLE,
+ FT_DEVICE_NOT_FOUND,
+ FT_DEVICE_NOT_OPENED,
+ FT_IO_ERROR,
+ FT_INSUFFICIENT_RESOURCES,
+ FT_INVALID_PARAMETER,
+ FT_INVALID_BAUD_RATE,
+ FT_DEVICE_NOT_OPENED_FOR_ERASE,
+ FT_DEVICE_NOT_OPENED_FOR_WRITE,
+ FT_FAILED_TO_WRITE_DEVICE,
+ FT_EEPROM_READ_FAILED,
+ FT_EEPROM_WRITE_FAILED,
+ FT_EEPROM_ERASE_FAILED,
+ FT_EEPROM_NOT_PRESENT,
+ FT_EEPROM_NOT_PROGRAMMED,
+ FT_INVALID_ARGS,
+ FT_NOT_SUPPORTED,
+ FT_OTHER_ERROR
+};
+typedef ULONG FT_DEVICE;
+
+enum {
+ FT_DEVICE_BM,
+ FT_DEVICE_AM,
+ FT_DEVICE_100AX,
+ FT_DEVICE_UNKNOWN,
+ FT_DEVICE_2232C,
+ FT_DEVICE_232R,
+ FT_DEVICE_2232H,
+ FT_DEVICE_4232H
+ };
+
+
+extern FT_STATUS FT_ListDevices(PVOID, PVOID, DWORD);
+extern FT_STATUS FT_Open(int, FT_HANDLE *);
+extern FT_STATUS FT_Close(FT_HANDLE );
+extern FT_STATUS FT_ReadEE(FT_HANDLE, DWORD, LPWORD);
+extern FT_STATUS FT_GetDeviceInfo(FT_HANDLE, FT_DEVICE *, LPDWORD, PCHAR, PCHAR, LPVOID);
+extern FT_STATUS FT_WriteEE(FT_HANDLE, DWORD, WORD);
+extern FT_STATUS FT_EraseEE(FT_HANDLE);
+
+const char * res2string(FT_STATUS res )
+{
+ switch (res)
+ {
+ case FT_OK: return "FT_OK";
+ case FT_INVALID_HANDLE: return "FT_INVALID_HANDLE";
+ case FT_DEVICE_NOT_FOUND: return "FT_DEVICE_NOT_FOUND";
+ case FT_DEVICE_NOT_OPENED: return "FT_DEVICE_NOT_OPENED";
+ case FT_IO_ERROR: return "FT_IO_ERROR";
+ case FT_INSUFFICIENT_RESOURCES: return "FT_INSUFFICIENT_RESOURCES";
+ case FT_INVALID_PARAMETER: return "FT_INVALID_PARAMETER";
+ case FT_INVALID_BAUD_RATE: return "FT_INVALID_BAUD_RATE";
+ case FT_DEVICE_NOT_OPENED_FOR_ERASE: return "FT_DEVICE_NOT_OPENED_FOR_ERASE";
+ case FT_FAILED_TO_WRITE_DEVICE: return "FT_FAILED_TO_WRITE_DEVICE";
+ case FT_EEPROM_READ_FAILED: return "FT_EEPROM_READ_FAILED";
+ case FT_EEPROM_WRITE_FAILED: return "FT_EEPROM_WRITE_FAILED";
+ case FT_EEPROM_ERASE_FAILED: return "FT_EEPROM_ERASE_FAILED";
+ case FT_EEPROM_NOT_PRESENT: return "FT_EEPROM_NOT_PRESENT";
+ case FT_EEPROM_NOT_PROGRAMMED: return "FT_EEPROM_NOT_PROGRAMMED";
+ case FT_INVALID_ARGS: return "FT_INVALID_ARGS";
+ case FT_NOT_SUPPORTED: return "FT_NOT_SUPPORTED";
+ case FT_OTHER_ERROR: return "FT_OTHER_ERROR";
+ default: return "Unknown";
+ }
+}
+
+FT_STATUS WINAPI FTD2XX_FT_ListDevices(
+ PVOID pArg1,
+ PVOID pArg2,
+ DWORD Flags
+ )
+{
+ FT_STATUS res = FT_ListDevices(pArg1, pArg2, Flags);
+ TRACE("res %s\n", res2string(res));
+ return res;
+}
+FT_STATUS WINAPI FTD2XX_FT_Open(
+ int deviceNumber,
+ FT_HANDLE *pHandle
+ )
+{
+ FT_STATUS res = FT_Open(deviceNumber, pHandle);
+ TRACE("res %s\n", res2string(res));
+ return res;
+}
+
+FT_STATUS WINAPI FTD2XX_FT_Close(
+ FT_HANDLE ftHandle
+ )
+{
+ FT_STATUS res = FT_Close(ftHandle);
+ TRACE("res %s\n", res2string(res));
+ return res;
+}
+
+FT_STATUS WINAPI FTD2XX_FT_ReadEE
+(
+ FT_HANDLE ftHandle,
+ DWORD dwWordOffset,
+ LPWORD lpwValue
+ )
+{
+ FT_STATUS res = FT_ReadEE(ftHandle, dwWordOffset, lpwValue);
+ TRACE("res %s pos 0x%04x value 0x%04x\n", res2string(res), dwWordOffset, *lpwValue);
+ return res;
+}
+
+FT_STATUS WINAPI FTD2XX_FT_GetDeviceInfo
+(
+ FT_HANDLE ftHandle,
+ FT_DEVICE *lpftDevice,
+ LPDWORD lpdwID,
+ PCHAR SerialNumber,
+ PCHAR Description,
+ LPVOID Dummy
+ )
+{
+ FT_STATUS res = FT_GetDeviceInfo(ftHandle, lpftDevice, lpdwID, SerialNumber, Description, Dummy);
+ TRACE("res %s\n", res2string(res));
+ return res;
+}
+
+FT_STATUS WINAPI FTD2XX_FT_WriteEE
+(
+ FT_HANDLE ftHandle,
+ DWORD dwWordOffset,
+ WORD wValue
+ )
+{
+ FT_STATUS res = FT_WriteEE(ftHandle, dwWordOffset, wValue);
+ TRACE("res %s pos 0x%04x value 0x%04x\n", res2string(res), dwWordOffset, wValue);
+ return res;
+}
+
+FT_STATUS WINAPI FTD2XX_FT_EraseEE
+(
+ FT_HANDLE ftHandle
+ )
+{
+ FT_STATUS res = FT_EraseEE(ftHandle);
+ TRACE("res %s\n", res2string(res));
+ return res;
+}
+
--
1.6.0.2
More information about the wine-patches
mailing list