Bluetooth 이벤트 알림 지원

프로필 드라이버가 원격 디바이스에 대한 연결을 열면 연결이 닫혔을 때 또는 연결에 대한 다른 변경 내용이 발생할 때 알림을 받도록 등록해야 합니다. 또한 프로필 드라이버가 들어오는 연결을 수락하도록 등록하는 경우 원격 디바이스가 연결을 시도할 때 알림을 받을 수 있어야 합니다.

SCO(동기 Connection-Oriented) 연결을 사용하는 프로필 드라이버는 SCO 콜백 함수를 구현하고 등록합니다. 클라이언트 프로필 드라이버는 원격 디바이스에 대한 연결을 요청할 때 적절한 콜백 함수를 등록합니다.

SCO 프로필 드라이버가 BRB_SCO_OPEN_CHANNEL BRB를 발급하는 경우 해당 BRB의 해당 _BRB_SCO_OPEN_CHANNEL 구조체의 콜백 멤버에서 해당 SCO 콜백 함수에 대한 포인터를 지정합니다. 원격 디바이스가 SCO 연결 요청을 수락하는 경우 Bluetooth 드라이버 스택은 SCO 연결 에 대한 변경이 발생할 때 콜백 함수를 통해 프로필 드라이버에 알림을 보낼 수 있습니다.

SCO 연결을 만드는 방법에 대한 자세한 내용은 원격 디바이스에 대한 SCO 클라이언트 연결 만들기를 참조하세요.

L2CAP(논리 링크 컨트롤러 및 적응 프로토콜) 연결을 사용하는 프로필 드라이버는 L2CAP 콜백 함수를 구현하고 등록합니다.

L2CAP 프로필 드라이버가 BRB_L2CA_OPEN_CHANNEL BRB를 발급하면 BRB의 해당_BRB_L2CA_OPEN_CHANNEL 구조체의 콜백 멤버에서 해당 L2CAP 콜백 함수에 대한 포인터를 지정합니다. 원격 디바이스가 L2CAP 연결 요청을 수락하는 경우 Bluetooth 드라이버 스택은 L2CAP 연결에 대한 변경이 발생할 때 콜백 함수를 통해 프로필 드라이버에 알림을 보낼 수 있습니다.

L2CAP 연결을 만드는 방법에 대한 자세한 내용은 원격 디바이스에 대한 L2CAP 클라이언트 연결 만들기를 참조하세요.

마찬가지로 프로필 드라이버가 들어오는(L2CAP, SCO) 연결 요청을 수락하도록 등록하는 경우 원격 디바이스가 연결을 시도할 때 알림을 받을 콜백 함수를 등록해야 합니다.

L2CAP를 사용하는 프로필 드라이버는 _BRB_L2CA_REGISTER_SERVER 구조체의 IndicationCallback 멤버에서 L2CAP 콜백 함수를 지정합니다. 그런 다음, Bluetooth 드라이버 스택은 원격 디바이스가 프로필 드라이버에 대한 L2CAP 연결을 시작하려고 할 때 콜백 함수를 호출하여 프로필 드라이버에 알릴 수 있습니다.

SCO를 사용하는 프로필 드라이버는 _BRB_SCO_REGISTER_SERVER 구조체의 IndicationCallback 멤버에서 해당 SCO 콜백 함수를 지정합니다. 그런 다음, Bluetooth 드라이버 스택은 원격 디바이스가 프로필 드라이버에 대한 SCO 연결을 시작하려고 할 때 콜백 함수를 호출하여 프로필 드라이버에 알릴 수 있습니다.

프로필 드라이버가 적절한 콜백 함수를 등록한 후 Bluetooth 드라이버 스택은 열려 있는 연결에서 이벤트가 발생하는 경우 프로필 드라이버에 알릴 수도 있습니다.

참고

프로필 드라이버는 동일한 콜백 함수를 등록하여 열린 채널 및 연결을 시도하는 원격 디바이스에 대한 변경 알림을 보낼 수 있습니다.

L2CAP 연결의 경우 L2CAP 콜백 함수 는 다음 세 가지 매개 변수를 허용합니다.

  • L2CAP 연결에 대해 정의된 컨텍스트입니다. BRB_L2CA_REGISTER_SERVER 요청의 경우 이 컨텍스트는 요청과 함께 전달된 _BRB_L2CA_REGISTER_SERVER 구조체의 IndicationCallbackContext 멤버에 전달된 값입니다. BRB_L2CA_OPEN_CHANNEL 또는 BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청의 경우 이 컨텍스트는 요청과 함께 전달된 _BRB_L2CA_OPEN_CHANNEL 구조체의 CallbackContext 멤버에 전달된 값입니다.

  • 들어오는 L2CAP 연결 또는 본딩 상태 변경의 알림 이벤트 유형을 나타내는 INDICATION_CODE 열거형의 값입니다.

  • 알림 이벤트와 연결된 매개 변수를 포함하는 INDICATION_PARAMETERS 구조체에 대한 포인터입니다.

