Page 1 of 1

How do I use commands in .dylib file

Posted: Sun Mar 18, 2012 1:00 pm
by Simon Knight
Hi,
I would like to communicate with a FTDI module that I own. FTDI provide what they call a library, which is a file that ends with the extension .dylib. How do I access the commands contained in the file from within a Livecode application?

Having read the guide and the tutorials I am left with the sinking feeling that I will have to have the code recompiled into a Livecode external - is this the case?

Details of the device I am attempting to use may be found here : http://www.ftdichip.com/Products/ICs/FT2232H.htm
and the following is from the FTDI help file :
Installation

Installing the library is a relatively simple operation which involves copying a file and making a symbolic link.
Use the following steps to install (these assume you have copied all of the distribution files to the desktop):

1. Open a Terminal window (Finder->Go->Utilities->Terminal).
2. If the /usr/local/lib directory does not exist, create it (sudo mkdir /usr/local/lib)
3. if the /usr/local/include directory does not exist, create it (sudo mkdir /usr/local/include)
4. Copy the dylib file to /usr/local/lib (sudo cp Desktop/D2XX/bin/libftd2xx.1.1.0.dylib /usr/local/lib/libftd2xx.1.1.0.dylib)
5. Make a symbolic link (sudo ln -sf /usr/local/lib/libftd2xx.1.1.0.dylib /usr/local/lib/libftd2xx.dylib)
6. Copy the D2XX include file (sudo cp Desktop/D2XX/Samples/ftd2xx.h /usr/local/include/ftd2xx.h
7. Copy the WinTypes include file (sudo cp Desktop/D2XX/Samples/WinTypes.h /usr/local/include/WinTypes.h)
8. You have now successfully installed the D2XX library.
Thanks in advance.

Simon

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 4:29 am
by mwieder
Having read the guide and the tutorials I am left with the sinking feeling that I will have to have the code recompiled into a Livecode external - is this the case?
Looks that way. Or more correctly, you'd have to create a LiveCode external which would be a wrapper around the library calls. The only examples I could see on the web site are for Windows. I don't know whether you're on linux or OSX... does this lesson help any?

http://lessons.runrev.com/s/lessons/m/4 ... ib-library

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 10:20 am
by Simon Knight
Thanks for the reply and the link to the lesson - I understood step 1 :wink: but then it was mostly double dutch. I realise that I am on a steep learning curve. I am one of the Livecode users who took one look at the "hello world" tutorial in "C" with its braces and "includes" and thought yuk - I'll buy Livecode!

Understanding the terminology is a challenge.

I expanded my research to include DLLs as there seems to be more written about them than Apple's dylibs files. I seem to have three options :

1) Give up !

2) Re-write the dylib file into the "externals" format that Livecode understands. - This is hard work especially if the source code is unavailable (ok impossible)

3) Write the wrapper external that you describe. Is the role of such a wrapper external "just" provide a number of function calls that when called, by a livecode stack, just pass the call to the vendor supplied dylib/dll - is this what is meant by a wrapper?

sorry if these are dumb questions.

best wishes
Simon

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 11:14 am
by Mark
Hi Simon,

Dutch is my native language. Maybe I can help? ;-)

Can you point me to the examples/source code on the website?

Mark

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 5:34 pm
by mwieder
Dutch is my native language. Maybe I can help? ;-)
rotfl

Mark-

theperl example here http://www.ftdichip.com/Support/Softwar ... tforms.htm in testftdi_perl.zip looks pretty straightforward. There seem to be only five functions in the library, and creating the LC glue for them shouldn't be a big deal.

Simon-

Again, what platform are you on? The external library to wrap around the FTDI library calls (yes, you're correct about the definition of wrapper) can not be cross-platform, so it makes a difference.

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 5:43 pm
by Simon Knight
Hi Mark,

At present I'm on a Livecode "Externals" crash course. The link that mweider listed lost me on step two. I have no understanding of the foundations of using the "Externals API". However, I have just watched a talk given at RevLive09 about the new Externals API which demonstrated how to code simple functions but unfortunately did not explain how to set up to create an external i.e. where do I write my C or C++ code - I'm hoping that other tutorials will explain. The presentation was given on a mac, but no mention was made of xcode.

The other part I am unclear on is how do I include or access a 3rd party dynamic library such as the one I linked to in my first post. Also why is the location of the file so important?

I was just about to post and I found the next reply from mwieder:

I am using an Apple but would probably want to use a PC version of any application some time in the future.

best wishes

Simon

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 5:54 pm
by Simon Knight
I just found the following thread : http://forums.runrev.com/viewtopic.php?t=8967&p=48482

Perhaps I should not be looking at the RevLive09 lectures. Have / were the new externals API introduced in Livecode v4.x ?

best wishes

Simon

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 5:58 pm
by mwieder
Perhaps I should not be looking at the RevLive09 lectures. Have / were the new externals API introduced in Livecode v4.x ?
Sadly, not yet. We're still waiting.

But I think there's better news. The FTDI devices have drivers for various operating systems that make the device appear as a serial port. That way you can just talk to it and don't need an external library.

http://www.ftdichip.com/Drivers/VCP.htm
http://www.ftdichip.com/Support/Documen ... Guides.htm

Re: How do I use commands in .dylib file

Posted: Mon Mar 19, 2012 6:38 pm
by Simon Knight
The problem with using the virtual Comm port is that not all the functions of the card are made available via the port (so I believe).

I have just had a look at the programmers guide and there are around 80 odd functions that the D2XX library provides. I also had a peek at the pearl code example :

Code: Select all

#!/usr/bin/perl
# Demonstrate direct io control using ftd2xx.dll
use strict;
use Win32::API;
use Carp;
use warnings;

Win32::API->Import( 'ftd2xx', 'ULONG FT_Open(ULONG FT_Open(int iDevice, LPHANDLE handle)');
Win32::API->Import( 'ftd2xx', 'ULONG FT_SetBitMode(HANDLE handle, UCHAR mask, UCHAR mode)');
Win32::API->Import( 'ftd2xx', 'ULONG FT_Read(HANDLE handle, LPCTSTR Buffer, DWORD BytesToRead, LPDWORD BytesRead)');
Win32::API->Import( 'ftd2xx', 'ULONG FT_Write(HANDLE handle, LPCTSTR Buffer, DWORD BytesToWrite, LPDWORD BytesWritten)');
Win32::API->Import( 'ftd2xx', 'ULONG FT_Close(HANDLE handle)');
I am curious of how the Win32::API->Import call is doing. Is each ftd2xx function an atomic piece of machine code that is identified and then loaded into memory where it is accessed by the handle?

Simon