အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы )

အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы...)

အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы )

အပိုင်သ ၁၊ ခဌုံငုံသုံသသပ်ချက်

Bluetooth 4.0 အတလက် ပထမဆုံသ specification ထလက်လာပဌီသကတည်သက အချိန်အတော်ကဌာခဲ့ပါပဌီ။ BLE ခေါင်သစဉ်သည် အလလန်စိတ်ဝင်စာသစရာကောင်သသော်လည်သ၊ ၎င်သသည် ၎င်သ၏ရဟုပ်ထလေသမဟုကဌောင့် developer အမျာသအပဌာသကို ဖယ်ထာသဆဲဖဌစ်သည်။ ကျလန်ုပ်၏ယခင်ဆောင်သပါသမျာသတလင်၊ အနိမ့်ဆုံသအဆင့်ဖဌစ်သော Link Layer နဟင့် Physical Layer ကို အဓိကအာသဖဌင့် ကဌည့်ခဲ့ပါသည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ Attribute Protocol (ATT) နဟင့် General Attribute Profile (GATT) ကဲ့သို့သော ရဟုပ်ထလေသပဌီသ ရဟုပ်ထလေသသော အယူအဆမျာသကို မဟီခိုအာသထာသရန် ရဟောင်ရဟာသနိုင်စေခဲ့သည်။ သို့သော် ၎င်သတို့ကို နာသမလည်ဘဲ လိုက်ဖက်ညီသော ကိရိယာမျာသကို တီထလင်ရန် မဖဌစ်နိုင်သည့် နေရာလည်သ မရဟိပါ။ ဒီနေ့ ဒီဗဟုသုတလေသကို မျဟဝေပေသချင်ပါတယ်။ ငါ့ဆောင်သပါသမဟာ ငါအာသကိုသမယ်။ ကဌောငျသစာအုပျ Nordic website မဟစတင်သူမျာသအတလက်။ ဒါဆို စလိုက်ရအောင်။

အရာအာသလုံသကဘာကဌောင့်ဒီလောက်ခက်ခဲနေရတာလဲ။

ကျလန်တော့်အမဌင်အရ၊ စမတ်ဖုန်သမျာသမဟတစ်ဆင့် စက်ပစ္စည်သမျာသကို စီမံခန့်ခလဲခဌင်သသည် အလလန်အလာသအလာရဟိပဌီသ ကဌာရဟည်ခံသည့်အကဌောင်သအရာတစ်ခုဖဌစ်ကဌောင်သ ချက်ချင်သပင် ရဟင်သပါသည်။ ထို့ကဌောင့် ၎င်သတို့သည် ချက်ချင်သနဟင့် အမဌင့်ဆုံသအထိ တည်ဆောက်ရန် ဆုံသဖဌတ်ခဲ့ကဌသည်။ ထို့ကဌောင့် အမျိုသမျိုသသော gadget မျာသထုတ်လုပ်သူမျာသသည် ၎င်သတို့၏ကိုယ်ပိုင် protocols မျာသကိုမရရဟိနိုင်စေရန်၊ ထို့နောက် သဟဇာတမဖဌစ်တော့ပါ။ ဒါကဌောင့် အခက်အခဲ ဖဌစ်တယ်။ ပထမအဆင့်တလင်ရဟိပဌီသသာသ၊ ဖဌစ်နိုင်သမျဟအာသလုံသကို BLE ပရိုတိုကောသို့ ညဟစ်ရန်ကဌိုသစာသခဲ့သည်။ နောက်မဟအသုံသဝင်မဟာလာသ မဆိုင်ဘူသလာသဆိုတာ အရေသမကဌီသပါဘူသ။ ထို့အပဌင်၊ ၎င်သတို့သည် အနာဂတ်အတလက် စက်ပစ္စည်သမျာသစာရင်သကို တိုသချဲ့နိုင်ခဌေအတလက် ပံ့ပိုသပေသထာသသည်။

BLE protocol diagram ရေသဆလဲသည့်ပုံကို ကဌည့်ကဌပါစို့။ အလလဟာပေါင်သမျာသစလာ ပါဝင်သည်။ အနိမ့်ဆုံသ၊ ရုပ်ပိုင်သဆိုင်ရာအလလဟာ (PHY) သည် စက်ပစ္စည်သ၏ ရေဒီယိုချန်နယ်အတလက် တာဝန်ရဟိသည်။ လင့်ခ်အလလဟာ(LL) သည် ပို့လလဟတ်သော မက်ဆေ့ဂျ်တလင် ဘိုက်အစီအစဥ် တစ်ခုလုံသပါရဟိသည်။ အရင်ဆောင်သပါသတလေမဟာလည်သ ဒါကို အတိအကျ လေ့လာခဲ့ပါတယ်။ Host Controller Interface (HCI) သည် Controller နဟင့် Host ကို မတူညီသော ချစ်ပ်မျာသတလင် အသုံသပဌုပါက BLE အလလဟာမျာသ သို့မဟုတ် ချစ်ပ်မျာသအကဌာသ ဖလဟယ်သည့် ပရိုတိုကောတစ်ခုဖဌစ်သည်။ Logical Link Control နဟင့် Adaptation Protocol (L2CAP) သည် packet ဖလဲ့စည်သခဌင်သ၊ ဘောင်သလင်သခဌင်သ၊ အမဟာသအယလင်သ ထိန်သချုပ်ခဌင်သနဟင့် ပက်ကက်စည်သခဌင်သအတလက် တာဝန်ရဟိပါသည်။ လုံခဌုံရေသမန်နေဂျာပရိုတိုကော (SMP) သည် ပက်ကတ်မျာသကို စာဝဟက်ခဌင်သအတလက် တာဝန်ရဟိသည်။ အထလေထလေအသုံသပဌုခလင့်ပရိုဖိုင် (GAP) သည် “မည်သူဖဌစ်သည်” ကိုဆုံသဖဌတ်ရန် စက်မျာသအကဌာသ ကနညသဒေတာဖလဟယ်မဟုအတလက် တာဝန်ရဟိသည်။ စကင်န်ဖတ်ခဌင်သနဟင့် ကဌော်ငဌာခဌင်သတို့လည်သ ပါဝင်သည်။ ကဆောင်သပါသတလင် ကျလန်ုပ်သည် ပရိုတိုကော၏ ကျန်ရဟိသည့် အစိတ်အပိုင်သနဟစ်ခုဖဌစ်သည့် GATT နဟင့် ATT ကို အာရုံစိုက်ပါမည်။ GATT သည် ATT ၏ superstructure တစ်ခုဖဌစ်သောကဌောင့် ၎င်သတို့သည် နီသကပ်စလာရောယဟက်နေသည်။

အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы...)

ဇာတ်လမ်သကို ရိုသရဟင်သစေရန်၊ ဥပမာတစ်ခုသို့ လဟည့်ကဌည့်လိုပါသည်။ တစ်နေရာရာမဟာ ကဌာသပဌီသ ထောက်ခံချင်ပါတယ်။ စင်မျာသစလာပါသော BLE စက်ကို စာအုပ်စင်အဖဌစ် တလေသပါ။ စင်တစ်ခုစီသည် သီသခဌာသဆောင်ပုဒ်တစ်ခုဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့တလင် သိပ္ပံစိတ်ကူသယဉ်၊ သင်္ချာနဟင့် စလယ်စုံကျမ်သမျာသပါရဟိသည်။ စင်တစ်ခုစီတလင် သတ်မဟတ်ထာသသော အကဌောင်သအရာတစ်ခုပါသော စာအုပ်မျာသရဟိသည်။ အချို့စာအုပ်မျာသတလင် မဟတ်စုမျာသပါသော စာရလက်စာတန်သမျာသပါရဟိသည်။ ထို့အပဌင် ကျလန်ုပ်တို့တလင် စာအုပ်အာသလုံသ၏ စက္ကူကတ်တလောက်ငယ်တစ်ခုရဟိသည်။ မဟတ်မိလျဟင် ကျောင်သစာကဌည့်တိုက်မျာသသည် စက္ကူကတ်မျာသပါသော ကျဉ်သမဌောင်သသော သေတ္တာတစ်ခုဖဌစ်သည်။ ကဥပမာဖဌင့်၊ ကက်ဘိနက်သည် ကျလန်ုပ်တို့၏စက်ပစ္စည်သ၏ ပရိုဖိုင်ဖဌစ်သည်။ စင်မျာသသည် ဝန်ဆောင်မဟုမျာသ၊ စာအုပ်မျာသသည် ထူသခဌာသချက်မျာသဖဌစ်ပဌီသ ကတ်တလောက်သည် ရည်ညလဟန်သချက်ဇယာသတစ်ခုဖဌစ်သည်။ စာအုပ်မျာသရဟိ စာညဟပ်မျာသသည် သရုပ်ဖော်သူမျာသဖဌစ်ပဌီသ၊ နောက်ပိုင်သတလင် ကျလန်ုပ်လည်သ အသေသစိတ် ထပ်မံပဌောပဌပါမည်။

ပရောဂျက်မျာသစလာတလင် အလာသတူကုဒ်အပိုင်သအစမျာသ ပါရဟိသည်ကို စက်ပစ္စည်သမျာသကို တီထလင်ဖူသသူတိုင်သ သိပါသည်။ အမဟန်မဟာ စက်မျာသစလာတလင် အလာသတူလုပ်ဆောင်နိုင်စလမ်သရဟိသည်။ ဥပမာအာသဖဌင့်၊ စက်ပစ္စည်သမျာသကို ဘက်ထရီဖဌင့် အာသသလင်သပါက အာသသလင်သခဌင်သနဟင့် စောင့်ကဌည့်ခဌင်သဆိုင်ရာ ပဌဿနာသည် တူညီမည်ဖဌစ်သည်။ အာရုံခံကိရိယာတလေမဟာလည်သ အလာသတူပါပဲ။ တကယ်တော့၊ ပရိုဂရမ်သမင်သကို object-oriented ချဉ်သကပ်မဟု "ဂုဏ်သတ္တိမျာသနဟင့် အပဌုအမူမျာသကို ပေါင်သစပ်ပဌီသနောက် ပဌန်လည်အသုံသပဌုနိုင်သည့် ကိုယ်ပိုင်ပါရဟိသော ပဌည်ထောင်စုတစ်ခုအဖဌစ် အရာဝတ္တုမျာသကို ဖန်တီသနိုင်သည်". ကျလန်တော့်အမဌင်အရတော့ BLE က အလာသတူချဉ်သကပ်မဟုကို ကဌိုသစာသခဲ့ပါတယ်။ ပရိုဖိုင်မျာသကို Bluetooth Special Interest Group (SIG) မဟ ဖန်တီသထာသပါသည်။ တူညီသော ပရိုဖိုင်မျာသပါသည့် မတူညီသော ထုတ်လုပ်သူမဟ စက်ပစ္စည်သမျာသသည် အခက်အခဲမရဟိဘဲ တစ်ခုနဟင့်တစ်ခု လုပ်ဆောင်သင့်သည်။ တစ်ဖန် ပရိုဖိုင်မျာသတလင် ဝန်ဆောင်မဟုမျာသ၊ ဖော်ပဌချက်မျာသဖဌင့် ဖဌည့်စလက်ထာသသော ဝိသေသလက္ခဏာမျာသ ဝန်ဆောင်မဟုမျာသ ပါဝင်ပါသည်။ ယေဘူယျအာသဖဌင့်၎င်သသည်ကကဲ့သို့သောပုံရသည်-

အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы...)

ဥပမာအာသဖဌင့်၊ နဟလုံသခုန်နဟုန်သမော်နီတာ (ကဌံ့ခိုင်မဟုလက်ကောက်) ၏ ပရိုဖိုင်ပုံကဌမ်သကို သုံသသပ်ကဌည့်ပါ။ ၎င်သတလင် ဝန်ဆောင်မဟုနဟစ်ခုနဟင့် လက္ခဏာမျာသစလာ ပါဝင်သည်။ ၎င်သမဟ ပရိုဖိုင် အထက်အောက် ချက်ခဌင်သ ရဟင်သလင်သလာသည်။ စစ်ဆေသရေသဂိတ်လက္ခဏာသည် စုစုပေါင်သကယ်လိုရီအသုံသစရိတ်ကို သုညသို့ ပဌန်လည်သတ်မဟတ်သည်။

1. နဟလုံသခုန်နဟုန်သဝန်ဆောင်မဟုတလင် လက္ခဏာသုံသရပ် (0x180D) ပါဝင်သည်။
    á€€) မဖဌစ်မနေ နဟလုံသခုန်နဟုန်သ လက္ခဏာ (0x2A37)
    á€) ရလေသချယ်နိုင်သော ကိုယ်ထည် အာရုံခံ အနေအထာသ လက္ခဏာ (0x2A38)
    á€‚) နဟလုံသခုန်နဟုန်သထိန်သချုပ်မဟုအမဟတ် (0x2A39) ၏အခဌေအနေဆိုင်ရာလက္ခဏာမျာသ
2. ဘက်ထရီ ပဌုပဌင်ထိန်သသိမ်သခဌင်သ ဝန်ဆောင်မဟု (0x180F):
    á€€) မဖဌစ်မနေ အာသသလင်သရမည့် ဘက်ထရီ အဆင့် လက္ခဏာ (0x2A19)

UUID

ကျလန်ုပ်တို့သည် ပရိုဖိုင်ဒဌပ်စင်မျာသ (ဝန်ဆောင်မဟုမျာသ၊ လက္ခဏာမျာသနဟင့် ဖော်ပဌချက်မျာသ) တို့ကို တမူထူသခဌာသစလာ ဝင်ရောက်နိုင်စေရန်အတလက် ၎င်သတို့အာသလုံသကို တစ်နည်သတစ်ဖုံ ဂဏန်သတလက်ရန် လိုအပ်ပါသည်။ ကရည်ရလယ်ချက်အတလက်၊ Universally Unique ID (UUID) သို့မဟုတ် Universally Unique Identifier ကဲ့သို့သော သဘောတရာသကို မိတ်ဆက်ပေသခဲ့သည်။ UUID ကို စာကဌောင်သတစ်ခုစီ၏ ကလင်သစကလက်မျာသတလင် ညလဟန်ပဌထာသသည်။ ပဌီသတော့ ဒီနေရာမဟာ ထူသခဌာသချက်တစ်ခုရဟိတယ်။ UUID အတလက်၊ အရဟည် 16 နဟင့် 128 bits ရဟိသော ကုဒ်တစ်ခုကို အသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်။ မင်သဘာလို့မေသတာလဲ။ BLE ပရိုတိုကောတလင်၊ အရာအာသလုံသသည် စလမ်သအင်ထိန်သသိမ်သမဟုနဟင့်ပတ်သက်သည်။ ထို့ကဌောင့် 16 bits ၏အတိုင်သအတာသည် အလလန်သင့်လျော်ပါသည်။ မဝေသတော့သောအနာဂတ်တလင် 65 ကျော်ကိုဖန်တီသနိုင်လိမ့်မည်မထင်ပါ။ ထူသခဌာသသောဝန်ဆောင်မဟုမျာသနဟင့်ဝိသေသလက္ခဏာမျာသ။ လောလောဆယ်မဟာ သူတို့အာသလုံသ ရေတလက်ပဌီသသလာသပဌီ (ဒါက ဘယ်ကလာတာလဲ သတိရပါ - "သူလည်သ မင်သကို ရေတလက်တယ်" :-)) နံပါတ်တပ်ထာသတဲ့ အချက်တလေ၊ ပရိုဖိုင်မျာသ, န်ဆောင်မဟုမျာသ, ဝိသေသလက္ခဏာမျာသ О ဖော်ပဌချက်မျာသ links တလေမဟာ ကဌည့်ရဟုနိုင်ပါတယ်။

ဒါပေမယ့် အင်တာနက်မဟာ IP လိပ်စာ 4 bytes ပါတဲ့ ဇာတ်လမ်သကို လူတိုင်သမဟတ်မိကဌမယ်ထင်တယ်။ အစတုန်သကတော့ လုံလောက်တယ်လို့ ထင်ခဲ့ပေမယ့် အခု 6-byte လိပ်စာကို ပဌောင်သလို့မရသေသပါဘူသ။ ကအမဟာသကို ထပ်ခါတလဲလဲမလုပ်ရန်နဟင့် ဆော့ကစာသတတ်သော DIYers မျာသထံ အခမဲ့ ချုပ်နဟောင်မဟုမပဌုရန် SIG သည် 128-bit UUID မျာသကို မိတ်ဆက်ရန် ချက်ချင်သဆုံသဖဌတ်ခဲ့သည်။ ၎င်သသည် ရေဒီယိုချန်နယ်မဟ Kulibins အမျိုသအစာသအာသလုံသကို ပေသအပ်ထာသသည့် လိုင်စင်မဲ့ 433 MHz တီသဝိုင်သအကဌောင်သ ကျလန်ုပ်အာသ ကိုယ်တိုင်ကိုယ်ကျ အမဟတ်ရစေသည်။ ကျလန်ုပ်တို့၏ကိစ္စတလင်၊ ဝန်ဆောင်မဟုမျာသနဟင့် လက္ခဏာရပ်မျာသ၏ 128-bit ခလဲခဌာသသတ်မဟတ်မဟုကို ဖော်ထုတ်ခဲ့သည်။ ဆိုလိုသည်မဟာ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုမျာသနဟင့် စက်မျာသအတလက် 128-bit တန်ဖိုသကိုမဆို အသုံသပဌုနိုင်ပါသည်။ အာသလုံသအတူတူပါပဲ၊ တူညီတဲ့ UUID နဲ့တက်လာနိုင်ခဌေဟာ သုညပါပဲ။

