From 5557ecf3d71fa22eb790fd261a1702d2153e7e72 Mon Sep 17 00:00:00 2001 From: Mark Charlebois Date: Thu, 30 Apr 2015 13:16:03 -0700 Subject: [PATCH] POSIX: Added airspeed simulator This seems to be a dependency for the system to start up. Signed-off-by: Mark Charlebois --- makefiles/posix/config_posix_default.mk | 5 ++- src/drivers/airspeed/airspeed.h | 9 +++- .../posix/drivers/airspeedsim/airspeedsim.cpp | 41 +++++++++---------- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/makefiles/posix/config_posix_default.mk b/makefiles/posix/config_posix_default.mk index a9bb98d6c9..8c2d84897a 100644 --- a/makefiles/posix/config_posix_default.mk +++ b/makefiles/posix/config_posix_default.mk @@ -64,12 +64,13 @@ MODULES += platforms/posix/drivers/gyrosim MODULES += platforms/posix/drivers/adcsim MODULES += platforms/posix/drivers/barosim MODULES += platforms/posix/drivers/tonealrmsim +MODULES += platforms/posix/drivers/airspeedsim # # Unit tests # #MODULES += platforms/posix/tests/hello #MODULES += platforms/posix/tests/vcdev_test -MODULES += platforms/posix/tests/hrt_test -MODULES += platforms/posix/tests/wqueue +#MODULES += platforms/posix/tests/hrt_test +#MODULES += platforms/posix/tests/wqueue diff --git a/src/drivers/airspeed/airspeed.h b/src/drivers/airspeed/airspeed.h index b440338cf9..3fbf3f9ddf 100644 --- a/src/drivers/airspeed/airspeed.h +++ b/src/drivers/airspeed/airspeed.h @@ -55,9 +55,14 @@ #include #include +#ifdef __PX4_NUTTX #include #include #include +# +#else +#include +#endif #include @@ -95,8 +100,8 @@ public: virtual int init(); - virtual ssize_t read(struct file *filp, char *buffer, size_t buflen); - virtual int ioctl(struct file *filp, int cmd, unsigned long arg); + virtual ssize_t read(device::file_t *filp, char *buffer, size_t buflen); + virtual int ioctl(device::file_t *filp, int cmd, unsigned long arg); /** * Diagnostics - print some basic information about the driver. diff --git a/src/platforms/posix/drivers/airspeedsim/airspeedsim.cpp b/src/platforms/posix/drivers/airspeedsim/airspeedsim.cpp index a0933971a4..ea9d92025e 100644 --- a/src/platforms/posix/drivers/airspeedsim/airspeedsim.cpp +++ b/src/platforms/posix/drivers/airspeedsim/airspeedsim.cpp @@ -34,8 +34,9 @@ /** * @file ets_airspeed.cpp * @author Simon Wilks + * @author Mark Charlebois (simulator) * - * Driver for the Eagle Tree Airspeed V3 connected via I2C. + * Driver for the Simulated Airspeed Sensor based on Eagle Tree Airspeed V3. */ #include @@ -55,10 +56,6 @@ #include #include -#include -#include -#include - #include #include @@ -76,7 +73,7 @@ #include -AirspeedSim::AirspeedSim(int bus, int address, unsigned conversion_interval, const char* path) : +Airspeed::Airspeed(int bus, int address, unsigned conversion_interval, const char* path) : I2C("Airspeed", path, bus, address), _reports(nullptr), _buffer_overflows(perf_alloc(PC_COUNT, "airspeed_buffer_overflows")), @@ -100,7 +97,7 @@ AirspeedSim::AirspeedSim(int bus, int address, unsigned conversion_interval, con memset(&_work, 0, sizeof(_work)); } -AirspeedSim::~AirspeedSim() +Airspeed::~Airspeed() { /* make sure we are truly inactive */ stop(); @@ -119,7 +116,7 @@ AirspeedSim::~AirspeedSim() } int -AirspeedSim::init() +Airspeed::init() { int ret = ERROR; @@ -157,7 +154,7 @@ out: } int -AirspeedSim::probe() +Airspeed::probe() { /* on initial power up the device may need more than one retry for detection. Once it is running the number of retries can @@ -172,7 +169,7 @@ AirspeedSim::probe() } int -AirspeedSim::ioctl(px4_dev_handle_t *handlep, int cmd, unsigned long arg) +Airspeed::ioctl(device::file_t *filp, int cmd, unsigned long arg) { switch (cmd) { @@ -243,12 +240,12 @@ AirspeedSim::ioctl(px4_dev_handle_t *handlep, int cmd, unsigned long arg) if ((arg < 1) || (arg > 100)) return -EINVAL; - irqstate_t flags = irqsave(); + //irqstate_t flags = irqsave(); if (!_reports->resize(arg)) { - irqrestore(flags); + //irqrestore(flags); return -ENOMEM; } - irqrestore(flags); + //irqrestore(flags); return OK; } @@ -275,12 +272,12 @@ AirspeedSim::ioctl(px4_dev_handle_t *handlep, int cmd, unsigned long arg) default: /* give it to the superclass */ - return I2C::ioctl(handlep, cmd, arg); + return I2C::ioctl(filp, cmd, arg); } } ssize_t -AirspeedSim::read(px4_dev_handle_t *handlep, char *buffer, size_t buflen) +Airspeed::read(device::file_t *filp, char *buffer, size_t buflen) { unsigned count = buflen / sizeof(differential_pressure_s); differential_pressure_s *abuf = reinterpret_cast(buffer); @@ -339,24 +336,24 @@ AirspeedSim::read(px4_dev_handle_t *handlep, char *buffer, size_t buflen) } void -AirspeedSim::start() +Airspeed::start() { /* reset the report ring and state machine */ _collect_phase = false; _reports->flush(); /* schedule a cycle to start things */ - work_queue(HPWORK, &_work, (worker_t)&AirspeedSim::cycle_trampoline, this, 1); + work_queue(HPWORK, &_work, (worker_t)&Airspeed::cycle_trampoline, this, 1); } void -AirspeedSim::stop() +Airspeed::stop() { work_cancel(HPWORK, &_work); } void -AirspeedSim::update_status() +Airspeed::update_status() { if (_sensor_ok != _last_published_sensor_ok) { /* notify about state change */ @@ -378,7 +375,7 @@ AirspeedSim::update_status() } void -AirspeedSim::cycle_trampoline(void *arg) +Airspeed::cycle_trampoline(void *arg) { Airspeed *dev = (Airspeed *)arg; @@ -390,7 +387,7 @@ AirspeedSim::cycle_trampoline(void *arg) } void -AirspeedSim::print_info() +Airspeed::print_info() { perf_print_counter(_sample_perf); perf_print_counter(_comms_errors); @@ -400,7 +397,7 @@ AirspeedSim::print_info() } void -AirspeedSim::new_report(const differential_pressure_s &report) +Airspeed::new_report(const differential_pressure_s &report) { if (!_reports->force(&report)) perf_count(_buffer_overflows);