��ǰλ��:��ҳ > Ƕ��ʽ��ѵ > Ƕ��ʽѧϰ > ��ʦ���� >
Andriod Sensor �ܹ���������
ʱ�䣺2018-08-16���ߣ�����Զ��

1��Android sensor�ܹ�

Android4.0ϵͳ���öԴ�������֧�ִ�13�֣����Ƿֱ��ǣ����ٶȴ�����(accelerometer)������������(magnetic field)�����򴫸���(orientation)��������(gyroscope)���������մ�����(light)��ѹ��������(pressure)���¶ȴ�����(temperature)�;��봫����(proximity)�ȡ�

Androidʵ�ִ�����ϵͳ�������¼������֣�

������֮��ܹ�ͼ���£�

2��Sensor HAL��ӿ�

GoogleΪSensor�ṩ��ͳһ��HAL�ӿڣ���ͬ��Ӳ��������Ҫ���ݸýӿ���ʵ�ֲ���ɾ����Ӳ������㣬Android��Sensor��HAL�ӿڶ����ڣ�hardware/libhardware/include/hardware/sensors.h

�Դ��������͵Ķ��壺

������ģ��Ķ���ṹ�����£�

�ýӿڵĶ���ʵ�����ǶԱ�׼��Ӳ��ģ��hw_module_t��һ����չ��������һ��get_sensors_list���������ڻ�ȡ���������б��

������һ��sensor�豸������һ��sensor_t�ṹ�壬�䶨�����£�

ÿ����������������sensors_event_t�ṹ���ʾ���������£�

���У�sensorΪ�������ı�־��������ͬ�Ĵ����������union��ʽ����ʾ��sensors_vec_t�ṹ��������ʾ��ͬ�����������ݣ�sensors_vec_t�������£�

Sensor�豸�ṹ��sensors_poll_device_t���Ա�׼Ӳ���豸hw_device_t�ṹ�����չ����Ҫ��ɶ�ȡ�ײ����ݣ��������ݴ洢��struct sensors_poll_device_t�ṹ���У�poll����������ȡ�ײ����ݣ�����ʱ���������������£�

�����豸��/�رսṹ�嶨�����£�

3��Sensor HALʵ��(��LM75�¶ȴ�����Ϊ����)

��1�����豸����ͼ

��2��ʵ�ִ������

�ڴ����к�������������ADC��λ����LM75�¶ȴ�������������sensor.c�У�������Ҫ���崫��������device_sensor_list[]����ʵ���dz�ʼ��struct sensor_t�ṹ�壬��ʼ�����£�

����open_sensors����������Sensorģ�飬�������£�

����������У�������ҪΪhw_device_t�����ڴ�ռ䣬�������ʼ����������Ҫ������ʵ�֡�

control_open_data_source()�򿪴�������ʹ���豸��

����sensor__data_poll������ȡ���ݣ�

/*��ѯ��ȡ����*/
        static int sensors__data_poll(struct sensors_data_context_t *dev, sensors_data_t * values)
        {
            int n;
            int mag;
            float temp;
            char buf[10];
            while (1) {
            if(count % 3 == 2) // ��ȡ���ģ�ֵ
            {
                if( read(dev->event_fd[0], &mag, sizeof(mag)) < 0)
                {
                   LOGE("read adc error");
                }else{ 
                dev->sensors[ID_MAGNETIC_FIELD].magnetic.v[0] =(float)mag; 
                LOGE("read adc %f\n",(float)mag);
                *values = dev->sensors[ID_MAGNETIC_FIELD];
                values->sensor = ID_MAGNETIC_FIELD;
                count++;
                }
                usleep(500000);
                return ID_MAGNETIC_FIELD;
                }
                else if(count%3 == 1) //��ȡ�¶ȴ�����ֵ
                 {
                memset(buf, 0 ,sizeof(buf));
                if((n = read(dev->event_fd[1], buf, 10)) < 0)
                {
                    LOGE("read temp error");
                    }else{
                    buf[n - 1] = '\0';
                    temp =(float) (atoi(buf) / 1000);
                    dev->sensors[ID_TEMPERATURE].temperature = temp;
                    LOGE("read temp %f\n",temp);
                    *values = dev->sensors[ID_TEMPERATURE];
                    values->sensor = ID_TEMPERATURE;
                    count++;
                }
                    close(dev->event_fd[1]);
                    dev->event_fd[1]= open("/sys/bus/i2c/devices/0-0048/temp1_input", O_RDONLY);
                    usleep(500000);
                    return ID_TEMPERATURE;
               }
               else if(count%3 == 0) //��ȡ���򴫸���ģ��ֵ
                 {
                    LOGI("read orientation\n");
                    /* fill up data of orientation */
                    dev->sensors[ID_ORIENTATION].orientation.azimuth = x + 5;
                    dev->sensors[ID_ORIENTATION].orientation.pitch = y + 5;
                 &nbnbsp;  dev->sensors[ID_ORIENTATION].orientation.roll = z + 5;
                    *values = dev->sensors[ID_ORIENTATION];
                    values->sensor = ID_ORIENTATION;
                    count++;
                    x += 0.0001; y += 0.0001; z += 0.0001;
                    usleep (500000);
                    return ID_ORIENTATION;
              }
            }
        }

Sensor��ؼ�����

Sensor��ܽṹ����

Sensor HAL��ܷ���


��������

ȫ����ѯ�绰��400-611-6270��˫���ռ��ڼ������µ�ֵ���ֻ���15010390966

������ѯ�� ����ʦQQ��3337544669���� ����ʦQQ��1462495461���� ����ʦ QQ��3108687497��

��ҵ��ѵǢ̸ר�ߣ�010-82600901��ԺУ����Ǣ̸ר�ߣ�010-82600350��������ѯ��QQ��248856300��

Copyright 2004-2018 ����Զ���������� ��Ȩ���� ����ICP��16055225�ţ�������������11010802025203��