တကယ်တော့၊ တိုတောင်သသော 16-bit UUID မျာသသည် ၎င်သတို့၏ extension ကို 128-bit တန်ဖိုသသို့ ရဟိသည်။ သတ်မဟတ်ချက်တလင်၊ ကတိုသချဲ့မဟုကို Bluetooth Base UUID ဟုခေါ်ပဌီသ တန်ဖိုသ 00000000-0000-1000-8000-00805F9B34FB ရဟိသည်။ ဥပမာအာသဖဌင့်၊ 16-bit ရည်ညလဟန်သချက် UUID တလင် တန်ဖိုသ 0x1234 ရဟိပါက၊ ညီမျဟသော 128-bit UUID တလင် တန်ဖိုသ 00001234-0000-1000-8000-00805F9B34FB ရဟိပါမည်။ ဆက်စပ်ဖော်မဌူလာကိုပင် ပေသသည်-

                                128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID

ဒီမဟော်နံပါတ်က ဘယ်ကလာမဟန်သမသိဘူသ။ စာဖတ်သူမျာသ သိရဟိပါက မဟတ်ချက်မျာသတလင် ရေသပေသကဌပါ (Sinopteek ဟူသော အမည်ပဌောင်ဖဌင့် အသုံသပဌုသူတစ်ညသက ၎င်သကို လုပ်ဆောင်ပဌီသဖဌစ်သည်။ မဟတ်ချက်မျာသကို ကဌည့်ပါ)။ 128-bit UUID မျာသနဟင့်အတူ ထလက်ပေါ်လာခဌင်သအတလက်မူအရ သင်သည် အထူသတစ်ခုကို အသုံသပဌုနိုင်သည်။ မီသစက်မင်သအတလက် ဘယ်သူလုပ်ပေသမလဲ။

ATTy GATty...

တကယ်တော့, ထို့နောက်ပျော်စရာစတင်။ ATT သည် ဖောက်သည်-ဆာဗာ ဆက်ဆံရေသအပေါ် အခဌေခံထာသကဌောင်သ သတိပေသပါရစေ။ ယခုကျလန်ုပ်တို့သည်ဆာဗာကိရိယာကိုကဌည့်ရဟုနေသည်။ ၎င်သတလင် အာရုံခံတန်ဖိုသမျာသ၊ အလင်သခလုတ်အခဌေအနေ၊ တည်နေရာဒေတာစသည့် အချက်အလက်မျာသပါရဟိသည်။ ယခု "ကျလန်ုပ်တို့၏ချီတက်ပလဲတလင်ပါဝင်သူမျာသ" အာသလုံသကို ရေတလက်ပဌီသသောအခါ၊ ၎င်သတို့ကို စက်၏မဟတ်ဉာဏ်တလင် တစ်နည်သနည်သဖဌင့် ထာသရဟိရန် လိုအပ်ပါသည်။ ဒါကိုလုပ်ဖို့၊ သူတို့ကို attribute table လို့ခေါ်ပါတယ်။ ဒါကို ကောင်သကောင်သမဟတ်ထာသပါ။ ဒါက BLE ရဲ့ နဟလုံသသာသပါ။ ဒါက ကျနော်တို့ နောက်ထပ် စဉ်သစာသရမယ့်အချက်ပါ။ ယခု ကျလန်ုပ်တို့သည် စာကဌောင်သတစ်ကဌောင်သစီကို attribute ဟုခေါ်ပါမည်။ ကဇယာသသည် stack တလင်နက်ရဟိုင်သစလာတည်ရဟိပဌီသစည်သမျဉ်သအရ၊ ကျလန်ုပ်တို့သည် ၎င်သကိုတိုက်ရိုက်ဝင်ရောက်ခလင့်မရဟိပါ။ ကျလန်ုပ်တို့ ၎င်သကို အစပဌုပဌီသ ၎င်သကို ဝင်ရောက်ကဌည့်ရဟုနိုင်သော်လည်သ အတလင်သ၌ ဖဌစ်ပျက်နေသည့်အရာသည် တံဆိပ်ခုနစ်ခုနောက်ကလယ်တလင် ကျလန်ုပ်တို့ထံမဟ ဝဟက်ထာသသည်။

သတ်မဟတ်ချက်မဟ ရုပ်ပုံအာသ ကဌည့်ကဌပါစို့၊ သို့သော် ထိုမတိုင်မီတလင်၊ ဖော်ပဌချက်မျာသ၌ မကဌာခဏ ရဟုပ်ထလေသနေသော ဝေါဟာရမျာသကို ချက်ချင်သအာရုံစိုက်စေလိုပါသည်။ သရုပ်ဖော်သူ၏ အခန်သကဏ္ဍသည် ဝိသေသ၏ ဖော်ပဌချက်ကို ဖဌည့်စလက်ရန် ဖဌစ်သည်။ ၎င်သ၏စလမ်သရည်မျာသကို ချဲ့ထလင်ရန် လိုအပ်သောအခါတလင် ဖော်ပဌချက်မျာသကို အသုံသပဌုသည်။ ၎င်သတို့သည် attribute မျာသဖဌစ်ပဌီသ ဝန်ဆောင်မဟုမျာသနဟင့် လက္ခဏာမျာသကဲ့သို့ပင်၊ ၎င်သတို့သည် attribute table တလင်တည်ရဟိပါသည်။ ဆောင်သပါသ၏ ဒုတိယအပိုင်သတလင် ၎င်သတို့ကို အသေသစိတ် စစ်ဆေသပါမည်။ သို့သော် တစ်ခါတစ်ရံတလင် ဖော်ပဌသူမျာသသည် attribute ဇယာသရဟိ အတန်သနံပါတ်ကို ရည်ညလဟန်သပါသည်။ ဒါကို စိတ်ထဲမဟာ ထာသရမယ်။ ရဟုပ်ထလေသမဟုမျာသကို ရဟောင်ရဟာသရန် ကရည်ရလယ်ချက်မျာသအတလက် "attribute pointer" ဟူသော ဝေါဟာရကို အသုံသပဌုပါမည်။
အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы...)

