BLE zem mikroskopa (ATTы GATTыā€¦)

BLE zem mikroskopa (ATTы GATTы...)

BLE zem mikroskopa (ATTы GATTыā€¦)

1. daļa, pārskats

Jau pagājis diezgan ilgs laiks kopÅ” pirmās Bluetooth 4.0 specifikācijas izlaiÅ”anas. Un, lai gan BLE tēma ir ļoti interesanta, tā joprojām atbaida daudzus izstrādātājus savas sarežģītÄ«bas dēļ. Savos iepriekŔējos rakstos es galvenokārt aplÅ«koju zemāko lÄ«meni, saites slāni un fizisko slāni. Tas ļāva mums izvairÄ«ties no tik sarežģītiem un mulsinoÅ”iem jēdzieniem kā AtribÅ«tu protokols (ATT) un Vispārējais atribÅ«tu profils (GATT). Taču nav kur iet, tos nesaprotot, nav iespējams izstrādāt saderÄ«gas ierÄ«ces. Å odien es vēlētos dalÄ«ties ar jums Å”ajās zināŔanās. Savā rakstā es paļauÅ”os uz mācÄ«bu grāmata iesācējiem no Ziemeļvalstu vietnes. Tātad sāksim.

Kāpēc viss ir tik grūti?

Manuprāt, uzreiz bija skaidrs, ka ierīču pārvaldÄ«ba caur viedtālruņiem ir ļoti perspektÄ«va un ilgstoÅ”a tēma. Tāpēc viņi nolēma to nekavējoties un maksimāli strukturēt. Lai dažādu sÄ«krÄ«ku ražotāji nenāk klajā ar saviem protokoliem, kas pēc tam bÅ«s nesaderÄ«gi. LÄ«dz ar to grÅ«tÄ«bas. Jau pirmajā posmā viņi mēģināja visu iespējamo iespiest BLE protokolā. Un nav svarÄ«gi, vai tas vēlāk noderēs vai nē. Turklāt tie paredzēja iespēju paplaÅ”ināt ierīču sarakstu nākotnē.

ApskatÄ«sim attēlu, kurā ir uzzÄ«mēta BLE protokola diagramma. Tas sastāv no vairākiem slāņiem. Zemākais fiziskais slānis (PHY) ir atbildÄ«gs par ierÄ«ces radio kanālu. Link Layer (LL) satur visu baitu secÄ«bu nosÅ«tÄ«tajā ziņojumā. IepriekŔējos rakstos mēs pētÄ«jām tieÅ”i to. Host Controller Interface (HCI) ir apmaiņas protokols starp BLE slāņiem vai mikroshēmām, ja kontrolieris un resursdators ir ieviesti dažādās mikroshēmās. LoÄ£iskās saites kontroles un adaptācijas protokols (L2CAP) ir atbildÄ«gs par pakeÅ”u veidoÅ”anu, kadrÄ“Å”anu, kļūdu kontroli un pakeÅ”u montāžu. DroŔības pārvaldnieka protokols (SMP) ir atbildÄ«gs par pakeÅ”u Å”ifrÄ“Å”anu. Vispārējās piekļuves profils (GAP) ir atbildÄ«gs par sākotnējo datu apmaiņu starp ierÄ«cēm, lai noteiktu ā€œKas ir kurÅ”ā€. Tas ietver arÄ« skenÄ“Å”anu un reklāmu. Å ajā rakstā es pievērsÄ«Å”os divām atlikuÅ”ajām protokola daļām - GATT un ATT. GATT ir ATT virsbÅ«ve, tāpēc tie ir cieÅ”i saistÄ«ti.

BLE zem mikroskopa (ATTы GATTы...)

