ANTDKT3
hallo rolf, hallo LabVIEWforum,
wenn ich das richtig verstanden habe sollte das so laufen:
1.ich mache einen create user event --> übergebe die refnum meiner event funktion.
2. in meiner dll lege ich globale vars an z.b. für meinen char buffer.
3. in meiner event funktion kann ich dann mit postlvuserevent die daten an LabVIEW schicken.
4. die event funktion ist sogleich meine callback funktion - also übergebe ich die adresse an den aufrufer.
so habe ich das verstanden. nun - es funktioniert nicht, also muss ich das falsch verstanden haben. wichtig: laut herstellerbeschreibung sollte jedes mal, wenn die hw angesprochen wird automatisch die callbackfunktion und der buffer (von ant_assign*) genutzt werden.
tut mir leid, dass ich so lästig bin, aber ich kämpfe nun schon sehr lange mit diesem zeug herum und bin echt schon am verzweifeln. außerdem ist ant ja eine gute sache, und wenn das in LabVIEW funken würde wärs ja auch was...
bitte, helft mir - wenn mir das jemand erklären kann wäre ich sehr sehr sehr dankbar.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>// antwrapper.cpp : Definiert die exportierten Funktionen für die DLL-Anwendung.
//
#include "stdafx.h"
#include "stdio.h"
#include "extcode.h" //LabVIEW inlcude
//Typendifinitionen für die ANT Funktionen
typedef BOOL (*ptreventfunction)(LVUserEventRef*);
typedef BOOL (*ptrresponsefunction)(LVUserEventRef*);
typedef void (*ANT_RESPONSE_POINTER)(ptrresponsefunction, UCHAR*);
typedef void (*ANT_EVENT_POINTER)(UCHAR, ptreventfunction, UCHAR*);
//Zeiger auf die ANT_Funktionen definieren
static ANT_RESPONSE_POINTER ANT_AssignResponseFunction = NULL;
static ANT_EVENT_POINTER ANT_AssignChannelEventFunction = NULL;
//ANT Buffer
UCHAR aucResponseBuffer[10];
UCHAR aucChannelEventBuffer[10];
char eventbuffer[10];
void PopulateStringHandle(LStrHandle lvStringHandle,char* stringData);
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent);
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId);
static LVUserEventRef *eventref;
static LVUserEventRef *responseref;
extern "C" __declspec(dllexport) BOOL sendevent(LVUserEventRef *eventref)
{
strcpy((char*)&eventbuffer,(const char*)&aucChannelEventBuffer);
LStrHandle eventstringhandle;
//Allocate memory for a LabVIEW string handle using LabVIEW's
//memory manager functions.
eventstringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
PopulateStringHandle(eventstringhandle,(char*)&eventbuffer);
PostLVUserEvent(*eventref, (void *)&eventstringhandle);
return TRUE;
}
extern "C" __declspec(dllexport) BOOL sendresponse(LVUserEventRef *responseref)
{
LStrHandle responsestringhandle;
//Allocate memory for a LabVIEW string handle using LabVIEW's
//memory manager functions.
responsestringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
PopulateStringHandle(responsestringhandle,"Hallo");
PostLVUserEvent(*responseref, (void *)&responsestringhandle);
return TRUE;
}
extern "C" __declspec(dllexport) int ANT_DLL_Load(void)
{
HINSTANCE hANTdll = LoadLibraryA("ANT_DLL.dll");
if (hANTdll == NULL)
ANT_AssignResponseFunction = (ANT_RESPONSE_POINTER) GetProcAddress(hANTdll, "ANT_AssignResponseFunction");
ANT_AssignChannelEventFunction = (ANT_EVENT_POINTER) GetProcAddress(hANTdll, "ANT_AssignChannelEventFunction");
if (ANT_AssignResponseFunction == NULL)
return 0;
if (ANT_AssignChannelEventFunction == NULL)
return 0;
else
return 1;
}
/*//ChannelEventFunction
BOOL ANT_ChannelEventFunction(UCHAR ucChannel, UCHAR ucEvent)
{
LStrHandle eventstringhandle;
//Allocate memory for a LabVIEW string handle using LabVIEW's
//memory manager functions.
eventstringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
PopulateStringHandle(eventstringhandle,"Hallo");
PostLVUserEvent(*eventref, (void *)&eventstringhandle);
return TRUE;
}
//ResponseFunction
BOOL ANT_ResponseFunction(UCHAR ucChannel, UCHAR ucMsgId)
{
LStrHandle responsestringhandle;
//Allocate memory for a LabVIEW string handle using LabVIEW's
//memory manager functions.
responsestringhandle=(LStrHandle)DSNewHandle(sizeof(int32)+256*sizeof(uChar));
PopulateStringHandle(responsestringhandle,"Du Lulu");
PostLVUserEvent(*responseref, (void *)&responsestringhandle);
return TRUE;
}
*/
extern "C" __declspec(dllexport) int functioncaller(UCHAR antChannel)
{
if(ANT_AssignResponseFunction != NULL && ANT_AssignChannelEventFunction != NULL)
{
ANT_AssignResponseFunction(&sendresponse, aucResponseBuffer);
ANT_AssignChannelEventFunction(antChannel, &sendevent, aucChannelEventBuffer);
return 1;
}
return 0;
}
void PopulateStringHandle(LStrHandle lvStringHandle,char* stringData)
{
//Empties the buffer
memset(LStrBuf(*lvStringHandle),'',256);
//Fills the string buffer with stringData
sprintf((char*)LStrBuf(*lvStringHandle),"%s",stringData);
//Informs the LabVIEW string handle about the size of the size
LStrLen(*lvStringHandle)=strlen(stringData);
return;
}
</div>
|