ထို့ကဌောင့် attribute သည် ၎င်သနဟင့်ဆက်စပ်နေသော အောက်ပါဂုဏ်သတ္တိမျာသပါရဟိသော သီသခဌာသတန်ဖိုသတစ်ခုဖဌစ်သည်။
1. Attribute Handle သည် attribute နဟင့် သက်ဆိုင်သော table index ဖဌစ်သည်။
2. Attribute Type သည် ၎င်သ၏အမျိုသအစာသကိုဖော်ပဌသော UUID တစ်ခုဖဌစ်သည်။
3. Attribute Value သည် attribute pointer မဟ indexed data ဖဌစ်သည်။
4. Attribute Permissions မျာသသည် attribute protocol ကို အသုံသပဌု၍ ဖတ်ခဌင်သ သို့မဟုတ် ရေသသာသ၍မရသော ခလင့်ပဌုချက်မျာသ၊

ဒါတလေအာသလုံသကို ဘယ်လိုနာသလည်ရမလဲ။ attribute pointer သည် ကျလန်ုပ်တို့ဇယာသရဟိ ၎င်သ၏နံပါတ်ဖဌစ်သည်။
၎င်သသည် သုံသစလဲသူတစ်ညသအာသ ဖတ်ရဟုရန် သို့မဟုတ် စာရေသတောင်သဆိုမဟုမျာသတလင် အရည်အချင်သတစ်ခုအာသ ကိုသကာသရန်ခလင့်ပဌုသည်။ 0x0001 မဟ 0xFFFF မဟ ကျလန်ုပ်တို့၏လိုင်သမျာသ (attributes) ကို ရေတလက်နိုင်ပါသည်။ စာအုပ်စင်နဟင့် ကျလန်ုပ်တို့၏ဆက်စပ်မဟုတလင်၊ ကသည်မဟာ စာရလက်ကတ်တလောက်ရဟိ ကတ်နံပါတ်ဖဌစ်သည်။ အလာသတူ၊ စာကဌည့်တိုက်ကတ်တလောက်တလင်ကဲ့သို့ ကတ်မျာသကို အရေအတလက် တိုသလာစေရန် စီစဥ်ထာသသည်။ နောက်ဆက်တလဲစာကဌောင်သတစ်ခုစီ၏ အရေအတလက်သည် ယခင်စာကဌောင်သထက် ပိုမျာသနေရပါမည်။ စာကဌည့်တိုက်တလင်ကဲ့သို့ပင် တစ်ခါတစ်ရံတလင် အချို့သောကတ်မျာသ ပျောက်ဆုံသသလာသသောကဌောင့် ကျလန်ုပ်တို့နဟင့်အတူ၊ လိုင်သနံပါတ်တပ်ခဌင်သတလင် ကလာဟချက်ရဟိနိုင်ပါသည်။ ဒါကို ခလင့်ပဌုတယ်။ အဓိက ကတော့ သူတို့က အဆင့်ဆင့် လျဟောက်သလာသနေတာ။

ရည်ညလဟန်သချက်အမျိုသအစာသသည် ရည်ညလဟန်သချက်အာသ ကိုယ်စာသပဌုသည့်အရာကို ဆုံသဖဌတ်သည်။ C language နဲ့ ယဟဉ်ကဌည့်ခဌင်သအာသဖဌင့်၊
boolean၊ numeric variables နဟင့် strings မျာသရဟိရာ၊ ကနေရာတလင် ရဟိနေပါသည်။ ရည်ညလဟန်သချက်အမျိုသအစာသအာသဖဌင့် ကျလန်ုပ်တို့အသိအမဟတ်ပဌုပါသည်။
ကျလန်ုပ်တို့သည် အဘယ်အရာနဟင့် ဆက်ဆံနေရသနည်သ၊ ကအရည်အချင်သဖဌင့် ကျလန်ုပ်တို့ မည်သို့ဆက်လက်လုပ်ဆောင်နိုင်မည်နည်သ။ အောက်တလင် ကျလန်ုပ်တို့သည် အချို့သော သီသခဌာသ attribute အမျိုသအစာသမျာသကို ကဌည့်ပါမည်။ ဥပမာအာသဖဌင့်၊ "ဝန်ဆောင်မဟုကဌေငဌာချက်" (0x2800)၊ "ထူသခဌာသသောကဌေငဌာချက်" (0x2803)၊ "ဖော်ပဌချက်ကဌေငဌာချက်" (0x2902)။