L2CAP 콜백 함수표시 매개 변수에 전달된 값은 프로필 드라이버에서 사용해야 하는 Parameters 매개 변수의 Parameters 공용 구조체에 있는 공용 구조체 멤버를 지정합니다.

표시 매개 변수의 값이 같으면... ... Parameters 매개 변수의 다음 공용 구조체 멤버 사용
IndicationRemoteConnect 연결
IndicationRemoteConfigRequest ConfigRequest
IndicationRemoteConfigResponse ConfigResponse
IndicationFreeExtraOptions FreeExtraOptions
IndicationRemoteDisconnect 연결 끊기
IndicationRecvPacket RecvPacket

SCO 연결의 경우 SCO 콜백 함수 는 다음 세 가지 인수를 허용합니다.

  • SCO 연결에 대해 정의된 컨텍스트입니다. BRB_SCO_REGISTER_SERVER 요청의 경우 이 컨텍스트는 요청과 함께 전달된 _BRB_SCO_REGISTER_SERVER 구조체의 IndicationCallbackContext 멤버에 전달된 값입니다. BRB_SCO_OPEN_CHANNEL 또는 BRB_SCO_OPEN_CHANNEL_RESPONSE 요청의 경우 이 컨텍스트는 요청과 함께 전달된 the_BRB_SCO_OPEN_CHANNEL 구조체의 CallbackContext 멤버에 전달된 값입니다.

  • 들어오는 SCO 연결 또는 본딩 상태 변경 알림의 유형을 나타내는 SCO_INDICATION_CODE 열거형의 값입니다.

  • 알림 이벤트와 연결된 매개 변수를 포함하는 SCO_INDICATION_PARAMETERS 구조체에 대한 포인터입니다.

SCO 콜백 함수Indication 매개 변수에 전달된 값은 프로필 드라이버에서 사용해야 하는 Parameters 매개 변수의 Parameters 공용 구조체에 있는 공용 구조체 멤버를 지정합니다.

표시 매개 변수의 값이 같으면... ... Parameters 매개 변수의 다음 공용 구조체 멤버 사용
ScoIndicationRemoteConnect 연결
ScoIndicationRemoteDisconnect 연결 끊기

플러그 앤 플레이 제거 IRP 처리

프로필 드라이버는 모든 IRP_MN_SURPRISE_REMOVAL IRP를 즉시 스택 아래로 전달하여 Bluetooth 드라이버 스택에서 처리해야 합니다. 깜짝 제거 IRP 처리의 일환으로 열린 채널을 닫으려고 시도하지 마세요. 깜짝 제거 IRP를 받은 후 기본 라디오로 데이터를 보내는 BRB를 추가로 빌드하고 보내지 마세요. 그러나 프로필 드라이버는 놀라운 제거 IRP를 처리하는 동안 다른 정리를 수행할 수 있습니다.

Bluetooth 드라이버 스택이 깜짝 제거 IRP를 수신하면 프로필 드라이버가 빌드하고 BRB_SCO_OPEN_CHANNEL 또는 BRB_SCO_OPEN_CHANNEL_RESPONSE 요청을 전송할 때 프로필 드라이버가 지정한 SCO 콜백 함수ScoIndicationRemoteDisconnect를 전달하여 현재 열려 있는 SCO 채널을 닫습니다. 마찬가지로 Bluetooth 드라이버 스택은 프로필 드라이버가 BRB_L2CA_OPEN_CHANNEL 또는 BRB_L2CA_OPEN_CHANNEL_RESPONSE 요청을 빌드하고 전송할 때 프로필 드라이버에서 지정한 L2CAP 콜백 함수IndicationRemoteDisconnect를 전달하여 현재 열려 있는 L2CAP 채널을 닫습니다.

프로필 드라이버는 IRP_MN_REMOVE_DEVICE IRP를 처리할 때 모든 서버의 등록을 취소해야 합니다. SCO 서버를 등록 취소하려면 프로필 드라이버가 BRB_SCO_UNREGISTER_SERVER 요청을 빌드하고 보내야 합니다. L2CAP 서버를 등록 취소하려면 프로필 드라이버가 BRB_L2CA_UNREGISTER_SERVER 요청을 빌드하고 보내야 합니다.