Lai vienkārÅ”otu stāstu, es vēlētos pievērsties analoÄ£ijai. Kaut kur dzirdēju un gribētu atbalstÄ«t. Padomājiet par BLE ierÄ«ci kā grāmatu skapi ar vairākiem plauktiem. Katrs plaukts ir atseviŔķa tēma. Piemēram, mums ir plaukti ar zinātnisko fantastiku, matemātiku un enciklopēdijām. Katrā plauktā ir grāmatas ar noteiktu tēmu. Un dažām grāmatām pat ir papÄ«ra grāmatzÄ«mes ar piezÄ«mēm. Turklāt mums ir neliels visu grāmatu papÄ«ra katalogs. Ja atceraties, skolu bibliotēkas ir Å”aura kaste ar papÄ«ra kartēm. Ar Å”o analoÄ£iju skapis ir mÅ«su ierÄ«ces profils. Plaukti ir pakalpojumi, grāmatas ir raksturlielumi, un katalogs ir atribÅ«tu tabula. GrāmatzÄ«mes grāmatās ir deskriptori, par kuriem es arÄ« pastāstÄ«Å”u vēlāk sÄ«kāk.

Ikviens, kurÅ” ir izstrādājis ierÄ«ces, zina, ka daudziem projektiem ir lÄ«dzÄ«gas koda daļas. Fakts ir tāds, ka daudzām ierÄ«cēm ir lÄ«dzÄ«ga funkcionalitāte. Piemēram, ja ierÄ«ces tiek darbinātas ar baterijām, tad uzlādes un to lÄ«meņa uzraudzÄ«bas problēma bÅ«s tāda pati. Tas pats attiecas uz sensoriem. PatiesÄ«bā uz objektu orientēta pieeja programmÄ“Å”anai "nodroÅ”ina iespēju izveidot objektus, kas apvieno Ä«paŔības un uzvedÄ«bu autonomā savienÄ«bā, ko pēc tam var izmantot atkārtoti". Manuprāt, BLE mēģināja izmantot lÄ«dzÄ«gu pieeju. Profilus izstrādāja Bluetooth Ä«paÅ”o intereÅ”u grupa (SIG). Dažādu ražotāju ierÄ«cēm, kurām ir vienādi profili, jādarbojas bez grÅ«tÄ«bām. Savukārt profili sastāv no pakalpojumiem un raksturlielumu pakalpojumiem, ko papildina deskriptori. Kopumā tas varētu izskatÄ«ties Ŕādi:

BLE zem mikroskopa (ATTы GATTы...)

Piemēram, apsveriet sirdsdarbÄ«bas monitora (fitnesa rokassprādzes) profila diagrammu. Tas sastāv no diviem pakalpojumiem un vairākām Ä«paŔībām. No tā uzreiz kļūst skaidra profila hierarhija. Kontrolpunkta raksturlielums atiestata kopējo kaloriju patēriņu uz nulli.

1. SirdsdarbÄ«bas ātruma pakalpojums ietver trÄ«s raksturlielumus (0x180D):
    a) Obligāts sirdsdarbÄ«bas raksturlielums (0x2A37)
    b) Papildu Ä·ermeņa sensora pozÄ«cijas raksturlielums (0x2A38)
    c) SirdsdarbÄ«bas kontroles punkta nosacÄ«jumi (0x2A39)
2. Akumulatora apkopes pakalpojums (0 x 180 F):
    a) Obligāts akumulatora uzlādes lÄ«meņa raksturlielums (0x2A19)

UUID

Lai mēs varētu unikāli piekļūt profila elementiem (pakalpojumiem, raksturlielumiem un deskriptoriem), mums tie visi ir kaut kā jānumurē. Å im nolÅ«kam tiek ieviests tāds jēdziens kā universāli unikālais ID (UUID) vai universāli unikālais identifikators. UUID ir norādÄ«ts katras rindas iekavās. Un Å”eit ir viena Ä«patnÄ«ba. UUID mēs nolēmām izmantot 16 un 128 bitu garu kodu. Kāpēc tu jautā? BLE protokolā viss ir par enerÄ£ijas taupÄ«Å”anu. Tāpēc 16 bitu izmērs ir diezgan saprātÄ«gs. Maz ticams, ka tuvākajā laikā tiks izveidoti vairāk nekā 65 tÅ«kst. unikālus pakalpojumus un Ä«paŔības. Å obrÄ«d viss, ko viņi varēja jau saskaitÄ«t (atcerieties, no kurienes tas nāca - "viņŔ arÄ« tevi saskaitÄ«ja" :-)) Numurēti elementi profili, pakalpojumu, Ä«paŔības Šø deskriptori jÅ«s varat apskatÄ«t saites.