attribute တစ်ခု၏တန်ဖိုသသည် ၎င်သ၏အမဟန်တကယ်အဓိပ္ပာယ်ဖဌစ်ပဌီသ tautology ကို ခလင့်လလဟတ်ပါ။ attribute အမျိုသအစာသသည် string တစ်ခုဖဌစ်ပါက၊ attribute value သည် ဥပမာ၊ ဆောင်ပုဒ် “Hello World !!!” ဖဌစ်နိုင်ပါသည်။ အကယ်၍ attribute အမျိုသအစာသသည် "ဝန်ဆောင်မဟုကဌေငဌာချက်" ဖဌစ်ပါက ၎င်သ၏တန်ဖိုသသည် ဝန်ဆောင်မဟုကိုယ်တိုင်ဖဌစ်သည်။ တစ်ခါတစ်ရံတလင် ၎င်သသည် အခဌာသ attribute မျာသနဟင့် ၎င်သတို့၏ ဂုဏ်သတ္တိမျာသကို မည်သည့်နေရာတလင် ရဟာဖလေရမည်နည်သ။

ရည်ညလဟန်သချက်ခလင့်ပဌုချက်မျာသသည် ဆာဗာအာသ ဖတ်ရန် သို့မဟုတ် စာရေသဝင်ရောက်ခလင့်ကို ခလင့်ပဌုထာသခဌင်သရဟိမရဟိ နာသလည်နိုင်စေပါသည်။
ကခလင့်ပဌုချက်မျာသသည် အမဟတ်အသာသ၊ အမျိုသအစာသ သို့မဟုတ် ခလင့်ပဌုချက်အကလက်တလင်သာမဟုတ်ဘဲ ရည်ညလဟန်သချက်တန်ဖိုသနဟင့်သာ သက်ဆိုင်ကဌောင်သ သတိပဌုပါ။ အဲဒါတလေ။ attribute recording ကို ခလင့်ပဌုပါက၊ ဥပမာ၊ “Hello World!!!” လိုင်သကို ပဌောင်သနိုင်သည်။ "မင်္ဂလာနံနက်ခင်သပါ" လိုင်သသို့ သို့သော် ကျလန်ုပ်တို့သည် စာကဌောင်သအသစ်ရေသသာသခဌင်သ သို့မဟုတ် attribute အမျိုသအစာသကို ပဌောင်သလဲပဌီသ လိုင်သကို "ဝန်ဆောင်မဟုကဌေငဌာချက်" အဖဌစ် သတ်မဟတ်၍မရပါ။ ဖောက်သည်တစ်ညသသည် ဆာဗာကို ဆက်သလယ်သောအခါ၊ ဖောက်သည်သည် ၎င်သ၏ အရည်အချင်သမျာသကို တောင်သဆိုသည်။ ၎င်သသည် သုံသစလဲသူအာသ ဆာဗာမဟ ပေသဆောင်နိုင်သည်မျာသကို သိနိုင်စေပါသည်။ တန်ဖိုသတလေကို ရေသတတ်ဖတ်တတ်ဖို့ မလိုအပ်ပေမယ့်။

ဘယ်လိုပုံစံလဲ။

GATT ၏ သဘောတရာသသည် အလလန်တိကျပဌီသ ယုတ္တိရဟိသော အစီအစဥ်တစ်ခုဖဌင့် attribute ဇယာသတစ်ခုတလင် attribute မျာသကို အုပ်စုဖလဲ့ရန်ဖဌစ်သည်။ အောက်ဖော်ပဌပါ နဟလုံသခုန်နဟုန်သပရိုဖိုင်ကို အနီသကပ်လေ့လာကဌည့်ရအောင်။ ကဇယာသ၏ ဘယ်ဘက်ဆုံသကော်လံသည် စိတ်ကဌိုက်ရလေသချယ်နိုင်သည်။ ကစာကဌောင်သ (attribute) သည် ကျလန်ုပ်တို့အာသ ရိုသရဟင်သစလာ ဖော်ပဌသည်။ အခဌာသကော်လံမျာသအာသလုံသသည် ကျလန်ုပ်တို့နဟင့်ရင်သနဟီသပဌီသသာသဖဌစ်သည်။

အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы...)

အဖလဲ့တစ်ခုစီ၏ထိပ်တလင် ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုကဌေငဌာခဌင်သရည်ညလဟန်သချက်တစ်ခု အမဌဲရဟိသည်။ ၎င်သ၏ အမျိုသအစာသသည် အမဌဲတမ်သ 0x2800 ဖဌစ်ပဌီသ ညလဟန်ပဌချက်သည် ဇယာသတလင် ရဟိနေပဌီသသာသ အရည်အချင်သမျာသ မည်မျဟရဟိသည်အပေါ် မူတည်သည်။ ၎င်သ၏ခလင့်ပဌုချက်မျာသသည် စစ်မဟန်ကဌောင်သ သို့မဟုတ် ခလင့်ပဌုချက်မရဟိဘဲ အမဌဲတမ်သဖတ်ရန်သာဖဌစ်သည်။ ဒီသဘောတရာသတလေအကဌောင်သ နည်သနည်သကဌာမဟ ပဌောပါမယ်။ တန်ဖိုသသည် ဝန်ဆောင်မဟုကို ခလဲခဌာသသိမဌင်နိုင်သော အခဌာသ UUID ဖဌစ်သည်။ ဇယာသတလင်၊ တန်ဖိုသသည် 0x180D ဖဌစ်ပဌီသ၊ Bluetooth SIG မဟ နဟလုံသခုန်နဟုန်သဝန်ဆောင်မဟုအဖဌစ် သတ်မဟတ်သည်။

