Service UUID ایک منفرد 16 یا 128 بٹ Bluetooth Low Energy (BLE) شناخت کار ہے جو کسی آلے پر فعال سروس کی واضح طور پر تعریف کرتا ہے۔ Bluetooth SIG نے عام سروسز جیسے Battery Service (0x180F)، Device Information (0x180A) اور Heart Rate (0x180D) کے لیے معیاری 16 بٹ UUID مختص کیے ہیں، جو کراس پلیٹ فارم مطابقت کو آسان بناتا ہے۔ Bluetooth Core Specification 5.4 (2023) کے مطابق، فریق ثالث ڈویلپرز کی حسب ضرورت سروسز کو 128 بٹ UUID استعمال کرنا لازمی ہے، جس کا فارمیٹ مرکزی رجسٹری کے بغیر عالمی انفرادیت کو یقینی بناتا ہے۔ Service UUID کا درست اعلان کسی محیطی آلے پر GATT سرور کے درست کام کرنے کا پہلا قدم ہے۔
اہم نکات
Service UUID ایک شناخت کار ہے جو Bluetooth Low Energy GATT سروس کو دیگر آلات کے ذریعے واضح پہچان کے لیے تفویض کیا جاتا ہے۔ BLE آرکیٹیکچر میں، ہر سروس ایک مشترکہ فنکشن سے جڑی خصوصیات کا منطقی گروپ پیش کرتی ہے۔ مثال کے طور پر، Battery Service میں Battery Level کی خصوصیت ہوتی ہے، جو موجودہ بیٹری چارج منتقل کرتی ہے۔
Bluetooth SIG (Special Interest Group) سب سے عام سروسز کو تفویض کردہ معیاری 16 بٹ UUID کے رجسٹری کا انتظام کرتا ہے۔ یہ مختلف مینوفیکچررز کے آلات کو پیشگی ترتیب کے بغیر ایک دوسرے کی سروسز پہچاننے کے قابل بناتا ہے۔ کسی بھی برانڈ کا فٹنس ٹریکر UUID 0x180D کے ساتھ Heart Rate Service کا اعلان کر سکتا ہے، اور کوئی بھی اسمارٹ فون سمجھ جائے گا کہ یہ دل کی دھڑکن کی سروس ہے۔
Bluetooth Core Specification 5.4 (2023) کے مطابق، 16 بٹ UUID کی حدود (0x0000–0xFFFF) دو حصوں میں تقسیم ہیں: 0x0001 سے 0xFFFE تک Bluetooth SIG کی معیاری سروسز ہیں، اور 0xFFFF محفوظ ہے۔ اگر ڈویلپر کو SIG رجسٹری میں موجود نہ ہونے والی منفرد سروس کی ضرورت ہو، تو وہ 128 بٹ UUID استعمال کرتا ہے۔
معیاری اور حسب ضرورت UUID کے درمیان فرق صرف لمبائی میں نہیں ہے: 16 بٹ UUID اشتہاری پیکٹ میں ایئر ٹائم بچاتے ہیں، کیونکہ وہ 16 بائٹ کے بجائے 2 بائٹ کے طور پر منتقل ہوتے ہیں۔ سخت اشتہاری پیکٹ سائز کی حدود (31 بائٹ تک) والے آلات کے لیے، یہ اہم ہے۔
معیاری 16 بٹ UUID BLE آلات کے اہم زمروں کا احاطہ کرتے ہیں: طبی سینسر، فٹنس ٹریکر، پہننے والے الیکٹرانکس اور لوازمات۔ اگر کوئی آلہ معیاری فنکشن لاگو کرتا ہے، تو ڈویلپر کو زیادہ سے زیادہ مطابقت کے لیے Bluetooth SIG رجسٹری سے متعلقہ UUID استعمال کرنے کی سفارش کی جاتی ہے۔
یہاں معیاری سروس UUID کی کچھ مثالیں ہیں:
| UUID (hex) | سروس کا نام | مقصد |
|---|---|---|
| 0x1800 | Generic Access | رسائی کنٹرول، آلہ کا نام، ظاہری شکل |
| 0x180A | Device Information | صنعت کار، ماڈل، سیریل نمبر، فرم ویئر ورژن |
| 0x180D | Heart Rate | نبض کی پیمائش، سینسر کی جگہ، بیٹری کی توانائی |
| 0x180F | Battery Service | فیصد میں بیٹری چارج لیول |
| 0x181A | Environmental Sensing | درجہ حرارت، نمی، دباؤ، روشنی |
| 0x181C | User Data | عمر، وزن، قد، جنس، آرام کی نبض |
حسب ضرورت 128 بٹ UUID اس وقت ضروری ہوتے ہیں جب کوئی آلہ منفرد فعالیت فراہم کرتا ہے۔ مثال کے طور پر، ایک سمارٹ لاک بنانے والا XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX فارمیٹ کے UUID کے ساتھ اپنی Lock Control سروس بناتا ہے۔ ایسا UUID دوسری سروسز کے ساتھ ٹکراؤ نہیں کرے گا، کیونکہ 128 بٹ ویلیو کی جگہ عملی طور پر ختم نہیں ہوتی۔
128 بٹ UUID معیاری UUID RFC 4122 فارمیٹ میں لکھا جاتا ہے: آٹھ ہیکساڈیسیمل حروف، ہائفن، چار، ہائفن، چار، ہائفن، چار، ہائفن، بارہ حروف۔ BLE کے لیے، ایک ورژن استعمال کیا جاتا ہے جہاں Bluetooth SIG UUID کے بنیادی حصے میں مقررہ بٹس ہوتے ہیں۔
Bluetooth SIG بنیادی UUID کی وضاحت کرتا ہے: 0000XXXX-0000-1000-8000-00805F9B34FB۔ معیاری 16 بٹ سروسز کے لیے، UUID ویلیو اس ماسک میں داخل کی جاتی ہے: مثال کے طور پر، 0x180F 0000180F-0000-1000-8000-00805F9B34FB بن جاتا ہے۔ حسب ضرورت سروسز ڈویلپر کے ذریعے تیار کردہ مکمل طور پر آزاد UUID استعمال کرتی ہیں۔
حسب ضرورت UUID بناتے وقت، آپ کسی بھی UUID جنریٹر (UUID v4) کا استعمال کر سکتے ہیں۔ ایک بے ترتیب UUID v4 122 بٹ اینٹروپی فراہم کرتا ہے، جس سے ٹکراؤ عملی طور پر ناممکن ہو جاتا ہے۔ حسب ضرورت سروسز کے لیے بنیادی Bluetooth SIG UUID کے تبدیل شدہ ورژن کا استعمال نہ کریں — یہ تصریح کی خلاف ورزی ہے۔
UUID کے ساتھ سروس کا اعلان GATT سرور بناتے وقت محیطی پہلو پر کیا جاتا ہے۔ iOS میں Core Bluetooth استعمال ہوتا ہے، Android میں android.bluetooth.le۔ آئیے دونوں طریقوں پر نظر ڈالتے ہیں۔
Swift میں، UUID کی وضاحت کرتے ہوئے CBMutableService کے ذریعے سروس بنائی جاتی ہے، اس کے بعد CBMutableCharacteristic کے ذریعے اس میں خصوصیات شامل کی جاتی ہیں۔
import CoreBluetooth
// Standard 16-bit UUID
let batteryServiceUUID = CBUUID("180F")
// Custom 128-bit UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")
let service = CBMutableService(
type: customServiceUUID,
primary: true
)
// Add characteristics
service.characteristics = [characteristic]
// Publish service via peripheralManager
peripheralManager.add(service)
Android پر، سروس BluetoothGattServer اور BluetoothGattService کے ذریعے رجسٹر ہوتی ہے۔ UUID java.util.UUID.fromString کے ذریعے بطور سٹرنگ منتقل کیا جاتا ہے۔
import android.bluetooth.*;
// Custom service UUID
private static final UUID CUSTOM_SERVICE_UUID =
UUID.fromString("E20A39F4-73F5-4BC4-A12F-17D1AD07A961");
BluetoothGattService service = new BluetoothGattService(
CUSTOM_SERVICE_UUID,
BluetoothGattService.SERVICE_TYPE_PRIMARY
);
// Add characteristics
service.addCharacteristic(characteristic);
// Register on GATT server
gattServer.addService(service);
Service UUID کے ذریعے اسکیننگ مرکزی آلہ کو دریافت شدہ تمام محیطی آلات سے منسلک ہوئے بغیر ضروری سروس فراہم کرنے والے آلات تلاش کرنے کی اجازت دیتی ہے۔ ایک BLE اشتہاری پیکٹ میں سروس UUID کی فہرست ہو سکتی ہے، جو مرکزی آلہ کو اسکیننگ مرحلے پر آلات کو فلٹر کرنے کی اجازت دیتی ہے۔
iOS میں، CBCentralManager سروس UUID کے مطابق فلٹر کے ساتھ آلات کو اسکین کرتا ہے۔ یہ بجلی کی کھپت کو کم کرتا ہے اور ضروری آلات کی تلاش کو تیز کرتا ہے۔
import CoreBluetooth
let centralManager = CBCentralManager()
func scanForHeartRateMonitor() {
let services: [CBUUID] = [
CBUUID("180D") // Heart Rate Service
]
centralManager.scanForPeripherals(
withServices: services,
options: nil
)
}
// Delegate receives only Heart Rate Service devices
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
// peripheral has only devices with UUID 0x180D
}
Android پر، UUID کے ذریعے فلٹرنگ ScanFilter.Builder کے ذریعے بھی تعاون یافتہ ہے۔ یہ ہر آلے سے منسلک ہوئے بغیر تلاش کو محدود کرنے کا ایک مؤثر طریقہ ہے۔
import android.bluetooth.le.*;
ScanFilter filter = new ScanFilter.Builder()
.setServiceUuid(
new ParcelUuid(
UUID.fromString("0000180D-0000-1000-8000-00805F9B34FB")
)
)
.build();
BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(
Collections.singletonList(filter),
scanSettings,
scanCallback
);
ایک BLE آلہ ایک ساتھ متعدد سروسز کا اعلان کر سکتا ہے۔ مثال کے طور پر، ایک فٹنس بریسلیٹ میں Battery Service (0x180F)، Heart Rate Service (0x180D) اور کلاؤڈ کے ساتھ ڈیٹا سنکرونائزیشن کے لیے ایک حسب ضرورت سروس ہو سکتی ہے۔ ہر سروس کا اپنا UUID اور خصوصیات کا اپنا سیٹ ہوتا ہے۔
متعدد سروسز کے ساتھ، اشتہاری پیکٹ کی حد پر غور کرنا ضروری ہے۔ ایک BLE اشتہاری پیکٹ میں 31 بائٹ تک ڈیٹا ہو سکتا ہے۔ اگر سروس UUID بہت زیادہ جگہ لے لیں، تو ان میں سے کچھ اشتہاری پیکٹ میں فٹ نہیں ہو سکتے۔ اس صورت میں، اسکین رسپانس استعمال کیا جاتا ہے — ایک دوسرا پیکٹ جو مرکزی آلہ کی درخواست پر بھیجا جاتا ہے۔
Bluetooth Core Specification 5.4 (2023) کے مطابق، ایک GATT سرور پر بنیادی سروسز کی زیادہ سے زیادہ تعداد تصریح کے ذریعے محدود نہیں ہے، لیکن عملی طور پر یہ آلہ کی میموری اور کارکردگی کی ضروریات سے محدود ہے۔ 256 KB فلیش میموری والے ایمبیڈڈ آلات کے لیے، 5–10 سے زیادہ سروسز کی سفارش نہیں کی جاتی۔
اکثر پوچھے گئے سوالات
16 بٹ UUID Bluetooth SIG کے ذریعے معیاری سروسز کے لیے محفوظ ہیں اور اشتہاری پیکٹ میں 2 بائٹ جگہ لیتے ہیں۔ 128 بٹ UUID حسب ضرورت سروسز کے لیے استعمال ہوتے ہیں اور 16 بائٹ جگہ لیتے ہیں۔ انتخاب سروس کی قسم پر منحصر ہے: معیاری فعالیت 16 بٹ UUID استعمال کرتی ہے، منفرد فعالیت 128 بٹ UUID استعمال کرتی ہے۔
UUID v4 استعمال کریں — ایک بے ترتیب UUID جو آن لائن ٹولز، ٹرمینل کمانڈ uuidgen یا آپ کی پروگرامنگ لینگویج API کے ذریعے تیار ہوتا ہے۔ مثال: Java میں UUID.fromString(UUID.randomUUID().toString()) یا Swift میں UUID()۔
نہیں، رجسٹریشن ضروری نہیں ہے۔ Bluetooth SIG صرف 16 بٹ UUID رجسٹر کرتا ہے۔ حسب ضرورت 128 بٹ UUID ڈویلپر کے ذریعے آزادانہ طور پر تیار کیے جاتے ہیں اور وسیع پتہ کی جگہ (2^128 مجموعے) کی بدولت انفرادیت کو یقینی بناتے ہیں۔
ہاں، ایک معیاری GATT سروس میں لامحدود تعداد میں خصوصیات ہو سکتی ہیں۔ مثال کے طور پر، Battery Service میں Battery Level (0x2A19) اور Battery Power State (0x2A1A) ہو سکتے ہیں۔ ہر خصوصیت کا اپنا UUID اور خصوصیات کا سیٹ ہوتا ہے۔
اگر UUID مماثل ہوں تو، مرکزی آلہ اضافی معلومات کے بغیر ایک سروس کو دوسری سے ممتاز نہیں کر سکتا۔ بے ترتیب UUID v4 کے ٹکراؤ کا امکان نہ ہونے کے برابر ہے — تقریباً 5.3 × 10^−37۔ بے ترتیب UUID جنریٹر استعمال کریں، مثالوں سے UUID کاپی نہ کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں