btstack/doc/manual/docs/appendix/migration.md

109 lines
5.0 KiB
Markdown
Raw Normal View History

2016-03-09 17:24:13 +01:00
BTstack has grown organically since its creation and mostly kept the APIs compatible.
After the second listing with the Bluetooth SIG, we decided that it's time for a major overhaul of the API - making easier for new users. This version will be released as v1.0.
In the following, we provide an overview of the changes and guidelines for updating an existing code base.
# Changes
## Project structure
### include folder
The header files had been split between *src/* and *include/btstack*/. Now, the *include/* folder is gone and the headers are provided in *src/*, *src/classic/*, *src/ble/* or by the *platform/* folders. There's a new "btstack.h" header that includes all BTstack headers.
### Defines
All defines that originate from the Bluetooth Specification are now in *src/bluetooth.h*. BTstack defines are collected in *src/btstack_defines.h*
### Plural folder names
Folder with plural names have been renamed to singular, examples: *doc*, *chipset*, *platform*, *tool*.
### ble and src folders
The *ble* folder has been renamed into *src/ble*. Files only relevant for using BTstack in Classic mode, have been moved to *src/classic*. Files in *src* that are specific to individual platforms are moved to *platform* or *port*.
### platform and port
The *platforms* folder has been cleaned up. Now, the *port* folder contains a complete port of BTstack for a specific setup consisting of a MCU and a Bluetooth chipset. Code that didn't belong to the BTstack core in *src* have been moved to *platform* or *port*
## Function and file names
- The _internal suffix has been an artefact from the iOS port. All public functions with the _internal suffix have been stripped of this suffix.
- Types with generic names like linked_list have been prefixed with btstack_ (e.g. btstack_linked_list) to avoid problems when integrating with other environments like vendor SDKs.
## Event names
All events names have the form MODULE_EVENT_NAME now.
## Packet Handlers
We streamlined the use of packet handlers and their types. Most callbacks are now of type *btstack_packet_handler_t* and receive a pointer to an HCI Event packet. Often a void * connection was the first argument - this has been removed resp. pushed up into the BTstack Daemon.
To facilitate working with HCI Events and get rid of manually calculating offsets into packets, we're providing the auto-generated getters for all fields of all elements in *src/hci_event.h*. All functions are defined as static inline, so they are not wasting any program memory.
Feel free to start using these getters as needed.
## Event forwarding
In the past, events have been forwarded up the stack with the effect that an app that used the *att_server* and the *security_manager* would get each HCI event twice. This has been cleaned up by providing a way to register multiple listeners for HCI events.
## remote_device_db.h
Has been split into *src/classic/btstack_link_key_db*, *platform/daemon/btstack_device_name_db*, and *platform/daemon/rfcomm_service_db*.
## bt_control.h
Has been split into *src/btstack_chipset.h* and *src/bstack_control.h*
## Security Manager
- In all Security Manager calls that refer to an active connection, pass in the current handle instead of addr + addr type.
- All Security Manager events are now regular HCI Events instead of sm_* structs
- Multiple packet handler can be registered with sm_add_event_handler()
## RFCOMM
- Packet handler per service and outgoing connection
## HCI / GAP
- In hci_init() only the HCI Transport and it's configuration have to be provided. A link key db can be set via hci_set_link_key_db. Similar, hci_set_chipset() and hci_set_control can be called if needed.
- HCI Event handlers can be registered with hci_add_event_handler
- HCI functions that are commonly placed in GAP have been moved from *src/hci.h* to *src/gap.h*
## btstack_util.h
- The functions to read/store values in little/bit endian have been renamed into bit/little_endian_read/write_16/24/32.
- swapX -> reverse_x
## Linked List
- Renamed to btstack_linked_list
- Removed user data field
## Timers
- Added context field
## Run Loop
- Run loop type selection via implementation run_loop_t struct (see run_loop_NAME_instance())
## GATT Client
- All GATT Client events are now regular HCI Events instead of gatt_* structs.
- The subclient_id has been replaced by a complete handler for GATT Client requests
## ANCS Client
Renamed to *src/ble/ancs_client*
## SDP Server
- Has been renamed to */src/sdp_server*.
- The API for adding a service record was different for
## SDP Client
- SDP Query structs have been repalced by HCI events
## btstack_config.h
- *btstack-config.h* is now *btstack_config.h*
- Defines have been sorted. HAVE_ specify features that are particular to your port. ENABLE_ features can then be added as needed
- EMBEDDED dropped
## Flow control / DAEMON_EVENT_PACKET_SENT
- TODO -- don't hand out local credits
## Daemon
- Moved into *platform/daemon/*. Not tested yet.
- Header for clients: *platform/daemon/btstack_client.h*
- Java bindings are now at *platform/daemon/bindings*
## Unsorted
# Migration