BLE Advertising Payload format을 raw data로 부터 분리 추출하는 방법을 알아보겠다.
raw data로 부터 payload 포맷에 대한 이해에 도움이 되길 바란다.
Flags, Manufacturer Specify Data, TX Power Level, Slave Connection Interval Range (BLE 5.0미만), Service UUIDs (Complete UUID 128 bit), Device Name, Service Data, Beacon Adv. Data, iBeacon Adv. Data 등의 포맷을 알아 보겠다.
아래 일부 샘플 자료는 아래 사이트에서 참고하였다.
https://jimmywongiot.com/2019/08/13/advertising-payload-format-on-ble/
Flags
Length | Data Type | Advertising Mode |
0x02 (2) | 0x01 (1) | 0x06 (00000110B) |
——————————————————————————————————————————
Flags
02 01 06
——————————————————————————————————————————
AD length : 0x02 (2)
AD Type : 0x01 (1)
- 0x01 : Flags
AD data : 0x06
- 0x06 ( 0000 0110 B )
- Bit 0 : LE Limited Discoverable Mode NO
- Bit 1 : LE General Discoverable Mode YES
- Bit 2 : BR / EDR Not Supported YES
- Bit 3 : Simultaneous LE and BR/EDR to Same Device Capable NO
- Bit 4 : Simultaneous LE and BR/EDR to Same Device Capable (Host) NO
- Bit 5 : Reserved
- Bit 6 : Reserved
- Bit 7 : Reserved
Manufacturer Specify Data
Length | Data Type | Company ID | Manufacturer Specific Data |
0x1B (27) | 0xFF (255) | 0x0059 | 0x01C0111111CC64F00A0B0C0D0E0F101112131415161718 |
Manufacturer Specific Data (offset) | Type | Value / Data |
0 | Header of Manufacturer Payload | 0x01 |
1-7 | MAC Address | 0xCC, 0x11, 0x11, 0x11, 0x11, 0xC0 |
8 | Battery Value in % | 0x64 (100%) |
9 | Measured RSSI Value | 0xF0 |
10 – 24 | Other Value | 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 |
——————————————————————————————————————————
Manufacturer Specific Data
1B FF 59 00 01 C0 11 11 11 11 CC 64 F0 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18
——————————————————————————————————————————
AD length : 0x1B (27)
AD Type : 0xFF (255)
- 0xFF : Manufacturer Specific Data
AD data :
Company Id :
- 0x0059 (89)
Manufacturer Specific Data :
- 0x01C0111111CC64F00A0B0C0D0E0F101112131415161718
- Header of Manufacturer Payload (0) : 0x01 (1)
- MAC Address (1-7) : 0xCC, 0x11, 0x11, 0x11, 0x11, 0xC0
- Battery Value in % (8) : 0x64 (100) %
- Measured RSSI Value (9) : 0xF0 (240)
- Other Value (10-24) : 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18
TX Power Level
Length | Data Type | TX Power Level |
0x02 (2) | 0x0A (10) | 0xFC (-4 dBm) |
Slave Connection Interval Range
Length | Data Type | Minimum | Maximum |
0x05 (5) | 0x12 (18) | 0x0006 (7.5ms) | 0x0014 (25ms) |
——————————————————————————————————————————
Tx Power Level
02 0A FC
——————————————————————————————————————————
AD length : 0x02 (2)
AD Type : 0x0A (10)
- 0x0A : Tx Power Level
AD data : 0xFC (-4 dBm)
- 0xFC ( 1111 1100 B )
- 부호 있는 8비트 정수이므로 2의 보수를 취해 값을 구한다.
- 11111100을 반전하면 00000011. 그리고 1을 더하면 00000100. 즉, 값은 -4가 된다.
——————————————————————————————————————————
Slave Connection Interval Range
05 12 06 00 14 00
——————————————————————————————————————————
AD length : 0x05 (5)
AD Type : 0x12 (18)
- 0x12 : Slave Connection Interval Range
AD data :
- BLE 5.0 미만 버전에서 사용 됨. BLE 5.0 이상에서는 Advertising ID로 변경 됨.
- Slave Connection Interval은 BLE(Bluetooth Low Energy)에서 두 장치 간의 연결 주기를 나타내는 값입니다.
- Connection Interval은 두 연속적인 연결 사이의 시간 간격을 말하며, 이를 설정함으로써 연결의 성능과 전력 소비를 조절할 수 있습니다.
- 최소 값과 최대 값은 16진수로 표현된 값이며, 단위는 1.25ms입니다.
- Connection Interval Min/Max (ms)=16진수 값×1.25
Minimum :
- 0x0006 (6)
- 6 x 1.25 = 7.5 ms
Maximum :
- 0x0014 (20)
- 20 x 1.25 = 25 ms
Service UUIDs (Complete UUID 128 bit)
Length | Data Type | UUID |
0x11 (17) | 0x07 (7) | 0x6E400001-B5A3-F393-E0A9-E50E24DCCA9E |
——————————————————————————————————————————
Complete List of 128-bit Service Class UUIDs
11 07 9E CA DC 24 0E E5 A9 E0 93 F3 A3 B5 01 00 40 6E
——————————————————————————————————————————
AD length : 0x11 (17)
AD Type : 0x07 (7)
- 0x12 : Complete List of 128-bit Service Class UUIDs
AD data :
- 0x6E400001-B5A3-F393-E0A9-E50E24DCCA9E
Complete Local Name
Length | Data Type | Complete Local Name |
0x0C (12) | 0x09 (9) | Nordic_UART (0x4E6F726469635F55415254) |
——————————————————————————————————————————
Complete Local Name
0C 09 4E 6F 72 64 69 63 5F 55 41 52 54
——————————————————————————————————————————
AD length : 0x0C (12)
AD Type : 0x09 (9)
- 0x09 : Complete Local Name
AD data :
- Nordic_UART (0x4E6F726469635F55415254)
Flags
Length | Data Type | Service Data |
0x02 (2) | 0x01 (1) | 0x06 |
Service Data
Length | Data Type | Service Data |
0x05 (5) | 0x16 (22) | 0x6E2ADB02 |
Complete Local Name
Length | Data Type | Service Data |
0x0B (11) | 0x09 (9) | 0x50205420383034394638 |
——————————————————————————————————————————
Flags
02 01 06
——————————————————————————————————————————
AD length : 0x02 (2)
AD Type : 0x01 (1)
- 0x01 : Flags
AD data : 0x06
- 0x06 ( 0000 0110 B )
- Bit 0 : LE Limited Discoverable Mode NO
- Bit 1 : LE General Discoverable Mode YES
- Bit 2 : BR / EDR Not Supported YES
- Bit 3 : Simultaneous LE and BR/EDR to Same Device Capable NO
- Bit 4 : Simultaneous LE and BR/EDR to Same Device Capable (Host) NO
- Bit 5 : Reserved
- Bit 6 : Reserved
- Bit 7 : Reserved
——————————————————————————————————————————
Service Data 16-bit UUID
05 16 6E 2A DB 02
——————————————————————————————————————————
AD length : 0x05 (5)
AD Type : 0x16 (22)
- 0x16 : Service Data 16-bit UUID
AD data :
- 0x6E2ADB02
- ServiceData의 값은 해당 서비스의 사양에 따라 정의된다. (사용자 설정 포맷)
- ServiceData UUID를 포함할 경우 [CBUUID: Data] 포맷으로 만들기도 한다.
——————————————————————————————————————————
Complete Local Name
0B 09 50 20 54 20 38 30 34 39 46 38
——————————————————————————————————————————
AD length : 0x0B (11)
AD Type : 0x09 (9)
- 0x09 : Complete Local Name
AD data :
- 0x50205420383034394638
- ASCII 문자열로 변환하면 "P T 8 0 4 9 F 8" 이다.
Beacon Adv. Data
Length | Data Type | Beacon Adv. Data |
0x1A (26) | 0xFF (255) | 0x004C 000215 112233445566778899AABBCCDD |
——————————————————————————————————————————
Beacon Adv. Data
| AD Length | AD Type | Manufacturer ID | Beacon ID | Major | Minor | TX Power |
1A FF 00 4C 00 02 15 11 22 33 44 55 66 77 88 99 AA BB CC DD
——————————————————————————————————————————
AD length : 0x1A (26)
AD Type : 0xFF (255)
- 0xFF : Manufacturer Specific Data
AD data :
Manufacturer :
- 0x004C (Beacon을 제조한 회사의 ID)
Beacon ID :
- 0x000215 (Beacon을 식별하는 고유 ID)
Beacon Data :
- 0x112233445566778899AABBCCDD (Beacon 고유 데이터)
- Beacon Data의 세부 사항은 제조사 또는 표준에 따라 다르게 정의될 수 있다.
- 일반적으로 Major, Minor, TX Power를 사용한다.
iBeacon Adv. Data
Length | Data Type | iBeacon Adv. Data |
0x1F (31) | 0xFF (255) | 0x4C 000215 E2C56DB5DFFB48D2B060D0F5A71096E0 0001 0002 C5 |
——————————————————————————————————————————
iBeacon Adv. Data
| AD Length | AD Type | Manufacturer ID | iBeacon Prefix | UUID | Major | Minor | TX Power |
1F FF 4C 00 02 15 E2C56DB5DFFB48D2B060D0F5A71096E0 0001 0002 C5
——————————————————————————————————————————
AD length : 0x1A (26)
AD Type : 0xFF (255)
- 0xFF : Manufacturer Specific Data
AD data :
Manufacturer :
- 0x4C (Beacon을 제조한 회사의 ID)
iBeacon Prefix :
- 0x000215 (Apple이 iBeacon을 식별하기 위한 특별한 값)
UUID :
- 0xE2C56DB5DFFB48D2B060D0F5A71096E0 (16바이트의 Universally Unique Identifier)
Major :
- 0x0001 (주요 범주를 식별하는 값)
Minor :
- 0x0002 (Major 범주 내에서 세부 항목을 식별하는 값)
TX Power :
- 0xC5 (전송 전력을 나타내는 값)
2024.01.11 - [Note] - BLE, Beacon, iBeacon
2024.01.11 - [Note] - BLE Advertising Payload format 샘플 분석
2024.01.09 - [Note] - Packet Format for the LE Uncoded PHYs
2024.01.04 - [iOS] - Floating, Dragging Button
2023.12.27 - [Bark Bark] - 말이 통하지 않는 사람과 싸우지 말라.
2023.12.27 - [Server] - Push Notification
2023.12.27 - [AI,ML,ALGORITHM] - A star
2023.12.07 - [iOS] - XOR 연산을 이용한 문자열 비교
2023.11.03 - [AI,ML,ALGORITHM] - Gomoku(Five in a Row, Omok) (5/5) - 3x3 체크 추가
2023.10.29 - [AI,ML,ALGORITHM] - Gomoku(Five in a Row, Omok) (5/5) - 머신러닝으로 게임 구현2023.11.03 - [AI,ML,ALGORITHM] - Gomoku(Five in a Row, Omok) (5/5) - 3x3 체크 추가
'개발 > Note' 카테고리의 다른 글
git 마지막 commit 취소, 메시지 수정 (0) | 2024.10.16 |
---|---|
BLE, Beacon, iBeacon (0) | 2024.01.11 |
Packet Format for the LE Uncoded PHYs (0) | 2024.01.09 |
Push Notification (1) | 2023.12.27 |
[Mac OS X] Apache Virtual Hosts 설정 설정 (0) | 2023.02.21 |