Updated so controlling devices under Max OS X works!

This commit is contained in:
Micke Prag 2008-07-22 12:46:40 +00:00
parent 0495a89b79
commit 2d2b290372
5 changed files with 1013 additions and 884 deletions

View file

@ -1,7 +1,6 @@
SET( tellusbd101_SRCS
Device.cpp
linux/Device.cpp
DeviceIkea.cpp
DeviceNexa.cpp
DeviceSartano.cpp
@ -10,20 +9,25 @@ SET( tellusbd101_SRCS
TellUsbD101.cpp
)
ADD_DEFINITIONS(
-DOS_LINUX
)
IF (APPLE)
SET( tellusbd101_SRCS
${tellusbd101_SRCS}
win/Device.cpp
settings/TelldusSettingsCoreFoundationPreferences.cpp
)
ADD_DEFINITIONS(
-D_MACOSX
)
ELSE ()
SET( tellusbd101_SRC
${tellusbd101_SRCS}
linux/Device.cpp
settings/TelldusSettingsConfuse.cpp
)
ADD_DEFINITIONS(
-D_LINUX
)
ENDIF ()
ADD_LIBRARY(tellusbd101 SHARED
@ -35,6 +39,7 @@ IF (APPLE)
TARGET_LINK_LIBRARIES(tellusbd101
${COREFOUNDATION_LIBRARY}
ftd2xx
)
ENDIF (APPLE)

View file

@ -41,7 +41,7 @@ Device* TelldusSettings::getDevice(int intDeviceId){
return NULL;
}
#ifndef _WINDOWS
#ifdef _LINUX
dev->setDevice( getSetting("deviceNode") );
#endif

View file

@ -1,11 +1,10 @@
#include "..\Device.h"
#include "../Device.h"
#include <string>
#include <sstream>
#include <vector>
#include <iostream>
#include <fstream>
#include "..\StdAfx.h"
#include "FTD2XX.H"
#include "ftd2xx.h"
int getDongleIndex();
@ -50,6 +49,7 @@ int getDongleIndex(){
try{
DWORD dwNumberOfDevices = 0;
FT_SetVIDPID(0x1781, 0x0C30);
ftStatus = FT_CreateDeviceInfoList(&dwNumberOfDevices);
if (ftStatus == FT_OK) {
for (int i = 0; i < (int)dwNumberOfDevices; i++) {

View file

@ -0,0 +1,87 @@
#ifndef __WINDOWS_TYPES__
#define __WINDOWS_TYPES__
#define MAX_NUM_DEVICES 50
#include <sys/time.h>
typedef unsigned long DWORD;
typedef unsigned long ULONG;
typedef unsigned short USHORT;
typedef short SHORT;
typedef unsigned char UCHAR;
typedef unsigned short WORD;
typedef unsigned char BYTE;
typedef unsigned char *LPBYTE;
typedef int BOOL;
typedef char BOOLEAN;
typedef char CHAR;
typedef int *LPBOOL;
typedef unsigned char *PUCHAR;
typedef const char *LPCSTR;
typedef char *PCHAR;
typedef void *PVOID;
typedef void *HANDLE;
typedef long LONG;
typedef int INT;
typedef unsigned int UINT;
typedef char *LPSTR;
typedef char *LPTSTR;
typedef DWORD *LPDWORD;
typedef WORD *LPWORD;
typedef ULONG *PULONG;
typedef PVOID LPVOID;
typedef void VOID;
typedef unsigned long long int ULONGLONG;
typedef struct _OVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;
typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength;
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES , *LPSECURITY_ATTRIBUTES;
typedef struct timeval SYSTEMTIME;
typedef struct timeval FILETIME;
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
//
// Modem Status Flags
//
#define MS_CTS_ON ((DWORD)0x0010)
#define MS_DSR_ON ((DWORD)0x0020)
#define MS_RING_ON ((DWORD)0x0040)
#define MS_RLSD_ON ((DWORD)0x0080)
//
// Error Flags
//
#define CE_RXOVER 0x0001 // Receive Queue overflow
#define CE_OVERRUN 0x0002 // Receive Overrun Error
#define CE_RXPARITY 0x0004 // Receive Parity Error
#define CE_FRAME 0x0008 // Receive Framing error
#define CE_BREAK 0x0010 // Break Detected
#define CE_TXFULL 0x0100 // TX Queue is full
#define CE_PTO 0x0200 // LPTx Timeout
#define CE_IOE 0x0400 // LPTx I/O Error
#define CE_DNS 0x0800 // LPTx Device not selected
#define CE_OOP 0x1000 // LPTx Out-Of-Paper
#define CE_MODE 0x8000 // Requested mode unsupported
#ifndef INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE 0xFFFFFFFF
#endif
#endif

View file

@ -1,6 +1,6 @@
/*++
Copyright (c) 2001-2005 Future Technology Devices International Ltd.
Copyright (c) 2001-2003 Future Technology Devices International Ltd.
Module Name:
@ -8,7 +8,7 @@ Module Name:
Abstract:
Native USB device driver for FTDI FT8U232/245
Native USB interface for FTDI FT8U232/245/2232C
FTD2XX library definitions
Environment:
@ -23,15 +23,8 @@ Revision History:
12/06/03 awm Added FT_StopInTask and FT_RestartInTask.
18/09/03 awm Added FT_SetResetPipeRetryCount.
10/10/03 awm Added FT_ResetPort.
23/01/04 awm Added support for open-by-location.
16/03/04 awm Added support for FT2232C.
23/09/04 awm Added support for FT232R.
20/10/04 awm Added FT_CyclePort.
18/01/05 awm Added FT_DEVICE_LIST_INFO_NODE type.
11/02/05 awm Added LocId to FT_DEVICE_LIST_INFO_NODE.
25/08/05 awm Added FT_SetDeadmanTimeout.
02/12/05 awm Removed obsolete references.
05/12/05 awm Added FT_GetVersion, FT_GetVersionEx.
/03/04 st modified for linux users
12/10/04 st added FT_SetVIDPID
--*/
@ -40,6 +33,11 @@ Revision History:
#ifndef FTD2XX_H
#define FTD2XX_H
#ifndef _WINDOWS
#include <pthread.h>
#define WINAPI
#endif
// The following ifdef block is the standard way of creating macros
// which make exporting from a DLL simpler. All files within this DLL
// are compiled with the FTD2XX_EXPORTS symbol defined on the command line.
@ -54,8 +52,24 @@ Revision History:
#define FTD2XX_API __declspec(dllimport)
#endif
#ifndef _WINDOWS
#include "WinTypes.h"
#ifdef FTD2XX_API
#undef FTD2XX_API
#define FTD2XX_API
#endif
#endif
typedef struct _EVENT_HANDLE{
pthread_cond_t eCondVar;
pthread_mutex_t eMutex;
int iVar;
} EVENT_HANDLE;
typedef DWORD *FT_HANDLE;
//typedef unsigned int FT_HANDLE;
//typedef struct ftdi_device * FT_HANDLE;
typedef PVOID FT_HANDLE;
typedef ULONG FT_STATUS;
//
@ -69,7 +83,7 @@ enum {
FT_IO_ERROR,
FT_INSUFFICIENT_RESOURCES,
FT_INVALID_PARAMETER,
FT_INVALID_BAUD_RATE,
FT_INVALID_BAUD_RATE, //7
FT_DEVICE_NOT_OPENED_FOR_ERASE,
FT_DEVICE_NOT_OPENED_FOR_WRITE,
@ -93,7 +107,6 @@ enum {
#define FT_OPEN_BY_SERIAL_NUMBER 1
#define FT_OPEN_BY_DESCRIPTION 2
#define FT_OPEN_BY_LOCATION 4
//
// FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags
@ -195,14 +208,13 @@ enum {
FT_DEVICE_UNKNOWN,
FT_DEVICE_2232C,
FT_DEVICE_232R
};
};
#ifdef __cplusplus
extern "C" {
#endif
FTD2XX_API
FT_STATUS WINAPI FT_Open(
int deviceNumber,
@ -223,6 +235,18 @@ FT_STATUS WINAPI FT_ListDevices(
DWORD Flags
);
FTD2XX_API
FT_STATUS FT_SetVIDPID(
DWORD dwVID,
DWORD dwPID
);
FTD2XX_API
FT_STATUS FT_GetVIDPID(
DWORD * pdwVID,
DWORD * pdwPID
);
FTD2XX_API
FT_STATUS WINAPI FT_Close(
FT_HANDLE ftHandle
@ -484,10 +508,11 @@ typedef struct ft_program_data {
UCHAR Cbus3; // Cbus Mux control
UCHAR Cbus4; // Cbus Mux control
UCHAR RIsVCP; // non-zero if using VCP drivers
UCHAR RIsVCP; // zero if using VCP drivers
} FT_PROGRAM_DATA, *PFT_PROGRAM_DATA;
FTD2XX_API
FT_STATUS WINAPI FT_EE_Program(
FT_HANDLE ftHandle,
@ -497,7 +522,7 @@ FT_STATUS WINAPI FT_EE_Program(
FTD2XX_API
FT_STATUS WINAPI FT_EE_ProgramEx(
FT_HANDLE ftHandle,
PFT_PROGRAM_DATA pData,
PFT_PROGRAM_DATA lpData,
char *Manufacturer,
char *ManufacturerId,
char *Description,
@ -513,7 +538,7 @@ FT_STATUS WINAPI FT_EE_Read(
FTD2XX_API
FT_STATUS WINAPI FT_EE_ReadEx(
FT_HANDLE ftHandle,
PFT_PROGRAM_DATA pData,
PFT_PROGRAM_DATA lpData,
char *Manufacturer,
char *ManufacturerId,
char *Description,
@ -573,12 +598,6 @@ FT_STATUS WINAPI FT_SetUSBParameters(
ULONG ulOutTransferSize
);
FTD2XX_API
FT_STATUS WINAPI FT_SetDeadmanTimeout(
FT_HANDLE ftHandle,
ULONG ulDeadmanTimeout
);
FTD2XX_API
FT_STATUS WINAPI FT_GetDeviceInfo(
FT_HANDLE ftHandle,
@ -610,11 +629,6 @@ FT_STATUS WINAPI FT_ResetPort(
FT_HANDLE ftHandle
);
FTD2XX_API
FT_STATUS WINAPI FT_CyclePort(
FT_HANDLE ftHandle
);
//
// Win32-type functions
@ -808,7 +822,6 @@ BOOL WINAPI FT_W32_WaitCommEvent(
LPOVERLAPPED lpOverlapped
);
//
// Device information
//
@ -823,7 +836,6 @@ typedef struct _ft_device_list_info_node {
FT_HANDLE ftHandle;
} FT_DEVICE_LIST_INFO_NODE;
FTD2XX_API
FT_STATUS WINAPI FT_CreateDeviceInfoList(
LPDWORD lpdwNumDevs
@ -846,25 +858,45 @@ FT_STATUS WINAPI FT_GetDeviceInfoDetail(
LPVOID lpDescription,
FT_HANDLE *pftHandle
);
//
// Version information
// Events
//
FTD2XX_API
FT_STATUS WINAPI FT_GetDriverVersion(
FT_HANDLE ftHandle,
LPDWORD lpdwVersion
);
FTD2XX_API
FT_STATUS WINAPI FT_GetLibraryVersion(
LPDWORD lpdwVersion
);
#define EV_RXCHAR 0x0001 // Any Character received
#define EV_RXFLAG 0x0002 // Received certain character
#define EV_TXEMPTY 0x0004 // Transmitt Queue Empty
#define EV_CTS 0x0008 // CTS changed state
#define EV_DSR 0x0010 // DSR changed state
#define EV_RLSD 0x0020 // RLSD changed state
#define EV_BREAK 0x0040 // BREAK received
#define EV_ERR 0x0080 // Line status error occurred
#define EV_RING 0x0100 // Ring signal detected
#define EV_PERR 0x0200 // Printer error occured
#define EV_RX80FULL 0x0400 // Receive buffer is 80 percent full
#define EV_EVENT1 0x0800 // Provider specific event 1
#define EV_EVENT2 0x1000 // Provider specific event 2
//
// Escape Functions
//
#define SETXOFF 1 // Simulate XOFF received
#define SETXON 2 // Simulate XON received
#define SETRTS 3 // Set RTS high
#define CLRRTS 4 // Set RTS low
#define SETDTR 5 // Set DTR high
#define CLRDTR 6 // Set DTR low
#define RESETDEV 7 // Reset device if possible
#define SETBREAK 8 // Set the device break line.
#define CLRBREAK 9 // Clear the device break line.
//
// PURGE function flags.
//
#define PURGE_TXABORT 0x0001 // Kill the pending/current writes to the comm port.
#define PURGE_RXABORT 0x0002 // Kill the pending/current reads to the comm port.
#define PURGE_TXCLEAR 0x0004 // Kill the transmit queue if there.
#define PURGE_RXCLEAR 0x0008 // Kill the typeahead buffer if there.
#ifdef __cplusplus
}
@ -873,3 +905,8 @@ FT_STATUS WINAPI FT_GetLibraryVersion(
#endif /* FTD2XX_H */