ãBLEã使ããGATTï¼Generic Attribute Profileï¼æ¦è¦
éããã
ããã¯ãã¾ã£ããã
ãããããããã«è±å²ããã
éãããªããã
å ã山路ã«æ³£ããããã
éããã
è©åæ太éãéããããããå¼ç¨
ãã¾ã¾ã§ã®è¨äºã¯ãã¡ããã覧ãã ããã
ã
ããã§ã¯GATTã«ã¤ãã¦èªåã®ã¡ã¢ç¨ã«èª¿ã¹ãçµæãæ¸ãã¾ãã åå¼·ããªããéæ追å ä¿®æ£ãè¡ãã®ã§ãå 容ã®æ£ç¢ºããä¿è¨¼ãã¾ããã
æ¬è¨äºã¯ã以ä¸ã®æç®ããã³ãµã¤ããåç §ãã¦ãã¾ãã
http://reinforce-lab.github.io/blog/2013/08/13/blebook-ch2-ble-spec/
GATTã®éè¦æ§
GATTã¯ãå®éã«BLEéä¿¡ã§ãã¼ã¿ãéåä¿¡ããæ¹æ³ãå½¢å¼ã決ããã
ç°ãªãä¼ç¤¾ã®BLEãGATTã«å¾ã£ã¦å½¢å¼ãæ´ããéä¿¡ããã¦ãããããããå ±éã«ãã¼ã¿ã®ããåããã§ããã
ã ããã¢ããªã±ã¼ã·ã§ã³ãä½ãéã«ã¯æ¯éã¨ãGATTãç解ãã¦ããã¹ãã§ããã ã
ã
GATTã®å½¹å²
GATTã¯è£ ç½®ã®éä¿¡å½¹å²ãè¦å®ããã ã
â ã¯ã©ã¤ã¢ã³ã
ã¯ã©ã¤ã¢ã³ãã¯ãµã¼ãã«ãªã¯ã¨ã¹ããéä¿¡ãããµã¼ãããã®å¿çãåä¿¡ããã ã
â¡ãµã¼ã ã¯ã©ã¤ã¢ã³ãããã®è¦æ±ãåä¿¡ããã¨ãå¿çãè¿ãã
GAPã®è¨äºã«ããã¦ãè¨åããããã«ãGAPã®å½¹å²ã¨GATTã®å½¹å²ã¯ç¬ç«ãã¦ããã
GAPãPeripheralã§ãã£ã¦ããGATTã¯ã¯ã©ã¤ã¢ã³ãã«ããµã¼ãã¼ã«ããªããã ã
ã
UUID
Universally unique identifier(UUID)ã¯16bytesã®èå¥åã§ãä»ã®UUIDã¨éè¤ãããã¨ã®ãªãæ°åã§ããã
ãªã³ã¯å±¤ã«ããã¦ãã¼ã¿payloadã¯27bytesã¾ã§ãªã®ã§ãUUIDã®16bytesã¯ãã®ã»ã¨ãã©ãå æãã¦ãã¾ãã
ã¾ãããã¼ã¿ãé·ãã¨éä¿¡æéãå¢ããæ¶è²»é»åãå¢ãã¦ãã¾ãã
ãã®ããUUIDã«ã¯ç縮ãã2bytesçã¨4bytesçãããã
ãã®ç縮çã¯Bluetooth SIGã§å®ç¾©ããããã®ã ãã使ãããã¾ãç縮çãã16bytesã®UUIDãåæ§ç¯ããæã¯
xxxxxxxx-0000-1000-00805F9B34FB
ã使ããããxxxxxxxxã®é¨åã«ç縮ãããUUIDãå ¥ããï¼2bytesã®å ´åã¯0000xxxxã®xxxxã«ä»£å ¥ãããï¼ ã
SIGã§å®ç¾©ããã¦ããªãUUIDã使ãæã¯ãç縮çã¯åå¨ããªãã®ã§ãå¿ ã16bytesã使ããªãã¨ãããªãã ã
ä¾ãã°èªåã§æ°ãããµã¼ãã¹ãããã¿ã³ãæ¼ãã¨LCDã«ã¡ãã»ã¼ã¸ã表示ããããçãä½ãå ´åã¯ãBluetooth SIGã«ãã®ãããªãµã¼ãã¹ã«è©²å½ããUUIDã¯ãªãã®ã§èªåã§16bytesã®UUIDãUUID generatorãå©ç¨ãã¦ä½ããªãã¨ãããªãã ã
ã
Attributeã¨ãã¼ã¿é層
attributeã¯GATTã«ããããã¼ã¿æ§é ã®æå°åä½ã§ãããã¯ã©ã¤ã¢ã³ãã¨ãµã¼ãã®ãã¼ã¿äº¤æã¯å ¨ã¦ãã®attributeãç¨ãã¦è¡ãããã
attributeãè¤æ°éãã¦ã°ã«ã¼ãåãããã®ããµã¼ãã¹ã¨å¼ã¶ãããã§ãµã¼ãã¹ã¨ã¯æ©è½ãæå³ãããå¿æè¨ãµã¼ãã¹ã温度è¨ãµã¼ãã¹ãªã©ãä½ããã®æ©è½ãæããããã«ãä¸é£ã®ãã¼ã¿äº¤æã®ããåããä¸ã¤ã«ã¾ã¨ãããã®ããµã¼ãã¹ã§ããã ã
ãµã¼ãã¹ã¯attributeãã大ããªåä½ã«åé¡ã§ããããµã¼ãã¹ã¯è¤æ°ã®characteristicã«å解ã§ãããcharacteristicã¯è¤æ°ã®descriptorãå«ã¾ãããã¨ãããã
ï¼ãµã¼ãã¹ãcharacteristicãå«ã¾ãã«attributeã ãããæãå ´åããããcharacteristicãdescriptorãå«ã¾ãã«attributeã ãããæãå ´åããããï¼
ãã¡ããcharacteristicãdescriptorãæå°åä½ã§ããattributeã§åºæ¥ã¦ããã ã
ã
Attributeã®æ§é
attributeã®æ§æè¦ç´ ã以ä¸ã«ç¤ºãã ã
â Handle
handleã¨ã¯GATTãµã¼ãã®å ¨attributeã«ä¸ãããããåattributeã«åºæã®16bitèå¥åã§ããã
handleã¯0x0001ãã0xFFFFã¾ã§ã®ã©ããã®å¤ãå²ãæ¯ãããæ¥ç¶ä¸ã«ãã®å¤ãå¤ãããã¨ã¯ãªãã
handleã®å¤ã¯ãã¯ã©ã¤ã¢ã³ããã¢ã¯ã»ã¹ã§ããattributeã®é ã«å¾ã£ã¦0x0200â0x0201â0x0202ã¨å¤§ãããªã£ã¦ããã
ãã ããã®å¤ã¯é£ç¶ãã¦ãããã0x0202â0x0210ã¨å¤ãé£ã°ããã¨ãããã ã
â¡Type
Typeã¨ã¯UUIDã®ãã¨ã«ä»ãªããªãã
UUIDã«ããã¦è¿°ã¹ãããã«ããµã¤ãºã¯2bytesã4bytesã16bytesã®ã©ããã«ãªãã
attributeã®å¤ã«ã©ã®ãããªãã¼ã¿ãæ ¼ç´ããã®ããå®ç¾©ããã
ä¾ãã°attributeã®å¤ã«characteristic宣è¨ã®ãã¼ã¿ãæ ¼ç´ããå ´åã¯ãUUID=0x2803ãCCCDã®ãã¼ã¿ãæ ¼ç´ãããªãUUID=0x2902ã¨ãªãã ã
â¢Permissionsï¼è¨±å¯ï¼
åattributeã«åå¥ã«ä¸ãããã¦ãããATT operationãattributeã«èªã¿æ¸ãã§ããããã©ã®ãããªã»ãã¥ãªãã£ã«ãªã£ã¦ãããã示ãã¦ããã
Permissionsã¯meta-dataãªã®ã§ã¯ã©ã¤ã¢ã³ããç´æ¥ã«å¤ãèªããã¨ã¯ã§ããªãã ã
valueã®èªã¿æ¸ã許å¯ã«ã¤ãã¦ã以ä¸ã®4ã¤ã®ã©ãããè¨å®ããã
ã»NONEï¼èªããã¨ãæ¸ããã¨ãã§ããªã
ã»Readableï¼èªã¿è¾¼ã¿ã®ã¿å¯è½
ã»Writableï¼æ¸è¾¼ã¿ã®ã¿å¯è½
ã»Readable and writableï¼èªã¿æ¸ãå¯è½ ã
ã
ã¯ã©ã¤ã¢ã³ããattributeã«ã¢ã¯ã»ã¹ããéã«ãã©ã®ãããªã¬ãã«ã®æå·ãå¿ è¦ãã示ãã
ã»Security mode Lv1ï¼æå·åãªã
ã»Security mode Lv2ï¼ãã®attributeã«ã¢ã¯ã»ã¹ããã«ã¯æå·åãããæ¥ç¶ãå¿ è¦ããã ããæå·éµã«ããèªè¨¼ã¯å¿ è¦ã¨ããªãã
ã»Security mode Lv3ï¼ãã®attributeã«ã¢ã¯ã»ã¹ããã«ã¯èªè¨¼ãããéµã§æå·åãããæ¥ç¶ãå¿ è¦ã ã
â£Valueï¼å¤ï¼
Typeã§å®ç¾©ãã種é¡ã®ãã¼ã¿ãæ ¼ç´ãããPermissionsã®è¨å®ãReadableãWritableã§ããããã°ãã¯ã©ã¤ã¢ã³ãã¯èªç±ã«ãã®å¤ãèªã¿æ¸ãã§ããã
ä¸æ¹ã§â ï½â¢ã¯ã¯ã©ã¤ã¢ã³ããç´æ¥ã¢ã¯ã»ã¹ãã¦èªã¿åºããä¿®æ£ãããã¨ã¯ã§ããªãã
Valueã«ã¯æ大512bytesã¾ã§æ ¼ç´ã§ããæ´æ°ãæååãå°æ°ç¹ã¨æ§ã ãªåã®ãã¼ã¿ã使ãã¦ãæå®ããtypeã«ãã£ã¦attributeãã®ãã®ã®æ å ±ãã¢ããªã±ã¼ã·ã§ã³ã®å®ãã¼ã¿ãæã¤ã ã
ã
Service
ä½ããã®æå³ãç®çã«é¢é£ããattributeãéãã¦ã»ããã«ããã®ããµã¼ãã¹ã§ãããå®éã«å ¨ã¦ã®attributeã¯ä½ããã®ãµã¼ãã¹ã«æå±ãã¦ããã®ã§ãGATTãµã¼ãã¯ãµã¼ãã¹ã§åºæ¥ã¦ããã¨ãã¿ãªããã
åãµã¼ãã¹ã®å é ã«ã¯ããµã¼ãã¹ã®éå§ã示ã1åã®attributeããµã¼ãã¹å®£è¨ãåå¨ããããµã¼ãã¹å®£è¨ã®attributeã¯ä»¥ä¸ã®æ§é ãæã¤ã ã
Handle | Type | Permissions | Value | Value ã®é·ã |
---|---|---|---|---|
0xââââ | 0x2800 or 0x2801 | Read Only | Service UUID | 2,4,or 16 bytes |
Handleã®å¤ã¯ãã¯ã©ã¤ã¢ã³ãã®ã¢ã¯ã»ã¹é ã«å¾ãããã®æã ã«å¿ããå¤ã«ãªãã ã
Typeã¯Primary Service UUID(0x2800)ãSecondly Service UUID(0x2801)ã«ãªãããããã2bytesã«ç縮ãããUUIDã§ããã
Secondly Serviceã¯ä»ã®Primary Serviceã®included serviceï¼å¾è¿°ï¼ã¨ãã¦ã®ã¿ä½¿ãã¦ãå¤é¨ã«ã¯å ¬éããããåç¬ã§ã¯æå³ãæããªãã主ã«ä½¿ãããã®ã¯Primary Serviceã®æ¹ã§ãããã¾ãPrimary Serviceã¯å¥ã®Primary Serviceã®included serviceã¨ãã¦ã使ç¨ã§ããã ã
Permissionsã¯èªã¿è¾¼ã¿ããã§ããªãããã«è¨å®ããã¦ããã ã
Valueã«ã¯Service UUIDsãæã¤ãService UUIDã«ã¤ãã¦ã¯GAPã®è§£èª¬ãåç §ã ã
ã
ãµã¼ãã¹ã¯ä»ã®ãµã¼ãã¹ãInclude serviceã¨ãã¦åç §ã§ãããå¥ã®ãµã¼ãã¹ãå«ãããã¨ã§ãæ¢åã®ãµã¼ãã¹ãæ¡å¼µããæ°ãããµã¼ãã¹ãä½æãããã¨ãåºæ¥ããã¾ããµã¼ãã¹ã使ãã¾ãããã¨ã§ãä¼¼ããããªãµã¼ãã¹ãéè¤ãããã¨ãé¿ããããã®ã§ã¡ã¢ãªã®ç¯ç´ã«ããªãã ã
ï¼ãã詳ãã解説ã¯ãã¡ãã®ãµã¤ãã®ãµã¼ãã¹ã®é ç®ãåç §ï¼ ã
Include serviceã¨ãã¦ä½¿ç¨ããããµã¼ãã¹ã¯1åã®attributeãincludeå®ç¾©ã§æå®ãããincludeå®ç¾©ã®attributeã¯ä»¥ä¸ã®æ§é ãæã¤ã ã
Handle | Type | Permissions | Value | Value ã®é·ã |
---|---|---|---|---|
0xââââ | 0x2802 | Read Only | Include service handle, end group handle, Included Service UUID | 6,8,or 20 bytes |
Handleã®å¤ã¯ãã¯ã©ã¤ã¢ã³ãã®ã¢ã¯ã»ã¹é ã«å¾ãããã®æã ã«å¿ããå¤ã«ãªãã ã
Typeã¯Include UUID(0x2802)ã®2bytesã«ç縮ãããUUIDã ã
Permissionsã¯èªã¿è¾¼ã¿ããã§ããªãããã«è¨å®ããã¦ããã ã
Valueã«ã¯Include Serviceã¨ãã¦ä½¿ç¨ããããµã¼ãã¹ã«ã¤ãã¦ããµã¼ãã¹å®£è¨ã®handleã®å¤2byteããã®ãµã¼ãã¹ã®æå¾ã®attributeã®handleã®å¤2byteããµã¼ãã¹ã®UUIDã®å¤2bytesãããã¯4bytesã16bytesã使ãã ã
ã
characteristicã®æ§é
characteristicã¯ã¦ã¼ã¶ãã¼ã¿ãæ ¼ç´ããã®ã«ç¨ãããããcharacteristicã¯å¸¸ã«æä½ã§ã2ã¤ã®attributeãcharacteristic宣è¨ã¨characteristic valueãæã¤ã
ã¾ããdescriptorï¼è¨è¿°åï¼ãcharacteristic valueã«ç¶ããã¨ãããã
ãããã®ç¨®é¡ã®attributeãéã¾ã£ã¦1ã¤ã®characteristicãæ§æããã ã
ã
ã»characteristic宣è¨
characteristic宣è¨ã®attributeã¯ä»¥ä¸ã®æ§é ãæã¤ã ã
Handle | Type | Permissions | Value | Value ã®é·ã |
---|---|---|---|---|
0xââââ | 0x2803 | Read Only | Properties, value handle, characteristic UUID | 5,7,or 19 bytes |
Handleã®å¤ã¯ãã¯ã©ã¤ã¢ã³ãã®ã¢ã¯ã»ã¹é ã«å¾ãããã®æã ã«å¿ããå¤ã«ãªãã ã
Typeã¯characteristicã示ãUUID(0x2803)ã®2bytesã«ç縮ãããUUIDã ã
Permissionsã¯èªã¿è¾¼ã¿ããã§ããªãããã«è¨å®ããã¦ããã ã
Valueã¯ä»¥ä¸ã®æ§é ãæ㤠ã
vlaueã®é ç® | byteæ° | å 容 |
---|---|---|
Properties | 1 | ãã®characteristicã«å¯¾ãã¦è¨±ããã¦ããæä½ |
value handle | 2 | characteristic valueã®handle |
characteristic UUID | 2,4 or 6 | ãã®characteristicåºæã®UUID |
Propertiesã¯1byteãã¼ã¿ã§ã以ä¸ã®ç¨®é¡ãããã0x80ã«è¨å®ããå ´åã¯ãdescriptorã®Characteristic Extended Propertiesã®è¨å®ãç¨ããã ã
Property | å¤ | å 容 |
---|---|---|
Broadcast | 0x01 | ãããè¨å®ããã¨ãæå®ãããcharacteristic valueã®ãã¼ã¿ãadvertisingãã±ããã§éä¿¡ããã |
Read | 0x02 | ãããè¨å®ããã¨ã¯ã©ã¤ã¢ã³ãããã®èªã¿è¾¼ã¿å¯è½ |
Write Without Response | 0x04 | ãããè¨å®ããã¨ãã¯ã©ã¤ã¢ã³ãããã®æ¸ãè¾¼ã¿å¯è½ãï¼ãµã¼ãããã®ã¬ã¹ãã³ã¹ãªãï¼ |
Write | 0x08 | ãããè¨å®ããã¨ãã¯ã©ã¤ã¢ã³ãããã®æ¸ãè¾¼ã¿å¯è½ãæ¸ãè¾¼ã¿ãªã¯ã¨ã¹ãã«å¯¾ãã¦ããµã¼ãããã®ã¬ã¹ãã³ã¹ãæãã |
Notify | 0x10 | ãããè¨å®ããã¨ããµã¼ããã¯ã©ã¤ã¢ã³ãã«characteristicã®å¤æ´ãéç¥ã§ãã |
Indicate | 0x20 | ãããè¨å®ããã¨ããµã¼ããã¯ã©ã¤ã¢ã³ãã«characteristicã®å¤æ´ãéç¥ã§ãããNotifyã¨ã®éãã¯ãIndicateã¯ã¯ã©ã¤ã¢ã³ãããã®å¿çãè¦æ±ãããã¨ã§ããã |
Signed Write Command | 0x40 | ãããè¨å®ããã¨ãã¯ã©ã¤ã¢ã³ãããã®ç½²åä»ãæ¸ãè¾¼ã¿å¯è½ã |
Extended Properties | 0x80 | ãããè¨å®ããã¨ãdescriptorã®Characteristic Extended Propertiesã使ç¨ã§ããã |
value handleã¯å®éã®ãã¼ã¿ãæã£ã¦ããcharacteristic value attributeã®handleã®å¤ã§ããã
ãã®handleã®å¤ã¯ãå¿ ãããcharacteristic宣è¨ã®handleå¤ï¼1ã®é£ç¶ããå¤ã«ã¯ãªããªããã¨ã«æ³¨æããã ã
characteristic UUIDã¯characteristicåºæã®UUIDã§ãããäºåã«å®ç¾©ãããç縮çã®2bytes,4bytesã¨ãããã§ã¯ãªã16bytesãããã®ã¯ä»ã®UUIDã¨åãã§ããã ã
ã
ã»characteristic value
characteristic valueã®attributeã¯ä»¥ä¸ã®æ§é ãæã¤ã ã
Handle | Type | Permissions | Value | Value ã®é·ã |
---|---|---|---|---|
0xââââ | characteristic UUID | ä»»æ | å®éã®ãã¼ã¿å¤ | å¯å¤ |
Handleã®å¤ã¯ãã¯ã©ã¤ã¢ã³ãã®ã¢ã¯ã»ã¹é ã«å¾ãããã®æã ã«å¿ããå¤ã«ãªããcharacteristic宣è¨ã®valueã§ã使ãããã ã
Typeã¯characteristic宣è¨ã®value ã§è¨å®ããã®ã¨åãcharacteristic UUIDã使ãã ã
Permissionsã¯ç¶æ³ã«å¿ãã¦ä»»æã®è¨å®ã使ç¨ããã ã
Valueã«ã¯ãããã種é¡ã®ãã¼ã¿ã温度ãkeyã³ã¼ããæåãé度ãå¿æãªã©ãç¨ããããã ã
ã
descriptor
descriptorã¯characteristic valueã®å¾ã«ç¶ããcharacteristic valueã®è¿½å æ å ±ãæã¤ã
descriptorã¯1åã®attributeã§æ§æããã¦ãããã
Expanded properties descriptorï¼æ¡å¼µããããã£è¨è¿°åï¼
characteristic宣è¨ã®propertiesã0x80ã«è¨å®ãããã¨ã§ããã®æ¡å¼µpropertiesã使ç¨ã§ããã
å称 | å 容 |
---|---|
Queued Write | ãããè¨å®ããã¨ãã¯ã©ã¤ã¢ã³ãã«Queued Write ATT Operationsã®ä½¿ç¨ã許å¯ããã |
Writable Auxiliaries | ãããè¨å®ããã¨ãã¯ã©ã¤ã¢ã³ãããdescriptorã¸æ¸ãè¾¼ã¿ãã§ããã |
ã
CCCD (Client Characteristic Configuration Descriptor)
æããã使ãããéè¦ãªdescriptorã
CCCDã«1ãæ¸ãè¾¼ãã¨Notifyã許å¯ãã2ãæ¸ãè¾¼ãã¨Indicateã許å¯ããã0ãæ¸ãè¾¼ãã¨ãNotifyããã³Indicateã®ä¸¡æ¹ãç¡å¹ã«ããã
CCCDã®è¨å®ãé©ç¨ãããã®ã¯ããã®CCCDãå±ãã¦ããCharacteristicã«å¯¾ãã¦ã®ã¿ã§ãããå¥ã®Characteristicã¯ããã®Characteristicãæã¤CCCDã§è¨å®ããªãã¨ãããªãã
ã¾ããé常ãCharacteristicã®å¤ã¯æ¥ç¶ãåããã¨å¤±ãããããCCCDã®å¤ã ãã¯æ¥ç¶ãåãã¦ãä¿æãããã
ã
Characteristic User Description descriptor
ã¦ã¼ã¶ãèªã¿è¾¼ããã³ã¡ã³ããæ ¼ç´ããããã®descriptorããã¼ã¿å½¢å¼ã¯UTF-8ã§ããã