Tomēr domāju, ka visi atceras stāstu ar 4 baitu IP adresēm internetā. Sākumā mēs domājām, ka ar to pietiek, bet tagad mēs joprojām nevaram pārslēgties uz 6 baitu adresi. Lai Ŕī kļūda neatkārtotos un dotu vaļu draiskulÄ«gajām DIY roku rokām, SIG nekavējoties nolēma ieviest 128 bitu UUID. Å is man personÄ«gi atgādina nelicencēto 433 MHz joslu, kas tika pieŔķirta visādiem Kuļibiņiem no radio kanāla. MÅ«su gadÄ«jumā tika izstrādāts 128 bitu pakalpojumu un raksturlielumu identifikators. Tas nozÄ«mē, ka mēs saviem pakalpojumiem un ierÄ«cēm varam izmantot gandrÄ«z jebkuru 128 bitu vērtÄ«bu. Tomēr varbÅ«tÄ«ba, ka nāks klajā ar vienu un to paÅ”u UUID, mēdz bÅ«t nulle.

Faktiski Ä«siem 16 bitu UUID paplaÅ”inājumiem ir 128 bitu vērtÄ«ba. Specifikācijā Å”is paplaÅ”inājums tiek saukts par Bluetooth bāzes UUID, un tā vērtÄ«ba ir 00000000-0000-1000-8000-00805F9B34FB. Ja, piemēram, 16 bitu atribÅ«ta UUID vērtÄ«ba ir 0x1234, tad lÄ«dzvērtÄ«gā 128 bitu UUID vērtÄ«ba bÅ«s 00001234-0000-1000-8000-00805F9B34FB. Un pat ir dota atbilstoŔā formula:

                                128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID

Es nezinu, no kurienes radās Ŕis maģiskais skaitlis. Ja kāds no lasītājiem zina, lai raksta komentāros (To jau ir izdarījis lietotājs ar segvārdu Sinopteek. Skaties komentāros). Runājot par 128 bitu UUID, principā varat izmantot īpaŔu ar ģeneratorukurŔ to izdarīs tavā vietā.

ATTy GATTy...

PatiesÄ«bā tad sākas jautrÄ«ba. AtgādināŔu, ka ATT pamatā ir klienta un servera attiecÄ«bas. Tagad mēs skatāmies uz servera ierÄ«ci. Tajā ir informācija, piemēram, sensoru vērtÄ«bas, gaismas slēdža statuss, atraÅ”anās vietas dati utt. Tagad, kad visi ā€œmÅ«su parādes dalÄ«bniekiā€ ir numurēti, mums tie kaut kā jāievieto ierÄ«ces atmiņā. Lai to izdarÄ«tu, mēs ievietojam tos tabulā, ko sauc par atribÅ«tu tabulu. Atcerieties Å”o labi. Tā ir pati BLE sirds. Tas ir tas, ko mēs apsvērsim tālāk. Tagad mēs katru rindiņu sauksim par atribÅ«tu. Å is galds atrodas dziļi kaudzē, un, kā likums, mums nav tieÅ”as piekļuves tai. Mēs to inicializējam un piekļūstam, bet tas, kas notiek iekŔā, no mums slēpjas aiz septiņiem zÄ«mogiem.

ApskatÄ«sim bildi no specifikācijas, bet pirms tam uzreiz gribu vērst uzmanÄ«bu uz biežajām terminu neskaidrÄ«bām, proti, deskriptoros. Deskriptora uzdevums ir papildināt raksturlieluma aprakstu. Ja nepiecieÅ”ams paplaÅ”ināt tās iespējas, tad tiek izmantoti deskriptori. Tie ir arÄ« atribÅ«ti, un, tāpat kā pakalpojumi un raksturlielumi, tie atrodas atribÅ«tu tabulā. Mēs tos detalizēti izskatÄ«sim raksta otrajā daļā. Tomēr dažreiz deskriptori atsaucas uz rindas numuru atribÅ«tu tabulā. Tas ir jāpatur prātā. Lai izvairÄ«tos no neskaidrÄ«bām, Å”ajos nolÅ«kos izmantosim terminu ā€œatribÅ«tu rādÄ«tājsā€.
BLE zem mikroskopa (ATTы GATTы...)

