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 콜백 함수의Indication 매개 변수에 전달된 값은 프로필 드라이버에서 사용해야 하는 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 요청의 경우 이 컨텍스트는 요청과 함께 전달된 _BRB_SCO_OPEN_CHANNEL 구조체의 CallbackContext 멤버에 전달된 값입니다.
들어오는 SCO 연결 또는 결합 상태 변경에 대한 알림 유형을 나타내는 SCO_INDICATION_CODE 열거형의 값입니다.
알림 이벤트와 연결된 매개 변수를 포함하는 SCO_INDICATION_PARAMETERS 구조체에 대한 포인터입니다.
SCO 콜백 함수의Indication 매개 변수에 전달된 값은 프로필 드라이버에서 사용해야 하는 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 요청을 빌드하고 보내야 합니다.