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