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); }
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; } }
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; }