cphidgetweightsensor.c
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 // === Internal Functions === //
00009 
00010 //clearVars - sets all device variables to unknown state
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 //initAfterOpen - sets up the initial state of an object, reading in packets from the device if needed
00021 //                                used during attach initialization - on every attach
00022 CPHIDGETINIT(WeightSensor)
00023         TESTPTR(phid);
00024 
00025         //initialize triggers, set data arrays to unknown
00026         phid->Weight = PUNK_DBL;
00027         phid->lastweight = PUNK_DBL;
00028         phid->WeightChangeTrigger = 0.1;
00029 
00030         //issue one read
00031         CPhidget_read((CPhidgetHandle)phid);
00032 
00033         return EPHIDGET_OK;
00034 }
00035 
00036 //dataInput - parses device packets
00037 CPHIDGETDATA(WeightSensor)
00038         double Weight = 0;
00039 
00040         if (length<0) return EPHIDGET_INVALIDARG;
00041         TESTPTR(phid);
00042         TESTPTR(buffer);
00043         
00044         //Parse device packets - store data locally
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         //store to structure
00056         phid->Weight = Weight;
00057 
00058         //send out any events that exceed or match the trigger
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 //eventsAfterOpen - sends out an event for all valid data, used during attach initialization
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 //getPacket - not used for WeightSensor
00078 CGETPACKET(WeightSensor)
00079         return EPHIDGET_UNEXPECTED;
00080 }
00081 
00082 // === Exported Functions === //
00083 
00084 //create and initialize a device structure
00085 CCREATE(WeightSensor, PHIDCLASS_WEIGHTSENSOR)
00086 
00087 //event setup functions
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 


pedal_monitor
Author(s): Pedro Mendes
autogenerated on Fri Jun 6 2014 18:37:21