Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
58163f49
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
58163f49
编写于
12月 31, 2014
作者:
B
bernard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[DeviceDriver] change the name style of method of C++ code; Add raw mode for sensor.
上级
b7328313
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
205 addition
and
60 deletion
+205
-60
components/drivers/sensors/sensor.cpp
components/drivers/sensors/sensor.cpp
+77
-34
components/drivers/sensors/sensor.h
components/drivers/sensors/sensor.h
+128
-26
未找到文件。
components/drivers/sensors/sensor.cpp
浏览文件 @
58163f49
...
...
@@ -13,27 +13,52 @@
*/
#include <stddef.h>
#include <string.h>
#include "sensor.h"
/**
* Sensor
* Sensor
Base
*/
Sensor
::
Sensor
(
)
Sensor
Base
::
SensorBase
(
int
type
)
{
memset
(
&
(
this
->
config
),
0x0
,
sizeof
(
SensorConfig
));
this
->
type
=
type
;
this
->
next
=
this
->
prev
=
NULL
;
S
ubscribe
(
NULL
,
NULL
);
s
ubscribe
(
NULL
,
NULL
);
}
Sensor
::~
Sensor
()
Sensor
Base
::~
SensorBase
()
{
}
int
Sensor
::
G
etType
(
void
)
int
Sensor
Base
::
g
etType
(
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
::
P
ublish
(
sensors_event_t
*
event
)
int
Sensor
Base
::
p
ublish
(
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
Sensor
Manager
_sensor_manager
;
/* sensor
s list
*/
static
Sensor
Base
*
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
(
se
lf
->
sensorL
ist
==
NULL
)
if
(
se
nsor_l
ist
==
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
;
se
lf
->
sensorList
->
nex
t
->
prev
=
sensor
;
se
lf
->
sensorList
->
next
=
sensor
;
se
nsor_lis
t
->
prev
=
sensor
;
se
nsor
->
next
=
sensor_list
;
}
/* point the sensorList to this sensor */
se
lf
->
sensorL
ist
=
sensor
;
se
nsor_l
ist
=
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
==
se
lf
->
sensorL
ist
)
if
(
sensor
==
se
nsor_l
ist
)
{
if
(
sensor
->
next
==
sensor
)
se
lf
->
sensorL
ist
=
NULL
;
/* empty list */
else
se
lf
->
sensorL
ist
=
sensor
->
next
;
if
(
sensor
->
next
==
sensor
)
se
nsor_l
ist
=
NULL
;
/* empty list */
else
se
nsor_l
ist
=
sensor
->
next
;
}
/* re-initialize sensor node */
...
...
@@ -114,35 +134,58 @@ int SensorManager::DeregisterSensor(Sensor *sensor)
return
0
;
}
Sensor
*
SensorManager
::
G
etDefaultSensor
(
int
type
)
Sensor
Base
*
SensorManager
::
g
etDefaultSensor
(
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
->
G
etType
()
==
type
)
return
sensor
;
if
(
sensor
->
g
etType
()
==
type
)
return
sensor
;
sensor
=
sensor
->
next
;
}
while
(
sensor
!=
self
->
sensorL
ist
);
}
while
(
sensor
!=
sensor_l
ist
);
return
NULL
;
}
int
SensorManager
::
S
ubscribe
(
int
type
,
SensorEventHandler_t
*
handler
,
void
*
user_data
)
int
SensorManager
::
s
ubscribe
(
int
type
,
SensorEventHandler_t
*
handler
,
void
*
user_data
)
{
Sensor
*
sensor
;
Sensor
Base
*
sensor
;
sensor
=
SensorManager
::
G
etDefaultSensor
(
type
);
sensor
=
SensorManager
::
g
etDefaultSensor
(
type
);
if
(
sensor
!=
NULL
)
{
sensor
->
S
ubscribe
(
handler
,
user_data
);
sensor
->
s
ubscribe
(
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
;
}
components/drivers/sensors/sensor.h
浏览文件 @
58163f49
...
...
@@ -36,6 +36,8 @@
#include <rtdevice.h>
#include <stdint.h>
#pragma anon_unions
/**
* Handles must be higher than SENSORS_HANDLE_BASE and must be unique.
* A Handle identifies a given sensors. The handle is used to activate
...
...
@@ -726,8 +728,10 @@ enum
* Values returned by the accelerometer in various locations in the universe.
* all values are in SI units (m/s^2)
*/
#define GRAVITY_SUN (275.0f)
#define GRAVITY_EARTH (9.80665f)
#define SENSORS_GRAVITY_SUN (275.0f)
#define SENSORS_GRAVITY_MOON (1.6f)
#define SENSORS_GRAVITY_EARTH (9.80665f)
#define SENSORS_GRAVITY_STANDARD (SENSORS_GRAVITY_EARTH)
/** Maximum magnetic field on Earth's surface */
#define MAGNETIC_FIELD_EARTH_MAX (60.0f)
...
...
@@ -735,6 +739,14 @@ enum
/** Minimum magnetic field on Earth's surface */
#define MAGNETIC_FIELD_EARTH_MIN (30.0f)
/** Average sea level pressure is 1013.25 hPa */
#define SENSORS_PRESSURE_SEALEVELHPA (1013.25F)
/** Degrees/s to rad/s multiplier */
#define SENSORS_DPS_TO_RADS (0.017453293F)
/** Gauss to micro-Tesla multiplier */
#define SENSORS_GAUSS_TO_MICROTESLA (100)
/**
* status of orientation sensor
*/
...
...
@@ -768,6 +780,22 @@ typedef struct
uint8_t
reserved
[
3
];
}
sensors_vec_t
;
/**
* sensor raw vector data
*/
typedef
struct
{
struct
{
int16_t
x
;
int16_t
y
;
int16_t
z
;
};
int8_t
status
;
uint8_t
reserved
[
1
];
}
sensors_raw_vec_t
;
/**
* uncalibrated gyroscope and magnetometer event data
*/
...
...
@@ -830,15 +858,21 @@ typedef struct sensors_event_t
/* acceleration values are in meter per second per second (m/s^2) */
sensors_vec_t
acceleration
;
/* raw acceleration data */
sensors_raw_vec_t
raw_acceleration
;
/* magnetic vector values are in micro-Tesla (uT) */
sensors_vec_t
magnetic
;
/* raw magnetic data */
sensors_raw_vec_t
raw_magnetic
;
/* orientation values are in degrees */
sensors_vec_t
orientation
;
/* gyroscope values are in rad/s */
sensors_vec_t
gyro
;
/* raw gyroscope data */
sensors_raw_vec_t
raw_gyro
;
/* temperature is in degrees centigrade (Celsius) */
float
temperature
;
...
...
@@ -943,41 +977,109 @@ typedef struct sensor_t
void
*
reserved
[
6
];
}
sensor_t
;
class
SensorConfigure
enum
SensorMode
{
SENSOR_MODE_RAW
,
SENSOR_MODE_CALIBRATED
,
SENSOR_MODE_NORMAL
,
};
enum
SensorAccelRange
{
int32_t
delay
;
SENSOR_ACCEL_RANGE_2G
,
SENSOR_ACCEL_RANGE_4G
,
SENSOR_ACCEL_RANGE_8G
,
SENSOR_ACCEL_RANGE_16G
,
};
#define SENSOR_ACCEL_SENSITIVITY_2G (0.001F)
#define SENSOR_ACCEL_SENSITIVITY_4G (0.002F)
#define SENSOR_ACCEL_SENSITIVITY_8G (0.004F)
#define SENSOR_ACCEL_SENSITIVITY_16G (0.012F)
class
Sensor
;
enum
SensorGyroRange
{
SENSOR_GYRO_RANGE_250DPS
,
SENSOR_GYRO_RANGE_500DPS
,
SENSOR_GYRO_RANGE_1000DPS
,
SENSOR_GYRO_RANGE_2000DPS
,
};
#define SENSOR_GYRO_SENSITIVITY_250DPS (0.00875F)
#define SENSOR_GYRO_SENSITIVITY_500DPS (0.0175F)
#define SENSOR_GYRO_SENSITIVITY_1000DPS (0.035F)
#define SENSOR_GYRO_SENSITIVITY_2000DPS (0.070F)
enum
SensorDataRate
{
SENSOR_DATARATE_3200HZ
,
SENSOR_DATARATE_1600HZ
,
SENSOR_DATARATE_800HZ
,
SENSOR_DATARATE_400HZ
,
SENSOR_DATARATE_200HZ
,
SENSOR_DATARATE_100HZ
,
SENSOR_DATARATE_50HZ
,
SENSOR_DATARATE_25HZ
,
SENSOR_DATARATE_12_5HZ
,
SENSOR_DATARATE_6_25HZ
,
SENSOR_DATARATE_3_13HZ
,
SENSOR_DATARATE_1_56HZ
,
SENSOR_DATARATE_0_78HZ
,
SENSOR_DATARATE_0_39HZ
,
SENSOR_DATARATE_0_20HZ
,
SENSOR_DATARATE_0_10HZ
,
};
class
SensorBase
;
class
SensorManager
;
typedef
void
(
*
SensorEventHandler_t
)(
Sensor
*
sensor
,
sensors_event_t
*
event
,
void
*
user_data
);
typedef
void
(
*
SensorEventHandler_t
)(
SensorBase
*
sensor
,
sensors_event_t
*
event
,
void
*
user_data
);
/**
* Sensor Configuration
*/
typedef
struct
SensorConfig
{
int
mode
;
enum
SensorDataRate
data_rate
;
union
range
{
enum
SensorAccelRange
accel_range
;
enum
SensorGyroRange
gyro_range
;
}
range
;
}
SensorConfig
;
/**
* Sensor Base Class
*/
class
Sensor
class
Sensor
Base
{
private:
int
type
;
public:
Sensor
();
~
Sensor
();
SensorBase
(
int
type
);
~
SensorBase
();
virtual
int
configure
(
SensorConfig
*
config
)
=
0
;
virtual
int
activate
(
int
enable
)
=
0
;
virtual
int
Configure
(
SensorConfigure
*
config
)
=
0
;
virtual
int
Activate
(
int
enable
)
=
0
;
virtual
int
poll
(
sensors_event_t
*
events
)
=
0
;
virtual
void
getSensor
(
struct
sensor_t
*
sensor
)
=
0
;
virtual
int
Poll
(
sensors_event_t
*
events
,
int
number
,
int
duration
)
=
0
;
virtual
void
GetSensor
(
struct
sensor_t
*
sensor
)
=
0
;
int
getType
(
void
);
int
GetType
(
void
);
int
setConfig
(
SensorConfig
*
config
);
int
getConfig
(
SensorConfig
*
config
);
int
S
ubscribe
(
SensorEventHandler_t
*
handler
,
void
*
user_data
);
int
P
ublish
(
sensors_event_t
*
event
);
int
s
ubscribe
(
SensorEventHandler_t
*
handler
,
void
*
user_data
);
int
p
ublish
(
sensors_event_t
*
event
);
protected:
Sensor
*
next
;
Sensor
*
prev
;
SensorBase
*
next
;
SensorBase
*
prev
;
/* sensor configuration */
SensorConfig
config
;
SensorEventHandler_t
*
evtHandler
;
void
*
userData
;
...
...
@@ -994,14 +1096,14 @@ public:
SensorManager
();
~
SensorManager
();
static
int
RegisterSensor
(
Sensor
*
sensor
);
static
int
DeregisterSensor
(
Sensor
*
sensor
);
static
int
registerSensor
(
SensorBase
*
sensor
);
static
int
unregisterSensor
(
SensorBase
*
sensor
);
static
Sensor
*
G
etDefaultSensor
(
int
type
);
static
int
S
ubscribe
(
int
type
,
SensorEventHandler_t
*
handler
,
void
*
user_data
);
static
Sensor
Base
*
g
etDefaultSensor
(
int
type
);
static
int
s
ubscribe
(
int
type
,
SensorEventHandler_t
*
handler
,
void
*
user_data
);
private:
Sensor
*
sensorList
;
static
int
sensorEventReady
(
SensorBase
*
sensor
);
static
int
pollSensor
(
SensorBase
*
sensor
,
sensors_event_t
*
events
,
int
number
,
int
duration
)
;
};
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录