다음을 통해 공유


NDEF 프로토콜

"NDEF" 프로토콜은 NFP 공급자 pub/sub 모델을 통해 매핑된 NFC 포럼 디바이스와 직접 상호 작용하는 수단입니다. 이 프로토콜을 사용하는 모든 클라이언트는 NDEF 패킷을 인코딩하고 디코딩하는 방법을 이해해야 합니다. 메시지를 게시하는 경우 나머지 형식 정보가 NDEF 메시지 자체에 포함되기 때문에 클라이언트는 형식을 "NDEF"로 지정하기만 하면 됩니다. "NDEF" 형식을 게시하면 클라이언트가 NFC를 통해 NDEF 메시지를 보낼 수 있도록 거의 직접 통과 액세스 권한을 부여할 수 있습니다. 구독하기 위해 클라이언트는 "NDEF"와 ':'(콜론)를 지정합니다.

콜론 다음에는 6개의 레코드 유형 중 하나가 있습니다.

  • Empty
  • 내선
  • MIME
  • URI
  • Wkt
  • Unknown

공급자는 이 섹션에 나열된 NDEF 프로토콜 관련 요구 사항뿐만 아니라 기본 공급자 요구 사항에 따라 NDEF를 지원합니다.

이러한 NDEF 메시지를 수신 대기하기 위해 클라이언트는 "NDEF:wkt"와 같이 지원되는 형식 중 하나를 구독합니다. Sp". 공급자가 형식과 일치하는 NDEF 메시지를 검색할 때마다 전체 NDEF 메시지(여전히 NDEF로 인코딩됨)가 구독 클라이언트에 전달됩니다. [NDEF]의 규칙에 따라 NDEF 메시지에 대해 일치시킬 'type'은 NDEF 메시지의 첫 번째 NDEF 레코드에 지정된 TYPE 필드입니다. NDEF 메시지를 전송하기 위해 클라이언트는 "NDEF" 프로토콜을 지정하는 전체 NDEF 메시지를 게시합니다.

모든 NDEF 메시지를 구독하는 메커니즘도 있습니다. 이는 "NDEF"를 구독하여 수행됩니다.

일반적인 NDEF 프로토콜 드라이버 요구 사항

모든 NFC 지원 NFP 공급자의 드라이버에 대한 NDEF 지원에 공통적인 몇 가지 요구 사항이 있습니다.

필요한 작업

  • 드라이버는 [NDEF]에 지정된 대로 NDEF 메시지에서 첫 번째 NDEF 레코드의 TNF 및 TYPE 필드를 기반으로 수신된 NDEF 메시지를 구독과 일치시켜야 합니다.
  • 하나 이상의 "*:WriteTag" 게시를 사용하도록 설정하고 드라이버가 사용 가능한 충분한 공간이 있는 쓰기 가능한 태그를 검색하는 경우 다른 구독을 일치하기 위해 태그의 기존 페이로드를 읽어서는 안 됩니다. 이렇게 하면 태그 작성 앱이 태그의 메시지를 구독할 수 있는 다른 앱 또는 서비스를 선점할 수 있습니다.
  • NFC 지원 NFP 공급자의 경우 드라이버는 NFC 포럼 태그가 아닌 NFC 포럼 디바이스에 연결된 경우 "*:WriteTag" 게시를 전송해서는 안 됩니다.
  • 드라이버가 페이로드 중 하나 이상에 사용할 수 있는 충분한 공간이 있는 쓰기 가능한 태그를 감지하는 순간 하나 이상의 "*:WriteTag" 게시가 사용하도록 설정된 경우 드라이버는 태그에 페이로드 중 하나를 정확히 작성해야 합니다. o 둘 이상의 발행물이 활성화되어 있고 태그에 쓸 수 있을 만큼 작은 경우 가장 최근에 만들거나 사용하도록 설정된 "*:WriteTag" 발행물이 작성되어야 합니다.
  • 드라이버가 페이로드에 사용할 수 있는 충분한 공간이 있는 쓰기 가능한 태그와 통신하는 동안 "*:WriteTag" 게시를 만들거나 사용하도록 설정한 경우 드라이버가 이전에 태그에 쓴 경우에도 드라이버가 태그에 페이로드를 작성해야 합니다.
  • 드라이버는 이전 내용을 덮어쓰는 방식으로 태그에 기록해야 합니다.
  • "*:WriteTag" 페이로드가 태그에 성공적으로 기록되면 드라이버는 해당 게시에 대한 IOCTL_NFP_GET_NEXT_TRANSMITTED_MESSAGE 처리를 트리거해야 합니다(위에서 지정한 대로).

"NDEF:WriteTag"에 대한 게시

이는 하나 이상의 NDEF 메시지를 NFC 포럼 태그에 쓸 수 있는 특별한 유형의 게시입니다.

