Loading audio/2.0/default/Device.cpp +3 −56 Original line number Diff line number Diff line Loading @@ -17,11 +17,9 @@ #define LOG_TAG "DeviceHAL" //#define LOG_NDEBUG 0 #include <algorithm> #include <memory.h> #include <string.h> #include <algorithm> #include <mutex> #include <vector> #include <android/log.h> Loading @@ -38,57 +36,8 @@ namespace audio { namespace V2_0 { namespace implementation { namespace { class Diagnostics { public: static Diagnostics& getInstance() { std::lock_guard<std::mutex> _(mLock); if (mInstance == nullptr) { mInstance = new Diagnostics; } return *mInstance; } void registerDevice(Device* dev) { std::lock_guard<std::mutex> _(mLock); mDevices.push_back(wp<Device>(dev)); } void checkForErasedHalCblk(const Device* dev) { if (dev->version() != 0) return; // all OK std::ostringstream ss; ss << "Zero HAL CB for " << dev->type() << ":" << std::hex << dev->device() << "; Others: "; { std::lock_guard<std::mutex> _(mLock); for (auto wp : mDevices) { sp<Device> other{wp.promote()}; if (other.get() == nullptr || other.get() == dev) continue; ss << other->type() << ":" << other->version() << ":" << std::hex << other->device() << "; "; } } ALOGE("%s", ss.str().c_str()); } private: Diagnostics() {} static std::mutex mLock; static Diagnostics* mInstance; std::vector<wp<Device>> mDevices; }; std::mutex Diagnostics::mLock; Diagnostics* Diagnostics::mInstance{nullptr}; } // namespace Device::Device(audio_hw_device_t* device, const char* type) : mDevice{device}, mType{type} { Diagnostics::getInstance().registerDevice(this); Device::Device(audio_hw_device_t* device) : mDevice(device) { } Device::~Device() { Loading Loading @@ -127,12 +76,10 @@ void Device::closeOutputStream(audio_stream_out_t* stream) { } char* Device::halGetParameters(const char* keys) { Diagnostics::getInstance().checkForErasedHalCblk(this); return mDevice->get_parameters(mDevice, keys); } int Device::halSetParameters(const char* keysAndValues) { Diagnostics::getInstance().checkForErasedHalCblk(this); return mDevice->set_parameters(mDevice, keysAndValues); } Loading audio/2.0/default/Device.h +4 −5 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ using ::android::hardware::hidl_string; using ::android::sp; struct Device : public IDevice, public ParametersUtil { Device(audio_hw_device_t* device, const char* type); explicit Device(audio_hw_device_t* device); // Methods from ::android::hardware::audio::V2_0::IDevice follow. Return<Result> initCheck() override; Loading Loading @@ -101,18 +101,17 @@ struct Device : public IDevice, public ParametersUtil { void closeInputStream(audio_stream_in_t* stream); void closeOutputStream(audio_stream_out_t* stream); audio_hw_device_t* device() const { return mDevice; } const char* type() const { return mType; } uint32_t version() const { return mDevice->common.version; } private: audio_hw_device_t *mDevice; const char* mType; virtual ~Device(); // Methods from ParametersUtil. char* halGetParameters(const char* keys) override; int halSetParameters(const char* keysAndValues) override; uint32_t version() const { return mDevice->common.version; } }; } // namespace implementation Loading audio/2.0/default/DevicesFactory.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ Return<void> DevicesFactory::openDevice(IDevicesFactory::Device device, openDevi result = new PrimaryDevice(halDevice); } else { result = new ::android::hardware::audio::V2_0::implementation:: Device(halDevice, moduleName); Device(halDevice); } retval = Result::OK; } else if (halStatus == -EINVAL) { Loading audio/2.0/default/PrimaryDevice.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ namespace V2_0 { namespace implementation { PrimaryDevice::PrimaryDevice(audio_hw_device_t* device) : mDevice{new Device(device, AUDIO_HARDWARE_MODULE_ID_PRIMARY)} {} : mDevice(new Device(device)) { } PrimaryDevice::~PrimaryDevice() {} Loading Loading
audio/2.0/default/Device.cpp +3 −56 Original line number Diff line number Diff line Loading @@ -17,11 +17,9 @@ #define LOG_TAG "DeviceHAL" //#define LOG_NDEBUG 0 #include <algorithm> #include <memory.h> #include <string.h> #include <algorithm> #include <mutex> #include <vector> #include <android/log.h> Loading @@ -38,57 +36,8 @@ namespace audio { namespace V2_0 { namespace implementation { namespace { class Diagnostics { public: static Diagnostics& getInstance() { std::lock_guard<std::mutex> _(mLock); if (mInstance == nullptr) { mInstance = new Diagnostics; } return *mInstance; } void registerDevice(Device* dev) { std::lock_guard<std::mutex> _(mLock); mDevices.push_back(wp<Device>(dev)); } void checkForErasedHalCblk(const Device* dev) { if (dev->version() != 0) return; // all OK std::ostringstream ss; ss << "Zero HAL CB for " << dev->type() << ":" << std::hex << dev->device() << "; Others: "; { std::lock_guard<std::mutex> _(mLock); for (auto wp : mDevices) { sp<Device> other{wp.promote()}; if (other.get() == nullptr || other.get() == dev) continue; ss << other->type() << ":" << other->version() << ":" << std::hex << other->device() << "; "; } } ALOGE("%s", ss.str().c_str()); } private: Diagnostics() {} static std::mutex mLock; static Diagnostics* mInstance; std::vector<wp<Device>> mDevices; }; std::mutex Diagnostics::mLock; Diagnostics* Diagnostics::mInstance{nullptr}; } // namespace Device::Device(audio_hw_device_t* device, const char* type) : mDevice{device}, mType{type} { Diagnostics::getInstance().registerDevice(this); Device::Device(audio_hw_device_t* device) : mDevice(device) { } Device::~Device() { Loading Loading @@ -127,12 +76,10 @@ void Device::closeOutputStream(audio_stream_out_t* stream) { } char* Device::halGetParameters(const char* keys) { Diagnostics::getInstance().checkForErasedHalCblk(this); return mDevice->get_parameters(mDevice, keys); } int Device::halSetParameters(const char* keysAndValues) { Diagnostics::getInstance().checkForErasedHalCblk(this); return mDevice->set_parameters(mDevice, keysAndValues); } Loading
audio/2.0/default/Device.h +4 −5 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ using ::android::hardware::hidl_string; using ::android::sp; struct Device : public IDevice, public ParametersUtil { Device(audio_hw_device_t* device, const char* type); explicit Device(audio_hw_device_t* device); // Methods from ::android::hardware::audio::V2_0::IDevice follow. Return<Result> initCheck() override; Loading Loading @@ -101,18 +101,17 @@ struct Device : public IDevice, public ParametersUtil { void closeInputStream(audio_stream_in_t* stream); void closeOutputStream(audio_stream_out_t* stream); audio_hw_device_t* device() const { return mDevice; } const char* type() const { return mType; } uint32_t version() const { return mDevice->common.version; } private: audio_hw_device_t *mDevice; const char* mType; virtual ~Device(); // Methods from ParametersUtil. char* halGetParameters(const char* keys) override; int halSetParameters(const char* keysAndValues) override; uint32_t version() const { return mDevice->common.version; } }; } // namespace implementation Loading
audio/2.0/default/DevicesFactory.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ Return<void> DevicesFactory::openDevice(IDevicesFactory::Device device, openDevi result = new PrimaryDevice(halDevice); } else { result = new ::android::hardware::audio::V2_0::implementation:: Device(halDevice, moduleName); Device(halDevice); } retval = Result::OK; } else if (halStatus == -EINVAL) { Loading
audio/2.0/default/PrimaryDevice.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ namespace V2_0 { namespace implementation { PrimaryDevice::PrimaryDevice(audio_hw_device_t* device) : mDevice{new Device(device, AUDIO_HARDWARE_MODULE_ID_PRIMARY)} {} : mDevice(new Device(device)) { } PrimaryDevice::~PrimaryDevice() {} Loading