FeasyBeacon Advertising Protocol
v1.1
Introduction
FeasyBeacon device is capable of advertising up to 10 frames of advertisement simultaneously, therefore, if the developers use an mobile app or an central device to scan the nearby FeasyBeacon device, they may receive more than one advertising frame.
FeasyBeacon mobile SDK and app are designed to be able to parse all of the FeasyBeacon Advertising Frames, the FeasyBeacon mobile SDK and app are completely free and would be kept updating periodically by Feasycom.
General Advertising Frame
FeasyBeacon General Advertising Frame includes content like Firmare Version, MAC Address, Battery Life and so on. This advertisement is not configurable, it’s readonly advertisement.
General Advertising Frame can be find in Service Data( Tag 0x16 ):
Len(1Byte) |
Tag(1Byte) |
Service(2Byte) |
Model(1Byte) |
Version(2Byte) |
Feature(1Byte) |
MAC (6Byte) |
Battery Level(1Byte) |
|---|---|---|---|---|---|---|---|
0x0D |
0x16 |
0xFFF0 |
Len : 1 byte, the length of the frame that exclude the Len word.
Tag : 1 byte, type of frame, 0x16 represents General Advertising Frame
Service : 2 bytes, 0xFFF0
Model : 1 byte, device model number:
Value |
Model Number |
|---|---|
0x15 |
FSC-BP102 |
0x19 |
FSC-BP109 |
0x1A |
FSC-BP103 |
0x1B |
FSC-BP104 |
0x1C |
FSC-BP201 |
0x1D |
FSC-BP106 |
0x1E |
FSC-BP101 |
0x24 |
FSC-BP120 |
0x27 |
FSC-BP108 |
0x28 |
FSC-BP108N |
Version : 2 bytes, device firmware version
Feature : 1 byte, features that are supported:
Bits |
Description |
Definition |
|---|---|---|
Bit0 ~ bit1 |
Connectivity state |
0: Not connectable |
Bit2 ~ bit3 |
Reserved |
must set to 0 |
Bit4 |
LED availability |
0: No LED applied |
Bit5 |
buzzer availability |
0: No buzzer applied |
Bit6 |
G-sensor availability |
0: No G-sensor applied |
Bit7 |
Button availability |
0: No button applied |
MAC : 6 bytes, the MAC address of the device
Battery Level : 1 byte, the current battery level
Value |
Model Number |
|---|---|
0x00 – 0x64 |
0~100% |
0x65 |
non-battery power supply |
An advertisement that containing General Advertising Frame
Byte offset |
value |
Description |
Properties |
|---|---|---|---|
0 |
0x02 |
Data length – 2 bytes |
readonly |
1 |
0x01 |
Data type – flags |
readonly |
2 |
0x06 |
LE and BR/EDR flag |
readonly |
3 Note1 |
0x0E |
Data length – 26 bytes |
readonly |
4 |
0x16 |
Data type - manufacturer specific data |
readonly |
5 |
0xF0 |
16-bit Service UUID 1st byte |
readonly |
6 |
0xFF |
16-bit Service UUID 2nd byte |
readonly |
7 |
0x1A Note2 |
Model Number |
readonly |
8 |
0x02 |
Firmware version 1st byte |
readonly |
9 |
0x05 |
Firmware version 2nd byte |
readonly |
10 |
0x02 |
Feature |
readonly |
11 |
0xDC |
MAC address 1st byte |
readonly |
12 |
0x0D |
MAC address 2nd byte |
readonly |
13 |
0x30 |
MAC address 3rd byte |
readonly |
14 |
0x00 |
MAC address 4th byte |
readonly |
15 |
0x1F |
MAC address 5th byte |
readonly |
16 |
0xA5 |
MAC address 6th byte |
readonly |
17 |
0x64 |
Battery level |
readonly |
Note1 : From byte 3 to byte 17 is the data block of General Advertising Frame, the byte order of it is constant, but the byte order of the whole advertisement may vary by model.
Note2 : Bytes like model number, firmware version, feature, MAC, and battery level may vary by beacon.
iBeacon Advertising Frame
iBeacon Advertising packet structure
Byte offset |
Default value |
Description |
Properties |
|---|---|---|---|
0 |
0x02 |
Data length – 2 bytes |
constant preamble |
1 |
0x01 |
Data type – flags |
constant preamble |
2 |
0x06 |
LE and BR/EDR flag |
constant preamble |
3 |
0x1A |
Data length – 26 bytes |
constant preamble |
4 |
0xFF |
Data type - manufacturer specific data |
constant preamble |
5 |
0x4C |
Manufacturer data |
constant preamble |
6 |
0x00 |
Manufacturer data |
constant preamble |
7 |
0x02 |
Manufacturer data |
constant preamble |
8 |
0x15 |
Manufacturer data |
constant preamble |
9 |
0xFD |
Proximity UUID 1st byte |
set user UUID |
10 |
0xA5 |
Proximity UUID 2nd byte |
set user UUID |
11 |
0x06 |
Proximity UUID 3rd byte |
set user UUID |
12 |
0x93 |
Proximity UUID 4th byte |
set user UUID |
13 |
0xA4 |
Proximity UUID 5th byte |
set user UUID |
14 |
0xE2 |
Proximity UUID 6th byte |
set user UUID |
15 |
0x4F |
Proximity UUID 7th byte |
set user UUID |
16 |
0xB1 |
Proximity UUID 8th byte |
set user UUID |
17 |
0xAF |
Proximity UUID 9th byte |
set user UUID |
18 |
0xCF |
Proximity UUID 10th byte |
set user UUID |
19 |
0xC6 |
Proximity UUID 11th byte |
set user UUID |
20 |
0xEB |
Proximity UUID 12th byte |
set user UUID |
21 |
0x07 |
Proximity UUID 13th byte |
set user UUID |
22 |
0x64 |
Proximity UUID 14th byte |
set user UUID |
23 |
0x78 |
Proximity UUID 15th byte |
set user UUID |
24 |
0x25 |
Proximity UUID 16th byte |
set user UUID |
25 |
0x27 |
Major 1st byte |
set major value |
26 |
0x51 |
Major 2nd byte |
set major value |
27 |
0x65 |
Minor 1st byte |
set minor value |
28 |
0xC1 |
Minor 2nd byte |
set minor value |
29 |
0xB5 |
Signal power (calibrated RSSI@1m) |
signal power value |
Eddystone Advertising Frame
You can read the complete specification of all Eddystone packets on Google’s GitHub (https://github.com/google/eddystone).
Sensor Data Frame
Sensor Data Frame includes content like temperature, humidity and so on. This advertisement is not configurable, it’s readonly advertisement.
General Advertising Frame can be find in vendor specified field ( Tag 0xFF ) :
Len (1 Byte) |
Tag (1 Byte) |
Company (2 Bytes) |
Version (1 Byte) |
Data (N Bytes) |
|---|---|---|---|---|
0xFF |
0xFFF0 |
0x01 |
Tag1 + Tag2 +… |
Len : 1 byte, the length of the frame that exclude the Len word.
Tag : 1 byte, type of frame, 0xFF represents vendor specified field
Company : 2 bytes, 0xFFF0
Version : 1 byte, protocol version, start from 0x01
Data : N bytes, sensor data, use Tag structure (len + tag + data)
Temperature and Humidity Sensor
Len (1 Byte) |
Tag (1 Byte) |
Temperature (2 Bytes) |
Humidity (2 Bytes) |
|---|---|---|---|
0x05 |
0x01 |
Len : 1 byte, the length of the tag-frame that exclude the Len word.
Tag : 1 byte, type of frame, 0x01 represents temperature and humidity.
Temperature : 2 bytes, the first byte represents the integer portion and it’s a signed number (can be nagative or positive), the second byte represents the fractional portion, the unit is centigrade.
Humidity : 2 bytes, the first byte represents the integer portion, the second byte represents the fractional portion, the unit is percentage.