mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-12-09 17:12:39 +00:00
[DeviceDriver] change the name style of method of C++ code; Add raw mode for sensor.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user