SlideShare una empresa de Scribd logo
1 de 39
Descargar para leer sin conexión
避けては通れないバイナリ地獄
- NDEFってなんだろう 山下智樹 / tomorrowkey

12年11月29日木曜日
もくじ

•
•
•
•
•
•
•
12年11月29日木曜日

自己紹介
NDEFって何?
なぜNDEFが重要になる?
もっとNDEFを知ろう
ちょっとRTD
NDEF完成
さらなるNDEFの世界へ…
自己紹介
12年11月29日木曜日
自己紹介

• NFCラボ運営委員
• 山下智樹 / @tomorrowkey
• 株式会社ブリリアントサービス
• バイナリ楽しい!
12年11月29日木曜日
NDEFって何?
12年11月29日木曜日
NDEFとは

• NFC Data Exchange Format
• NFCの通信で使用されるデータ・フォ
ーマット

12年11月29日木曜日
なぜNDEFが重要になる?
12年11月29日木曜日
NFCのモード

• Reader/Writer Mode
• P2P Mode
• Card Emulation Mode

12年11月29日木曜日
どんなモードでも
NDEFは避けて通れない

12年11月29日木曜日
でも、バイナリまで
知ってる必要あるの?

12年11月29日木曜日
各プラットフォームのNDEFについて

• Android SDK API Level 16
•
•
•

一部サポート
PAYLOADについては自作する必要あり
作成はRTD-URIのみサポート、パースはURIに関連するものをサ
ポート

• Windows(SDK for NFC Starter Kit Ver.1.0)
•
•
12年11月29日木曜日

コマンド発行までサポート
NDEFはすべて自作する必要あり
探せばそのへんに
ライブラリ落ちてます

12年11月29日木曜日
避けて通れます

12年11月29日木曜日
趣味です

12年11月29日木曜日
もっとNDEFを知ろう
12年11月29日木曜日
NDEF Message

• NDEFには一つのNDEF Messageが含
まれる

• NDEF Messageには1つ以上の
NDEF Recordが含まれる

構成

12年11月29日木曜日
NDEF Record

構成

12年11月29日木曜日
FLAGS
•

MB(Message Begin)

•

•

ME(Message End)

•

•

255Byte以下のレコードを意味する
PAYLOAD LENGTHが1Byteになる

IL(ID Length)

•

12年11月29日木曜日

分割されたNDEF Messageの一部を意味する

SR(Short Record)

•
•

•

NDEF Messageの終わりを意味する

CF(Chunked Flag)

•

•

NDEF Messageの始まりを意味する

IDが設定されていることを意味する
TNF (Type Name Format)
•
•

TYPEフィールドの種類を表す
3bitの値を設定する

•
•
•
•
•
•
•
•

12年11月29日木曜日

0x00 Empty
0x01 NFC Forum well-known-type
0x02 Media-type as define in RFC2046
0x03 Absolute URI as define in RFC3986
0x04 NFC Forum external type
0x05 Unknown
0x06 Unchanged
0x07 Reserved
TYPE LENGTH

•
•

12年11月29日木曜日

符号なし8bit整数
TYPEフィールドの長さを指定する
PAYLOAD LENGTH

•
•
•

12年11月29日木曜日

SRの値によって長さが変化する
符号なしビックエンディアン
PAYLOADの長さを指定する
ID LENGTH

•
•
•

12年11月29日木曜日

ILの値によって無い場合がある
符号なし8bit整数
IDの長さを指定する
TYPE
•
•
•

TYPE LENGTHによって長さが変わる
TNFの値によって設定値が変わる
0x01 well-known typesだった場合

•
•

U ... URI Record

•

Sp ... Smart Poster

•

12年11月29日木曜日

T ... Text Record

...
ID

•
•
•

12年11月29日木曜日

ILの値によって無い場合がある
ID LENGTHによって長さが変わる
IDを設定することができる
PAYLOAD

•
•
•

12年11月29日木曜日

PAYLOAD LENGTHの値によって長さが
変化する
TNFとTYPEの値によって内容が変わる
well-known typesの仕様書はNFC
Forumに定義されています
ちょっとRTD
12年11月29日木曜日
RTD

• Record Type Definition
• Typeでwell-known-type(0x01)を指定
した場合に使用されるフォーマット

• NFC Forumで仕様書を見ることができ
ます。
•

12年11月29日木曜日

http://www.nfc-forum.org/specs/spec_list/#rtds
RTDの種類

• Text
• URI
• SmartPoster
• Generic Control
• Handover Request / Select / Carrier
• Signature
12年11月29日木曜日
Textだけ紹介

構成

12年11月29日木曜日
Encode

• テキストの文字コードを表す
• 0 ... UTF-8
• 1 ... UTF-16
12年11月29日木曜日
RFU

• Reserved For Future Use

12年11月29日木曜日
Language Code Length

• 言語コードの長さを指定する

12年11月29日木曜日
Language Code

•
•
•

言語コードを表す
Language Code Lengthによって長さが変わる
ISO/IANA

•
•
•

12年11月29日木曜日

en ... English
en-us ... English(United States)
ja ... Japanese
Actual Text

•
•
•

12年11月29日木曜日

実際のテキスト
PAYLOADの残り部分
Encodeで指定されたエンコードを使用する
NDEF完成!
12年11月29日木曜日
Hello, World.と書かれたNDEF
•

D1
02
65
2C
72

01
65
6C
20
6C

10
6E
6C
57
64

54
48
6F
6F
2E

FLAGS

•
•
•
•
•

•
•
•
•
•

Message End : 1
Chunked Flag : 0
Short Record : 1
ID Length : 0

TNF : 01(well-known types)
TYPE LENGTH : 1
PAYLOAD LENGTH : 10
TYPE : T
PAYLOAD

