diff options
| author | bernard <[email protected]> | 2014-12-31 22:33:54 +0800 |
|---|---|---|
| committer | bernard <[email protected]> | 2014-12-31 22:33:54 +0800 |
| commit | 58163f49e01e351699134426db90f2bd6529ca57 (patch) | |
| tree | 9cb768a04c210ea832c7b08b63f9b0ae72ea628f /components/drivers/sensors/sensor.cpp | |
| parent | b73283135dd60c62891c6023717500afd77ab97e (diff) | |
[DeviceDriver] change the name style of method of C++ code; Add raw mode for sensor.
Diffstat (limited to 'components/drivers/sensors/sensor.cpp')
| -rw-r--r-- | components/drivers/sensors/sensor.cpp | 111 |
1 files changed, 77 insertions, 34 deletions
diff --git a/components/drivers/sensors/sensor.cpp b/components/drivers/sensors/sensor.cpp index 8751efd36d..88342d6dac 100644 --- a/components/drivers/sensors/sensor.cpp +++ b/components/drivers/sensors/sensor.cpp @@ -13,27 +13,52 @@ */ #include <stddef.h> +#include <string.h> + #include "sensor.h" /** - * Sensor + * SensorBase */ -Sensor::Sensor() +SensorBase::SensorBase(int type) { + memset(&(this->config), 0x0, sizeof(SensorConfig)); + + this->type = type; this->next = this->prev = NULL; - Subscribe(NULL, NULL); + subscribe(NULL, NULL); } -Sensor::~Sensor() +SensorBase::~SensorBase() { } -int Sensor::GetType(void) +int SensorBase::getType(void) { return this->type; } -int Sensor::Subscribe(SensorEventHandler_t *handler, void *user_data) +int SensorBase::setConfig(SensorConfig *config) +{ + int result; + + /* configure to the low level sensor */ + result = this->configure(config); + if (result == 0) + { + this->config = *config; + } + + return result; +} + +int SensorBase::getConfig(SensorConfig *config) +{ + *config = this->config; + return 0; +} + +int SensorBase::subscribe(SensorEventHandler_t *handler, void *user_data) { this->evtHandler = handler; this->userData = user_data; @@ -41,7 +66,7 @@ int Sensor::Subscribe(SensorEventHandler_t *handler, void *user_data) return 0; } -int Sensor::Publish(sensors_event_t *event) +int SensorBase::publish(sensors_event_t *event) { if (this->evtHandler != NULL) { @@ -55,57 +80,52 @@ int Sensor::Publish(sensors_event_t *event) /** * Sensor Manager */ -/* sensor manager instance */ -static SensorManager _sensor_manager; +/* sensors list */ +static SensorBase *sensor_list = NULL; SensorManager::SensorManager() { - sensorList = NULL; } SensorManager::~SensorManager() { } -int SensorManager::RegisterSensor(Sensor *sensor) +int SensorManager::registerSensor(SensorBase *sensor) { - SensorManager *self = &_sensor_manager; - RT_ASSERT(sensor != RT_NULL); /* add sensor into the list */ - if (self->sensorList == NULL) + if (sensor_list == NULL) { sensor->prev = sensor->next = sensor; } else { - sensor->prev = self->sensorList; - sensor->next = self->sensorList->next; + sensor_list->prev->next = sensor; + sensor->prev = sensor_list->prev; - self->sensorList->next->prev = sensor; - self->sensorList->next = sensor; + sensor_list->prev = sensor; + sensor->next = sensor_list; } /* point the sensorList to this sensor */ - self->sensorList = sensor; + sensor_list = sensor; return 0; } -int SensorManager::DeregisterSensor(Sensor *sensor) +int SensorManager::unregisterSensor(SensorBase *sensor) { - SensorManager *self = &_sensor_manager; - /* disconnect sensor list */ sensor->next->prev = sensor->prev; sensor->prev->next = sensor->next; /* check the sensorList */ - if (sensor == self->sensorList) + if (sensor == sensor_list) { - if (sensor->next == sensor) self->sensorList = NULL; /* empty list */ - else self->sensorList = sensor->next; + if (sensor->next == sensor) sensor_list = NULL; /* empty list */ + else sensor_list = sensor->next; } /* re-initialize sensor node */ @@ -114,35 +134,58 @@ int SensorManager::DeregisterSensor(Sensor *sensor) return 0; } -Sensor *SensorManager::GetDefaultSensor(int type) +SensorBase *SensorManager::getDefaultSensor(int type) { - SensorManager *self = &_sensor_manager; - Sensor *sensor = self->sensorList; + SensorBase *sensor = sensor_list; if (sensor == NULL) return NULL; do { /* find the same type */ - if (sensor->GetType() == type) return sensor; + if (sensor->getType() == type) return sensor; sensor = sensor->next; - }while (sensor != self->sensorList); + }while (sensor != sensor_list); return NULL; } -int SensorManager::Subscribe(int type, SensorEventHandler_t *handler, void *user_data) +int SensorManager::subscribe(int type, SensorEventHandler_t *handler, void *user_data) { - Sensor *sensor; + SensorBase *sensor; - sensor = SensorManager::GetDefaultSensor(type); + sensor = SensorManager::getDefaultSensor(type); if (sensor != NULL) { - sensor->Subscribe(handler, user_data); + sensor->subscribe(handler, user_data); return 0; } return -1; } +int SensorManager::sensorEventReady(SensorBase *sensor) +{ + return 0; +} + +int SensorManager::pollSensor(SensorBase *sensor, sensors_event_t *events, int number, int duration) +{ + rt_tick_t tick; + int result, index; + + if (sensor == NULL) return -1; + + tick = rt_tick_get(); + for (index = 0; index < number; index ++) + { + result = sensor->poll(&events[index]); + if (result < 0) break; + + if (rt_tick_get() - tick > duration) break; + } + + return index; +} + |
