Exemplo n.º 1
0
void
EnableSensorNotifications(SensorType aSensor)
{
  if (!sSensorModule) {
    hw_get_module(SENSORS_HARDWARE_MODULE_ID,
                       (hw_module_t const**)&sSensorModule);
    if (!sSensorModule) {
      LOGE("Can't get sensor HAL module\n");
      return;
    }

    sensors_open(&sSensorModule->common, &sSensorDevice);
    if (!sSensorDevice) {
      sSensorModule = NULL;
      LOGE("Can't get sensor poll device from module \n");
      return;
    }

    sensor_t const* sensors;
    int count = sSensorModule->get_sensors_list(sSensorModule, &sensors);
    for (size_t i=0 ; i<size_t(count) ; i++) {
      sSensorDevice->activate(sSensorDevice, sensors[i].handle, 0);
    }
  }

  if (!sPollingThread) {
    sPollingThread = new base::Thread("GonkSensors");
    MOZ_ASSERT(sPollingThread);
    // sPollingThread never terminates because poll may never return
    sPollingThread->Start();
    sPollingThread->message_loop()->PostTask(FROM_HERE,
                                     NewRunnableFunction(PollSensors));
  }

  SetSensorState(aSensor, true);
}
Exemplo n.º 2
0
int main(int argc, char** argv)
{
    int err;
    struct sensors_poll_device_t* device;
    struct sensors_module_t* module;

    int sns_handle;

    int flag_a = 0;
    int flag_m = 0;
    int flag_g = 0;
    int flag_p = 0;
    int flag_l = 0;
    int flag_wt = 0;

    if(argc != 2 )
        usage(-1);

    sns_handle = atoi(argv[1]);
    printf("sns handle [%d]\n",sns_handle);

#if 0
    for( int i=0; i < argc; i++ ){
        if( argv[i][0] == '-' ){
            switch(argv[i][1]){
                case 'A':
                    flag_a = 1;
                    break;
                case 'M':
                    flag_m = 1;
                    break;
                case 'G':
                    flag_g = 1;
                    break;
                case 'P':
                    flag_p = 1;
                    break;
                case 'L':
                    flag_l = 1;
                    break;
                case 'W':
                    flag_wt = 1;
                    break;
                default : 
                    usage(-1);
            }
        }
    }
#endif


    err = hw_get_module(SENSORS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
    if (err != 0) {
        printf("hw_get_module() failed (%s)\n", strerror(-err));
        return 0;
    }

    err = sensors_open(&module->common, &device);
    if (err != 0) {
        printf("sensors_open() failed (%s)\n", strerror(-err));
        return 0;
    }


    printf("%d flag:\n", flag_a);

    struct sensor_t const* list;
    int count = module->get_sensors_list(module, &list);
    printf("%d sensors found:\n", count);
#if 0
    for (int i=0 ; i<count ; i++) {
        if( 
                ( flag_a == 1 && list[i].type == SENSOR_TYPE_ACCELEROMETER ) ||
                ( flag_m == 1 && list[i].type == SENSOR_TYPE_MAGNETIC_FIELD ) ||
                ( flag_g == 1 && list[i].type == SENSOR_TYPE_GYROSCOPE) ||
                ( flag_p == 1 && list[i].type == SENSOR_TYPE_PROXIMITY) ||
                ( flag_wt == 1 && list[i].type == SENSOR_TYPE_WRIST_TILT_GESTURE) ||
                ( flag_l == 1 && list[i].type == SENSOR_TYPE_LIGHT) 
          )
        printf("%s\n"
                "\tvendor: %s\n"
                "\tversion: %d\n"
                "\thandle: %d\n"
                "\ttype: %d\n"
                "\tmaxRange: %f\n"
                "\tresolution: %f\n"
                "\tpower: %f mA\n",
                list[i].name,
                list[i].vendor,
                list[i].version,
                list[i].handle,
                list[i].type,
                list[i].maxRange,
                list[i].resolution,
                list[i].power);
    }

    static const size_t numEvents = 16;
    sensors_event_t buffer[numEvents];

            err = device->activate(device, list[i].handle, 0);
            if (err != 0) {
                printf("deactivate() for '%s'failed (%s)\n",
                        list[i].name, strerror(-err));
                return 0;
            }
        }
Exemplo n.º 3
0
int main(int argc, char** argv)
{
    int err;
    struct sensors_poll_device_t* device;
    struct sensors_module_t* module;

    err = hw_get_module(SENSORS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
    if (err != 0) {
        printf("hw_get_module() failed (%s)\n", err);
        return 0;
    }

    err = sensors_open(&module->common, &device);
    if (err != 0) {
        printf("sensors_open() failed (%s)\n", err);
        return 0;
    }

    printf ("Opened sensors\n");

    struct sensor_t const* list;
    int count = module->get_sensors_list(module, &list);
    printf("%d sensors found:\n", count);
    int i =0;
    for (i ; i<count ; i++) {
#if 0
        printf("%s\n"
                "\tvendor: %s\n"
                "\tversion: %d\n"
                "\thandle: %d\n"
                "\ttype: %d\n"
                "\tmaxRange: %f\n"
                "\tresolution: %f\n"
                "\tpower: %f mA\n",
                list[i].name,
                list[i].vendor,
                list[i].version,
                list[i].handle,
                list[i].type,
                list[i].maxRange,
                list[i].resolution,
                list[i].power);
#endif

        printf("%s\n"
                "\tvendor: %s\n"
                "\tversion: %d\n"
                "\thandle: %d\n"
               "\ttype: %d\n",
                list[i].name,
                list[i].vendor,
                list[i].version,
                list[i].handle,
                list[i].type);


    }

    static const size_t numEvents = 16;
    sensors_event_t buffer[numEvents];
    i = 0;
    for (i ; i<count ; i++) {
      printf("De-activate \n");
        err = device->activate(device, list[i].handle, 0);
        if (err != 0) {
            printf("deactivate() for '%s'failed (%s)\n",
                    list[i].name, err);
            return 0;
        }
    }
    i = 0;
    for (i ; i<count ; i++) {
        err = device->activate(device, list[i].handle, 1);
        if (err != 0) {
            printf("activate() for '%s'failed (%s)\n",
                    list[i].name, err);
            return 0;
        }
        device->setDelay(device, list[i].handle, 1);
    }

    do {
        int n = device->poll(device, buffer, numEvents);
        if (n < 0) {
            printf("poll() failed (%s)\n", err);
            break;
        }
        i = 0;
        //printf("read %d events:\n", n);
        for ( i ; i<n ; i++) {
            const sensors_event_t data = buffer[i];

            if (data.version != sizeof(sensors_event_t)) {
                printf("incorrect event version (version=%d, expected=%d",
                        data.version, sizeof(sensors_event_t));
                break;
            }

            switch(data.type) {
                case SENSOR_TYPE_ACCELEROMETER:
                case SENSOR_TYPE_MAGNETIC_FIELD:
                case SENSOR_TYPE_ORIENTATION:
                case SENSOR_TYPE_GYROSCOPE:
                case SENSOR_TYPE_GRAVITY:
                case SENSOR_TYPE_LINEAR_ACCELERATION:
                case SENSOR_TYPE_ROTATION_VECTOR:
                    printf("sensor=%s, time=%lld, value=<%5.1f,%5.1f,%5.1f>\n",
                            getSensorName(data.type),
                            data.timestamp,
                            data.data[0],
                            data.data[1],
                            data.data[2]);
                    break;

                case SENSOR_TYPE_LIGHT:
                case SENSOR_TYPE_PRESSURE:
                case SENSOR_TYPE_TEMPERATURE:
                case SENSOR_TYPE_PROXIMITY:
                case SENSOR_TYPE_RELATIVE_HUMIDITY:
                case SENSOR_TYPE_AMBIENT_TEMPERATURE:
                  /*printf("sensor=%s, time=%lld, value=%f\n",
                            getSensorName(data.type),
                            data.timestamp,
                            data.data[0]);
                  */
                    break;

                default:
                    printf("sensor=%d, time=%lld, value=<%f,%f,%f, ...>\n",
                            data.type,
                            data.timestamp,
                            data.data[0],
                            data.data[1],
                            data.data[2]);
                    break;
            }
        }
    } while (1); // fix that

    i = 0;
    for (i ; i<count ; i++) {
        err = device->activate(device, list[i].handle, 0);
        if (err != 0) {
            printf("deactivate() for '%s'failed (%s)\n",
                    list[i].name, err);
            return 0;
        }
    }

    err = sensors_close(device);
    if (err != 0) {
        printf("sensors_close() failed (%s)\n", err);
    }
    return 0;
}