BLE ënner engem Mikroskop (ATTY GATTY…)

BLE ënner engem Mikroskop (ATTY GATTY...)

BLE ënner engem Mikroskop (ATTY GATTY…)

Deel 1, Iwwersiicht

Zimlech laang ass scho vergaang zënter datt déi éischt Spezifizéierung fir Bluetooth 4.0 verëffentlecht gouf. An och wann d'BLE Thema ganz interessant ass, setzt et ëmmer nach vill Entwéckler aus wéinst senger Komplexitéit. A menge fréieren Artikelen hunn ech haaptsächlech op den ënneschten Niveau gekuckt, Link Layer a Physical Layer. Dëst huet eis erlaabt ze vermeiden, op sou komplex a konfus Konzepter wéi den Attribut Protocol (ATT) an den General Attribute Profile (GATT) zréckzegoen. Wéi och ëmmer, et ass néierens ze goen, ouni se ze verstoen ass et onméiglech fir kompatibel Geräter z'entwéckelen. Haut wëll ech dëst Wëssen mat Iech deelen. A mengem Artikel wäert ech op vertrauen Léierbuch fir Ufänger vun der Nordic Websäit. Also loosst eis ufänken.

Firwat ass alles sou schwéier?

Menger Meenung no war et direkt kloer datt d'Gestioun vun Apparater iwwer Smartphones e ganz villverspriechend a laang dauerhaft Thema ass. Dofir hu si décidéiert et direkt a maximal ze strukturéieren. Also datt Hiersteller vu verschiddene Gadgeten net mat hiren eegene Protokoller kommen, déi dann inkompatibel sinn. Dofir d'Schwieregkeet. Schonn an der éischter Etapp hu si probéiert alles méiglech an de BLE-Protokoll ze pressen. An et ass egal ob et spéider nëtzlech ass oder net. Ausserdeem hunn se d'Méiglechkeet fir d'Lëscht vun den Apparater fir d'Zukunft auszebauen.

Loosst eis d'Bild kucken wou de BLE Protokolldiagramm gezeechent ass. Et besteet aus e puer Schichten. Déi ënnescht, kierperlech Layer (PHY) ass verantwortlech fir de Radiokanal vum Apparat. Link Layer (LL) enthält déi ganz Sequenz vun Bytes an der iwwerdroe Message. A fréieren Artikelen hu mir genau dat studéiert. Host Controller Interface (HCI) ass en Austauschprotokoll tëscht BLE Schichten oder Chips wann de Controller an den Host op verschiddene Chips implementéiert sinn. Logical Link Control and Adaptation Protocol (L2CAP) ass verantwortlech fir Paketbildung, Framing, Fehlerkontroll a Paketmontage. Security Manager Protocol (SMP) ass verantwortlech fir d'Verschlësselung vu Paketen. Den General Access Profile (GAP) ass verantwortlech fir den initialen Austausch vun Daten tëscht Apparater fir ze bestëmmen "Wien ass wien". Et enthält och Scannen a Reklammen. An dësem Artikel wäert ech op déi zwee reschtlech Deeler vum Protokoll konzentréieren - GATT an ATT. GATT ass eng Iwwerstruktur vun ATT, sou datt se enk matenee verbonne sinn.

BLE ënner engem Mikroskop (ATTY GATTY...)

Fir d'Geschicht ze vereinfachen, wëll ech op eng Analogie goen. Ech hunn et iergendwou héieren a géif et gär ënnerstëtzen. Denkt un e BLE Apparat als Librairie mat verschiddene Regaler. All Regal ass e separat Thema. Zum Beispill hu mir Regaler mat Science Fiction, Mathematik an Enzyklopedie. Op all Regal ginn et Bicher mat engem spezifizéierten Thema. An e puer Bicher hu souguer Pabeier Lieszeeche mat Noten. Zousätzlech hu mir e klenge Pabeierkatalog vun alle Bicher. Wann Dir erënnert, Schoulbibliothéiken sinn eng schmuel Këscht mat Pabeier Kaarte. Mat dëser Analogie ass de Cabinet de Profil vun eisem Apparat. Regaler si Servicer, Bicher sinn Charakteristiken, an de Katalog ass en Attribut Dësch. Lieszeeche a Bicher sinn Descriptoren, iwwer déi ech spéider och méi am Detail schwätzen.

