Bluedroid 활성화 프로세스 개요
Bluedroid 블루투스 스택의 활성화 과정은 enable() 함수 호출로 시작됩니다. 핵심 단계는 다음과 같습니다:
- 인터페이스 준비 검증: enable()은 interface_ready()로 하드웨어/소프트웨어 인터페이스 상태를 확인합니다
- 비동기 스택 시작: start_up_stack_async()를 통해 블루투스 스택을 비차단 방식으로 시작합니다
- 프로토콜 모듈 초기화: BTM, L2CAP, GATT, SDP 등 핵심 프로토콜을 순차적으로 초기화합니다
- 하드웨어 바인딩: GD_CONTROLLER_MODULE을 통해 물리적 하드웨어와 상호작용합니다
- 상태 동기화: future_await로 하드웨어 준비를 보장하고 JNI 스레드에 상태 변경을 알립니다
소스 코드 구현 분석
enable() 함수
static int activate_bluetooth() {
if (!verify_interface()) return BT_STATUS_NOT_READY;
get_stack_manager()->launch_stack_async(
create_profile_interface(), &init_profiles, &deinit_profiles);
return BT_STATUS_SUCCESS;
}
인터페이스 검증 후 비동기 방식으로 스택 실행을 시작합니다. 프로파일 초기화/종료 콜백을 등록합니다.
스택 시작 실행 함수
static void execute_stack_launch(CoreInterface* core_iface,
ProfileInitCallback init_profiles,
ProfileDeinitCallback deinit_profiles) {
if (stack_active) return;
initialize_stack_environment(core_iface);
future_t* wait_future = future_new();
get_btm().lifecycle.btm_initialize();
module_activate(CONFIG_MODULE);
l2cap_setup();
sdp_setup();
gatt_setup();
SMP_Initialize(get_btm().security.get_mode());
get_btm().lifecycle.btm_ble_initialize();
RFCOMM_Setup();
GAP_Setup();
init_profiles();
bta_system_init();
module_init(LOG_MODULE);
btif_initialization_complete();
device_manager_init();
device_manager_enable(security_cb, acl_cb);
btm_acl_reset();
CHECK(module_activate(CONTROLLER_MODULE));
BTM_controller_ready();
device_manager_hw_on();
if (future_await(wait_future) != SUCCESS) {
stack_active = true;
shutdown_stack(deinit_profiles);
return;
}
module_activate(RUST_MODULE);
stack_active = true;
run_in_jni_thread(signal_stack_ready, nullptr);
}
스택 초기화의 핵심 단계:
- 중복 실행 방지를 위한 상태 확인
- 스택 환경 초기화 및 비동기 대기 객체 생성
- BTM, L2CAP, GATT 등 프로토콜 계층 초기화
- 상위 프로파일 초기화 콜백 실행
- 컨트롤러 모듈 활성화 및 하드웨어 동기화
- 오류 발생 시 자원 정리
스택 상태 신호 함수
static void signal_stack_ready(void* context) {
process_pending_connections();
get_profile_interface()->events->notify_state_change(BT_STATE_ON);
}
JNI 스레드에서 실행되며 보류 중인 연결을 처리하고 어댑터 상태 변경을 상위 계층에 알립니다.
계층별 아키텍처
- 프로토콜 계층: BTM, L2CAP - 하드웨어 추상화 담당
- 응용 계층: BTA - 장치 관리 등 상위 기능 제공
- 인터페이스 계층: BTIF - Android 프레임워크 연동