Gsensor校准数据开机状态下未写入设备数据分析

本文详细解析了Gsensor数据从设备底层到上层应用的传递过程,包括SensorEventListener的回调、SensorEventQueue的事件处理以及kernel层的input_report_abs函数,探讨了在开机状态下校准数据未写入设备的问题,重点在于校准数据在校正过程中的作用和可能存在的问题。
摘要由CSDN通过智能技术生成
sensor数据都是SensorEventListener.onSensorChanged回调过来的value下的值


那么value下的值是从何而来


先看注册


manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);


listener为SensorEventListener类型


D/SensorManager( 2161): registerListenerImpl add first sensor {Sensor name="Devices 3-axis Accelerometer", vendor="Spreadtrum
rometer", version=1, type=1, maxRange=19.6133, resolution=0.009576807, power=0.7, minDelay=10000} to listener:com.sprd.validat
ls.itemstest.GsensorTestActivity$2@1a2952dc result true


调用SensorManager( 2161): registerListenerImpl


registerListenerImpl的实现在SystemSensorManager


    @Override
    protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor,
            int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags) {
        if (listener == null || sensor == null) {
            Log.e(TAG, "sensor or listener is null");
            return false;
        }
        // Trigger Sensors should use the requestTriggerSensor call.
        if (sensor.getReportingMode() == Sensor.REPORTING_MODE_ONE_SHOT) {
            Log.e(TAG, "Trigger Sensors should use the requestTriggerSensor.");
            return false;
        }
        if (maxBatchReportLatencyUs < 0 || delayUs < 0) {
            Log.e(TAG, "maxBatchReportLatencyUs and delayUs should be non-negative");
            return false;
        }


        // Invariants to preserve:
        // - one Looper per SensorEventListener
        // - one Looper per SensorEventQueue
        // We map SensorEventListener to a SensorEventQueue, which holds the looper
        synchronized (mSensorListeners) {
            SensorEventQueue queue = mSensorListeners.get(listener);
            boolean result;
            if (queue == null) {
                Looper looper = (handler != null) ? handler.getLooper() : mMainLooper;
                queue = new SensorEventQueue(listener, looper, this);


                result = queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags);
                Log.d(TAG, "registerListenerImpl add first sensor " + sensor + " to listener:" + listener + " result " + result);
                if (!result) {
                    queue.dispose();
                    return false;
                }
                Log.d(TAG, "registerListenerImpl bind queue and listener " + listener);
                mSensorListeners.put(listener, queue);
                return true;
            } else {
                result = queue.addSensor(sensor, delayUs, maxBatchReportLatencyUs, reservedFlags);
                Log.d(TAG, "registerListenerImpl add more sensor:" + sensor + " to listener:" + listener + " result:" + result);
                return result;
            }
        }
    }
queue = new SensorEventQueue(listener, looper, this);
这句话看着应该是时looper循环给listener值的


看看写了啥


   static final class SensorEventQueue extends BaseEventQueue {
        private final SensorEventListener mListener;
        private final SparseArray<SensorEvent> mSensorsEvents = new SparseArray<SensorEvent>();


        public SensorEventQueue(SensorEventListener listener, Looper looper,
                SystemSensorManager manager) {
            super(looper, manager);
            mListener = listener;
        }


        @Override
        public void addSensorEvent(Sensor sensor) {
            SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor,
                    mManager.mTargetSdkLevel));
            synchronized (mSensorsEvents) {
                mSensorsEvents.put(sensor.getHandle(), t);
            }
        }


        @Override
        public void removeSensorEvent(Sensor sensor) {
            synch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值