aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/device/device.cpp
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2014-07-08 21:09:12 +1000
committerLorenz Meier <lm@inf.ethz.ch>2014-07-12 16:25:43 +0200
commit93d444d1aade59b5e88f41b71c842a00ab950c64 (patch)
treebac1fefd6a71196c7584804d38bf765612d11434 /src/drivers/device/device.cpp
parenta2f528c5ba20ade8c3be200ed07fb6e925030c0d (diff)
downloadpx4-firmware-93d444d1aade59b5e88f41b71c842a00ab950c64.tar.gz
px4-firmware-93d444d1aade59b5e88f41b71c842a00ab950c64.tar.bz2
px4-firmware-93d444d1aade59b5e88f41b71c842a00ab950c64.zip
device: added a _device_id to all drivers
this device ID identifies a specific device via the tuple of (bus, bus type, address, devtype). This allows device specific configuration data to be stored along with a device ID, so the code can know when the user has changed device configuration (such as removing an external compass), and either invalidate the device configuration or force the user to re-calibrate
Diffstat (limited to 'src/drivers/device/device.cpp')
-rw-r--r--src/drivers/device/device.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/drivers/device/device.cpp b/src/drivers/device/device.cpp
index 683455149..f1f777dce 100644
--- a/src/drivers/device/device.cpp
+++ b/src/drivers/device/device.cpp
@@ -42,6 +42,7 @@
#include <nuttx/arch.h>
#include <stdio.h>
#include <unistd.h>
+#include <drivers/drv_device.h>
namespace device
{
@@ -93,6 +94,13 @@ Device::Device(const char *name,
_irq_attached(false)
{
sem_init(&_lock, 0, 1);
+
+ /* setup a default device ID. When bus_type is UNKNOWN the
+ other fields are invalid */
+ _device_id.devid_s.bus_type = DeviceBusType_UNKNOWN;
+ _device_id.devid_s.bus = 0;
+ _device_id.devid_s.address = 0;
+ _device_id.devid_s.devtype = 0;
}
Device::~Device()
@@ -238,6 +246,10 @@ Device::write(unsigned offset, void *data, unsigned count)
int
Device::ioctl(unsigned operation, unsigned &arg)
{
+ switch (operation) {
+ case DEVIOCGDEVICEID:
+ return (int)_device_id.devid;
+ }
return -ENODEV;
}