Android HAL
对于Android HAL 最常添加和更换的主要是sensor hal,sensor hal 的选择和添加如下:
(1)在device/leadcore/lc186x/BoardConfig.mk 文件中修改所用sensor 模块名:
######sensor type select######
#choose acc type
ACC_DEVICE_TYPE4 := ACC_MMA8X5X
红色部分修改为要添加/修改的sensor 模块名。lc186x 表示所用板子名称。
(2)在/hardware/leadcore/libsensor/sensors_hal/中添加厂商提供的HAL 代码;
代码放置在…/sensors_hal /acc_mma/目录下:
AccSensorMma8x5x.cpp
AccSensorMma8x5x.h
(3) acc_include.h 文件做如下修改:
#ifdef SENSOR_ACC_MMA8X5X
#include "acc_mma/AccSensorMma8x5x.h"
#endif
(4)Android.mk 中的相关修改参考如下:
ifeq ($(ACC_DEVICE_TYPE4), ACC_MMA8X5X)
LOCAL_CFLAGS += -DSENSOR_ACC -DSENSOR_ACC_MMA8X5X
LOCAL_SRC_FILES += acc_mma/AccSensorMma8x5x.cpp
(5) sensors.cpp 相关修改如下:
1. 在static const struct support_sensor_list SupportSensorList[]中新增支持的sensor 定义;
#ifdef SENSOR_ACC_MMA8X5X
{ accsensor_probe, ACC_MMA8X5X,/*此字段用于多供兼容*/
{ "acc_mma8x5x", "Freescale Semiconductor Inc.",
1, SENSORS_ACCELERATION_HANDLE,
SENSOR_TYPE_ACCELEROMETER, (2*GRAVITY_EARTH),
(GRAVITY_EARTH / (0x4000)), 0.30f, 20000, 0, 0, { }
},
},
#endif
注意accsensor_probe 函数的实现,这里采用通用的实现;
2. sensors_poll_context_t::sensors_poll_context_t()类构造函数中增加新sensor 的支持:
#ifdef SENSOR_ACC_MMA8X5X
case ACC_MMA8X5X:
{
mSensors[acc] = new AccSensorMma();
mPollFds[acc].fd = mSensors[acc]->getFd();
mPollFds[acc].events = POLLIN;
mPollFds[acc].revents = 0;
break;
}
#endif