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
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.
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:
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
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
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ā.
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.
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.
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
UzÅÄmumu grupas darbinieks
PeÄerskihs Vladimirs
Avots: www.habr.com