Jiddereen deen Apparater entwéckelt huet, weess datt vill Projeten ähnlech Stéck Code hunn. De Fakt ass datt vill Apparater ähnlech Funktionalitéit hunn. Zum Beispill, wann Apparater mat Batterien ugedriwwe ginn, da wäert de Problem vun der Opluedstatioun an der Iwwerwaachung vun hirem Niveau d'selwecht sinn. Dat selwecht gëllt fir Sensoren. Eigentlech eng objektorientéiert Approche fir ze programméieren "Liwwert d'Fäegkeet Objekter ze kreéieren déi Eegeschaften a Verhalen an eng selbststänneg Unioun kombinéieren déi dann erëm benotzt kënne ginn". Menger Meenung no, BLE probéiert eng ähnlech Approche. Profiler goufen vun der Bluetooth Special Interest Group (SIG) entwéckelt. Apparater vu verschiddene Hiersteller, déi déiselwecht Profiler hunn, sollten ouni Schwieregkeete matenee schaffen. Profiler, am Tour, besteet aus Servicer, a Servicer vun Charakteristiken, ergänzt duerch Deskriptoren. Am Allgemengen kann et esou ausgesinn:

BLE ënner engem Mikroskop (ATTY GATTY...)

Zum Beispill, betruecht de Profildiagramm vun engem Häerzfrequenzmonitor (Fitnessarmband). Et besteet aus zwee Servicer a verschidde Charakteristiken. Doraus gëtt d'Profilhierarchie direkt kloer. D'Checkpoint Charakteristik setzt d'total Kalorieausgaben op Null zréck.

1. Den Häerzfrequenzservice enthält dräi Charakteristiken (0x180D):
    a) Obligatoresch Häerzfrequenzcharakteristik (0x2A37)
    b) Optional Kierpersensor Positiounskarakteristik (0x2A38)
    c) Bedingungseigenschaften vum Häerzfrequenzkontrollpunkt (0x2A39)
2. Batterie Ënnerhalt Service (0x180F):
    a) Obligatoresch Batterieladungsniveau Charakteristik (0x2A19)

UUID

Fir eis eenzegaarteg Zougang zu Profilelementer (Servicer, Charakteristiken an Descriptoren) ze kréien, musse mir se all iergendwéi nummeréieren. Fir dësen Zweck gëtt e Konzept wéi Universally Unique ID (UUID) oder Universally Unique Identifier agefouert. Den UUID gëtt an de Klammeren vun all Zeil uginn. An et gëtt eng Besonderheet hei. Fir UUID hu mir decidéiert e Code vu 16 an 128 Bits an der Längt ze benotzen. Firwat, frot Dir? Am BLE-Protokoll geet alles ëm Energiespueren. Dofir ass d'Dimensioun vu 16 Bits ganz raisonnabel. Et ass onwahrscheinlech datt méi wéi 65 dausend an der nächster Zukunft geschaf ginn. eenzegaarteg Servicer a Charakteristiken. Am Moment ass alles wat se kéinte scho gezielt ginn (denkt drun wou dat hierkënnt - "hien huet dech och gezielt" :-)) Numméiert Elementer Profiler, vu Servicer, Charakteristiken и descriptors Dir kënnt d'Links kucken.

Wéi och ëmmer, ech mengen datt jiddereen sech un d'Geschicht erënnert mat 4 Bytes vun IP Adressen um Internet. Am Ufank hu mir geduecht datt dat genuch wier, awer elo kënne mir nach ëmmer net op eng 6-Byte Adress wiesselen. Fir dëse Feeler net ze widderhuelen an déi spilleresch Hänn vun DIYers fräi ze ginn, huet SIG direkt decidéiert 128-Bit UUIDs aféieren. Dëst erënnert mech perséinlech un déi net lizenzéiert 433 MHz Band, déi all Zorte vu Kulibins vum Radiokanal ginn ass. An eisem Fall gouf en 128-Bit Identifizéierer vu Servicer a Charakteristiken erstallt. Dëst bedeit datt mir, fir eis Servicer an Apparater, bal all 128-Bit Wäert benotze kënnen. All d'selwecht, d'Wahrscheinlechkeet fir mat der selwechter UUID ze kommen tendéiert op Null.

