How to initialize Pwork in TLC file?
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I am trying to use pwork vector as a way to store a pointer to a dll that I am loading. However, I also have a tlc file which I need to ( I think) incorporate this pwork vector somehow. I couldn't find much documentation for how to use pwork in tlc code, and would really appreciate if someone could help out. I've tried what I have below and it doesn't compile.
Here is the tlc code excerpt (the Pword stuff is probably wrong):
%%Function: Start ========================================================
%function Start(block, system) Output
/* S-Function "WritetoVibrotactor_wrapper" Block: %<Name> */
%assign pxd = LibBlockDWorkAddr(DSTATE, "", "", 0)
%assign pwd = LibBlockPWork(PWORK, "", "", 0)
WritetoVibrotactor_Start_wrapper(%<pxd>,%<pwd>);
%%
%endfunctionThis is my s function code:
#define MDL_START
void mdlStart(SimStruct *S){
real_T *xD = ssGetDiscStates(S);
void *dllptr = LoadLibrary("TactorInterface.dll");
ssSetPWorkValue(S,0,dllptr);
WritetoVibrotactor_Start_wrapper(xD,dllptr);
}
Here is the wrapper code:
void WritetoVibrotactor_Start_wrapper(real_T *xD, void *hGetProcIDDLL)
{
// void * hGetProcIDDLL = LoadLibrary("TactorInterface.dll");
InitializeFn _InitializeTI = (InitializeFn)GetProcAddress(hGetProcIDDLL,"InitializeTI");
ConnectFn _Connect = (ConnectFn)GetProcAddress(hGetProcIDDLL, "Connect");
DiscoverFn _Discover = (DiscoverFn)GetProcAddress(hGetProcIDDLL, "Discover");
ChangeGainFn _ChangeGain = (ChangeGainFn)GetProcAddress(hGetProcIDDLL, "ChangeGain");
ChangeFreqFn _ChangeFreq = (ChangeFreqFn)GetProcAddress(hGetProcIDDLL, "ChangeFreq");
PulseFn _Pulse = (PulseFn)GetProcAddress(hGetProcIDDLL, "Pulse");
GetDiscoveredDeviceNameFn _GetDiscoveredDeviceName = (GetDiscoveredDeviceNameFn)GetProcAddress(hGetProcIDDLL, "GetDiscoveredDeviceName");
CloseFn _Close = (CloseFn)GetProcAddress(hGetProcIDDLL, "Close");
ShutdownFn _ShutdownTI = (ShutdownFn)GetProcAddress(hGetProcIDDLL, "ShutdownTI");
int initret = _InitializeTI();
int numdev = _Discover(3);
const char *dev = _GetDiscoveredDeviceName(0);
void *ptr = NULL;
xD[1] = _Connect(dev,1,ptr);
_ChangeFreq(0,1,1500,0);
_ChangeGain(0,1,100,0);
_Pulse(0,1,1000,0);
FreeLibrary(hGetProcIDDLL);
}
0 comentarios
Respuestas (0)
Ver también
Categorías
Más información sobre Image Processing Toolbox en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!