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 ========== - UUID handling: Use the new functions created for UUID handling in all parts of BlueZ code. Currently, the new bt_uuid_* functions are being used by GATT-related code only. Priority: high Complexity: C4 - Update PBAP client/server implementation to 1.2 and create necessary APIs for new features it introduces. Priority: Medium Complexity: C4 - Create GOEP unit tests based on its test specification: https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=230559 Priority: Medium Complexity: C2 - Function in src/adapter.c to convert old storage files to new ini-file format should be removed 6-8 months after first BlueZ 5 release. Priority: Low Complexity: C1 - Remove usage of symlinks for drivers, such as profiles/input/suspend.c and profiles/sap/sap.c. Instead, select drivers at runtime by using config options or probing for running D-Bus services (using e.g. g_dbus_add_service_watch()). Idea first mentioned on http://thread.gmane.org/gmane.linux.bluez.kernel/30175/focus=30190. - Reuse connection handling code of src/profile.c also for built-in profiles so plugins would only need to register their btd_profile and the core takes care of the rest including listen to the right channel and manages the sdp record. Once btd_profile manages the connection it can also notify about their state, this probably remove the need of having callbacks to .connect/.disconnect since their state can be tracked, it also enables any plugin to track any profile state change which can be useful for e.g. a connection policy plugin in case one is needed. Priority: Low Complexity: C2 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 - 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 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 idea 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 ======== - At the moment authentication and authorization is not supported at the same time, read/write requirements in the attribute server needs to be extended. According to Bluetooth Specification a server shall check authentication and authorization requirements before any other check is performed. Priority: Medium Complexity: C1 - 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 - 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 - 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 Management Interface ==================== - Whitelist support (initially only for LE) Priority: Medium Complexity: C2 Owner: Andre Guedes