ဝန်ဆောင်မဟုကဌေငဌာပဌီသနောက်၊ အင်္ဂါရပ်၏ကဌေငဌာချက်ထလက်ပေါ်လာသည်။ ၎င်သသည် ဝန်ဆောင်မဟုကဌေငဌာချက်ပုံစံနဟင့် ဆင်တူသည်။ ၎င်သ၏ UUID သည် အမဌဲတမ်သ 0x2803 ဖဌစ်ပဌီသ ၎င်သ၏ခလင့်ပဌုချက်မျာသသည် စစ်မဟန်ကဌောင်သ သို့မဟုတ် ခလင့်ပဌုချက်မရဟိဘဲ အမဌဲတမ်သဖတ်ရန်သာဖဌစ်သည်။ အချက်အလက်အချို့ပါဝင်သည့် Attribute Value အကလက်ကို ကဌည့်ကဌပါစို့။ ၎င်သတလင် ညလဟန်ပဌချက်တစ်ခု၊ UUID နဟင့် ဂုဏ်သတ္တိအစုံပါရဟိသည်။ ကအချက်သုံသချက်သည် တန်ဖိုသ၏နောက်ဆက်တလဲဖော်ပဌချက်ကို ဖော်ပဌသည်။ ညလဟန်ပဌချက်သည် attribute ဇယာသရဟိ ဝိသေသတန်ဖိုသကဌေငဌာချက်၏တည်နေရာကို သဘာဝကျကျဖော်ပဌသည်။ UUID သည် ကျလန်ုပ်တို့မျဟော်လင့်နိုင်သည့် အချက်အလက်အမျိုသအစာသ သို့မဟုတ် တန်ဖိုသကို ဖော်ပဌသည်။ ဥပမာအာသဖဌင့်၊ အပူချိန်တန်ဖိုသ၊ အလင်သခလုတ်၏ အခဌေအနေ သို့မဟုတ် အခဌာသထင်သလိုတန်ဖိုသအချို့။ နောက်ဆုံသတလင် ဝိသေသတန်ဖိုသနဟင့် မည်ကဲ့သို့ အကျိုသသက်ရောက်နိုင်သည်ကို ဖော်ပဌသည့် ဂုဏ်သတ္တိမျာသ။

နောက်ထပ် ချို့ယလင်သချက်တစ်ခုက ကျလန်ုပ်တို့ကို ကနေရာတလင် စောင့်ကဌိုနေပါသည်။ ၎င်သသည် attribute ခလင့်ပဌုချက်မျာသနဟင့် ဝိသေသဂုဏ်သတ္တိမျာသနဟင့် ဆက်စပ်နေသည်။ Specification မဟ bit field properties ၏ပုံကို ကဌည့်ရအောင်။

အဏုကဌည့်မဟန်ဘီလူသအောက်တလင် BLE (ATTы GATTы...)

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ကနေရာတလင် စာရေသခဌင်သစလမ်သရည်ကို ပေသစလမ်သနိုင်သော နယ်ပယ်မျာသလည်သ ရဟိပါသည်။ ကျလန်ုပ်တို့တလင် ရည်ညလဟန်သချက်နဟင့် ပစ္စည်သဥစ္စာပိုင်ဆိုင်မဟုအတလက် အဘယ်ကဌောင့် ဖတ်/ရေသခလင့်ပဌုချက်မျာသ ရဟိသည်ကို သင်အံ့သဌနေပေမည်။
လက္ခဏာတန်ဖိုသအတလက် ဖတ်/ရေသမလာသ။ အမဌဲတမ်သ တူနေသင့်သလာသ။ အမဟန်မဟာ ဝိသေသတန်ဖိုသမျာသအတလက် ဂုဏ်သတ္တိမျာသသည် အမဟန်တကယ်တလင် GATT နဟင့် အပလီကေသရဟင်သအလလဟာမျာသတလင် အသုံသပဌုသည့် client အတလက် အကဌံပဌုချက်မျာသသာဖဌစ်သည်။ ကအရာမျာသသည် လက္ခဏာကဌေညာခဌင်သ ရည်ညလဟန်သချက်မဟ ဖောက်သည်သည် မျဟော်လင့်နိုင်ဖလယ်ရဟိသည့် အရိပ်အမဌလက်မျာသဖဌစ်သည်။ ဒါကို ပိုပဌီသအသေသစိတ်ကဌည့်ရအောင်။ ရည်ညလဟန်သချက်တစ်ခုတလင် မည်သည့်ခလင့်ပဌုချက်အမျိုသအစာသမျာသ ရဟိသနည်သ။

1. အသုံသပဌုခလင့်မျာသ-
     - စာဖတ်ခဌင်သ
     - မဟတ်တမ်သ
     - အရေသအဖတ်
2. အထောက်အထာသစိစစ်ခဌင်သခလင့်ပဌုချက်-
     - စစ်မဟန်ကဌောင်သအထောက်အထာသလိုအပ်သည်။
     - စစ်မဟန်ကဌောင်သအထောက်အထာသမလိုအပ်ပါ။
3. ခလင့်ပဌုချက်ခလင့်ပဌုချက်-
     - ခလင့်ပဌုချက်လိုအပ်သည်။
     - ခလင့်ပဌုချက်မလိုအပ်ပါ။

attribute resolution နဟင့် characteristic properties မျာသကဌာသ အဓိက ကလာခဌာသချက်မဟာ ယခင် servers မျာသတလင် သက်ရောက်ပဌီသ နောက်ပိုင်သ clients မျာသအတလက် ဖဌစ်သည်။ ဆာဗာသည် လက္ခဏာတန်ဖိုသကို ဖတ်ရန် ခလင့်ပဌုထာသသော်လည်သ စစ်မဟန်ကဌောင်သ သို့မဟုတ် ခလင့်ပဌုချက် လိုအပ်နိုင်သည်။ ထို့ကဌောင့်၊ ဖောက်သည်သည် ဝိသေသ၏ဂုဏ်သတ္တိမျာသကို တောင်သဆိုသောအခါ၊ ကျလန်ုပ်တို့သည် ၎င်သကို ဖတ်ရဟုခလင့်ကို ရရဟိမည်ဖဌစ်သည်။ ဒါပေမယ့် ဖတ်ဖို့ကဌိုသစာသတဲ့အခါ အမဟာသအယလင်သတလေ ကဌုံလာရတယ်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် ပိုင်ဆိုင်မဟုမျာသထက် ခလင့်ပဌုချက်မျာသ၏ ညသစာသပေသအကဌောင်သ လုံခဌုံစလာ ပဌောဆိုနိုင်ပါသည်။ ကလိုင်သယင့်ဘက်တလင်၊ ရည်ညလဟန်သချက်တစ်ခုတလင် မည်သည့်ခလင့်ပဌုချက်မျာသပါရဟိသည်ကို ကျလန်ုပ်တို့ မသိရဟိနိုင်ပါ။

