NativeSensorManager
NativeSensorManager定义如下,
class NativeSensorManager : public Singleton<NativeSensorManager> {
friend class Singleton<NativeSensorManager>;
NativeSensorManager();
~NativeSensorManager();
struct sensor_t sensor_list[MAX_SENSORS];
struct SensorContext context[MAX_SENSORS];
struct SensorEventMap event_list[MAX_SENSORS];
•••
sensor_list表示每个sensor属性的数组;context表示每个sensor完整信息的信息,里面的每个SensorContext 类型的元素都完整的描述了
一个sensor 的所有信息,包括sensor设备节点路径和对应的event设备节点的路径等;event_list则为所有实际sensor的事件信息列表;
其它变量在分析具体代码的时候再讲述。
NativeSensorManager的getNode方法如下,
int NativeSensorManager:: getNode(char *buf, char *path, const struct SysfsMap *map) {
char * fret;
ssize_t len = 0;
int fd;
char tmp[SYSFS_MAXLEN];
•••
这个函数根据输入参数path(表示设备的节点路径)和map(描述节点下各个属性节点的信息)获取某个设备节点下的属性节点信息,path一般为/sys/class/sensors/xxxx(deivce)/xxx(node)的形式,如light sensor 的name节点,则为/sys/class/sensors/ltr559-light/name,读取该节点则会
调用到底层驱动的sensors_name_show函数,这里该函数会返回ltr559-light。
const struct SysfsMap NativeSensorManager::node_map[] = {
{offsetof(struct sensor_t, name), SYSFS_NAME, TYPE_STRING, 1},
{offsetof(struct sensor_t, vendor), SYSFS_VENDOR, TYPE_STRING,1},
{offsetof(struct sensor_t, version), SYSFS_VERSION, TYPE_INTEGER,1},
{offsetof(struct sensor_t, type), SYSFS_TYPE, TYPE_INTEGER, 1},
{offsetof(struct sensor_t, maxRange), SYSFS_MAXRANGE, TYPE_FLOAT,1},
•••
上面描述每个sensor驱动设备节点中的属性节点信息,所有sensor驱动设备都会包含上面的节点,HAL正是通过这些节点