From 0b624384cd52be20e61284551d832b499d7b7707 Mon Sep 17 00:00:00 2001 From: Jonathan McCrohan Date: Sat, 14 Apr 2012 12:56:48 +0100 Subject: Imported Upstream version 2.1.8.20120216 --- labview/phidget_labview.c | 429 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 429 insertions(+) create mode 100644 labview/phidget_labview.c (limited to 'labview/phidget_labview.c') diff --git a/labview/phidget_labview.c b/labview/phidget_labview.c new file mode 100644 index 0000000..380915b --- /dev/null +++ b/labview/phidget_labview.c @@ -0,0 +1,429 @@ +#include "stdafx.h" + +#include "cphidget.h" +#include "cphidgetmanager.h" +#include "cphidgetdictionary.h" +#include "cphidgetaccelerometer.h" +#include "cphidgetadvancedservo.h" +#include "cphidgetanalog.h" +#include "cphidgetbridge.h" +#include "cphidgetencoder.h" +#include "cphidgetfrequencycounter.h" +#include "cphidgetgps.h" +#include "cphidgetinterfacekit.h" +#include "cphidgetir.h" +#include "cphidgetmanager.h" +#include "cphidgetled.h" +#include "cphidgetmotorcontrol.h" +#include "cphidgetphsensor.h" +#include "cphidgetrfid.h" +#include "cphidgetservo.h" +#include "cphidgetspatial.h" +#include "cphidgetstepper.h" +#include "cphidgettemperaturesensor.h" +#include "cphidgettextlcd.h" +#include "cphidgettextled.h" +#include "cphidgetweightsensor.h" + +#include "csocket.h" + +#ifdef COMPILE_PHIDGETS_LABVIEW + +#include "phidget_labview.h" + +LV_CFHANDLE_0(, Attach, lvNothing) +LV_CFHANDLE_0(, Detach, lvNothing) +LV_CFHANDLE_0(, ServerConnect, lvNothing) +LV_CFHANDLE_0(, ServerDisconnect, lvNothing) +LV_CFHANDLE_BODY(, Error, lvError, void *userPtr, int val1, const char *val2) + data->val1 = val1; + data->val2=(LStrHandle)DSNewHandle(sizeof(int32)+255*sizeof(char)); + memset(LStrBuf(*data->val2),'\0',255); + snprintf((char*)LStrBuf(*data->val2),255,"%s",val2); + LStrLen(*data->val2)=strlen(val2); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val2); + DSDisposePtr(data); + return EPHIDGET_OK; +} + +LV_CFHANDLE_2(Accelerometer, AccelerationChange, lvIndexedDouble, int, double) + +LV_CFHANDLE_2(AdvancedServo, PositionChange, lvIndexedDouble, int, double) +LV_CFHANDLE_2(AdvancedServo, VelocityChange, lvIndexedDouble, int, double) +LV_CFHANDLE_2(AdvancedServo, CurrentChange, lvIndexedDouble, int, double) + +LV_CFHANDLE_2(Bridge, BridgeData, lvIndexedDouble, int, double) + +LV_CFHANDLE_2(Encoder, InputChange, lvIndexedInt32, int, int) +LV_CFHANDLE_3(Encoder, PositionChange, lvIndexedInt32Int32, int, int, int) + +LV_CFHANDLE_3(FrequencyCounter, Count, lvIndexedInt32Int32, int, int, int) + +LV_CFHANDLE_3(GPS, PositionChange, lvDoubleDoubleDouble, double, double, double) +LV_CFHANDLE_1(GPS, PositionFixStatusChange, lvInt32, int) + +LV_CFHANDLE_2(InterfaceKit, InputChange, lvIndexedInt32, int, int) +LV_CFHANDLE_2(InterfaceKit, OutputChange, lvIndexedInt32, int, int) +LV_CFHANDLE_2(InterfaceKit, SensorChange, lvIndexedInt32, int, int) + +LV_CFHANDLE_BODY(IR, Code, lvIRCode, void *userPtr, unsigned char *val1, int val2, int val3, int val4) + data->val1=(lvArrUInt8DH)DSNewHandle(sizeof(int32)+val2*sizeof(uInt8)); + (*(data->val1))->length = val2; + memcpy((*(data->val1))->data, val1, val2 * sizeof(uInt8)); + data->val2 = val3; + data->val3 = val4; + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} +LV_CFHANDLE_BODY(IR, RawData, lvInt32Array, void *userPtr, int *val1, int val2) + data->val1=(lvArrInt32DH)DSNewHandle(sizeof(int32)+val2*sizeof(int32)); + (*(data->val1))->length = val2; + memcpy((*(data->val1))->data, val1, val2 * sizeof(int32)); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} +LV_CFHANDLE_BODY(IR, Learn, lvIRLearn, void *userPtr, unsigned char *val1, int val2, CPhidgetIR_CodeInfoHandle val3) + data->val1=(lvArrUInt8DH)DSNewHandle(sizeof(int32)+val2*sizeof(uInt8)); + (*(data->val1))->length = val2; + memcpy((*(data->val1))->data, val1, val2 * sizeof(uInt8)); + data->val2 = *val3; + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} + +LV_CFHANDLE_2(MotorControl, InputChange, lvIndexedInt32, int, int) +LV_CFHANDLE_2(MotorControl, VelocityChange, lvIndexedDouble, int, double) +LV_CFHANDLE_2(MotorControl, CurrentChange, lvIndexedDouble, int, double) +LV_CFHANDLE_3(MotorControl, EncoderPositionChange, lvIndexedInt32Int32, int, int, int) +LV_CFHANDLE_2(MotorControl, EncoderPositionUpdate, lvIndexedInt32, int, int) +LV_CFHANDLE_2(MotorControl, BackEMFUpdate, lvIndexedDouble, int, double) +LV_CFHANDLE_2(MotorControl, SensorUpdate, lvIndexedInt32, int, int) +LV_CFHANDLE_2(MotorControl, CurrentUpdate, lvIndexedDouble, int, double) + +LV_CFHANDLE_1(PHSensor, PHChange, lvDouble, double) + +LV_CFHANDLE_2(RFID, OutputChange, lvIndexedInt32, int, int) +LV_CFHANDLE_BODY(RFID, Tag, lvUInt8Array, void *userPtr, unsigned char *val1) + data->val1=(lvArrUInt8DH)DSNewHandle(sizeof(int32)+5*sizeof(uInt8)); + (*(data->val1))->length = 5; + memcpy((*(data->val1))->data, val1, 5 * sizeof(uInt8)); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} +LV_CFHANDLE_BODY(RFID, TagLost, lvUInt8Array, void *userPtr, unsigned char *val1) + data->val1=(lvArrUInt8DH)DSNewHandle(sizeof(int32)+5*sizeof(uInt8)); + (*(data->val1))->length = 5; + memcpy((*(data->val1))->data, val1, 5 * sizeof(uInt8)); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} +LV_CFHANDLE_BODY(RFID, RawData, lvInt32Array, void *userPtr, int *val1, int val2) + data->val1=(lvArrInt32DH)DSNewHandle(sizeof(int32)+val2*sizeof(int32)); + (*(data->val1))->length = val2; + memcpy((*(data->val1))->data, val1, val2 * sizeof(int32)); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} +LV_CFHANDLE_BODY(RFID, TagAdvanced, lvRFIDTagAdvanced, void *userPtr, char *val1, CPhidgetRFID_TagInfoHandle val2) + data->val1=(LStrHandle)DSNewHandle(sizeof(int32)+255*sizeof(char)); + memset(LStrBuf(*data->val1),'\0',255); + snprintf((char*)LStrBuf(*data->val1),255,"%s",val1); + LStrLen(*data->val1)=strlen(val1); + data->val2 = *val2; + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} +LV_CFHANDLE_BODY(RFID, TagLostAdvanced, lvRFIDTagAdvanced, void *userPtr, char *val1, CPhidgetRFID_TagInfoHandle val2) + data->val1=(LStrHandle)DSNewHandle(sizeof(int32)+255*sizeof(char)); + memset(LStrBuf(*data->val1),'\0',255); + snprintf((char*)LStrBuf(*data->val1),255,"%s",val1); + LStrLen(*data->val1)=strlen(val1); + data->val2 = *val2; + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposePtr(data); + return EPHIDGET_OK; +} + +LV_CFHANDLE_2(Servo, PositionChange, lvIndexedDouble, int, double) + +LV_CFHANDLE_BODY(Spatial,SpatialData,lvSpatialData,void *userPtr,CPhidgetSpatial_SpatialEventDataHandle *val1,int val2) + DSDisposePtr(data); + { + int i; + for(i=0;inothing = (int32)phid; +#if 0 + data->acceleration0 = val1[i]->acceleration[0]; + data->acceleration1 = val1[i]->acceleration[1]; + data->acceleration2 = val1[i]->acceleration[2]; + data->angularRate0 = val1[i]->angularRate[0]; + data->angularRate1 = val1[i]->angularRate[1]; + data->angularRate2 = val1[i]->angularRate[2]; + data->magneticField0 = val1[i]->magneticField[0]; + data->magneticField1 = val1[i]->magneticField[1]; + data->magneticField2 = val1[i]->magneticField[2]; + data->microseconds = val1[i]->timestamp.microseconds; + data->seconds = val1[i]->timestamp.seconds; +#else + data->val1 = *val1[i]; +#endif + ret = PostLVUserEvent(ev, data); + DSDisposePtr(data); + } + } + return EPHIDGET_OK; +} + +LV_CFHANDLE_2(Stepper, InputChange, lvIndexedInt32, int, int) +LV_CFHANDLE_2(Stepper, PositionChange, lvIndexedInt64, int, __int64) +LV_CFHANDLE_2(Stepper, PositionChange32, lvIndexedInt32, int, int) +LV_CFHANDLE_2(Stepper, VelocityChange, lvIndexedDouble, int, double) +LV_CFHANDLE_2(Stepper, CurrentChange, lvIndexedDouble, int, double) + +LV_CFHANDLE_2(TemperatureSensor, TemperatureChange, lvIndexedDouble, int, double) + +LV_CFHANDLE_1(WeightSensor, WeightChange, lvDouble, double) + +//Manager + +int CCONV CPhidgetManager_OnAttach_LaviewHandler(CPhidgetHandle phid, void *userPtr); +LABVIEW_EXPORT int CCONV CPhidgetManager_set_OnAttach_LabviewHandler(CPhidgetManagerHandle phidA, LVUserEventRef *lvEventRef) +{ + CPhidgetManagerHandle phid = (CPhidgetManagerHandle)phidA; + TESTPTR(phid); + if(!lvEventRef || !*lvEventRef) + { + phid->fptrAttachChange = NULL; + phid->fptrAttachChange = NULL; + } + else + { + phid->fptrAttachChangeptr = CPhidgetManager_OnAttach_LaviewHandler; + phid->fptrAttachChangeptr = lvEventRef; + } + return EPHIDGET_OK; +} +int CCONV CPhidgetManager_OnAttach_LaviewHandler(CPhidgetHandle phid, void *userPtr) +{ + LVUserEventRef ev = *(LVUserEventRef *)userPtr; + MgErr ret = 0; + lvManager *data; + data = (lvManager *)DSNewPtr(sizeof(lvManager)); + data->val1 = (size_t)phid; + LV_CFHANDLE_END + +int CCONV CPhidgetManager_OnDetach_LaviewHandler(CPhidgetHandle phid, void *userPtr); +LABVIEW_EXPORT int CCONV CPhidgetManager_set_OnDetach_LabviewHandler(CPhidgetManagerHandle phidA, LVUserEventRef *lvEventRef) +{ + CPhidgetManagerHandle phid = (CPhidgetManagerHandle)phidA; + TESTPTR(phid); + if(!lvEventRef || !*lvEventRef) + { + phid->fptrDetachChange = NULL; + phid->fptrDetachChange = NULL; + } + else + { + phid->fptrDetachChangeptr = CPhidgetManager_OnDetach_LaviewHandler; + phid->fptrDetachChangeptr = lvEventRef; + } + return EPHIDGET_OK; +} +int CCONV CPhidgetManager_OnDetach_LaviewHandler(CPhidgetHandle phid, void *userPtr) +{ + LVUserEventRef ev = *(LVUserEventRef *)userPtr; + MgErr ret = 0; + lvManager *data; + data = (lvManager *)DSNewPtr(sizeof(lvManager)); + data->val1 = (size_t)phid; + LV_CFHANDLE_END + +LV_CFHANDLE_0(Manager, ServerConnect, lvNothing) +LV_CFHANDLE_0(Manager, ServerDisconnect, lvNothing) +LV_CFHANDLE_BODY(Manager, Error, lvError, void *userPtr, int val1, const char *val2) + data->val1 = val1; + data->val2=(LStrHandle)DSNewHandle(sizeof(int32)+255*sizeof(char)); + memset(LStrBuf(*data->val2),'\0',255); + snprintf((char*)LStrBuf(*data->val2),255,"%s",val2); + LStrLen(*data->val2)=strlen(val2); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val2); + DSDisposePtr(data); + return EPHIDGET_OK; +} + +//Dictionary + +int CCONV CPhidgetDictionary_OnKeyChange_LaviewHandler(CPhidgetDictionaryHandle dict, void *userPtr, const char *key, const char *value, CPhidgetDictionary_keyChangeReason reason); +LABVIEW_EXPORT int CCONV CPhidgetDictionary_set_OnKeyChange_LabviewHandler(CPhidgetDictionaryHandle dict, CPhidgetDictionaryListenerHandle *listen, const char *pattern, LVUserEventRef *lvEventRef) +{ + TESTPTR(dict); + if(lvEventRef && *lvEventRef) + CPhidgetDictionary_set_OnKeyChange_Handler(dict, listen, pattern, CPhidgetDictionary_OnKeyChange_LaviewHandler, lvEventRef); + else + return EPHIDGET_INVALIDARG; + return EPHIDGET_OK; +} +int CCONV CPhidgetDictionary_OnKeyChange_LaviewHandler(CPhidgetDictionaryHandle dict, void *userPtr, const char *key, const char *value, CPhidgetDictionary_keyChangeReason reason) +{ + LVUserEventRef ev = *(LVUserEventRef *)userPtr; + MgErr ret = 0; + lvDictionary *data; + + data = (lvDictionary *)DSNewPtr(sizeof(lvDictionary)); + + //key + data->val1=(LStrHandle)DSNewHandle(sizeof(int32)+(strlen(key)+1)*sizeof(char)); + memset(LStrBuf(*data->val1),'\0',(strlen(key)+1)*sizeof(char)); + snprintf((char*)LStrBuf(*data->val1),(strlen(key)+1)*sizeof(char),"%s",key); + LStrLen(*data->val1)=strlen(key); + + //value + data->val2=(LStrHandle)DSNewHandle(sizeof(int32)+(strlen(value)+1)*sizeof(char)); + memset(LStrBuf(*data->val2),'\0',(strlen(value)+1)*sizeof(char)); + snprintf((char*)LStrBuf(*data->val2),(strlen(value)+1)*sizeof(char),"%s",value); + LStrLen(*data->val2)=strlen(value); + + data->val3 = reason; + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val1); + DSDisposeHandle(data->val2); + DSDisposePtr(data); + + return EPHIDGET_OK; +} +LV_CFHANDLE_0(Dictionary, ServerConnect, lvNothing) +LV_CFHANDLE_0(Dictionary, ServerDisconnect, lvNothing) +LV_CFHANDLE_BODY(Dictionary, Error, lvError, void *userPtr, int val1, const char *val2) + data->val1 = val1; + data->val2=(LStrHandle)DSNewHandle(sizeof(int32)+255*sizeof(char)); + memset(LStrBuf(*data->val2),'\0',255); + snprintf((char*)LStrBuf(*data->val2),255,"%s",val2); + LStrLen(*data->val2)=strlen(val2); + + ret = PostLVUserEvent(ev, data); + + DSDisposeHandle(data->val2); + DSDisposePtr(data); + return EPHIDGET_OK; +} + +#else +//On WindowsCE, we need stubs because they are in the exports.def file + +#define LV_NULL_FUNC(pname,param) int CCONV CPhidget##pname##_set_On##param##_LabviewHandler(CPhidget##pname##Handle phidA, void *lvEventRef) { return EPHIDGET_UNSUPPORTED; } + +LV_NULL_FUNC(, Attach) +LV_NULL_FUNC(, Detach) +LV_NULL_FUNC(, ServerConnect) +LV_NULL_FUNC(, ServerDisconnect) +LV_NULL_FUNC(, Error) + +LV_NULL_FUNC(Accelerometer, AccelerationChange) + +LV_NULL_FUNC(AdvancedServo, PositionChange) +LV_NULL_FUNC(AdvancedServo, VelocityChange) +LV_NULL_FUNC(AdvancedServo, CurrentChange) + +LV_NULL_FUNC(Bridge, BridgeData) + +LV_NULL_FUNC(Encoder, InputChange) +LV_NULL_FUNC(Encoder, PositionChange) + +LV_NULL_FUNC(FrequencyCounter, Count) + +LV_NULL_FUNC(GPS, PositionChange) +LV_NULL_FUNC(GPS, PositionFixStatusChange) + +LV_NULL_FUNC(InterfaceKit, InputChange) +LV_NULL_FUNC(InterfaceKit, OutputChange) +LV_NULL_FUNC(InterfaceKit, SensorChange) + +LV_NULL_FUNC(IR, Code) +LV_NULL_FUNC(IR, RawData) +LV_NULL_FUNC(IR, Learn) + +LV_NULL_FUNC(MotorControl, InputChange) +LV_NULL_FUNC(MotorControl, VelocityChange) +LV_NULL_FUNC(MotorControl, CurrentChange) +LV_NULL_FUNC(MotorControl, EncoderPositionChange) +LV_NULL_FUNC(MotorControl, EncoderPositionUpdate) +LV_NULL_FUNC(MotorControl, BackEMFUpdate) +LV_NULL_FUNC(MotorControl, SensorUpdate) +LV_NULL_FUNC(MotorControl, CurrentUpdate) + +LV_NULL_FUNC(PHSensor, PHChange) + +LV_NULL_FUNC(RFID, OutputChange) +LV_NULL_FUNC(RFID, Tag) +LV_NULL_FUNC(RFID, TagLost) +LV_NULL_FUNC(RFID, RawData) +LV_NULL_FUNC(RFID, TagAdvanced) +LV_NULL_FUNC(RFID, TagLostAdvanced) + +LV_NULL_FUNC(Servo, PositionChange) + +LV_NULL_FUNC(Spatial,SpatialData) + +LV_NULL_FUNC(Stepper, InputChange) +LV_NULL_FUNC(Stepper, PositionChange) +LV_NULL_FUNC(Stepper, PositionChange32) +LV_NULL_FUNC(Stepper, VelocityChange) +LV_NULL_FUNC(Stepper, CurrentChange) + +LV_NULL_FUNC(TemperatureSensor, TemperatureChange) + +LV_NULL_FUNC(WeightSensor, WeightChange) + +LV_NULL_FUNC(Manager, Attach) +LV_NULL_FUNC(Manager, Detach) +LV_NULL_FUNC(Manager, ServerConnect) +LV_NULL_FUNC(Manager, ServerDisconnect) +LV_NULL_FUNC(Manager, Error) + +LV_NULL_FUNC(Dictionary, KeyChange) +LV_NULL_FUNC(Dictionary, ServerConnect) +LV_NULL_FUNC(Dictionary, ServerDisconnect) +LV_NULL_FUNC(Dictionary, Error) + +#endif -- cgit v1.2.3