1e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park/* 2e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Copyright (C) 2015 The Android Open Source Project 3e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * 4e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Licensed under the Apache License, Version 2.0 (the "License"); 5e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * you may not use this file except in compliance with the License. 6e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * You may obtain a copy of the License at 7e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * 8e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * http://www.apache.org/licenses/LICENSE-2.0 9e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * 10e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Unless required by applicable law or agreed to in writing, software 11e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * distributed under the License is distributed on an "AS IS" BASIS, 12e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * See the License for the specific language governing permissions and 14e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * limitations under the License. 15e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 16e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 17e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkpackage android.support.car.hardware; 18e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 19e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.Manifest; 20af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Parkimport android.support.annotation.IntDef; 21235f8acd3cf83079ecd0f3e1b8368b0c9886de82Vitalii Tomkivimport android.support.annotation.RequiresPermission; 22e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.support.car.Car; 23e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.support.car.CarManagerBase; 24e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.support.car.CarNotConnectedException; 25e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 26af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Parkimport java.lang.annotation.Retention; 27af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Parkimport java.lang.annotation.RetentionPolicy; 28af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park 29e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park/** 3019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Enables applications to monitor car sensor data. Applications register listeners to this 3119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * manager to subscribe to individual sensor streams using the SENSOR_TYPE_* constants as the 3219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * keys. Data points are returned as {@link CarSensorEvent} objects that have translations for 3319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * many built-in data types. For vendor extension streams, interpret data based on 3419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * vendor-provided documentation. 35e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 36e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkpublic abstract class CarSensorManager implements CarManagerBase { 37e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 3819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the direction of the car as an angle in degrees measured clockwise with 0 degree 3919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * pointing North. Sensor data in {@link CarSensorEvent} is a float (floatValues[0]). 40e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 419eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_COMPASS = 1; 42e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 4319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent vehicle speed in meters per second (m/s). Sensor data in 4419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * {@link CarSensorEvent} is a float >= 0. Requires {@link Car#PERMISSION_SPEED} permission. 459aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 46e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 479eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_CAR_SPEED = 2; 48e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 4919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the engine RPM of the car. Sensor data in {@link CarSensorEvent} is a float. 509aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 51e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 529eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RPM = 3; 53e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 5419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the total travel distance of the car in kilometers. Sensor data is a float. 5519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Requires {@link Car#PERMISSION_MILEAGE} permission. 569aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 57e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 589eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_ODOMETER = 4; 59e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 6019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the fuel level of the car. In {@link CarSensorEvent}, floatValues[{@link 619eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup * CarSensorEvent#INDEX_FUEL_LEVEL_IN_PERCENTILE}] represents fuel level in percentile (0 to 629eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup * 100) while floatValues[{@link CarSensorEvent#INDEX_FUEL_LEVEL_IN_DISTANCE}] represents 6319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * estimated range in kilometers with the remaining fuel. The gas mileage used for the 6419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * estimation may not represent the current driving condition. Requires {@link 659eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup * Car#PERMISSION_FUEL} permission. 669aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 67e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 689eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_FUEL_LEVEL = 5; 69e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 7019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the current status of parking brake. Sensor data in {@link CarSensorEvent} is in 7119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * intValues[0]. A value of 1 indicates the parking brake is engaged; a value of 0 indicates 72d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * the parking brake is not engaged. 73d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * For this sensor, rate in {@link #addListener(OnSensorChangedListener, int, int)} is 7419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * ignored and all changes are notified. 75e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 769eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_PARKING_BRAKE = 6; 77e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 7819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the current position of transmission gear. Sensor data in {@link 7919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * CarSensorEvent} is in intValues[0]. For the meaning of the value, check {@link 809eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup * CarSensorEvent#GEAR_NEUTRAL} and other GEAR_*. 819aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 82e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 839eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_GEAR = 7; 849eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup 851e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev /** @hide */ 869eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED8 = 8; 879eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup 88e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 8919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the current status of the day/night sensor. Sensor data is in intValues[0]. 90e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 919eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_NIGHT = 9; 92e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 9319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the location. Sensor data is floatValues. 949aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 95e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 969eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_LOCATION = 10; 97e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 9819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Represent the current driving status of car. Different user interactions should be used 9919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * depending on the current driving status. Driving status is in intValues[0]. 100e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 1019eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_DRIVING_STATUS = 11; 102e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 10319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Environment (such as temperature and pressure). 1049aaf8b91bdef693f555632c9ca491423e457efa1Jason Tholstrup * @hide 105e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 1069eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_ENVIRONMENT = 12; 1079eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup /** @hide */ 1089eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED13 = 13; 1099eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup /** @hide */ 1109eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_ACCELEROMETER = 14; 1119eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup /** @hide */ 1129eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED15 = 15; 1139eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup /** @hide */ 1149eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED16 = 16; 1159eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup /** @hide */ 1169eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_GPS_SATELLITE = 17; 1179eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup /** @hide */ 1189eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_GYROSCOPE = 18; 119e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** @hide */ 1209eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED19 = 19; 121e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** @hide */ 1229eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED20 = 20; 123e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** @hide */ 1249eae32f8c09816d35ef28c14ed1f0c5fa39c21f1Jason Tholstrup public static final int SENSOR_TYPE_RESERVED21 = 21; 1251e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev /** @hide */ 1261e5a88bcaea73af4a140616b4e9ed5fcfa60d990Pavel Maltsev public static final int SENSOR_TYPE_RESERVED22 = 22; 127289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik /** 128289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * Represents wheel distance in millimeters. Some cars may not have individual sensors on each 129289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * wheel. If a value is not available, -1 will be reported. The wheel distance accumulates 130289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * over time. 131289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * Requires {@link Car#PERMISSION_MILEAGE} permission. 132289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik */ 133289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik public static final int SENSOR_TYPE_WHEEL_TICK_DISTANCE = 23; 134289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik /** 135289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * Set to true when ABS is active. This sensor is event driven. 136289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * Requires {@link Car#PERMISSION_VEHICLE_DYNAMICS_STATE} permission. 137289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik */ 138289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik public static final int SENSOR_TYPE_ABS_ACTIVE = 24; 139289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik /** 140289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * Set to true when traction control is active. This sensor is event driven. 141289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik * Requires {@link Car#PERMISSION_VEHICLE_DYNAMICS_STATE} permission. 142289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik */ 143289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik public static final int SENSOR_TYPE_TRACTION_CONTROL_ACTIVE = 25; 144e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 145e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 146e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Sensors defined in this range [{@link #SENSOR_TYPE_VENDOR_EXTENSION_START}, 14719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * {@link #SENSOR_TYPE_VENDOR_EXTENSION_END}] are for vendors and should be used only 14819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * by the system app to access sensors not defined as standard types. 14919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Sensors supported in this range can vary depending on car models/manufacturers. 15019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Third-party apps should not use sensors in this range as they are not compatible across 15119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * all cars; third-party apps that attempt to access a sensor in this range trigger a 15219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * security exception (as access is restricted to system apps). 153e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * 154e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * @hide 155e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 156e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public static final int SENSOR_TYPE_VENDOR_EXTENSION_START = 0x60000000; 157d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup /** @hide */ 158e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public static final int SENSOR_TYPE_VENDOR_EXTENSION_END = 0x6fffffff; 159e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 160af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** @hide */ 161af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @IntDef({ 162af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_COMPASS, 163af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_CAR_SPEED, 164af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_RPM, 165af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_ODOMETER, 166af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_FUEL_LEVEL, 167af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_PARKING_BRAKE, 168af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_GEAR, 169af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_NIGHT, 170af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_LOCATION, 171af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_DRIVING_STATUS, 172af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_ENVIRONMENT, 173af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_ACCELEROMETER, 174af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_TYPE_GPS_SATELLITE, 175289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik SENSOR_TYPE_GYROSCOPE, 176289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik SENSOR_TYPE_WHEEL_TICK_DISTANCE, 177289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik SENSOR_TYPE_ABS_ACTIVE, 178289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik SENSOR_TYPE_TRACTION_CONTROL_ACTIVE 179af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park }) 180af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @Retention(RetentionPolicy.SOURCE) 181af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public @interface SensorType {} 182af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park 18319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham /** Read sensor at the default normal rate set for each sensors. This is default rate. */ 184e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public static final int SENSOR_RATE_NORMAL = 3; 1851ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup /**@hide*/ 186e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public static final int SENSOR_RATE_UI = 2; 1871ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup /**@hide*/ 188e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public static final int SENSOR_RATE_FAST = 1; 189e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** Read sensor at the maximum rate. Actual rate will be different depending on the sensor. */ 190e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public static final int SENSOR_RATE_FASTEST = 0; 191e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 192af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park /** @hide */ 193af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @IntDef({ 194af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_RATE_NORMAL, 195af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_RATE_UI, 196af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_RATE_FAST, 197af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park SENSOR_RATE_FASTEST 198af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park }) 199af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @Retention(RetentionPolicy.SOURCE) 200af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public @interface SensorRate {} 201af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park 202e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 203e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Listener for car sensor data change. 204e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Callbacks are called in the Looper context. 205e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 206d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup public interface OnSensorChangedListener { 207e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 20819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Called when there is new sensor data from car. 209d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * @param manager The manager the listener is attached to. Useful if the app wished to 210d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * unregister. 211e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * @param event Incoming sensor event for the given sensor type. 212e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 213d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup void onSensorChanged(final CarSensorManager manager, final CarSensorEvent event); 214e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park } 215e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 216e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 21719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Get the list of CarSensors available in the connected car. 21819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Array of all sensor types supported. 219d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * @throws CarNotConnectedException if the connection to the car service has been lost. 220e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 221e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park public abstract int[] getSupportedSensors() throws CarNotConnectedException; 222e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 223e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 22419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Indicate support for a given sensor. 225e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * @param sensorType 22619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Returns {@code true} if the sensor is supported. 227d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * @throws CarNotConnectedException if the connection to the car service has been lost. 228e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 229af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public abstract boolean isSensorSupported(@SensorType int sensorType) 230af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException; 231e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 232e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 233d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * Register {@link OnSensorChangedListener} to get repeated sensor updates. Can register 23419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * multiple listeners for a single sensor or use the same listener for different 23519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * sensors. If the same listener is registered again for the same sensor, it is ignored or 23619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * updated (depending on the rate). 237e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * <p> 238d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * The {@link OnSensorChangedListener} is the identifier for the request and the same 239d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * instance must be passed into {@link #removeListener(OnSensorChangedListener)}. 240d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * <p> 241e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * 24219c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @param sensorType Sensor type to subscribe. 24319c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @param rate How fast sensor events are delivered. Should be one of 24419c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * {@link #SENSOR_RATE_FASTEST} or {@link #SENSOR_RATE_NORMAL}. Rate may not be 24519c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * respected, especially when the same sensor is registered with a different listener 24619c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * and with different rates. 24719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return Returns {@code true} if the sensor was successfully enabled. 248d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * @throws CarNotConnectedException if the connection to the car service has been lost. 24919c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @throws IllegalArgumentException if wrong argument (such as wrong rate). 25019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @throws SecurityException if missing the appropriate permission. 251e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 252e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park @RequiresPermission(anyOf={Manifest.permission.ACCESS_FINE_LOCATION, Car.PERMISSION_SPEED, 253289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik Car.PERMISSION_MILEAGE, Car.PERMISSION_FUEL, Car.PERMISSION_VEHICLE_DYNAMICS_STATE}, 254289ab99688d226518e47a7e47c9ffc20f221f0a6Steve Paik conditional=true) 255af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public abstract boolean addListener(OnSensorChangedListener listener, 256af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park @SensorType int sensorType, @SensorRate int rate) 257af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException, IllegalArgumentException; 258e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 259e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 26019c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Stop getting sensor updates for the given listener. If there are multiple registrations for 26119c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * this listener, all listening is stopped. 2621ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup * @param listener The listener to remove. 263e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 264150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park public abstract void removeListener(OnSensorChangedListener listener); 265e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 266e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 26719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * Stop getting sensor updates for the given listener and sensor. If the same listener is used 26819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * for other sensors, those subscriptions are not affected. 2691ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup * @param listener The listener to remove. 2701ac59caa6b1bc760aef0adb3c675b49bfa53af9fJason Tholstrup * @param sensorType The type to stop receiving notifications for. 271e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 272af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public abstract void removeListener(OnSensorChangedListener listener, 273150d8de43e71a624106e90bcc04067414c42ef18Keun-young Park @SensorType int sensorType); 274e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park 275e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park /** 276e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park * Get the most recent CarSensorEvent for the given type. 27719c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @param type A sensor to request. 27819c8ab20a71c725316241f4b0c8f44ce18c39d39Heidi von Markham * @return null if no sensor update since connection to the car. 279d72b53500006e84b0c69e650878267c693c164a3Jason Tholstrup * @throws CarNotConnectedException if the connection to the car service has been lost. 280e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park */ 281af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park public abstract CarSensorEvent getLatestSensorEvent(@SensorType int type) 282af2cc99a2e8eea38a75b20b952ea5c0e7ebb4b1bKeun-young Park throws CarNotConnectedException; 283a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik 284a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik /** 285a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik * Get the config data for the given type. 286a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik * @param sensor type to request 287a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik * @return CarSensorConfig object 288a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik * @throws CarNotConnectedException if the connection to the car service has been lost. 289a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik * @hide 290a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik */ 291a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik public abstract CarSensorConfig getSensorConfig(@SensorType int type) 292a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik throws CarNotConnectedException; 293a2819901c1b4f56e4950dd5cb6bf6c9e8042cf4cSteve Paik 294e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Park} 295