Tatsächlech hunn kuerz 16-Bit UUIDs hir Verlängerung op en 128-Bit Wäert. An der Spezifizéierung gëtt dës Extensioun Bluetooth Base UUID genannt an huet de Wäert 00000000-0000-1000-8000-00805F9B34FB. Wann zum Beispill den 16-Bit Attribut UUID de Wäert 0x1234 huet, da wäert déi gläichwäerteg 128-Bit UUID de Wäert 00001234-0000-1000-8000-00805F9B34FB hunn. An och déi entspriechend Formel gëtt uginn:

                                128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID

Ech weess net wou dës magesch Zuel hierkënnt. Wann ee vun de Lieser et weess, loosst se an de Kommentarer schreiwen (E Benotzer mam Spëtznumm Sinopteek huet dat scho gemaach. Kuckt d'Kommentaren). Wéi fir mat 128-bëssen UUIDs kommen an, am Prinzip kënnt Dir eng speziell benotzen Generatordee wäert et fir Iech maachen.

ATTY GATT...

Eigentlech fänkt de Spaass un. Loosst mech Iech drun erënneren, datt ATT baséiert op engem Client-Server Relatioun. Elo kucke mir de Serverapparat. Et enthält Informatioun wéi Sensorwäerter, Liichtschalterstatus, Standortdaten, asw. Elo datt all "Participanten an eiser Parade" nummeréiert sinn, musse mir se iergendwéi an d'Erënnerung vum Apparat placéieren. Fir dëst ze maachen, setzen mir se an eng Tabell genannt Attributtabell. Erënneren dëst gutt. Dëst ass d'Häerz vu BLE. Dëst ass wat mir weider betruechten. Elo wäerte mir all Zeil en Attribut nennen. Dësen Dësch läit déif am Stack an, als Regel, hu mir keen direkten Zougang zu et. Mir initialiséieren et an Zougang et, awer wat dobannen geschitt ass vun eis hannert siwe Sigel verstoppt.

Loosst eis d'Bild aus der Spezifizéierung kucken, awer virun deem, wëll ech direkt op déi heefeg Duercherneen a Begrëffer opmierksam maachen, nämlech an Deskriptoren. D'Roll vum Deskriptor ass d'Beschreiwung vun der Charakteristik ze ergänzen. Wann et néideg ass seng Fäegkeeten auszebauen, da ginn Deskriptoren benotzt. Si sinn och Attributer, a grad wéi Servicer a Charakteristiken, si si an der Attributtabelle lokaliséiert. Mir wäerten se am Detail am zweeten Deel vum Artikel ënnersicht. Wéi och ëmmer, heiansdo Deskriptoren bezéien sech op d'Zeilnummer an der Attributtabell. Dëst muss am Kapp behalen ginn. Fir Duercherneen ze vermeiden, benotze mir de Begrëff "Attributpointer" fir dës Zwecker.
BLE ënner engem Mikroskop (ATTY GATTY...)

Also en Attribut ass en diskrete Wäert deen déi folgend Eegeschafte mat him assoziéiert huet:
1. Attribut Handle ass den Dësch Index entspriechend dem Attribut
2. Attributer Typ ass eng UUID déi seng Aart beschreift
3. Attribut Value sinn d'Donnéeën indexéiert vum Attributpointer
4. Attribut Permissiounen sinn den Deel vun engem Attribut, d'Permissiounen, déi net mat dem Attributprotokoll gelies oder geschriwwe kënne ginn

Wéi all dat ze verstoen? Den Attributpointer ass, relativ gesinn, seng Zuel an eiser Tabell.
Et erlaabt e Client en Attribut ze referenzéieren a liesen oder schreiwen Ufroen. Mir kënnen eis Linnen (Attributer) vun 0x0001 op 0xFFFF nummeréieren. An eiser Associatioun mat der Bicherkëscht ass dat d'Kaartnummer am Pabeierkatalog. Ähnlech, wéi am Bibliothéikskatalog, ginn d'Kaarte an der Erhéijung vun der Zuel arrangéiert. D'Zuel vun all spéider Linn muss méi grouss sinn wéi déi virdrun. Just wéi an der Bibliothéik ginn heiansdo Kaarte verluer, also bei eis kënnen et Lücken an der Zeilnummeréierung sinn. Dëst ass erlaabt. Den Haapt Saach ass datt se progressiv ginn.

Den Attributtyp bestëmmt wat den Attribut duerstellt. An Analogie mat der C Sprooch,
wou et boolesch, numeresch Variabelen a Saiten sinn, also ass et hei. Duerch Attributtyp erkennen mir
wat mir ze dinn hunn a wéi mir mat dësem Attribut weider kënne schaffen. Drënner wäerte mir e puer spezifesch Aarte vun Attributer kucken. Zum Beispill, "Service Declaration" (0x2800), "Charakteristesch Deklaratioun" (0x2803), "Descriptor Declaration" (0x2902).

De Wäert vun engem Attribut ass seng tatsächlech Bedeitung, verzeien d'Tautologie. Wann den Attributtyp eng String ass, da kann den Attributwäert zum Beispill de Slogan "Hallo Welt !!!" sinn. Wann den Attributtyp eng "Serviceerklärung" ass, dann ass säi Wäert de Service selwer. An heiansdo ass dëst Informatioun iwwer wou aner Attributer an hir Eegeschaften ze fannen.

Attributer Permissiounen erlaben dem Server ze verstoen ob Lies- oder Schreifzougang erlaabt ass.
Notéiert datt dës Permissiounen nëmme fir den Attributwäert gëllen, an net fir den Zeiger, Typ oder Erlaabnisfeld selwer. Déi. wann Attributopnam erlaabt ass, da kënne mir zum Beispill d'Linn "Hallo Welt !!!" änneren op d'Linn "Gudde Moien". Awer mir kënnen net verbidden eng nei Zeil ze schreiwen oder den Attributtyp z'änneren an d'Linn als "Serviceerklärung" ze bezeechnen. Wann e Client e Server kontaktéiert, freet de Client seng Attributer. Dëst erlaabt de Client ze wëssen wat de Server kann ubidden. Och wann et net néideg ass d'Wäerter ze liesen an ze schreiwen.

Wéi et ausgesäit

D'Konzept vun GATT ass eng Grupp Attributer an engem Attribut Dësch zesummen an eng ganz spezifesch a logesch Uerdnung. Loosst eis den Häerzfrequenzprofil hei ënnen méi no kucken. Déi lénks Kolonn vun dëser Tabell ass fakultativ. Et beschreift eis einfach wat dës Linn (Attributer) ass. All aner Kolonnen kennen eis schonn.

BLE ënner engem Mikroskop (ATTY GATTY...)

Am Top vun all Grupp hu mir ëmmer e Service Deklaratioun Attribut. Säin Typ ass ëmmer 0x2800, an de Pointer hänkt dovun of wéivill Attributer schonn an der Tabell präsent sinn. Seng Permissiounen sinn ëmmer nëmmen liesen, ouni Authentifikatioun oder Autorisatioun. Mir schwätzen iwwer dës Konzepter e bësse méi spéit. De Wäert ass eng aner UUID déi identifizéiert wat de Service ass. An der Tabell ass de Wäert 0x180D, dee vum Bluetooth SIG als Häerzfrequenzservice definéiert ass.

No der Ukënnegung vum Service kënnt d'Ukënnegung vun der Charakteristik. Et ass ähnlech a Form wéi eng Serviceerklärung. Säin UUID ass ëmmer 0x2803, a seng Permissiounen sinn ëmmer nëmme liesen ouni Authentifikatioun oder Autorisatioun. Loosst eis d'Attribut Value Feld kucken, wat e puer Daten enthält. Et enthält ëmmer e Pointer, en UUID an eng Rei vun Eegeschaften. Dës dräi Elementer beschreiwen déi spéider Deklaratioun vum charakteristesche Wäert. De Pointer bezeechent natierlech de Standort vun der charakteristescher Wäerterklärung an der Attributtabell. D'UUID beschreift wéi eng Zort Informatioun oder Wäert mir kënne erwaarden. Zum Beispill den Temperaturwäert, den Zoustand vum Liichtschalter oder en aneren arbiträre Wäert. A schlussendlech Eegeschaften, déi beschreiwen wéi de charakteristesche Wäert interagéiert ka ginn.

Hei waart op eis en anere Fall. Et ass mat Attributer Permissiounen a charakteristesche Eegeschafte verbonnen. Loosst eis d'Bild vun de Bitfeldeigenschaften aus der Spezifizéierung kucken.

BLE ënner engem Mikroskop (ATTY GATTY...)

Wéi Dir gesitt, ginn et hei och Felder déi Lies- a Schreiffäegkeeten ubidden. Dir kënnt Iech froen firwat mir Lies- / Schreifrechter fir Attributer a Besëtz hunn
liesen / schreiwen fir charakteristesche Wäert? Sollen se net ëmmer déiselwecht sinn? D'Tatsaach ass, datt d'Eegeschafte fir de charakteristesche Wäert sinn eigentlech nëmmen Recommandatiounen fir de Client am GATT an Applikatioun Schichten benotzt. Dëst sinn einfach Hiweiser iwwer wat de Client vum charakteristesche Erklärungsattribut erwaarden kann. Loosst eis dëst méi am Detail kucken. Wéi eng Aarte vu Permissiounen huet en Attribut?

1. Zougang Permissiounen:
     - liesen
     - Rekord
     - liesen a schreiwen
2. Authentifikatioun Erlaabnis:
     - Authentifikatioun néideg
     - keng Authentifikatioun néideg
3. Autorisatioun Erlaabnis:
     - Autorisatioun néideg
     - keng Autorisatioun néideg

Den Haaptunterschied tëscht Attributresolutioun a charakteristesche Properties ass datt déi fréier op Serveren gëllen, an déi lescht fir Clienten. De Server kann erlaabt sinn de charakteristesche Wäert ze liesen, awer kann Authentifikatioun oder Autorisatioun erfuerderen. Dofir, wann de Client d'Eegeschafte vun der Charakteristik freet, kréie mir datt d'Liesung erlaabt ass. Awer wa mir probéieren ze liesen, kréie mir e Feeler. Dofir kënne mir sécher iwwer d'Prioritéit vun Permissiounen iwwer Eegeschafte schwätzen. Op der Client Säit kënne mir keng Wëssen kréien iwwer wéi eng Permissiounen en Attribut huet.

Beschreiwung

Komme mer zréck op eisen Dësch. Nodeems Dir de Wäert vun enger Charakteristik erkläert huet, sinn déi folgend Attributdeklaratioune méiglech:
1. Nei Deklaratioun vun Charakteristiken (e Service kann vill Charakteristiken hunn)
2. Nei Serviceerklärung (et kënne vill vun hinnen an der Tabell sinn)
3. Erklären engem Grëff

Am Fall vun der Häerzgeschwindegkeetsmessungskarakteristik, an eiser Tabell, gëtt d'Deklaratioun vum charakteristesche Wäert vun der Deklaratioun vum Deskriptor begleet. En Deskriptor ass en Attribut mat zousätzlech Informatioun iwwer eng Charakteristik. Et gi verschidden Aarte vun Deskriptoren. Mir wäerten iwwer hinnen am Detail am zweeten Deel vun dësem Artikel schwätzen. Fir de Moment wäerte mir nëmmen de Client Characteristic Configuration Descriptor (CCCD) beréieren. Et huet en UUID gläich wéi 0x2902. Mat dësem Deskriptor huet de Client d'Fäegkeet fir Indikatioun oder Notifikatioun um Server z'aktivéieren. Den Ënnerscheed tëscht hinnen ass kleng, awer nach ëmmer do. Notifikatioun erfuerdert keng Bestätegung vun der Empfang vum Client. Indikatioun verlaangt dëst, obwuel et geschitt op der GATT Niveau, net der Applikatioun Niveau erreecht. Firwat esou, Dir frot? Och, ech weess dat net. Loosst mech just soen datt Nordic Experten recommandéiere Notifikatiounen ze benotzen. Ausserdeem gëtt d'Integritéit vum Package iwwerpréift (mat CRC) a béide Fäll geschitt.

Konklusioun

Um Enn vum Artikel wëll ech dat soen. Déi lescht Dësch ass e bësse konfus. Wéi och ëmmer, ech hunn et gewielt well et opginn ass Artikel, op déi ech vertrauen. Am zweeten Deel vu mengem Artikel wëll ech méi déif an d'BlueTooth 4.0 Spezifizéierung verdéiwen. Méi korrekt Diagrammer an Zeechnungen waarden op eis do. Am drëtten Deel géif ech gär de Logbuch parséieren, dee mat dem Wireshark Programm vun engem vun de Gadgeten kritt gëtt, a gesinn "live" all Theorie déi mir studéieren.

Employé vun der Grupp vu Firmen "Caesar Satellit"
Pecherskih Vladimir

Source: will.com

Setzt e Commentaire