Tātad atribÅ«ts ir diskrēta vērtÄ«ba, kurai ir saistÄ«tas Ŕādas Ä«paŔības:
1. Atribūta rokturis ir tabulas indekss, kas atbilst atribūtam
2. Atribūta veids ir UUID, kas apraksta tā veidu
3. Atribūta vērtība ir dati, ko indeksē atribūta rādītājs
4. Atribūtu atļaujas ir atribūta daļa, atļaujas, kuras nevar nolasīt vai rakstīt, izmantojot atribūtu protokolu.

Kā to visu saprast? Atribūta rādītājs, nosacīti runājot, ir tā numurs mūsu tabulā.
Tas ļauj klientam atsaukties uz atribÅ«tu lasÄ«Å”anas vai rakstÄ«Å”anas pieprasÄ«jumos. Mēs varam numurēt savas rindas (atribÅ«tus) no 0x0001 lÄ«dz 0xFFFF. MÅ«su saistÄ«bā ar grāmatu skapi tas ir kartes numurs papÄ«ra katalogā. LÄ«dzÄ«gi, kā bibliotēkas katalogā, kartÄ«tes tiek sakārtotas pieaugoŔā skaita secÄ«bā. Katras nākamās rindas skaitam jābÅ«t lielākam par iepriekŔējo. Tāpat kā bibliotēkā dažkārt dažas kartÄ«tes pazÅ«d, tāpēc pie mums rindu numerācijā var bÅ«t nepilnÄ«bas. Tas ir atļauts. Galvenais, lai tie iet pakāpeniski.

Atribūta veids nosaka, ko atribūts pārstāv. Pēc analoģijas ar C valodu,
kur ir BÅ«la, skaitliskie mainÄ«gie un virknes, tā tas ir Å”eit. Pēc atribÅ«ta veida mēs atpazÄ«stam
ar ko mēs nodarbojamies un kā varam turpināt strādāt ar Å”o atribÅ«tu. Tālāk mēs apskatÄ«sim dažus konkrētus atribÅ«tu veidus. Piemēram, "pakalpojuma deklarācija" (0x2800), "raksturojuma deklarācija" (0x2803), "deskriptora deklarācija" (0x2902).

AtribÅ«ta vērtÄ«ba ir tā faktiskā nozÄ«me, piedodiet tautoloÄ£iju. Ja atribÅ«ta veids ir virkne, tad atribÅ«ta vērtÄ«ba var bÅ«t, piemēram, sauklis ā€œSveika pasaule!!!ā€. Ja atribÅ«ta tips ir ā€œpakalpojuma deklarācijaā€, tad tā vērtÄ«ba ir pats pakalpojums. Un dažreiz Ŕī ir informācija par to, kur atrast citus atribÅ«tus un to Ä«paŔības.

Atribūtu atļaujas ļauj serverim saprast, vai ir atļauta lasīŔanas vai rakstīŔanas piekļuve.
Ņemiet vērā, ka Ŕīs atļaujas attiecas tikai uz atribÅ«ta vērtÄ«bu, nevis uz paÅ”u rādÄ«tāju, veidu vai atļaujas lauku. Tie. ja ir atļauta atribÅ«tu ierakstÄ«Å”ana, tad varam mainÄ«t, piemēram, rindiņu ā€œSveika pasaule!!!ā€ uz rindu "LabrÄ«t". Taču mēs nevaram aizliegt rakstÄ«t jaunu rindu vai mainÄ«t atribÅ«ta veidu un norādÄ«t rindu kā ā€œpakalpojuma deklarācijuā€. Kad klients sazinās ar serveri, klients pieprasa tā atribÅ«tus. Tas ļauj klientam uzzināt, ko serveris var nodroÅ”ināt. Lai gan nav nepiecieÅ”ams lasÄ«t un rakstÄ«t vērtÄ«bas.

