| Background |
| ========== |
| |
| - Priority scale: High, Medium and Low |
| |
| - Complexity scale: C1, C2, C4 and C8. The complexity scale is exponential, |
| with complexity 1 being the lowest complexity. Complexity is a function |
| of both task 'complexity' and task 'scope'. |
| |
| The general rule of thumb is that a complexity 1 task should take 1-2 weeks |
| for a person very familiar with BlueZ codebase. Higher complexity tasks |
| require more time and have higher uncertainty. |
| |
| Higher complexity tasks should be refined into several lower complexity tasks |
| once the task is better understood. |
| |
| General |
| ========== |
| |
| - UUID128 handling: Create new functions to handle UUIDs on host order. |
| Functions should start with prefix "bt_uuid". In the first phase, attribute |
| server/client and gatttool code should be changed to use these new functions. |
| The idea is to keep the consistency for UUID-16, UUID-32 and UUID-128. SDP |
| functions store UUID-16 and UUID-32 on host order, however UUID-128 is stored |
| on network order/big endian. Attribute Protocol uses little endian, while |
| SDP uses big endian. The idea is always store the UUID values on host order |
| and use utility functions to convert to the proper byte order depending on |
| the protocol: ATT or SDP. |
| |
| Priority: high |
| Complexity: C1 |
| |
| - Rename glib-helper file to a more convenient name. The ideia is try to keep |
| only sdp helpers functions. bt_* prefix shall be also changed. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| Low Energy |
| ========== |
| |
| - Advertising management. Adapter interface needs to be changed to manage |
| connection modes, adapter type and advertising policy. See Volume 3, |
| Part C, section 9.3. If Attribute Server is enabled the LE capable |
| adapter shall to start advertising. Further investigation is necessary |
| to define which connectable mode needs to be supported: Non-connectable, |
| directed connectable and undirected connectable. Basically, two connectable |
| scenarios shall be addressed: |
| 1. GATT client is disconnected, but intends to become a Peripheral to |
| receive indications/notifications. |
| 2. GATT server intends to accept connections. |
| |
| Priority: Medium |
| Complexity: C2 |
| |
| - Define Auto Connection Establishment Procedure. Some profiles such as |
| Proximity requires an active link to identify path lost situation. It is |
| necessary to define how to manage connections, it seems that White List |
| is appropriated to address auto connections, however is not clear if the |
| this procedure shall be a profile specific detail or if the remote device |
| object can expose a property "WhiteList", maybe "Trusted" property can be |
| also used for this purpose. Another alternative is to define a method to |
| allow application to request/register the wanted scanning/connection |
| parameters. Before start this task, a RFC/PATCH shall be sent to the ML. |
| See Volume 3, Part C, section 9.3.5 for more information. |
| |
| Priority: Medium |
| Complexity: C2 |
| |
| - Implement a tool(or extend hciconfig) to setup the advertising parameters |
| and data. Extend hciconfig passing extra arguments when enabling the |
| advertises is not the right approach, it will be almost impossible to |
| address all arguments needed in an acceptable way. For testing, we need |
| a tool to change easily the AD Flags, the UUIDs and other data that can be |
| exported through the advertising data field. Suggestions: 1) extend hciconfig |
| passing a config file when enabling advertises; 2) write a ncurses based tool |
| |
| Priority: Medium |
| Complexity: C2 |
| |
| - Add new property in the DeviceFound signal to report the device type: |
| BR/EDR, single mode or dual-mode. |
| |
| Priority: Medium |
| Complexity: C1 |
| |
| - Privacy: When privacy is enabled in the adapter, LE scanning/connection |
| should use a private address. StartDiscovery method shall be changed and |
| new adapter property shall be added. |
| |
| Priority: Medium |
| Complexity: C1 |
| |
| - Static random address setup and storage. Once this address is written |
| in the a given remote, the address can not be changed anymore. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Reconnection address: Reconnection address is a non resolvable private |
| address that the central writes in the peripheral. BlueZ will support |
| multiple profiles, it is not clear how it needs to be implemented. |
| Further discussion is necessary. |
| |
| Priority: Low |
| Complexity: C2 |
| |
| - Device Name Characteristic is a GAP characteristic for Low Energy. This |
| characteristic shall be integrated/used in the discovery procedure. The |
| ideia is to report the value of this characteristic using DeviceFound signals. |
| Discussion with the community is needed before to start this task. Other GAP |
| characteristics for LE needs to follow a similar approach. It is not clear |
| if all GAP characteristics can be exposed using properties instead of a primary |
| service characteristics. |
| See Volume 3, Part C, section 12.1 for more information. |
| |
| Priority: Low |
| Complexity: C2 |
| |
| ATT/GATT |
| ======== |
| |
| - For BR/EDR, primary services can be registered based on the information |
| extracted from the service records. UUIDs, start and end handles information |
| are available in the record, Discover All Primary Services procedure is not |
| necessary. If a GATT service doesn't export a service record means that |
| it should not be used over BR/EDR. Don't start this task before to move the |
| attribute client code to the bluetoothd core. |
| |
| Priority: Medium |
| Complexity: C1 |
| |
| - ATT/GATT parsing to hcidump. Partially implemented, missing to fix |
| multiple advertises in the same event and RSSI. |
| |
| Priority: Medium |
| Complexity: C2 |
| |
| - GATT server: fix MTU exchange |
| |
| Priority: Medium |
| Complexity: C2 |
| |
| - Implement ATT PDU validation. Malformed PDUs can cause division by zero |
| when decoding PDUs. A proper error PDU should be returned for this case. |
| See decoding function in att.c file. |
| |
| Priority: Medium |
| Complexity: C1 |
| |
| - Refactor read_by_group() and read_by_type() in src/attrib-server.c |
| (they've grown simply too big). First step could be to move out the |
| long for-loops to new functions called e.g. get_groups() and get_types(). |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Agent for characteristics: Agent interface should be extended to support |
| authorization per characteristic if the remote is not in the trusted list. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - gatttool should have the ability to wait for req responses before |
| quitting (some servers require a small sleep even with cmd's). Maybe a |
| --delay-exit or --timeout command line switch. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Refactoring of gatt.c functions. Currently, the callbacks of the services |
| and characteristics discovery functions return the ATT PDU and the caller |
| needs to call again the same function to fetch the remaining data when |
| necessary. Investigate if all results can be returned in the callback |
| result to avoid repeated code. Before change the code, please analyze |
| if this change will not break the GATT/ATT qualification tests. Maybe |
| an interactive fetch/query is necessary to pass the tests. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Client needs to export a property in the Device Characteristic hierarchy |
| to manage characteristic value changes reports in the remote device. |
| Currently, Client Characteristic Configuration attribute is not exposed |
| as an object. The user needs to use gatttool to change the value of the |
| this attribute to receive notification/indications. Export this attribute |
| as a property is a proposal that needs further discussion. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Attribute server should process queued GATT/ATT commands if the |
| client disconnects. The client can simply send a command and quit, |
| without wait for a response(ex: Write Command). For this scenario |
| that the client disconnects the link quickly the queued received |
| command is ignored. |
| |
| Priority: Low |
| Complecity: C1 |
| |
| - Add sdp discovery support to gattool with BR (--sdp, default is 0x1f) |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Implement Server characteristic Configuration support in the attribute |
| server to manage characteristic value broadcasting. There is a single |
| instance of the Server Characteristic Configuration for all clients. |
| See Volume 3, Part G, section 3.3.3.4 for more information. |
| |
| Priority: Low |
| Complexity: C1 |
| |
| - Long write is not implemented. Attribute server, client and command line |
| tool shall be changed to support this feature. |
| |
| Priority: Low |
| Complexity: C2 |
| |
| - Define attribute server API. External applications needs to register, |
| change attributes and to be notified about changes. Example: Proximity, |
| Time and Alert Profiles. "Local Service hierarchy" in the attribute-api |
| needs to be proposed and a RFC shall be sent to the ML. |
| |
| Priority: Low |
| Complexity: C2 |
| |
| Management Interface |
| ==================== |
| |
| - Device discovery support (both for BR/EDR & LE) |
| |
| Priority: High |
| Complexity: C3 |
| |
| - EIR generation support |
| |
| Priority: High |
| Complexity: C2 |
| |
| - Blacklist support |
| |
| Priority: Medium |
| Complexity: C1 |
| |
| - mgmt_set_fast_connectable |
| |
| Priority: Medium |
| Complexity: C1 |
| |
| - Whitelist support (initially only for LE) |
| |
| Priority: Medium |
| Complexity: C2 |