- #include <iostream>
- #include <string>
- #include <binder/IServiceManager.h>
- #include <hidl/HidlTransportSupport.h>
- #include <android/hardware/audio/7.0/IDevicesFactory.h>
- #include <android/hardware/audio/common/7.0/types.h>
- #include <system/audio.h>
-
- using namespace android;
- using namespace android::hardware::audio::V7_0;
- using namespace android::hardware::audio::common::V7_0;
-
- int main(int argc, char* argv[]) {
- if (argc < 2) {
- std::cerr << "Usage: " << argv[0] << " <bt_address>" << std::endl;
- return 1;
- }
-
- std::string btAddress = argv[1];
-
- // Get the HIDL service
- sp<IDevicesFactory> factory = IDevicesFactory::getService();
- if (factory == nullptr) {
- std::cerr << "Failed to get IDevicesFactory service" << std::endl;
- return 1;
- }
-
- sp<IDevice> device;
- ::android::hardware::Return<void> ret = factory->openDevice(AUDIO_HARDWARE_MODULE_ID_PRIMARY, [&](Result r, const sp<IDevice>& d) {
- if (r == Result::OK) {
- device = d;
- }
- });
-
- if (!ret.isOk() || device == nullptr) {
- std::cerr << "Failed to open default device" << std::endl;
- return 1;
- }
-
- // Create DeviceAddress for BT SCO headset
- DeviceAddress address;
- address.deviceType = audio_device_to_string(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET);
- address.address.id(btAddress);
-
- // Call setConnectedState
- ::android::hardware::Return<Result> setRet = device->setConnectedState(address, true);
- if (!setRet.isOk() || setRet != Result::OK) {
- std::cerr << "Failed to set connected state [OUT]" << std::endl;
- return 1;
- }
-
- address.deviceType = audio_device_to_string(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET);
- address.address.id(btAddress);
-
- // Call setConnectedState
- setRet = device->setConnectedState(address, true);
- if (!setRet.isOk() || setRet != Result::OK) {
- std::cerr << "Failed to set connected state [IN]" << std::endl;
- return 1;
- }
-
- std::cout << "Successfully notified HAL of BT headset connection 1" << std::endl;
- return 0;
- }