Kas tas izskatās

GATT jēdziens ir grupēt atribÅ«tus atribÅ«tu tabulā ļoti specifiskā un loÄ£iskā secÄ«bā. ApskatÄ«sim tuvāk tālāk redzamo sirdsdarbÄ«bas profilu. Å Ä«s tabulas kreisās malas kolonna nav obligāta. Tas mums vienkārÅ”i apraksta, kas ir Ŕī lÄ«nija (atribÅ«ts). Visas pārējās kolonnas mums jau ir pazÄ«stamas.

BLE zem mikroskopa (ATTы GATTы...)

Katras grupas augÅ”daļā mums vienmēr ir pakalpojuma deklarācijas atribÅ«ts. Tās veids vienmēr ir 0x2800, un rādÄ«tājs ir atkarÄ«gs no tā, cik atribÅ«tu jau ir tabulā. Tās atļaujas vienmēr ir tikai lasāmas, bez jebkādas autentifikācijas vai autorizācijas. Par Å”iem jēdzieniem mēs runāsim nedaudz vēlāk. VērtÄ«ba ir cits UUID, kas identificē pakalpojumu. Tabulā vērtÄ«ba ir 0x180D, ko Bluetooth SIG definē kā sirdsdarbÄ«bas ātrumu.

Pēc pakalpojuma paziņoÅ”anas tiek paziņots par raksturlielumu. Pēc formas tā ir lÄ«dzÄ«ga dienesta deklarācijai. Tā UUID vienmēr ir 0x2803, un tā atļaujas vienmēr ir tikai lasāmas bez jebkādas autentifikācijas vai autorizācijas. ApskatÄ«sim lauku AtribÅ«ta vērtÄ«ba, kurā ir iekļauti daži dati. Tajā vienmēr ir rādÄ«tājs, UUID un rekvizÄ«tu kopa. Å ie trÄ«s elementi apraksta turpmāko raksturÄ«gās vērtÄ«bas deklarāciju. RādÄ«tājs dabiski apzÄ«mē raksturÄ«gās vērtÄ«bas deklarācijas atraÅ”anās vietu atribÅ«tu tabulā. UUID apraksta, kāda veida informāciju vai vērtÄ«bu mēs varam sagaidÄ«t. Piemēram, temperatÅ«ras vērtÄ«ba, gaismas slēdža stāvoklis vai kāda cita patvaļīga vērtÄ«ba. Un visbeidzot Ä«paŔības, kas apraksta, kā var mijiedarboties ar raksturÄ«go vērtÄ«bu.

Å eit mÅ«s sagaida vēl viena kļūme. Tas ir saistÄ«ts ar atribÅ«tu atļaujām un raksturÄ«gajām Ä«paŔībām. ApskatÄ«sim bitu lauka rekvizÄ«tu attēlu no specifikācijas.

BLE zem mikroskopa (ATTы GATTы...)

Kā redzat, Å”eit ir arÄ« lauki, kas nodroÅ”ina lasÄ«Å”anas un rakstÄ«Å”anas iespējas. Jums var rasties jautājums, kāpēc mums ir lasÄ«Å”anas/rakstÄ«Å”anas atļaujas atribÅ«tam un Ä«paÅ”umam
lasÄ«t/rakstÄ«t raksturÄ«go vērtÄ«bu? Vai tiem vienmēr nevajadzētu bÅ«t vienādiem? Fakts ir tāds, ka raksturÄ«gās vērtÄ«bas rekvizÄ«ti faktiski ir tikai ieteikumi klientam, ko izmanto GATT un lietojumprogrammu slāņos. Tie ir vienkārÅ”i padomi par to, ko klients varētu sagaidÄ«t no raksturÄ«gā deklarācijas atribÅ«ta. ApskatÄ«sim to sÄ«kāk. Kāda veida atļaujas ir atribÅ«tam?

