Loading include/android/sensor.h +6 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,11 @@ typedef struct AHeartRateEvent { int8_t status; } AHeartRateEvent; typedef struct ADynamicSensorEvent { bool connected; int handle; } ADynamicSensorEvent; /* NOTE: Must match hardware/sensors.h */ typedef struct ASensorEvent { int32_t version; /* sizeof(struct ASensorEvent) */ Loading @@ -229,6 +234,7 @@ typedef struct ASensorEvent { AUncalibratedEvent uncalibrated_magnetic; AMetaDataEvent meta_data; AHeartRateEvent heart_rate; ADynamicSensorEvent dynamic_sensor_meta; }; union { uint64_t data[8]; Loading include/gui/ISensorServer.h +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ public: DECLARE_META_INTERFACE(SensorServer); virtual Vector<Sensor> getSensorList(const String16& opPackageName) = 0; virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) = 0; virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, int mode, const String16& opPackageName) = 0; virtual int32_t isDataInjectionEnabled() = 0; Loading include/gui/Sensor.h +9 −3 Original line number Diff line number Diff line Loading @@ -52,6 +52,10 @@ public: TYPE_PROXIMITY = ASENSOR_TYPE_PROXIMITY }; typedef struct { uint8_t b[16]; } uuid_t; Sensor(); Sensor(struct sensor_t const* hwSensor, int halVersion = 0); ~Sensor(); Loading @@ -77,6 +81,7 @@ public: uint32_t getFlags() const; bool isWakeUpSensor() const; int32_t getReportingMode() const; const uuid_t& getUuid() const; // LightFlattenable protocol inline bool isFixedSize() const { return false; } Loading @@ -103,6 +108,7 @@ private: int32_t mRequiredAppOp; int32_t mMaxDelay; uint32_t mFlags; uuid_t mUuid; static void flattenString8(void*& buffer, size_t& size, const String8& string8); static bool unflattenString8(void const*& buffer, size_t& size, String8& outputString8); }; Loading include/gui/SensorManager.h +8 −7 Original line number Diff line number Diff line Loading @@ -54,7 +54,8 @@ public: static SensorManager& getInstanceForPackage(const String16& packageName); ~SensorManager(); ssize_t getSensorList(Sensor const* const** list) const; ssize_t getSensorList(Sensor const* const** list); ssize_t getDynamicSensorList(Vector<Sensor>& list); Sensor const* getDefaultSensor(int type); sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0); bool isDataInjectionEnabled(); Loading @@ -64,17 +65,17 @@ private: void sensorManagerDied(); SensorManager(const String16& opPackageName); status_t assertStateLocked() const; status_t assertStateLocked(); private: static Mutex sLock; static std::map<String16, SensorManager*> sPackageInstances; mutable Mutex mLock; mutable sp<ISensorServer> mSensorServer; mutable Sensor const** mSensorList; mutable Vector<Sensor> mSensors; mutable sp<IBinder::DeathRecipient> mDeathObserver; Mutex mLock; sp<ISensorServer> mSensorServer; Sensor const** mSensorList; Vector<Sensor> mSensors; sp<IBinder::DeathRecipient> mDeathObserver; const String16 mOpPackageName; }; Loading libs/gui/ISensorServer.cpp +30 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,8 @@ namespace android { enum { GET_SENSOR_LIST = IBinder::FIRST_CALL_TRANSACTION, CREATE_SENSOR_EVENT_CONNECTION, ENABLE_DATA_INJECTION ENABLE_DATA_INJECTION, GET_DYNAMIC_SENSOR_LIST, }; class BpSensorServer : public BpInterface<ISensorServer> Loading Loading @@ -65,6 +66,23 @@ public: return v; } virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) { Parcel data, reply; data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor()); data.writeString16(opPackageName); remote()->transact(GET_DYNAMIC_SENSOR_LIST, data, &reply); Sensor s; Vector<Sensor> v; uint32_t n = reply.readUint32(); v.setCapacity(n); while (n--) { reply.read(s); v.add(s); } return v; } virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, int mode, const String16& opPackageName) { Loading Loading @@ -124,6 +142,17 @@ status_t BnSensorServer::onTransact( reply->writeInt32(static_cast<int32_t>(ret)); return NO_ERROR; } case GET_DYNAMIC_SENSOR_LIST: { CHECK_INTERFACE(ISensorServer, data, reply); const String16& opPackageName = data.readString16(); Vector<Sensor> v(getDynamicSensorList(opPackageName)); size_t n = v.size(); reply->writeUint32(static_cast<uint32_t>(n)); for (size_t i = 0; i < n; i++) { reply->write(v[i]); } return NO_ERROR; } } return BBinder::onTransact(code, data, reply, flags); } Loading Loading
include/android/sensor.h +6 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,11 @@ typedef struct AHeartRateEvent { int8_t status; } AHeartRateEvent; typedef struct ADynamicSensorEvent { bool connected; int handle; } ADynamicSensorEvent; /* NOTE: Must match hardware/sensors.h */ typedef struct ASensorEvent { int32_t version; /* sizeof(struct ASensorEvent) */ Loading @@ -229,6 +234,7 @@ typedef struct ASensorEvent { AUncalibratedEvent uncalibrated_magnetic; AMetaDataEvent meta_data; AHeartRateEvent heart_rate; ADynamicSensorEvent dynamic_sensor_meta; }; union { uint64_t data[8]; Loading
include/gui/ISensorServer.h +2 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ public: DECLARE_META_INTERFACE(SensorServer); virtual Vector<Sensor> getSensorList(const String16& opPackageName) = 0; virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) = 0; virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, int mode, const String16& opPackageName) = 0; virtual int32_t isDataInjectionEnabled() = 0; Loading
include/gui/Sensor.h +9 −3 Original line number Diff line number Diff line Loading @@ -52,6 +52,10 @@ public: TYPE_PROXIMITY = ASENSOR_TYPE_PROXIMITY }; typedef struct { uint8_t b[16]; } uuid_t; Sensor(); Sensor(struct sensor_t const* hwSensor, int halVersion = 0); ~Sensor(); Loading @@ -77,6 +81,7 @@ public: uint32_t getFlags() const; bool isWakeUpSensor() const; int32_t getReportingMode() const; const uuid_t& getUuid() const; // LightFlattenable protocol inline bool isFixedSize() const { return false; } Loading @@ -103,6 +108,7 @@ private: int32_t mRequiredAppOp; int32_t mMaxDelay; uint32_t mFlags; uuid_t mUuid; static void flattenString8(void*& buffer, size_t& size, const String8& string8); static bool unflattenString8(void const*& buffer, size_t& size, String8& outputString8); }; Loading
include/gui/SensorManager.h +8 −7 Original line number Diff line number Diff line Loading @@ -54,7 +54,8 @@ public: static SensorManager& getInstanceForPackage(const String16& packageName); ~SensorManager(); ssize_t getSensorList(Sensor const* const** list) const; ssize_t getSensorList(Sensor const* const** list); ssize_t getDynamicSensorList(Vector<Sensor>& list); Sensor const* getDefaultSensor(int type); sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0); bool isDataInjectionEnabled(); Loading @@ -64,17 +65,17 @@ private: void sensorManagerDied(); SensorManager(const String16& opPackageName); status_t assertStateLocked() const; status_t assertStateLocked(); private: static Mutex sLock; static std::map<String16, SensorManager*> sPackageInstances; mutable Mutex mLock; mutable sp<ISensorServer> mSensorServer; mutable Sensor const** mSensorList; mutable Vector<Sensor> mSensors; mutable sp<IBinder::DeathRecipient> mDeathObserver; Mutex mLock; sp<ISensorServer> mSensorServer; Sensor const** mSensorList; Vector<Sensor> mSensors; sp<IBinder::DeathRecipient> mDeathObserver; const String16 mOpPackageName; }; Loading
libs/gui/ISensorServer.cpp +30 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,8 @@ namespace android { enum { GET_SENSOR_LIST = IBinder::FIRST_CALL_TRANSACTION, CREATE_SENSOR_EVENT_CONNECTION, ENABLE_DATA_INJECTION ENABLE_DATA_INJECTION, GET_DYNAMIC_SENSOR_LIST, }; class BpSensorServer : public BpInterface<ISensorServer> Loading Loading @@ -65,6 +66,23 @@ public: return v; } virtual Vector<Sensor> getDynamicSensorList(const String16& opPackageName) { Parcel data, reply; data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor()); data.writeString16(opPackageName); remote()->transact(GET_DYNAMIC_SENSOR_LIST, data, &reply); Sensor s; Vector<Sensor> v; uint32_t n = reply.readUint32(); v.setCapacity(n); while (n--) { reply.read(s); v.add(s); } return v; } virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, int mode, const String16& opPackageName) { Loading Loading @@ -124,6 +142,17 @@ status_t BnSensorServer::onTransact( reply->writeInt32(static_cast<int32_t>(ret)); return NO_ERROR; } case GET_DYNAMIC_SENSOR_LIST: { CHECK_INTERFACE(ISensorServer, data, reply); const String16& opPackageName = data.readString16(); Vector<Sensor> v(getDynamicSensorList(opPackageName)); size_t n = v.size(); reply->writeUint32(static_cast<uint32_t>(n)); for (size_t i = 0; i < n; i++) { reply->write(v[i]); } return NO_ERROR; } } return BBinder::onTransact(code, data, reply, flags); } Loading