•
•
•

12年11月29日木曜日

Message Begin : 1

Encoding : utf-8
Language Code : en
Actual Text : Hello, World.
さらなるNDEFの世界へ
12年11月29日木曜日
まだ始まったばかり

• 紹介したフォーマットはごく一部
• well-known-typeだけでも知っておく
べき

12年11月29日木曜日
おわり

12年11月29日木曜日

Más contenido relacionado

La actualidad más candente

Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオンTomoki YAMASHITA
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編hdais
 
eBPFは何が嬉しいのか
eBPFは何が嬉しいのかeBPFは何が嬉しいのか
eBPFは何が嬉しいのかYutaro Hayakawa
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)Kentaro Ebisawa
 
AndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうAndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうtreby
 
インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料Ken SASAKI
 
ストリーミングのTLS(SSL)化
ストリーミングのTLS(SSL)化ストリーミングのTLS(SSL)化
ストリーミングのTLS(SSL)化J-Stream Inc.
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料直久 住川
 
無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) Yuki Uchikoba
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話Masaru Oki
 
RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...NTT Software Innovation Center
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめTetsuya Hasegawa
 
nfcpy 0.10.0 でハマった話
nfcpy 0.10.0 でハマった話nfcpy 0.10.0 でハマった話
nfcpy 0.10.0 でハマった話Masaki Yamamoto
 
便利なNFC ~利用シーンと技術の動向~
便利なNFC  ~利用シーンと技術の動向~便利なNFC  ~利用シーンと技術の動向~
便利なNFC ~利用シーンと技術の動向~NFC Forum
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみogatay
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてNTT DATA Technology & Innovation
 
自宅サーバーの世界へようこそ LT版
自宅サーバーの世界へようこそ LT版自宅サーバーの世界へようこそ LT版
自宅サーバーの世界へようこそ LT版ProjectDC-01
 

La actualidad más candente (20)

Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオン
 
UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編UnboundとNSDの紹介 BIND9との比較編
UnboundとNSDの紹介 BIND9との比較編
 
eBPFは何が嬉しいのか
eBPFは何が嬉しいのかeBPFは何が嬉しいのか
eBPFは何が嬉しいのか
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
これから始めるエンジニアのためのクラウド超入門
これから始めるエンジニアのためのクラウド超入門これから始めるエンジニアのためのクラウド超入門
これから始めるエンジニアのためのクラウド超入門
 
AndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうAndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もう
 
インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料インターネットの仕組み enPiT資料
インターネットの仕組み enPiT資料
 
ストリーミングのTLS(SSL)化
ストリーミングのTLS(SSL)化ストリーミングのTLS(SSL)化
ストリーミングのTLS(SSL)化
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
 
無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル)
 
Cumulus Linuxを導入したワケ
Cumulus Linuxを導入したワケCumulus Linuxを導入したワケ
Cumulus Linuxを導入したワケ
 
Onieで遊んでみようとした話
Onieで遊んでみようとした話Onieで遊んでみようとした話
Onieで遊んでみようとした話
 
RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...
 
3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ3GPP TS 38.300-100まとめ
3GPP TS 38.300-100まとめ
 
nfcpy 0.10.0 でハマった話
nfcpy 0.10.0 でハマった話nfcpy 0.10.0 でハマった話
nfcpy 0.10.0 でハマった話
 
便利なNFC ~利用シーンと技術の動向~
便利なNFC  ~利用シーンと技術の動向~便利なNFC  ~利用シーンと技術の動向~
便利なNFC ~利用シーンと技術の動向~
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみ
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
 
自宅サーバーの世界へようこそ LT版
自宅サーバーの世界へようこそ LT版自宅サーバーの世界へようこそ LT版
自宅サーバーの世界へようこそ LT版
 
Your hash is.
Your hash is.Your hash is.
Your hash is.
 

Destacado

FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況Isao Soma
 
UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-Natsuhiko Suwamura
 
About FeliCa Lite(日本語)
About FeliCa Lite(日本語)About FeliCa Lite(日本語)
About FeliCa Lite(日本語)Hirokuma Ueno
 
月刊NDEF 2013年1月号
月刊NDEF 2013年1月号月刊NDEF 2013年1月号
月刊NDEF 2013年1月号Hirokuma Ueno
 

Destacado (6)

FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況
 
UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-
 
About FeliCa Lite(日本語)
About FeliCa Lite(日本語)About FeliCa Lite(日本語)
About FeliCa Lite(日本語)
 
About FeliCa Plug
About FeliCa PlugAbout FeliCa Plug
About FeliCa Plug
 
月刊NDEF 2013年1月号
月刊NDEF 2013年1月号月刊NDEF 2013年1月号
月刊NDEF 2013年1月号
 
About FeliCa Lite-S
About FeliCa Lite-SAbout FeliCa Lite-S
About FeliCa Lite-S
 

Más de Tomoki YAMASHITA

Few command line tools for help Android development
Few command line tools for help Android developmentFew command line tools for help Android development
Few command line tools for help Android developmentTomoki YAMASHITA
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくTomoki YAMASHITA
 
Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみたTomoki YAMASHITA
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK ToolsのおさらいTomoki YAMASHITA
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-Tomoki YAMASHITA
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてますTomoki YAMASHITA
 

Más de Tomoki YAMASHITA (9)

Few command line tools for help Android development
Few command line tools for help Android developmentFew command line tools for help Android development
Few command line tools for help Android development
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなく
 
UUID
UUIDUUID
UUID
 
Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみた
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK Toolsのおさらい
 
What is androider
What is androiderWhat is androider
What is androider
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-
 
NFC QUEST作ったよ
NFC QUEST作ったよNFC QUEST作ったよ
NFC QUEST作ったよ
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてます
 

Ndefってなんだろう