1. Piekļuves atļaujas:
     - lasÄ«Å”ana
     - ieraksts
     - Lasi un raksti
2. Autentifikācijas atļauja:
     - nepiecieÅ”ama autentifikācija
     - nav nepiecieÅ”ama autentifikācija
3. Autorizācijas atļauja:
     ā€” nepiecieÅ”ama atļauja
     - nav nepiecieÅ”ama atļauja

Galvenā atŔķirÄ«ba starp atribÅ«tu izŔķirtspēju un raksturÄ«gajām Ä«paŔībām ir tāda, ka pirmā attiecas uz serveriem, bet otrā - uz klientiem. Serverim var atļaut nolasÄ«t raksturÄ«go vērtÄ«bu, taču tam var bÅ«t nepiecieÅ”ama autentifikācija vai autorizācija. Tāpēc, kad klients pieprasÄ«s raksturlieluma Ä«paŔības, mēs saņemsim, ka nolasÄ«Å”ana ir atļauta. Bet, mēģinot lasÄ«t, tiek parādÄ«ta kļūda. Tāpēc mēs varam droÅ”i runāt par atļauju prioritāti pār Ä«paÅ”umiem. Klienta pusē mēs nevaram iegÅ«t zināŔanas par to, kādas atļaujas ir atribÅ«tam.

Deskriptors

AtgriezÄ«simies pie sava galda. Pēc raksturlieluma vērtÄ«bas deklarÄ“Å”anas ir iespējamas Ŕādas atribÅ«tu deklarācijas:
1. Jauna raksturlielumu deklarācija (pakalpojumam var bÅ«t daudz Ä«paŔību)
2. Jauna dienesta deklarācija (tabulā to var būt daudz)
3. Roktura deklarēŔana

SirdsdarbÄ«bas mērÄ«Å”anas raksturlieluma gadÄ«jumā mÅ«su tabulā raksturlieluma vērtÄ«bas deklarācijai ir pievienota deskriptora deklarācija. Deskriptors ir atribÅ«ts ar papildu informāciju par raksturlielumu. Ir vairāki deskriptoru veidi. Par tiem mēs sÄ«kāk runāsim Ŕī raksta otrajā daļā. Pagaidām mēs skarsim tikai klienta raksturlielumu konfigurācijas deskriptoru (CCCD). Tam ir UUID, kas vienāds ar 0x2902. Izmantojot Å”o deskriptoru, klients var iespējot norādi vai paziņojumu serverÄ«. AtŔķirÄ«ba starp tām ir neliela, bet joprojām pastāv. Paziņojumam nav nepiecieÅ”ams klienta apstiprinājums par saņemÅ”anu. Norādei tas ir vajadzÄ«gs, lai gan tas notiek GATT lÄ«menÄ«, nesasniedzot pieteikuma lÄ«meni. Kāpēc tā, jÅ«s jautājat? Ak, es to nezinu. AtļauÅ”os tikai teikt, ka Ziemeļvalstu eksperti iesaka izmantot paziņojumus. Turklāt abos gadÄ«jumos tiek pārbaudÄ«ta paketes integritāte (izmantojot CRC).

Secinājums

Raksta beigās es gribētu teikt to. Pēdējā tabula ir nedaudz mulsinoÅ”a. Tomēr es to izvēlējos, jo tas ir padevies raksts, uz kuru es paļaujos. Mana raksta otrajā daļā es plānoju padziļināti izpētÄ«t Bluetooth 4.0 specifikāciju. Tur mÅ«s gaida pareizākas diagrammas un rasējumi. TreÅ”ajā daļā es vēlētos parsēt žurnālu, kas iegÅ«ts, izmantojot Wireshark programmu no viena no sÄ«krÄ«kiem, un redzēt ā€œtieÅ”raidēā€ visu teoriju, kuru mēs pētām.

Uzņēmumu grupas darbinieks "Cēzara satelīts"
Pečerskihs Vladimirs

Avots: www.habr.com

Pievieno komentāru