Go to the documentation of this file.00001 #include "stdafx.h"
00002 #include "cphidgetweightsensor.h"
00003 #include "cusb.h"
00004 #include "csocket.h"
00005 #include "cthread.h"
00006 #include <math.h>
00007
00008
00009
00010
00011 CPHIDGETCLEARVARS(WeightSensor)
00012
00013 phid->Weight = PUNI_DBL;
00014 phid->lastweight = PUNK_DBL;
00015 phid->WeightChangeTrigger = PUNI_DBL;
00016
00017 return EPHIDGET_OK;
00018 }
00019
00020
00021
00022 CPHIDGETINIT(WeightSensor)
00023 TESTPTR(phid);
00024
00025
00026 phid->Weight = PUNK_DBL;
00027 phid->lastweight = PUNK_DBL;
00028 phid->WeightChangeTrigger = 0.1;
00029
00030
00031 CPhidget_read((CPhidgetHandle)phid);
00032
00033 return EPHIDGET_OK;
00034 }
00035
00036
00037 CPHIDGETDATA(WeightSensor)
00038 double Weight = 0;
00039
00040 if (length<0) return EPHIDGET_INVALIDARG;
00041 TESTPTR(phid);
00042 TESTPTR(buffer);
00043
00044
00045 switch(phid->phid.deviceIDSpec)
00046 {
00047 case PHIDID_WEIGHTSENSOR:
00048 Weight = (((double)((unsigned short)buffer[0]+((unsigned short)buffer[1]<<8))) / 100.0 ) - 40.0;
00049 Weight = round_double(Weight, 2);
00050 break;
00051 default:
00052 return EPHIDGET_UNEXPECTED;
00053 }
00054
00055
00056 phid->Weight = Weight;
00057
00058
00059 if (fabs(phid->Weight - phid->lastweight) >= phid->WeightChangeTrigger || phid->lastweight == PUNK_DBL)
00060 {
00061 FIRE(WeightChange, phid->Weight);
00062 phid->lastweight = phid->Weight;
00063 }
00064 return EPHIDGET_OK;
00065 }
00066
00067
00068 CPHIDGETINITEVENTS(WeightSensor)
00069 if (phid->Weight != PUNK_DBL)
00070 {
00071 FIRE(WeightChange, phid->Weight);
00072 phid->lastweight = phid->Weight;
00073 }
00074 return EPHIDGET_OK;
00075 }
00076
00077
00078 CGETPACKET(WeightSensor)
00079 return EPHIDGET_UNEXPECTED;
00080 }
00081
00082
00083
00084
00085 CCREATE(WeightSensor, PHIDCLASS_WEIGHTSENSOR)
00086
00087
00088 CFHANDLE(WeightSensor, WeightChange, double)
00089
00090 CGET(WeightSensor,Weight,double)
00091 TESTPTRS(phid,pVal)
00092 TESTDEVICETYPE(PHIDCLASS_WEIGHTSENSOR)
00093 TESTATTACHED
00094 TESTMASGN(Weight, PUNK_DBL)
00095 MASGN(Weight)
00096 }
00097
00098 CGET(WeightSensor,WeightChangeTrigger,double)
00099 TESTPTRS(phid,pVal)
00100 TESTDEVICETYPE(PHIDCLASS_WEIGHTSENSOR)
00101 TESTATTACHED
00102 TESTMASGN(WeightChangeTrigger, PUNK_DBL)
00103 MASGN(WeightChangeTrigger)
00104 }
00105 CSET(WeightSensor,WeightChangeTrigger,double)
00106 TESTPTR(phid)
00107 TESTDEVICETYPE(PHIDCLASS_WEIGHTSENSOR)
00108 TESTATTACHED
00109 TESTRANGE(0, 300)
00110 if(CPhidget_statusFlagIsSet(phid->phid.status, PHIDGET_REMOTE_FLAG))
00111 ADDNETWORKKEY(Trigger, "%lE", WeightChangeTrigger);
00112 else
00113 phid->WeightChangeTrigger = newVal;
00114 return EPHIDGET_OK;
00115 }
00116