{"id":84024,"date":"2020-06-04T19:42:32","date_gmt":"2020-06-04T17:42:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty"},"modified":"2020-06-04T19:42:32","modified_gmt":"2020-06-04T17:42:32","slug":"ble-pod-mikroskopom-atty-gatty","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","title":{"rendered":"BLE all mikroskoobi all (ATTid GATTid&#8230;)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"BLE mikroskoobi all (ATT-d GATT-d...)\" src=\"\/wp-content\/uploads\/2020\/06\/d8587bf897b27457b354549b99399bcc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>BLE all mikroskoobi all (ATTid GATTid&#8230;)<\/h2>\n<p> <b>Osa 1, \u00fclevaade<\/b><\/p>\n<p>On m\u00f6\u00f6dunud juba piisavalt aega, mil ilmus esimene Bluetooth 4.0 spetsifikatsioon. Kuigi BLE teema on v\u00e4ga huvitav, pelgavad paljud arendajad seda veel oma keerukuse t\u00f5ttu. Minu eelnevates artiklites olen arutanud enamasti linkkihistiku ja f\u00fc\u00fcsikalise kihistiku k\u00f5ige madalamat taset. See v\u00f5imaldas mul mitte puutuda kokku nii keeruliste ja segaste m\u00f5istetega nagu atribuudiprotokoll (ATT) ja \u00fcldine atribuudiprofiil (GATT). Siiski ei p\u00e4\u00e4se neist, nende m\u00f5istmata ei ole v\u00f5imalik koostalitlusv\u00f5imelisi seadmeid arendada. T\u00e4na soovin jagada teiega neid teadmisi. Artiklis tuginen <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">\u00f5petust<\/a><\/noindex> Nordic-i algajate juhendile. Nii et alustame.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Miks on k\u00f5ik nii keeruline?<\/h3>\n<p>\nMinu arvates oli kohe selge, et seadmete haldamine nutitelefonide kaudu on v\u00e4ga perspektiivikas ja pikaajaline teema. Seet\u00f5ttu otsustati see struktuuri l\u00e4bi m\u00f5elda ja maksimaalselt ellu viia. Et erinevate vidinate tootjad ei leiutaks oma protokolle, mis hiljem v\u00f5ivad olla \u00fchilduvad. Sealt ka keerukus. Juba esimesel etapil p\u00fc\u00fcti BLE protokolli suruda k\u00f5ik, mis v\u00e4hegi v\u00f5imalik. Ja pole t\u00e4htis, kas see hiljem tuleb kasuks v\u00f5i mitte. Lisaks arvati tulevikus seadmete loendi laiendamise v\u00f5imalust.<\/p>\n<p>Vaadakem pilti, kus on kujutatud BLE protokolli skeem. See koosneb mitmest kihist. K\u00f5ige alumine, f\u00fc\u00fcsiline kiht (PHY) vastutab seadme raadiosignaali eest. Link Layer (LL) sisaldab k\u00f5iki bite j\u00e4rjestusi edastatavas s\u00f5numis. Eelnevates artiklites oleme just seda uurinud. Host Controller Interface (HCI) on protokoll vahetamiseks kihtide v\u00f5i BLE kiipide vahel, kui Controller ja Host on erinevates kiipides. Pakettide koostamise, konverteerimise raamideks, vigade kontrollimise ja pakettide kogumise eest vastutab Logical Link Control and Adaptation Protocol (L2CAP). Pakettide kr\u00fcpteerimise eest vastutab Security Manager Protocol (SMP). \u00dcksuse k\u00e4itusprofiil (GAP) vastutab andmete esialgse vahetuse eest seadmete vahel, et m\u00e4\u00e4rata, kes on kes. Selle alla kuuluvad samuti skaneerimine ja reklaamimine. Selles artiklis peatun protokolli kahel \u00fclej\u00e4\u00e4nud osal \u2014 GATT ja ATT. GATT on ATT \u00fcleehitus, seega on nad tihedalt seotud.<\/p>\n<p><img decoding=\"async\" alt=\"BLE mikroskoobi all (ATT-d GATT-d...)\" src=\"\/wp-content\/uploads\/2020\/06\/8060076152cfe3ae648eca362889e571.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKergendamiseks tooksin ma kasutusele analoogia. Olen seda kusagil kuulnud ja tahaksin seda toetada. Kujutage ette BLE-seadet kui raamaturiiulit, kus on mitmeid riiuleid. Iga riiul esindab erinevat teemat. N\u00e4iteks on meil riiulid ulme, matemaatika ja ents\u00fcklopeediate jaoks. Igal riiulil on teemaga seotud raamatud. M\u00f5nedes raamatutes on isegi paberist j\u00e4rjehoidjad m\u00e4rkmete jaoks. Lisaks on meil v\u00e4ike paberikataloog k\u00f5igist raamatutest. Kui m\u00e4letate kooli raamatukogasid \u2014 see on kitsas kapp paberkaartidega. Sellise analoogia j\u00e4rgi on kapp meie seadme profiil. Riiulid on teenused, raamatud on omadused ja kataloog on atribuutide tabel. Raamatute j\u00e4rjehoidjad on deskriptorid, millest ma r\u00e4\u00e4gin hiljem \u00fcksikasjalikumalt.<\/p>\n<p>Iga, kes on seadmeid arendanud, teab, et paljudes projektides on sarnased koodit\u00fckid. Probleem on selles, et paljudel seadmetel on sarnane funktsionaalsus. N\u00e4iteks, kui seadmed t\u00f6\u00f6tavad aku toel, on laadimise ja taseme kontrollimise probleem sama. See kehtib ka sensorite kohta. Tegelikult on objekti-orienteeritud l\u00e4henemine programmeerimisel. <i>\"annab v\u00f5imaluse luua objekte, mis \u00fchendavad omadused ja k\u00e4itumise iseseisvaks liiduks, mida saab seej\u00e4rel korduvalt kasutada\".<\/i>. Minu arvates tehti BLE-s sarnase l\u00e4henemise katse. Bluetoothi Erifookusgrupi (SIG) poolt t\u00f6\u00f6tati v\u00e4lja profiilid. Erinevatelt tootjatelt olevad seadmed, millel on samad profiilid, peaksid omavahel h\u00f5lpsasti sobima. Profiilid koosnevad omakorda teenustest ja teenused omadustest, mida t\u00e4iendavad kirjeldajad. \u00dcldiselt v\u00f5ib see v\u00e4lja n\u00e4ha nii:<\/p>\n<p><img decoding=\"async\" alt=\"BLE mikroskoobi all (ATT-d GATT-d...)\" src=\"\/wp-content\/uploads\/2020\/06\/34cbbeee142d40e56dff7626ef752d42.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4iteks vaatame s\u00fcdame l\u00f6\u00f6gisageduse monitori (fitness-rannekell) profiiliga seotud skeemi. See koosneb kahest teenusest ja mitmest omadusest. Selgelt on n\u00e4ha profiili hierarhia. Kontrollpunkti omadus nullib \u00fcldise kalorite arvestuse. <\/p>\n<p>1. S\u00fcdame l\u00f6\u00f6gisageduse teenus sisaldab kolme omadust (0x180D):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) Kohustuslik l\u00f6\u00f6gisageduse omadus (0\u04452A37)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;b) Valikuline kehaanduri asendi omadus (0x2A38)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;c) Tingimuslik s\u00fcdame l\u00f6\u00f6gisageduse kontrollpunkti omadus (0x2A39)<br \/>\n2. Aku teenus (0x180F):<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;a) Kohustuslik aku laadimistaseme omadus (0x2A19)<\/p>\n<h3>UUID<\/h3>\n<p>\nKuna me saaksime \u00fchem\u00f5tteliselt viidata profiilielementidele (teenustele, omadustele ja deskriptoritele), tuleb need k\u00f5ik korralikult nummerdada. Selle eesm\u00e4rgi saavutamiseks tutvustatakse m\u00f5istet Universally Unique ID (UUID) ehk \u00dcldiselt Unikaalne Identifikaator. Iga rea sulgudes ongi n\u00e4idatud UUID. Siin on \u00fcks erip\u00e4ra. UUID jaoks otsustati kasutada 16- ja 128-bitist koodi. Miks, k\u00fcsiksite? BLE protokollis on k\u00f5ik suunatud energia s\u00e4\u00e4stmisele. Seet\u00f5ttu on 16-bitisus t\u00e4iesti m\u00f5istlik. Ebat\u00f5en\u00e4oline, et l\u00e4hitulevikus luuakse \u00fcle 65 tuhande unikaalse teenuse ja omaduse. Praeguseks on k\u00f5ik arvestatud, mis suudeti (kas m\u00e4letate, kust see on \u2014 \u201eta arvutas ka teid\u201c :-)) Numereeritud elemendid. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/\">profiilide<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/services\/\">teenuste<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/characteristics\/\">omaduste<\/a><\/noindex> ja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.bluetooth.com\/specifications\/gatt\/descriptors\/\">deskriptorite<\/a><\/noindex> v\u00f5ite vaadata linkide kaudu.<\/p>\n<p>Kuid ma arvan, et k\u00f5ik m\u00e4letavad lugu neljast baitist IP-aadressist internetis. Algul arvati, et see on piisav, aga n\u00fc\u00fcd ei suudeta kuidagi \u00fcle minna kuue baitise aadressile. Et v\u00e4ltida sama vea kordamist ja anda v\u00f5imalus k\u00e4sit\u00f6\u00f6liste n\u00e4ppudele, otsustas SIG kohe tutvustada ka 128-bitiseid UUID-sid. See meenutab mulle isiklikult litsentseerimata 433 MHz sagedust, mis anti igasugustele k\u00e4tet\u00f6\u00f6listele raadioala valdusesse. Meie puhul on antud 128-bitine identifikaator teenuste ja omaduste jaoks. See t\u00e4hendab, et saame oma teenuste ja seadmete jaoks kasutada praktiliselt \u00fcksk\u00f5ik millist 128-bitist v\u00e4\u00e4rtust. Looduslikult kipub sama UUID loomise t\u00f5en\u00e4osus olema nulli l\u00e4hedane.<\/p>\n<p>Tegelikult on l\u00fchikesed 16-bitised UUID-d oma laienduseks 128-bitistele v\u00e4\u00e4rtustele. Spetsifikatsioonis nimetatakse seda laiendust Bluetooth Base UUID ja selle v\u00e4\u00e4rtus on 00000000-0000-1000-8000-00805F9B34FB. N\u00e4iteks kui 16-bitise attribuudi UUID v\u00e4\u00e4rtus on 0x1234, siis vastav 128-bitine UUID v\u00e4\u00e4rtus on 00001234-0000-1000-8000-00805F9B34FB. Ja isegi antakse vastav valem:<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID<\/p>\n<p>Kust see maagiline number p\u00e4rineb, ei oska ma \u00f6elda. Kui keegi lugejatest teab, siis palun kirjutage kommentaaridesse (kasutaja nimega Sinopteek on seda juba teinud. Vaadake kommentaare). Mis puutub 128-bitiste UUID-de genereerimisse, siis p\u00f5him\u00f5tteliselt v\u00f5ib kasutada spetsiaalset <noindex><a rel=\"nofollow\" href=\"https:\/\/www.famkruithof.net\/uuid\/uuidgen\">generaatorit<\/a><\/noindex>, mis teeb selle teie eest valmis.<\/p>\n<h3>ATT\u044b GATT\u044b&#8230;<\/h3>\n<p>\n Edasi hakkab t\u00f5eliselt huvitav osa. Tuletan meelde, et ATT p\u00f5hineb kliendi ja serveri suhtlusel. N\u00fc\u00fcd vaatame serveri seadmeid. See sisaldab sellist teavet nagu anduri v\u00e4\u00e4rtused, valgusti olek, asukohateave jne. N\u00fc\u00fcd, kui k\u00f5ik meie \"paradi osalised\" on nummerdatud, tuleb nad kuidagi seadme m\u00e4llu paigutada. Selleks paneme nad tabelisse, mida nimetatakse atribuutide tabeliks. Pidage seda meeles. See on BLE s\u00fcda. Just seda me edaspidi k\u00e4sitleme. N\u00fc\u00fcd nimetame iga rida atribuudiks. See tabel asub virna s\u00fcgavuses ja tavaliselt pole meil sellele otsest juurdep\u00e4\u00e4su. Me initsialiseerime selle ja p\u00f6\u00f6rdume selle poole, kuid mis seal sees toimub, on meie eest peidetud seitsme pitseri taga. <\/p>\n<p>Vaatame specifikatsiooni pilti, kuid enne seda tahan juhtida t\u00e4helepanu terminoloogias esinevale segadusele, nimelt deskriptoritele. Deskriptorite roll on t\u00e4iendada omaduse kirjeldust. Kui on vaja laiendada selle v\u00f5imalusi, siis kasutatakse deskriptoreid. Need on ka atribuudid ja koos teenuste ja omadustega asuvad nad atribuuditaotluse tabelis. Uurime neid hoolikalt artikli teises osas. Siiski m\u00f5nikord nimetatakse deskriptoriteks atribuuditaotluse tabelis rea numbrit. Seda tuleks silmas pidada. Me kasutame nende eesm\u00e4rkide jaoks terminit \u201eatribuutide viit\u201d.<br \/>\n<img decoding=\"async\" alt=\"BLE mikroskoobi all (ATT-d GATT-d...)\" src=\"\/wp-content\/uploads\/2020\/06\/6df836477b153c396bdba9068129bb6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNii et atribuut on diskreetne v\u00e4\u00e4rtus, millel on j\u00e4rgmised omadused:<br \/>\n1. Atribuudi viit (Attribute Handle) \u2014 see on tabeli indeks, mis vastab atribuudile. <br \/>\n2. Atribuudi t\u00fc\u00fcp (Attribute Type) \u2014 see on UUID, mis kirjeldab selle t\u00fc\u00fcpi. <br \/>\n3. Atribuudi v\u00e4\u00e4rtus (Attribute Value) \u2014 need on andmed, mida indekseeritakse atribuudi viita kaudu. <br \/>\n4. \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 (Attribute Permissions) \u2014 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 &nbsp;&nbsp;&nbsp;&nbsp;\u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<\/p>\n<p>Kuidas seda k\u00f5ike m\u00f5ista? Atribuudi viit \u2014 see on tinglikult \u00f6eldes selle number meie tabelis.<br \/>\nSee v\u00f5imaldab kliendil viidata atribuudile lugemise v\u00f5i kirjutamise p\u00e4ringutes. Saame numeerida oma ridu (atribuutide) alates 0x0001 kuni 0xFFFF. Meie raamatukapid assotsieerimisel \u2014 see on kaardi number paberkataloogis. Sarnaselt sellele, kuidas raamatukogus on kaardid j\u00e4rjestatud numbrite kasvuga. Iga j\u00e4rgnev rida peab olema suurem kui eelmine. Nagu raamatukogus, v\u00f5ivad ka m\u00f5ned kaardid kaduma minna, meie ridadel v\u00f5ivad olla vahed. See on lubatud. Peamine on see, et need l\u00e4hevad kasvavas j\u00e4rjekorras.<\/p>\n<p>Atribuudi t\u00fc\u00fcp m\u00e4\u00e4rab, millega see atribuut esindab. Sarnaselt C-keelele,<br \/>\nkus on boolsed, numbrilised muutujad ja stringid, on see siin samuti. Atribuudi t\u00fc\u00fcbi j\u00e4rgi saame teada, <br \/>\nmillega me tegeleme ja kuidas me selle atribuudiga edasi t\u00f6\u00f6tame. Allpool vaatame m\u00f5ningaid spetsiifilisi atribuudit\u00fc\u00fcpe. N\u00e4iteks 'teenuse deklaratsioon' (0x2800), 'deklaratsioon omadusest' (0x2803), 'deklaratsioon deskriptorist' (0x2902).<\/p>\n<p>Atribuudiv\u00e4\u00e4rtus on selle tegelik v\u00e4\u00e4rtus, vabandust tautoloogia p\u00e4rast. Kui atribuudi t\u00fc\u00fcp on string, siis v\u00f5ib atribuudi v\u00e4\u00e4rtus olla n\u00e4iteks slogan \"Hello World !!!\". Kui atribuudi t\u00fc\u00fcp on \"teenuse deklaratsioon\", siis on selle v\u00e4\u00e4rtuseks teenus ise. M\u00f5nikord sisaldab see teavet, kus leida teisi atribuute ja nende omadusi.<\/p>\n<p>Atribuutide \u00f5igused v\u00f5imaldavad serveril m\u00f5ista, kas lugemine v\u00f5i kirjutamine on lubatud. <br \/>\nPange t\u00e4hele, et need \u00f5igused kehtivad ainult atribuudi v\u00e4\u00e4rtuse kohta, mitte viitaja, t\u00fc\u00fcbi ega ise \u00f5iguste v\u00e4lja kohta. St, kui atribuudi kirjutamine on lubatud, saame n\u00e4iteks rida \"Hello World !!!\" muuta reale \"Good morning\". Kuid me ei saa keelata uue rea kirjutamist v\u00f5i muuta atribuudi t\u00fc\u00fcpi ning m\u00e4\u00e4rata rida kui \"teenuse deklaratsioon\". Klient k\u00fcsib serverile juurdep\u00e4\u00e4su, et teada saada, milliseid atribuute server pakub. Kuigi pole tingimata vaja v\u00e4\u00e4rtusi lugeda ja kirjutada.<\/p>\n<h3>Kuidas see v\u00e4lja n\u00e4eb<\/h3>\n<p>\nGATT kontseptsioon seisneb atribuutide r\u00fchmitamises atribuutide tabelis v\u00e4ga spetsiifilises ja loogilises j\u00e4rjekorras. Vaatame l\u00e4hemalt allpool toodud s\u00fcdame l\u00f6\u00f6gisageduse profiili. Selle tabeli vasakpoolsem veerg ei ole kohustuslik. See lihtsalt kirjeldab, millega tegemist on (atribuut). K\u00f5ik \u00fclej\u00e4\u00e4nud veerud on meile juba tuttavad.<\/p>\n<p><img decoding=\"async\" alt=\"BLE mikroskoobi all (ATT-d GATT-d...)\" src=\"\/wp-content\/uploads\/2020\/06\/110813482dacb0f19cb49e735f4a9e34.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIga grupi \u00fclaosas on meil alati teenuse deklaratsiooni atribuut. Selle t\u00fc\u00fcp on alati 0x2800, ning selle n\u00e4itaja s\u00f5ltub sellest, kui palju atribuute tabelis juba olemas on. Selle lahendused on alati ainult lugemiseks, ilma igasuguste autentimise v\u00f5i autoriseerimise kontrollideta. Nendest m\u00f5istedest r\u00e4\u00e4gime hiljem. V\u00e4\u00e4rtus on veel \u00fcks UUID, mis m\u00e4\u00e4ratleb, mis teenus see on. Tabelis on v\u00e4\u00e4rtus 0x180D, mille Bluetooth SIG m\u00e4\u00e4ratleb s\u00fcdame l\u00f6\u00f6gisageduse teenusena. <\/p>\n<p>Seej\u00e4rel, kui teenus on kuulutatud, tuleb v\u00e4lja kuulutada ka omaduste kirjeldus. Selle vorm on sama, mis teenuse kuulutamisel. Selle UUID on alati 0x2803, ja \u00f5igused on samuti alati vaid lugemiseks, ilma igasuguste autentimise v\u00f5i autoriseerimise n\u00f5ueteta. Vaatame n\u00fc\u00fcd v\u00e4lja Attribute Value, mis sisaldab teatud andmeid. See sisaldab alati n\u00e4itajat, UUID-d ja omaduste kogumit. Need kolm elementi kirjeldavad j\u00e4rgnevat omaduse v\u00e4\u00e4rtuse kuulutamist. N\u00e4itaja t\u00e4histab loogiliselt selle omaduse v\u00e4\u00e4rtuse kuulutamise kohta atribuutide tabelis. UUID m\u00e4\u00e4ratleb, millist t\u00fc\u00fcpi teavet v\u00f5i v\u00e4\u00e4rtust me eeldada saame. N\u00e4iteks temperatuuriv\u00e4\u00e4rtus, valguse l\u00fcliti olek v\u00f5i m\u00f5ni muu meelevaldne v\u00e4\u00e4rtus. Ja l\u00f5puks omadused, mis kirjeldavad, kuidas omaduse v\u00e4\u00e4rtusega suhelda on v\u00f5imalik. <\/p>\n<p>Siin ootab meid veel \u00fcks \u00fcllatus. See on seotud atribuutide \u00f5iguste ja omaduste omadustega. Vaatame pilti bitifiltri omadustest spetsifikatsioonist.<\/p>\n<p><img decoding=\"async\" alt=\"BLE mikroskoobi all (ATT-d GATT-d...)\" src=\"\/wp-content\/uploads\/2020\/06\/7397f7f69e573ae3084cbacdcd318829.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNagu n\u00e4ete, on siin samuti v\u00e4ljad, mis annavad lugemise ja kirjutamise v\u00f5imalused. V\u00f5ite k\u00fcsida, miks meil on lugemis-\/kirjutamis\u00f5igused atribuudile ja omadusele <br \/>\nlugemise\/kirjutamise jaoks omaduse v\u00e4\u00e4rtusele? Kas need ei peaks olema alati \u00fchesugused? Tegelikult on omadused omaduse v\u00e4\u00e4rtuse jaoks lihtsalt soovitused kliendile, mida kasutatakse GATT-i ja rakendustasanditel. Need on lihtsalt vihjed selle kohta, mida klient v\u00f5ib oodata omaduse kuulutuse atribuudilt. Vaatame seda l\u00e4hemalt. Millised on atribuudil olemasolevad \u00f5igused? <\/p>\n<p>1. Juurdep\u00e4\u00e4suload:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 lugemine<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 kirjutamine<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 lugemine ja kirjutamine<br \/>\n2. Autentimise luba:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autentimine on n\u00f5utav<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autentimine ei ole n\u00f5utav<br \/>\n3. Autori\u00f5iguse luba:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autoriseerimine on n\u00f5utav<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp; \u2014 autoriseerimine ei ole n\u00f5utav<\/p>\n<p>Peamine erinevus atribuudi \u00f5iguste ja omaduste vahel on see, et esimesed kehtivad serverite kohta, teised aga klientide kohta. Serveril v\u00f5ib olla lubatud omaduse v\u00e4\u00e4rtuse lugemine, kuid selleks v\u00f5ib olla n\u00f5ue autentimiseks v\u00f5i autoriseerimiseks. Seet\u00f5ttu, kui klient k\u00fcsib omaduste kohta, saame, et lugemine on lubatud. Kuid lugemiseks \u00fcritamisel saame vea. Seega v\u00f5ib julgelt \u00f6elda, et \u00f5iguste prioriteet on omaduste ees. Me ei saa kliendi poolelt teada, millised \u00f5igused atribuudi osas on.<\/p>\n<h3>Kirjeldaja<\/h3>\n<p>\nNaaseme meie tabeli juurde. P\u00e4rast omaduse v\u00e4\u00e4rtuse kuulutamist on v\u00f5imalikud j\u00e4rgmised atribuudi kuulutused: <br \/>\n1. Uus omaduse kuulutus (teenuses v\u00f5ib olla palju omadusi)<br \/>\n2. Uus teenuse deklaratsioon (tabelis v\u00f5ib neid palju olla)<br \/>\n3. Kirjeldaja kuulutus <\/p>\n<p>Kui r\u00e4\u00e4gime s\u00fcdame l\u00f6\u00f6gisageduse m\u00f5\u00f5tmise omadustest, siis meie tabelis t\u00e4histatakse omaduse v\u00e4\u00e4rtuse avaldamist descriptor'i avaldamisega. Descriptor on atribuut, mis sisaldab lisainfot omaduse kohta. On olemas mitu t\u00fc\u00fcpi descriptor'e. Nendest arutame p\u00f5hjalikult teises osa artiklist. Praegu k\u00e4sitleme ainult kliendi omaduste konfiguratsiooni descriptor'it (Client Characteristic Configuration Descriptor \u2014 CCCD). Selle UUID on 0x2902. Selle descriptor'i abil saab klient serveris aktiveerida indikaatori v\u00f5i teate. Nende vahel on v\u00e4ike erinevus, kuid see on siiski olemas. Teade ei vaja kliendilt kinnitus, kuid indikaator seda n\u00f5uab, ehkki see toimub GATT tasemel, mitte j\u00f5udes rakenduse tasemele. Miks nii, k\u00fcsite? Kahjuks ei ole see mulle teada. \u00dctlen vaid, et Nordic'i spetsialistid soovitavad kasutada teateid. Eriti kuna paketi terviklikkuse kontroll (CRC abil) toimub m\u00f5lemas olukorras.<\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nArtikli l\u00f5pus tahaksin r\u00e4\u00e4kida \u00fchest asjast. Viimane tabel on pisut keeruline. Siiski olen ma sellele keskendunud, kuna see on esitatud <noindex><a rel=\"nofollow\" href=\"https:\/\/devzone.nordicsemi.com\/nordic\/short-range-guides\/b\/bluetooth-low-energy\/posts\/ble-characteristics-a-beginners-tutorial\">artiklis<\/a><\/noindex>, millele toetun. Artikli teises osas kavatsema s\u00fcveneda BlueTooth 4.0 spetsifikatsiooni. Seal ootavad meid t\u00e4psemad skeemid ja joonised. Kolmandas osas tahaksin anal\u00fc\u00fcsida Wiresharki programmi abil \u00fche seadme logifaili ja n\u00e4ha \"otse\" kogu seda teooriat, mida koos \u00f5pime.<\/p>\n<p>Grupi t\u00f6\u00f6taja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.csat.ru\/\">\u00abTsezar Satellit\u00bb<\/a><\/noindex><br \/>\nPecherski Vladimir<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/505078\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b&#8230;) \u0427\u0430\u0441\u0442\u044c 1, \u043e\u0431\u0437\u043e\u0440\u043d\u0430\u044f \u0423\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 Bluetooth 4.0. \u0418, \u0445\u043e\u0442\u044f \u0442\u0435\u043c\u0430 BLE \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Link Layer \u0438 Physical Layer. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84025,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84024","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b...) \u0427\u0430\u0441\u0442\u044c 1, \u043e\u0431\u0437\u043e\u0440\u043d\u0430\u044f \u0423\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 Bluetooth 4.0. \u0418, \u0445\u043e\u0442\u044f \u0442\u0435\u043c\u0430 BLE \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Link Layer \u0438 Physical Layer.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b\u2026) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b...) \u0427\u0430\u0441\u0442\u044c 1, \u043e\u0431\u0437\u043e\u0440\u043d\u0430\u044f \u0423\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 Bluetooth 4.0. \u0418, \u0445\u043e\u0442\u044f \u0442\u0435\u043c\u0430 BLE \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Link Layer \u0438 Physical Layer.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-04T17:42:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-04T17:42:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47BLE mikroskoobi all (ATT-d GATT-d\u2026) | ProHoster","description":"BLE mikroskoobi all (ATT-d GATT-d...) Osa 1, \u00fclevaade K\u00f5ik on m\u00f6\u00f6dunud juba \u00fcsna pikk aeg, alates esimesest Bluetooth 4.0 spetsifikatsioonist. Ja kuigi BLE teema on v\u00e4ga huvitav, pelgavad paljusid arendajaid selle keerukuse t\u00f5ttu. Oma varasemates artiklites olen peamiselt k\u00e4sitlenud k\u00f5ige madalamat taset Link Layer ja Physical Layer.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b\u2026) | ProHoster","og:description":"BLE \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u043e\u043c (ATT\u044b GATT\u044b...) \u0427\u0430\u0441\u0442\u044c 1, \u043e\u0431\u0437\u043e\u0440\u043d\u0430\u044f \u0423\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0448\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043d\u0430 Bluetooth 4.0. \u0418, \u0445\u043e\u0442\u044f \u0442\u0435\u043c\u0430 BLE \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043e\u043d\u0430 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0441\u0432\u043e\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Link Layer \u0438 Physical Layer.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/ble-pod-mikroskopom-atty-gatty","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-04T17:42:32+00:00","article:modified_time":"2020-06-04T17:42:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84024","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:06:38","updated":"2022-09-28 11:11:59"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/84024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=84024"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/84024\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/84025"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=84024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=84024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=84024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}