Unify LE advertising instance identifiers
Jakub Pawlowski authored
Up till now, we had three numbers associated with each advertising
instance: client_id, inst_id, and cbindex. We also had special structure
mapping each of those numbers to another.

From now on, when registering advertiser, we'll grab next free
advertising instance id and make advertiser_id equal to it. Thanks to
this, we can remove all the mapping and have just one number associated
with each advertising instance.

This also means we no longer need to pass *p_ref value to the BTM layer
with each request, as advertiser_id is equal to inst_id.

Bug: 30622771
Change-Id: Ied71bff36e30d6c6ce4ca3e62d46ba96320cf597
6a966611
Name Last commit Last update
audio_a2dp_hw Expose function audio_a2dp_hw_dump_ctrl_event()
bta Unify LE advertising instance identifiers
btcore Use standard types, consistent ifdef style everywhere
btif Unify LE advertising instance identifiers
build Update linux BUILD.gn files
conf Use standard types, consistent ifdef style everywhere
device Add Subaru and Nissan car kits to auto pair blacklist
doc Bring back support for legacy bt_config.xml
embdrv A2DP-related naming refactoring and cleanup
hci A2DP-related naming refactoring and cleanup
include Cleanup and removed BTIF-related unused code
main A2DP-related naming refactoring and cleanup
osi A2DP-related naming refactoring and cleanup
service Separate advertiser from GATT client (4/4)
stack Unify LE advertising instance identifiers
test Added A2DP codec-related APIs
tools A2DP-related naming refactoring and cleanup
udrv Use standard types, consistent ifdef style everywhere
utils Use standard types, consistent ifdef style everywhere
vendor_libs Update linux BUILD.gn files
vnd Use standard types, consistent ifdef style everywhere
.gitignore gn-build: Add tinyxml2 as a secondary source
.gn build: Add gtest as a secondary source
Android.mk Remove the need for -Wno-constant-logical-operand
BUILD.gn Update build files for Fluoride on Linux
CleanSpec.mk
EventLogTags.logtags
MODULE_LICENSE_APACHE2
NOTICE
README.md

Fluoride Bluetooth stack

Building and running on AOSP

Just build AOSP - Fluoride is there by default.

Building and running on Linux

Instructions for Ubuntu, tested on 15.10 with GCC 5.2.1.

Install required libraries

sudo apt-get install libevent-dev

Install build tools

  • Install ninja build system
sudo apt-get install ninja-build

or download binary from https://github.com/ninja-build/ninja/releases

  • Install gn - meta-build system that generates NinjaBuild files.

Get sha1 of current version from here and then download corresponding executable:

wget -O gn http://storage.googleapis.com/chromium-gn/<gn.sha1>

i.e. if sha1 is "3491f6687bd9f19946035700eb84ce3eed18c5fa" (value from 24 Feb 2016) do

wget -O gn http://storage.googleapis.com/chromium-gn/3491f6687bd9f19946035700eb84ce3eed18c5fa

Then make binary executable and put it on your PATH, i.e.:

chmod a+x ./gn
sudo mv ./gn /usr/bin

Download source

mkdir ~/fluoride
cd ~/fluoride
git clone https://android.googlesource.com/platform/system/bt

Then fetch third party dependencies:

cd ~/fluoride/bt
mkdir third_party
cd third_party
git clone https://github.com/google/googletest.git
git clone https://android.googlesource.com/platform/external/libchrome
git clone https://android.googlesource.com/platform/external/modp_b64
git clone https://android.googlesource.com/platform/external/tinyxml2

And third party dependencies of third party dependencies:

cd fluoride/bt/third_party/libchrome/base/third_party
mkdir valgrind
cd valgrind
curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/valgrind.h?format=TEXT | base64 -d > valgrind.h
curl https://chromium.googlesource.com/chromium/src/base/+/master/third_party/valgrind/memcheck.h?format=TEXT | base64 -d > memcheck.h

Fluoride currently has dependency on some internal Android projects, which also need to be downloaded. This will be removed in future:

cd ~/fluoride
git clone https://android.googlesource.com/platform/system/core
git clone https://android.googlesource.com/platform/hardware/libhardware
git clone https://android.googlesource.com/platform/system/media

Configure your build

We need to configure some paths to make the build successful. Run:

cd ~/fluoride/bt
gn args out/Default

This will prompt you to fill the contents of your "out/Default/args.gn" file. Make it look like below. Replace "/home/job" with path to your home directory, and don't use "~" in build arguments:

# Build arguments go here. Examples:
#   is_component_build = true
#   is_debug = false
# See "gn args <out_dir> --list" for available build arguments.

libhw_include_path = "/home/job/fluoride/libhardware/include"
core_include_path = "/home/job/fluoride/core/include"
audio_include_path = "/home/job/fluoride/media/audio/include"

Then generate your build files by calling

cd ~/fluoride/bt
gn gen out/Default

Build

cd ~/fluoride/bt
ninja -C out/Default all

This will build all targets (the shared library, executables, tests, etc) and put them in out/Default. To build an individual target, replace "all" with the target of your choice, e.g. ninja -C out/Default net_test_osi.

Run

cd ~/fluoride/bt/out/Default
LD_LIBRARY_PATH=./ ./bluetoothtbd -create-ipc-socket=fluoride