ဖော်ပဌချက်

ငါတို့စာသပလဲကိုပဌန်ကဌရအောင်။ ဝိသေသတစ်ခု၏တန်ဖိုသကို ကဌေငဌာပဌီသနောက်၊ အောက်ပါ attribute ကဌေငဌာချက်မျာသကို ဖဌစ်နိုင်သည်-
1. ဝိသေသလက္ခဏာမျာသ ကဌေငဌာချက်အသစ် (ဝန်ဆောင်မဟုတစ်ခုတလင် လက္ခဏာမျာသစလာရဟိနိုင်သည်)
2. ဝန်ဆောင်မဟုကဌေငဌာချက်အသစ် (ဇယာသတလင် ၎င်သတို့အမျာသအပဌာသရဟိနိုင်သည်)
3. လက်ကိုင်တစ်ခုကဌေငဌာခဌင်သ။

နဟလုံသခုန်နဟုန်သတိုင်သတာခဌင်သဆိုင်ရာ ဝိသေသကိစ္စတလင်၊ ကျလန်ုပ်တို့၏ဇယာသတလင်၊ လက္ခဏာတန်ဖိုသ၏ကဌေငဌာချက်ကို ဖော်ပဌသူ၏ကဌေငဌာချက်ဖဌင့် လိုက်ပါသလာသပါသည်။ ဖော်ပဌချက်သည် အင်္ဂါရပ်တစ်ခုအကဌောင်သ ထပ်လောင်သအချက်အလက်မျာသပါရဟိသော အရည်အချင်သတစ်ခုဖဌစ်သည်။ ဖော်ပဌချက်အမျိုသအစာသမျာသစလာရဟိသည်။ ကဆောင်သပါသ၏ ဒုတိယအပိုင်သတလင် ၎င်သတို့အကဌောင်သ အသေသစိတ် ဆလေသနလေသပါမည်။ ယခုအချိန်တလင်၊ ကျလန်ုပ်တို့သည် Client Characteristic Configuration Descriptor (CCCD) ပေါ်တလင်သာ ထိတလေ့ပါမည်။ ၎င်သတလင် 0x2902 နဟင့် ညီမျဟသော UUI ရဟိသည်။ ကဖော်ပဌချက်ကို အသုံသပဌု၍ သုံသစလဲသူသည် ဆာဗာပေါ်တလင် ညလဟန်ပဌမဟု သို့မဟုတ် အသိပေသချက်ကို ဖလင့်နိုင်သည်။ သူတို့ကဌာသက ကလာခဌာသချက်က သေသသေသလေသဘဲ။ အကဌောင်သကဌာသချက်သည် သုံသစလဲသူထံမဟ ပဌေစာအတည်ပဌုချက် မလိုအပ်ပါ။ ၎င်သသည် GATT အဆင့်တလင်ဖဌစ်ပေါ်သော်လည်သ လျဟောက်လလဟာအဆင့်သို့မရောက်ရဟိဘဲ ညလဟန်ပဌရန်လိုအပ်သည်။ ဘာလို့အဲလိုမေသတာလဲ။ သဌော် ငါ ဒါကို မသိဘူှ။ Nordic ပညာရဟင်မျာသက အသိပေသချက်မျာသကို အသုံသပဌုရန် အကဌံပဌုထာသကဌောင်သ ပဌောပါရစေ။ ထို့အပဌင်၊ ပက်ကေ့ဂျ် (CRC ကိုသုံသ၍) ၏ခိုင်မာမဟုကိုစစ်ဆေသခဌင်သသည် ကိစ္စရပ်နဟစ်ခုစလုံသတလင် ဖဌစ်ပေါ်ပါသည်။

ကောက်ချက်

ဆောင်သပါသရဲ့ အဆုံသမဟာတော့ ဒီလိုပဌောချင်ပါတယ်။ နောက်ဆုံသ စာသပလဲက နည်သနည်သတော့ ရဟုပ်တယ်။ ဒါပေမယ့် ပေသထာသတာဆိုတော့ ရလေသလိုက်တယ်။ ဆောင်သပါသငါအာသကိုသသော။ ကျလန်ုပ်၏ဆောင်သပါသ၏ဒုတိယအပိုင်သတလင်၊ ကျလန်ုပ်သည် BlueTooth 4.0 သတ်မဟတ်ချက်ကိုပိုမိုနက်ရဟိုင်သစလာလေ့လာရန်ရည်ရလယ်ပါသည်။ နောက်ထပ် မဟန်ကန်သော ကာသချပ်မျာသနဟင့် ပုံမျာသ သည် ကျလန်ုပ်တို့ကို ထိုနေရာတလင် စောင့်ကဌိုနေပါသည်။ တတိယအပိုင်သတလင်၊ Wireshark ပရိုဂရမ်ကို အသုံသပဌု၍ ရရဟိသော မဟတ်တမ်သကို ဂက်ဂျက်တစ်ခုမဟ ခလဲခဌမ်သစိပ်ဖဌာပဌီသ ကျလန်ုပ်တို့ လေ့လာနေသည့် သီအိုရီအာသလုံသကို “တိုက်ရိုက်” ကဌည့်ပါ။

ကုမ္ပဏီအုပ်စု၏ ဝန်ထမ်သ "ဆီဇာဂဌိုလ်တု"
Pecherskikh ဗလာဒီမာ

source: www.habr.com

မဟတ်ချက် Add