使用的是RK3588的源码进行分析,在安卓中都是通过hal层读取数据的。主要是跟了一下流程进行分析。
1.读取流程图
2.代码分析
文件路径/hardware/rockchip/sensor/st/sensor.c 这是rk3588在hal层对sensor驱动数据读取的总文件入口文件。
调用关系sensors_module_methods->open_sensors->init_nusensors(module, device);
2.1init_nusensors(module, device);
主要是建立了sensors_poll_context_t();对象,设置了对应的回调函数,重点在sensors_poll_context_t();对象。
其构造函数如下
主要的作用是new对应的驱动类型的对象。
2.2sensors_poll_context_t::pollEvents函数
使用 nb = poll(mPollFds, numFds, polltime)进行事件的监控其中polltime的值为-1;没有事件发生则一直等待。
发生相应的事件后会调用nb = sensor->readEvents(data, count);对GyroSensor来说就是下面的函数
int GyroSensor::readEvents(sensors_event_t* data, int count)
2.3int GyroSensor::readEvents(sensors_event_t* data, int count)函数
函数中调用ssize_t n = mInputReader.fill(data_fd);计算事件的数量,并对缓冲区的可用大小进行了变更。
判断是否发生对应的数据类型调用processEvent(event->code, event->value);把数据写入。
2.4processEvent(event->code, event->value);函数