You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.0 KiB

/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "att"
#include "att/att_module.h"
#include <memory>
#include "l2cap/classic/l2cap_classic_module.h"
#include "l2cap/le/l2cap_le_module.h"
#include "module.h"
#include "os/handler.h"
#include "os/log.h"
namespace bluetooth {
namespace att {
const ModuleFactory AttModule::Factory = ModuleFactory([]() { return new AttModule(); });
namespace {
void OnAttRegistrationCompleteLe(
l2cap::le::FixedChannelManager::RegistrationResult result,
std::unique_ptr<l2cap::le::FixedChannelService> le_smp_service) {
LOG_INFO("ATT channel registration complete");
}
void OnAttConnectionOpenLe(std::unique_ptr<l2cap::le::FixedChannel> channel) {
LOG_INFO("ATT conneciton opened");
}
} // namespace
struct AttModule::impl {
impl(
os::Handler* att_handler,
l2cap::le::L2capLeModule* l2cap_le_module,
l2cap::classic::L2capClassicModule* l2cap_classic_module)
: att_handler_(att_handler), l2cap_le_module_(l2cap_le_module), l2cap_classic_module_(l2cap_classic_module) {
// TODO: move that into a ATT manager, or other proper place
std::unique_ptr<bluetooth::l2cap::le::FixedChannelManager> l2cap_manager_le_(
l2cap_le_module_->GetFixedChannelManager());
// TODO(b/161256497): CID 4 is taken by shim layer ATT module so far. When we migrate to GD ATT module, we use real
// CID here.
constexpr uint16_t kFakeLeAttributeCid = 50;
l2cap_manager_le_->RegisterService(
kFakeLeAttributeCid,
common::BindOnce(&OnAttRegistrationCompleteLe),
common::Bind(&OnAttConnectionOpenLe),
att_handler_);
}
os::Handler* att_handler_;
l2cap::le::L2capLeModule* l2cap_le_module_;
l2cap::classic::L2capClassicModule* l2cap_classic_module_;
};
void AttModule::ListDependencies(ModuleList* list) {
list->add<l2cap::le::L2capLeModule>();
list->add<l2cap::classic::L2capClassicModule>();
}
void AttModule::Start() {
pimpl_ = std::make_unique<impl>(
GetHandler(), GetDependency<l2cap::le::L2capLeModule>(), GetDependency<l2cap::classic::L2capClassicModule>());
}
void AttModule::Stop() {
pimpl_.reset();
}
std::string AttModule::ToString() const {
return "Att Module";
}
// std::unique_ptr<AttManager> AttModule::GetAttManager() {
// return std::unique_ptr<AttManager>(
// new AttManager(pimpl_->att_handler_, &pimpl_->att_manager_impl));
// }
} // namespace att
} // namespace bluetooth