1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "sensorlist.h" 18 19 #include <math.h> 20 21 #include "hubdefs.h" 22 23 using namespace android; 24 25 const int kVersion = 1; 26 27 const float kMinSampleRateHzAccel = 6.250f; 28 const float kMaxSampleRateHzAccel = 400.0f; 29 extern const float kScaleAccel = (8.0f * 9.81f / 32768.0f); 30 31 const float kMinSampleRateHzGyro = 6.250f; 32 const float kMaxSampleRateHzGyro = 400.0f; 33 34 const float kMinSampleRateHzMag = 3.125f; 35 const float kMaxSampleRateHzMag = 50.0f; 36 extern const float kScaleMag = 0.15f; 37 38 const float kMinSampleRateHzPolling = 0.1f; 39 const float kMaxSampleRateHzPolling = 25.0f; 40 41 const float kMinSampleRateHzPressure = 0.1f; 42 const float kMaxSampleRateHzPressure = 10.0f; 43 44 const float kMinSampleRateHzTemperature = kMinSampleRateHzPolling; 45 const float kMaxSampleRateHzTemperature = kMaxSampleRateHzPolling; 46 47 const float kMinSampleRateHzProximity = kMinSampleRateHzPolling; 48 const float kMaxSampleRateHzProximity = 5.0; 49 50 const float kMinSampleRateHzLight = kMinSampleRateHzPolling; 51 const float kMaxSampleRateHzLight = 5.0; 52 53 const float kMinSampleRateHzOrientation = 12.5f; 54 const float kMaxSampleRateHzOrientation = 200.0f; 55 56 #ifdef DIRECT_REPORT_ENABLED 57 constexpr uint32_t kDirectReportFlagAccel = ( 58 // support up to rate level fast (nominal 200Hz); 59 (SENSOR_DIRECT_RATE_FAST << SENSOR_FLAG_SHIFT_DIRECT_REPORT) 60 // support ashmem and gralloc direct channel 61 | SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM 62 | SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC); 63 constexpr uint32_t kDirectReportFlagGyro = ( 64 // support up to rate level fast (nominal 200Hz); 65 (SENSOR_DIRECT_RATE_FAST << SENSOR_FLAG_SHIFT_DIRECT_REPORT) 66 // support ashmem and gralloc direct channel 67 | SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM 68 | SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC); 69 constexpr uint32_t kDirectReportFlagMag = ( 70 // support up to rate level normal (nominal 50Hz); 71 (SENSOR_DIRECT_RATE_NORMAL << SENSOR_FLAG_SHIFT_DIRECT_REPORT) 72 // support ashmem and gralloc direct channel 73 | SENSOR_FLAG_DIRECT_CHANNEL_ASHMEM 74 | SENSOR_FLAG_DIRECT_CHANNEL_GRALLOC); 75 #else 76 constexpr uint32_t kDirectReportFlagAccel = 0; 77 constexpr uint32_t kDirectReportFlagGyro = 0; 78 constexpr uint32_t kDirectReportFlagMag = 0; 79 #endif 80 81 /* 82 * The fowllowing max count is determined by the total number of blocks 83 * avaliable in the shared nanohub buffer and number of samples each type of 84 * event can hold within a buffer block. 85 * For marlin's case, there are 239 blocks in the shared sensor buffer and 86 * each block can hold 30 OneAxis Samples, 15 ThreeAxis Samples or 24 87 * RawThreeAxies Samples. 88 */ 89 const int kMaxOneAxisEventCount = 7170; 90 const int kMaxThreeAxisEventCount = 3585; 91 const int kMaxRawThreeAxisEventCount = 5736; 92 93 const int kMinFifoReservedEventCount = 20; 94 95 const char SENSOR_STRING_TYPE_INTERNAL_TEMPERATURE[] = 96 "com.google.sensor.internal_temperature"; 97 const char SENSOR_STRING_TYPE_SYNC[] = 98 "com.google.sensor.sync"; 99 const char SENSOR_STRING_TYPE_DOUBLE_TWIST[] = 100 "com.google.sensor.double_twist"; 101 const char SENSOR_STRING_TYPE_DOUBLE_TAP[] = 102 "com.google.sensor.double_tap"; 103 const char SENSOR_STRING_TYPE_DOUBLE_TOUCH[] = 104 "com.google.sensor.double_touch"; 105 106 extern const sensor_t kSensorList[] = { 107 { 108 "TMD4903 Proximity Sensor", 109 "AMS", 110 kVersion, 111 COMMS_SENSOR_PROXIMITY, 112 SENSOR_TYPE_PROXIMITY, 113 5.0f, // maxRange (cm) 114 1.0f, // resolution (cm) 115 0.0f, // XXX power 116 (int32_t)(1.0E6f / kMaxSampleRateHzProximity), // minDelay 117 300, // XXX fifoReservedEventCount 118 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 119 SENSOR_STRING_TYPE_PROXIMITY, 120 "", // requiredPermission 121 (long)(1.0E6f / kMinSampleRateHzProximity), // maxDelay 122 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ON_CHANGE_MODE, 123 { NULL, NULL } 124 }, 125 { 126 "TMD4903 Light Sensor", 127 "AMS", 128 kVersion, 129 COMMS_SENSOR_LIGHT, 130 SENSOR_TYPE_LIGHT, 131 43000.0f, // maxRange (lx) 132 10.0f, // XXX resolution (lx) 133 0.0f, // XXX power 134 (int32_t)(1.0E6f / kMaxSampleRateHzLight), // minDelay 135 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 136 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 137 SENSOR_STRING_TYPE_LIGHT, 138 "", // requiredPermission 139 (long)(1.0E6f / kMinSampleRateHzLight), // maxDelay 140 SENSOR_FLAG_ON_CHANGE_MODE, 141 { NULL, NULL } 142 }, 143 { 144 "BMI160 accelerometer", 145 "Bosch", 146 kVersion, 147 COMMS_SENSOR_ACCEL, 148 SENSOR_TYPE_ACCELEROMETER, 149 GRAVITY_EARTH * 8.0f, // maxRange 150 GRAVITY_EARTH * 8.0f / 32768.0f, // resolution 151 0.0f, // XXX power 152 (int32_t)(1.0E6f / kMaxSampleRateHzAccel), // minDelay 153 3000, // XXX fifoReservedEventCount 154 kMaxRawThreeAxisEventCount, // XXX fifoMaxEventCount 155 SENSOR_STRING_TYPE_ACCELEROMETER, 156 "", // requiredPermission 157 (long)(1.0E6f / kMinSampleRateHzAccel), // maxDelay 158 SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagAccel, 159 { NULL, NULL } 160 }, 161 { 162 "BMI160 gyroscope", 163 "Bosch", 164 kVersion, 165 COMMS_SENSOR_GYRO, 166 SENSOR_TYPE_GYROSCOPE, 167 1000.0f * M_PI / 180.0f, // maxRange 168 1000.0f * M_PI / (180.0f * 32768.0f), // resolution 169 0.0f, // XXX power 170 (int32_t)(1.0E6f / kMaxSampleRateHzGyro), // minDelay 171 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 172 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 173 SENSOR_STRING_TYPE_GYROSCOPE, 174 "", // requiredPermission 175 (long)(1.0E6f / kMinSampleRateHzGyro), // maxDelay 176 SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagGyro, 177 { NULL, NULL } 178 }, 179 { 180 "BMI160 gyroscope (uncalibrated)", 181 "Bosch", 182 kVersion, 183 COMMS_SENSOR_GYRO_UNCALIBRATED, 184 SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 185 1000.0f * M_PI / 180.0f, // maxRange 186 1000.0f * M_PI / (180.0f * 32768.0f), // resolution 187 0.0f, // XXX power 188 (int32_t)(1.0E6f / kMaxSampleRateHzGyro), // minDelay 189 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 190 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 191 SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED, 192 "", // requiredPermission 193 (long)(1.0E6f / kMinSampleRateHzGyro), // maxDelay 194 SENSOR_FLAG_CONTINUOUS_MODE, 195 { NULL, NULL } 196 }, 197 { 198 "AK09915 magnetometer", 199 "AKM", 200 kVersion, 201 COMMS_SENSOR_MAG, 202 SENSOR_TYPE_MAGNETIC_FIELD, 203 1300.0f, // XXX maxRange 204 0.0f, // XXX resolution 205 0.0f, // XXX power 206 (int32_t)(1.0E6f / kMaxSampleRateHzMag), // minDelay 207 600, // XXX fifoReservedEventCount 208 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 209 SENSOR_STRING_TYPE_MAGNETIC_FIELD, 210 "", // requiredPermission 211 (long)(1.0E6f / kMinSampleRateHzMag), // maxDelay 212 SENSOR_FLAG_CONTINUOUS_MODE | kDirectReportFlagMag, 213 { NULL, NULL } 214 }, 215 { 216 "AK09915 magnetometer (uncalibrated)", 217 "AKM", 218 kVersion, 219 COMMS_SENSOR_MAG_UNCALIBRATED, 220 SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 221 1300.0f, // XXX maxRange 222 0.0f, // XXX resolution 223 0.0f, // XXX power 224 (int32_t)(1.0E6f / kMaxSampleRateHzMag), // minDelay 225 600, // XXX fifoReservedEventCount 226 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 227 SENSOR_STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 228 "", // requiredPermission 229 (long)(1.0E6f / kMinSampleRateHzMag), // maxDelay 230 SENSOR_FLAG_CONTINUOUS_MODE, 231 { NULL, NULL } 232 }, 233 { 234 "BMP285 pressure", 235 "Bosch", 236 kVersion, 237 COMMS_SENSOR_PRESSURE, 238 SENSOR_TYPE_PRESSURE, 239 1100.0f, // maxRange (hPa) 240 0.005f, // resolution (hPa) 241 0.0f, // XXX power 242 (int32_t)(1.0E6f / kMaxSampleRateHzPressure), // minDelay 243 300, // XXX fifoReservedEventCount 244 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 245 SENSOR_STRING_TYPE_PRESSURE, 246 "", // requiredPermission 247 (long)(1.0E6f / kMinSampleRateHzPressure), // maxDelay 248 SENSOR_FLAG_CONTINUOUS_MODE, 249 { NULL, NULL } 250 }, 251 { 252 "BMP285 temperature", 253 "Bosch", 254 kVersion, 255 COMMS_SENSOR_TEMPERATURE, 256 SENSOR_TYPE_INTERNAL_TEMPERATURE, 257 85.0f, // maxRange (degC) 258 0.01, // resolution (degC) 259 0.0f, // XXX power 260 (int32_t)(1.0E6f / kMaxSampleRateHzTemperature), // minDelay 261 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 262 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 263 SENSOR_STRING_TYPE_INTERNAL_TEMPERATURE, 264 "", // requiredPermission 265 (long)(1.0E6f / kMinSampleRateHzTemperature), // maxDelay 266 SENSOR_FLAG_CONTINUOUS_MODE, 267 { NULL, NULL } 268 }, 269 { 270 "Orientation", 271 "Google", 272 kVersion, 273 COMMS_SENSOR_ORIENTATION, 274 SENSOR_TYPE_ORIENTATION, 275 360.0f, // maxRange (deg) 276 1.0f, // XXX resolution (deg) 277 0.0f, // XXX power 278 (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay 279 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 280 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 281 SENSOR_STRING_TYPE_ORIENTATION, 282 "", // requiredPermission 283 (long)(1.0E6f / kMinSampleRateHzOrientation), // maxDelay 284 SENSOR_FLAG_CONTINUOUS_MODE, 285 { NULL, NULL } 286 }, 287 { 288 "BMI160 Step detector", 289 "Bosch", 290 kVersion, 291 COMMS_SENSOR_STEP_DETECTOR, 292 SENSOR_TYPE_STEP_DETECTOR, 293 1.0f, // maxRange 294 1.0f, // XXX resolution 295 0.0f, // XXX power 296 0, // minDelay 297 100, // XXX fifoReservedEventCount 298 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 299 SENSOR_STRING_TYPE_STEP_DETECTOR, 300 "", // requiredPermission 301 0, // maxDelay 302 SENSOR_FLAG_SPECIAL_REPORTING_MODE, 303 { NULL, NULL } 304 }, 305 { 306 "BMI160 Step counter", 307 "Bosch", 308 kVersion, 309 COMMS_SENSOR_STEP_COUNTER, 310 SENSOR_TYPE_STEP_COUNTER, 311 1.0f, // XXX maxRange 312 1.0f, // resolution 313 0.0f, // XXX power 314 0, // minDelay 315 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 316 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 317 SENSOR_STRING_TYPE_STEP_COUNTER, 318 "", // requiredPermission 319 0, // maxDelay 320 SENSOR_FLAG_ON_CHANGE_MODE, 321 { NULL, NULL } 322 }, 323 { 324 "Significant motion", 325 "Google", 326 kVersion, 327 COMMS_SENSOR_SIGNIFICANT_MOTION, 328 SENSOR_TYPE_SIGNIFICANT_MOTION, 329 1.0f, // maxRange 330 1.0f, // XXX resolution 331 0.0f, // XXX power 332 -1, // minDelay 333 0, // XXX fifoReservedEventCount 334 0, // XXX fifoMaxEventCount 335 SENSOR_STRING_TYPE_SIGNIFICANT_MOTION, 336 "", // requiredPermission 337 0, // maxDelay 338 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE, 339 { NULL, NULL } 340 }, 341 { 342 "Gravity", 343 "Google", 344 kVersion, 345 COMMS_SENSOR_GRAVITY, 346 SENSOR_TYPE_GRAVITY, 347 1000.0f, // maxRange 348 1.0f, // XXX resolution 349 0.0f, // XXX power 350 (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay 351 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 352 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 353 SENSOR_STRING_TYPE_GRAVITY, 354 "", // requiredPermission 355 (long)(1.0E6f / kMinSampleRateHzOrientation), // maxDelay 356 SENSOR_FLAG_CONTINUOUS_MODE, 357 { NULL, NULL } 358 }, 359 { 360 "Linear Acceleration", 361 "Google", 362 kVersion, 363 COMMS_SENSOR_LINEAR_ACCEL, 364 SENSOR_TYPE_LINEAR_ACCELERATION, 365 1000.0f, // maxRange 366 1.0f, // XXX resolution 367 0.0f, // XXX power 368 (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay 369 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 370 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 371 SENSOR_STRING_TYPE_LINEAR_ACCELERATION, 372 "", // requiredPermission 373 (long)(1.0E6f / kMinSampleRateHzOrientation), // maxDelay 374 SENSOR_FLAG_CONTINUOUS_MODE, 375 { NULL, NULL } 376 }, 377 { 378 "Rotation Vector", 379 "Google", 380 kVersion, 381 COMMS_SENSOR_ROTATION_VECTOR, 382 SENSOR_TYPE_ROTATION_VECTOR, 383 1000.0f, // maxRange 384 1.0f, // XXX resolution 385 0.0f, // XXX power 386 (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay 387 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 388 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 389 SENSOR_STRING_TYPE_ROTATION_VECTOR, 390 "", // requiredPermission 391 (long)(1.0E6f / kMinSampleRateHzOrientation), // maxDelay 392 SENSOR_FLAG_CONTINUOUS_MODE, 393 { NULL, NULL } 394 }, 395 { 396 "Geomagnetic Rotation Vector", 397 "Google", 398 kVersion, 399 COMMS_SENSOR_GEO_MAG, 400 SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 401 1000.0f, // maxRange 402 1.0f, // XXX resolution 403 0.0f, // XXX power 404 (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay 405 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 406 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 407 SENSOR_STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 408 "", // requiredPermission 409 (long)(1.0E6f / kMinSampleRateHzOrientation), // maxDelay 410 SENSOR_FLAG_CONTINUOUS_MODE, 411 { NULL, NULL } 412 }, 413 { 414 "Game Rotation Vector", 415 "Google", 416 kVersion, 417 COMMS_SENSOR_GAME_ROTATION_VECTOR, 418 SENSOR_TYPE_GAME_ROTATION_VECTOR, 419 1000.0f, // maxRange 420 1.0f, // XXX resolution 421 0.0f, // XXX power 422 (int32_t)(1.0E6f / kMaxSampleRateHzOrientation), // minDelay 423 300, // XXX fifoReservedEventCount 424 kMaxThreeAxisEventCount, // XXX fifoMaxEventCount 425 SENSOR_STRING_TYPE_GAME_ROTATION_VECTOR, 426 "", // requiredPermission 427 (long)(1.0E6f / kMinSampleRateHzOrientation), // maxDelay 428 SENSOR_FLAG_CONTINUOUS_MODE, 429 { NULL, NULL } 430 }, 431 { 432 "Tilt Detector", 433 "Google", 434 kVersion, 435 COMMS_SENSOR_TILT, 436 SENSOR_TYPE_TILT_DETECTOR, 437 1.0f, // maxRange 438 1.0f, // XXX resolution 439 0.0f, // XXX power 440 0, // minDelay 441 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 442 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 443 SENSOR_STRING_TYPE_TILT_DETECTOR, 444 "", // requiredPermission 445 0, // maxDelay 446 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_SPECIAL_REPORTING_MODE, 447 { NULL, NULL } 448 }, 449 { 450 "Pickup Gesture", 451 "Google", 452 kVersion, 453 COMMS_SENSOR_GESTURE, 454 SENSOR_TYPE_PICK_UP_GESTURE, 455 1.0f, // maxRange 456 1.0f, // XXX resolution 457 0.0f, // XXX power 458 -1, // minDelay 459 0, // XXX fifoReservedEventCount 460 0, // XXX fifoMaxEventCount 461 SENSOR_STRING_TYPE_PICK_UP_GESTURE, 462 "", // requiredPermission 463 0, // maxDelay 464 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE, 465 { NULL, NULL } 466 }, 467 { 468 "Sensors Sync", 469 "Google", 470 kVersion, 471 COMMS_SENSOR_SYNC, 472 SENSOR_TYPE_SYNC, 473 1.0f, // maxRange 474 1.0f, // XXX resolution 475 0.1f, // XXX power 476 0, // minDelay 477 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 478 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 479 SENSOR_STRING_TYPE_SYNC, 480 "", // requiredPermission 481 0, // maxDelay 482 SENSOR_FLAG_SPECIAL_REPORTING_MODE, 483 { NULL, NULL } 484 }, 485 { 486 "Double Twist", 487 "Google", 488 kVersion, 489 COMMS_SENSOR_DOUBLE_TWIST, 490 SENSOR_TYPE_DOUBLE_TWIST, 491 1.0f, // maxRange 492 1.0f, // XXX resolution 493 0.1f, // XXX power 494 0, // minDelay 495 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 496 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 497 SENSOR_STRING_TYPE_DOUBLE_TWIST, 498 "", // requiredPermission 499 0, // maxDelay 500 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_SPECIAL_REPORTING_MODE, 501 { NULL, NULL } 502 }, 503 { 504 "Double Tap", 505 "Google", 506 kVersion, 507 COMMS_SENSOR_DOUBLE_TAP, 508 SENSOR_TYPE_DOUBLE_TAP, 509 1.0f, // maxRange 510 1.0f, // XXX resolution 511 0.1f, // XXX power 512 0, // minDelay 513 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 514 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 515 SENSOR_STRING_TYPE_DOUBLE_TAP, 516 "", // requiredPermission 517 0, // maxDelay 518 SENSOR_FLAG_SPECIAL_REPORTING_MODE, 519 { NULL, NULL } 520 }, 521 { 522 "Device Orientation", 523 "Google", 524 kVersion, 525 COMMS_SENSOR_WINDOW_ORIENTATION, 526 SENSOR_TYPE_DEVICE_ORIENTATION, 527 3.0f, // maxRange 528 1.0f, // XXX resolution 529 0.1f, // XXX power 530 0, // minDelay 531 kMinFifoReservedEventCount, // XXX fifoReservedEventCount 532 kMaxOneAxisEventCount, // XXX fifoMaxEventCount 533 SENSOR_STRING_TYPE_DEVICE_ORIENTATION, 534 "", // requiredPermission 535 0, // maxDelay 536 SENSOR_FLAG_ON_CHANGE_MODE, 537 { NULL, NULL } 538 }, 539 { 540 "Double Touch", 541 "Google", 542 kVersion, 543 COMMS_SENSOR_DOUBLE_TOUCH, 544 SENSOR_TYPE_DOUBLE_TOUCH, 545 1.0f, // maxRange 546 1.0f, // XXX resolution 547 0.0f, // XXX power 548 -1, // minDelay 549 0, // XXX fifoReservedEventCount 550 0, // XXX fifoMaxEventCount 551 SENSOR_STRING_TYPE_DOUBLE_TOUCH, 552 "", // requiredPermission 553 0, // maxDelay 554 SENSOR_FLAG_WAKE_UP | SENSOR_FLAG_ONE_SHOT_MODE, 555 { NULL, NULL } 556 }, 557 { 558 "BMI160 accelerometer (uncalibrated)", 559 "Bosch", 560 kVersion, 561 COMMS_SENSOR_ACCEL_UNCALIBRATED, 562 SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED, 563 GRAVITY_EARTH * 8.0f, // maxRange 564 GRAVITY_EARTH * 8.0f / 32768.0f, // resolution 565 0.0f, // XXX power 566 (int32_t)(1.0E6f / kMaxSampleRateHzAccel), // minDelay 567 3000, // XXX fifoReservedEventCount 568 kMaxRawThreeAxisEventCount, // XXX fifoMaxEventCount 569 SENSOR_STRING_TYPE_ACCELEROMETER_UNCALIBRATED, 570 "", // requiredPermission 571 (long)(1.0E6f / kMinSampleRateHzAccel), // maxDelay 572 SENSOR_FLAG_CONTINUOUS_MODE, 573 { NULL, NULL } 574 }, 575 }; 576 577 extern const size_t kSensorCount = sizeof(kSensorList) / sizeof(sensor_t); 578