aboutsummaryrefslogtreecommitdiff
path: root/busdevice.c
diff options
context:
space:
mode:
Diffstat (limited to 'busdevice.c')
-rw-r--r--busdevice.c70
1 files changed, 55 insertions, 15 deletions
diff --git a/busdevice.c b/busdevice.c
index 4bc0ee0..eff5ccc 100644
--- a/busdevice.c
+++ b/busdevice.c
@@ -2,6 +2,7 @@
#include "pcserialport.h"
#include "tcpclient.h"
+#include "drivers/ftdi_d2xx/sm_d2xx.h"
#include <string.h>
#include <errno.h>
@@ -207,8 +208,21 @@ smbusdevicehandle smBDOpen( const char *devicename )
BusDevice[handle].bdType=BD_TCP;
BusDevice[handle].txBufferUsed=0;
}
+#ifdef FTDI_D2XX_SUPPORT
+ else if (strncmp(devicename,"FTDI",4) == 0)//starts with FTDI. Full name is FTDIn where n=index starting from 0.
+ {
+ BusDevice[handle].comPort=d2xxPortOpen( devicename, SMBusBaudrate );
+ if( BusDevice[handle].comPort == -1 )
+ {
+ return -1; //failed to open
+ }
+ BusDevice[handle].bdType=BD_FTDI;
+ BusDevice[handle].txBufferUsed=0;
+ }
+#endif
else//no other bus types supproted yet
{
+ smDebug( -1, Low, "smBDOpen device name argument syntax didn't match any supported driver port name");
return -1;
}
@@ -243,8 +257,16 @@ smbool smBDClose( const smbusdevicehandle handle )
BusDevice[handle].opened=smfalse;
return smtrue;
}
+#ifdef FTDI_D2XX_SUPPORT
+ else if( BusDevice[handle].bdType==BD_FTDI )
+ {
+ d2xxPortClose( BusDevice[handle].comPort );
+ BusDevice[handle].opened=smfalse;
+ return smtrue;
+ }
+#endif
- return smfalse;
+ return smfalse;
}
@@ -257,20 +279,15 @@ smbool smBDWrite(const smbusdevicehandle handle, const smuint8 byte )
//check if handle valid & open
if( smIsBDHandleOpen(handle)==smfalse ) return smfalse;
- if( BusDevice[handle].bdType==BD_RS || BusDevice[handle].bdType==BD_TCP )
- {
- if(BusDevice[handle].txBufferUsed<TANSMIT_BUFFER_LENGTH)
- {
- //append to buffer
- BusDevice[handle].txBuffer[BusDevice[handle].txBufferUsed]=byte;
- BusDevice[handle].txBufferUsed++;
- return smtrue;
- }
- else
- return smfalse;
- }
+ if(BusDevice[handle].txBufferUsed<TANSMIT_BUFFER_LENGTH)
+ {
+ //append to buffer
+ BusDevice[handle].txBuffer[BusDevice[handle].txBufferUsed]=byte;
+ BusDevice[handle].txBufferUsed++;
+ return smtrue;
+ }
- return smfalse;
+ return smfalse;
}
smbool smBDTransmit(const smbusdevicehandle handle)
@@ -304,6 +321,21 @@ smbool smBDTransmit(const smbusdevicehandle handle)
return smfalse;
}
}
+#ifdef FTDI_D2XX_SUPPORT
+ else if( BusDevice[handle].bdType==BD_FTDI )
+ {
+ if(d2xxPortWriteBuffer(BusDevice[handle].comPort,BusDevice[handle].txBuffer, BusDevice[handle].txBufferUsed)==BusDevice[handle].txBufferUsed)
+ {
+ BusDevice[handle].txBufferUsed=0;
+ return smtrue;
+ }
+ else
+ {
+ BusDevice[handle].txBufferUsed=0;
+ return smfalse;
+ }
+ }
+#endif
return smfalse;
}
@@ -329,7 +361,15 @@ smbool smBDRead( const smbusdevicehandle handle, smuint8 *byte )
if( n!=1 ) return smfalse;
else return smtrue;
}
-
+#ifdef FTDI_D2XX_SUPPORT
+ else if( BusDevice[handle].bdType==BD_FTDI )
+ {
+ int n;
+ n=d2xxPortRead(BusDevice[handle].comPort, byte, 1);
+ if( n!=1 ) return smfalse;
+ else return smtrue;
+ }
+#endif
return smfalse;
}