[PLATFORM]
MT6575 MT6577 MT6589
[SOLUTION]
proximity sensor报告值已处理,一般为固定报告1或0,如需取得proximity sensor根据不同的处理模式,实时值:
1、polling模式,XXX_ps_operate()函数中
case SENSOR_GET_DATA:
……
sensor_data->values[0]=XXX_get_ps_value(……);//上传判断后的值,即0或1;
sensor_data->values[1]=obj->ps;//使用values[1]上传proximity sensor的raw data;
……
中断模式,在XXX_eint_work函数中:
……
sensor_data->values[0]=XXX_get_ps_value(……);//上传判断后的值,即0或1;
sensor_data->values[1]=obj->ps;//使用values[1]上传proximity sensor的raw data;
1和2的方式还需要hwmsen_dev.c:
在hwmsen_get_interrupt_data(int sensor,hwm_sensor_data *data)在函数中,需要把proximity sensor单独提出处理,即添加此代码:
if(sensor == ID_PROXIMITY)
{
if(data->values[1] != obj_data.sensors_data[sensor].values[1])
{
mutex_lock(&obj_data.lock);
obj_data.data_updata[sensor] = 1;
obj_data.sensors_data[sensor].values[1] = data->values[1];
obj_data.sensors_data[sensor].time = nt;
obj_data.sensors_data[sensor].value_divide = data->value_divide;
mutex_unlock(&obj_data.lock);
}
}
这样,在应用层中监控onSensorChanged可以:
用values[0]即可得到表示靠近和远离的0和1;
用values[1]即可获得sensor 的raw data。
java 层
private SensorManager sensorManager;
private Sensor P_sensor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
P_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(sensorEventListener, P_sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(sensorEventListener);
}
/**
*
*/
private SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float f_proximiny = event.values[0];
float f_proximiny2 = event.values[1];
String f_proximinystr=String.valueOf(f_proximiny);
String f_proximinystr2=String.valueOf(f_proximiny2);
String str="P-Sensor" "\n" "靠近或远离values[0]=" f_proximinystr "\n" "真实距离values[1]=" f_proximinystr2;
controlsView1.setText(str);
// Toast.makeText(FullscreenActivity.this , f_proximinystr, 0).show();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}};