필요한 작업

  • 다른 곳에 설명된 일반적인 "*:WriteTag" 요구 사항이 적용됩니다.
  • NFC 포럼 태그는 여러 NDEF 메시지를 포함할 수 있으므로 드라이버는 여러 개의 연결된 NDEF 메시지를 페이로드로 포함하는 "NDEF:WriteTag" 게시를 올바르게 수락해야 합니다.

"SetTagReadOnly"에 대한 게시

이 게시를 사용하면 클라이언트가 태그를 읽기 전용으로 잠글 수 있습니다. 공급자는 이미 서식이 지정된 NDEF 읽기/쓰기 태그를 읽기 전용으로 변환해야 합니다.

필요한 작업

  • 연결된 태그가 NDEF 규격인 경우 드라이버는 먼저 검사 합니다.
  • 하나 이상의 "*:. WriteTag" 게시가 활성화되고 드라이버가 쓰기 가능한 태그를 검색하고, 드라이버가 먼저 태그에 쓰고, 다른 곳에서 설명한 일반적인 "*:WriteTag" 요구 사항을 준수한 다음, NDEF 읽기/쓰기 태그를 읽기 전용으로 변환해야 합니다.

빈 NDEF 레코드: "NDEF:Empty"

이 메시지에는 형식, ID 또는 페이로드가 없습니다. "NDEF:Empty" 형식의 구독은 Windows 클라이언트의 관점에서 의미가 없는 것 같습니다.

필요한 작업

이 형식의 구독 또는 게시는 STATUS_INVALID_PARAMETER 있는 근접 공급자 드라이버에서 거부해야 합니다.

모든 NDEF 형식에 대한 구독: "NDEF"

클라이언트는 수신된 모든 NDEF 메시지를 구독할 수 있습니다. 일반적으로 애플리케이션이 관심 있는 메시지 유형을 알고 있는 경우 해당 형식을 구체적으로 구독합니다. 그러나 경우에 따라 모든 NDEF 메시지를 구독하는 것이 유용합니다. 예를 들어 중복된 NDEF 태그를 복사하고 쓸 수 있는 애플리케이션이 유용할 수 있습니다.

필요한 작업

드라이버는 수신되는 각 NDEF 메시지와 "NDEF"에 대한 구독을 일치시켜야 합니다.

외부 NDEF RTD 형식에 대한 구독: "NDEF:ext."

공급업체는 사용자 지정 확장 가능한 RTD 네임스페이스를 사용하여 독점 메시지의 콘텐츠를 정의할 수 있습니다. 이렇게 하면 클라이언트가 NFC 포럼이 아니라 앱 또는 타사에서 정의한 RTD 외부 형식을 구독할 수 있습니다.

제네릭 예제 형식: "NDEF:ext.<SomeExternalType>"

구체적인 예제 형식: "NDEF:ext.contoso.com:mytype"

필요한 작업

드라이버는 "NDEF:ext"에 대한 구독과 일치해야 합니다.<SomeExternalType>" 수신된 NDEF 메시지에만 TNF 필드 값이 0x04 [NFC RTD]에 지정된 동등 규칙에 따라 "<SomeExternalType>"과 일치하는 TYPE 필드가 있습니다.

"NDEF:MIME"에 대한 구독

메시지는 MIME 네임스페이스를 사용하여 메시지의 내용을 정의할 수 있습니다.

제네릭 예제 형식: "NDEF:MIME.<SomeMimeType>"

구체적인 예제 형식: "NDEF:MIME.image/jpeg"

필요한 작업

드라이버는 "NDEF:MIME"에 대한 구독과 일치해야 합니다.<SomeMimeType>" 수신된 NDEF 메시지만 0x02 TNF 필드 값이 있고 [NDEF]에 지정된 동등 규칙에 따라 "<SomeMimeType>"과 일치하는 TYPE 필드가 있습니다.

"NDEF:wkt"에 대한 구독

메시지는 NFC 포럼 잘 알려진 형식 네임스페이스를 사용하여 메시지의 내용을 정의할 수 있습니다.

필요한 작업

  • 드라이버는 "NDEF:wkt"에 대한 구독과 일치해야 합니다.<SomeWellKnownType>" 수신된 NDEF 메시지에만 TNF 필드 값이 0x01 있으며 [NDEF]에 지정된 동등 규칙에 따라 "<SomeWellKnownType>"과 일치하는 TYPE 필드가 있습니다.
  • 드라이버가 잘 알려진 형식의 유효성을 검사하면 안 되므로 나중에 잘 알려진 형식을 드라이버 업데이트 없이 NFC 포럼에서 정의할 수 있습니다.

알 수 없는 NDEF 형식에 대한 구독: "NDEF:Unknown"

이렇게 하면 클라이언트가 형식화되지 않은 데이터 페이로드를 구독할 수 있습니다.

필요한 작업

드라이버는 [NDEF]에 지정된 대로 TNF 필드 값이 0x05 NDEF 메시지와만 "NDEF:Unknown"에 대한 구독을 일치시켜야 합니다.

NFC(근거리 통신) API 참조