/* * 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 #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 le_smp_service) { LOG_INFO("ATT channel registration complete"); } void OnAttConnectionOpenLe(std::unique_ptr 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 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(); list->add(); } void AttModule::Start() { pimpl_ = std::make_unique( GetHandler(), GetDependency(), GetDependency()); } void AttModule::Stop() { pimpl_.reset(); } std::string AttModule::ToString() const { return "Att Module"; } // std::unique_ptr AttModule::GetAttManager() { // return std::unique_ptr( // new AttManager(pimpl_->att_handler_, &pimpl_->att_manager_impl)); // } } // namespace att } // namespace bluetooth