While working with the FTDI MPSSE library to create an SPI interface in MATLAB, I encountered a common issue when calling the ‘SPI_IsBusy’ function. The challenge arose because the function expects a pointer to a boolean (bool*) as an argument, which creates an issue since MATLAB’s ‘calllib’ function does not support the C bool data type directly. Passing a ‘boolean’ pointer from MATLAB results in errors or unexpected behaviour due to the mismatch between MATLAB’s data types and those expected by the external C library.
This limitation can be worked around by leveraging MATLAB’s ‘lib.pointer’ class with a ‘uint8Ptr’ data type. By initializing a ‘lib.pointer’ of type 'uint8Ptr' with a value of 0 (representing false), the pointer can be passed to the ‘SPI_IsBusy’ function. The following code snippet can help you achieve the same:
busyPtr = libpointer('uint8Ptr', uint8(0));
status = calllib('libMPSSE', 'SPI_IsBusy', handle, busyPtr);
For more detailed information on working with pointer arguments in MATLAB when calling external C libraries, you refer to the official MathWorks documentation here:
- https://www.mathworks.com/help/matlab/ref/lib.pointer-class.html
- https://www.mathworks.com/help/matlab/matlab_external/working-with-pointers.html
I hope this helps!