sensorfw
iioadaptor.h
Go to the documentation of this file.
1
27#ifndef IIOADAPTOR_H
28#define IIOADAPTOR_H
29
30#include <sysfsadaptor.h>
32
33// FIXME: shouldn't assume any number of channels per device
34#define IIO_MAX_DEVICE_CHANNELS 20
35
36// FIXME: no idea what would be reasonable length
37#define IIO_BUFFER_LEN 256
38
49class IioAdaptor : public SysfsAdaptor
50{
51 Q_OBJECT
52 enum IioSensorType {
53 IIO_ACCELEROMETER = 1, // accel_3d
54 IIO_GYROSCOPE, // gyro_3d
55 IIO_MAGNETOMETER, // magn_3d
56 IIO_ROTATION, // dev_rotation, quaternion
57 IIO_ALS, // als
58 IIO_TILT, // incli_3d
59 IIO_PROXIMITY // proximity als
60 };
61
62 struct iio_device {
63 QString name;
64 int channels;
65 int channel_bytes[IIO_MAX_DEVICE_CHANNELS];
66 qreal scale;
67 qreal offset;
68 int frequency;
69 QString devicePath;
70 int index;
71 IioSensorType sensorType;
72 QString channelTypeName;
73 };
74
75public:
82 static DeviceAdaptor *factoryMethod(const QString& id)
83 {
84 return new IioAdaptor(id);
85 }
86
87 virtual bool startSensor();
88 virtual void stopSensor();
89// virtual bool standby();
90// virtual bool resume();
91
92protected:
93
99 IioAdaptor(const QString &id);
100
105
106
107 bool setInterval(const unsigned int value, const int sessionId);
108 // unsigned int interval() const;
109
110private:
111
120 void processSample(int pathId, int fd);
121
122 int findSensor(const QString &name);
123 bool deviceEnable(int device, int enable);
124
125 bool sysfsWriteInt(QString filename, int val);
126 QString sysfsReadString(QString filename);
127 int sysfsReadInt(QString filename);
128 int scanElementsEnable(int device, int enable);
129 int deviceChannelParseBytes(QString filename);
130
131 // Device number for the sensor (-1 if not found)
132 int devNodeNumber;
133
134 int proximityThreshold;
135
136 DeviceAdaptorRingBuffer<TimedXyzData>* iioXyzBuffer_;
137 DeviceAdaptorRingBuffer<TimedUnsigned>* alsBuffer_;
138 DeviceAdaptorRingBuffer<CalibratedMagneticFieldData>* magnetometerBuffer_;
139 DeviceAdaptorRingBuffer<ProximityData>* proximityBuffer_;
140
141 iio_device iioDevice;
142
143 QString deviceId;
144
145 TimedXyzData* timedData;
147 TimedUnsigned *uData;
148 ProximityData *proximityData;
149
150private slots:
151 void setup();
152};
153
154#endif
Datatype for calibrated magnetometer measurements.
Adaptor for Industrial I/O.
Definition: iioadaptor.h:50
virtual void stopSensor()
static DeviceAdaptor * factoryMethod(const QString &id)
Factory method for gaining a new instance of this adaptor class.
Definition: iioadaptor.h:82
~IioAdaptor()
Destructor.
bool setInterval(const unsigned int value, const int sessionId)
IioAdaptor(const QString &id)
Constructor.
virtual bool startSensor()
Datatype for proximity measurements.
Datatype for unsigned integer value with timestamp.
Definition: timedunsigned.h:34
Class for vector type measurement data (timestamp, x, y, z).
Definition: genericdata.h:53
#define IIO_MAX_DEVICE_CHANNELS
Definition: iioadaptor.h:34
Datatypes for different filters.