Git init
[framework/connectivity/bluez.git] / TODO
1 Background
2 ==========
3
4 - Priority scale: High, Medium and Low
5
6 - Complexity scale: C1, C2, C4 and C8.  The complexity scale is exponential,
7   with complexity 1 being the lowest complexity.  Complexity is a function
8   of both task 'complexity' and task 'scope'.
9
10   The general rule of thumb is that a complexity 1 task should take 1-2 weeks
11   for a person very familiar with BlueZ codebase.  Higher complexity tasks
12   require more time and have higher uncertainty.
13
14   Higher complexity tasks should be refined into several lower complexity tasks
15   once the task is better understood.
16
17 General
18 ==========
19
20 - UUID128 handling: Create new functions to handle UUIDs on host order.
21   Functions should start with prefix "bt_uuid". In the first phase, attribute
22   server/client and gatttool code should be changed to use these new functions.
23   The idea is to keep the consistency for UUID-16, UUID-32 and UUID-128. SDP
24   functions store UUID-16 and UUID-32 on host order, however UUID-128 is stored
25   on network order/big endian. Attribute Protocol uses little endian, while
26   SDP uses big endian. The idea is always store the UUID values on host order
27   and use utility functions to convert to the proper byte order depending on
28   the protocol: ATT or SDP.
29
30   Priority: high
31   Complexity: C1
32
33 - Rename glib-helper file to a more convenient name. The ideia is try to keep
34   only sdp helpers functions. bt_* prefix shall be also changed.
35
36   Priority: Low
37   Complexity: C1
38
39 Low Energy
40 ==========
41
42 - Advertising management. Adapter interface needs to be changed to manage
43   connection modes, adapter type and advertising policy. See Volume 3,
44   Part C, section 9.3. If Attribute Server is enabled the LE capable
45   adapter shall to start advertising. Further investigation is necessary
46   to define which connectable mode needs to be supported: Non-connectable,
47   directed connectable and undirected connectable. Basically, two connectable
48   scenarios shall be addressed:
49   1. GATT client is disconnected, but intends to become a Peripheral to
50      receive indications/notifications.
51   2. GATT server intends to accept connections.
52
53   Priority: Medium
54   Complexity: C2
55
56 - Define Auto Connection Establishment Procedure. Some profiles such as
57   Proximity requires an active link to identify path lost situation. It is
58   necessary to define how to manage connections, it seems that White List
59   is appropriated to address auto connections, however is not clear if the
60   this procedure shall be a profile specific detail or if the remote device
61   object can expose a property "WhiteList", maybe "Trusted" property can be
62   also used for this purpose. Another alternative is to define a method to
63   allow application to request/register the wanted scanning/connection
64   parameters. Before start this task, a RFC/PATCH shall be sent to the ML.
65   See Volume 3, Part C, section 9.3.5 for more information.
66
67   Priority: Medium
68   Complexity: C2
69
70 - Implement a tool(or extend hciconfig) to setup the advertising parameters
71   and data. Extend hciconfig passing extra arguments when enabling the
72   advertises is not the right approach, it will be almost impossible to
73   address all arguments needed in an acceptable way. For testing, we need
74   a tool to change easily the AD Flags, the UUIDs and other data that can be
75   exported through the advertising data field. Suggestions: 1) extend hciconfig
76   passing a config file when enabling advertises; 2) write a ncurses based tool
77
78   Priority: Medium
79   Complexity: C2
80
81 - Add new property in the DeviceFound signal to report the device type:
82   BR/EDR, single mode or dual-mode.
83
84   Priority: Medium
85   Complexity: C1
86
87 - Privacy: When privacy is enabled in the adapter, LE scanning/connection
88   should use a private address. StartDiscovery method shall be changed and
89   new adapter property shall be added.
90
91   Priority: Medium
92   Complexity: C1
93
94 - Static random address setup and storage. Once this address is written
95   in the a given remote, the address can not be changed anymore.
96
97   Priority: Low
98   Complexity: C1
99
100 - Reconnection address: Reconnection address is a non resolvable private
101   address that the central writes in the peripheral. BlueZ will support
102   multiple profiles, it is not clear how it needs to be implemented.
103   Further discussion is necessary.
104
105   Priority: Low
106   Complexity: C2
107
108 - Device Name Characteristic is a GAP characteristic for Low Energy. This
109   characteristic shall be integrated/used in the discovery procedure. The
110   ideia is to report the value of this characteristic using DeviceFound signals.
111   Discussion with the community is needed before to start this task. Other GAP
112   characteristics for LE needs to follow a similar approach. It is not clear
113   if all GAP characteristics can be exposed using properties instead of a primary
114   service characteristics.
115   See Volume 3, Part C, section 12.1 for more information.
116
117   Priority: Low
118   Complexity: C2
119
120 ATT/GATT
121 ========
122
123 - For BR/EDR, primary services can be registered based on the information
124   extracted from the service records. UUIDs, start and end handles information
125   are available in the record, Discover All Primary Services procedure is not
126   necessary. If a GATT service doesn't export a service record means that
127   it should not be used over BR/EDR. Don't start this task before to move the
128   attribute client code to the bluetoothd core.
129
130   Priority: Medium
131   Complexity: C1
132
133 - ATT/GATT parsing to hcidump. Partially implemented, missing to fix
134   multiple advertises in the same event and RSSI.
135
136   Priority: Medium
137   Complexity: C2
138
139 - GATT server: fix MTU exchange
140
141   Priority: Medium
142   Complexity: C2
143
144 - Implement ATT PDU validation. Malformed PDUs can cause division by zero
145   when decoding PDUs. A proper error PDU should be returned for this case.
146   See decoding function in att.c file.
147
148   Priority: Medium
149   Complexity: C1
150
151 - Refactor read_by_group() and read_by_type() in src/attrib-server.c
152   (they've grown simply too big). First step could be to move out the
153   long for-loops to new functions called e.g. get_groups() and get_types().
154
155   Priority: Low
156   Complexity: C1
157
158 - Agent for characteristics: Agent interface should be extended to support
159   authorization per characteristic if the remote is not in the trusted list.
160
161   Priority: Low
162   Complexity: C1
163
164 - gatttool should have the ability to wait for req responses before
165   quitting (some servers require a small sleep even with cmd's). Maybe a
166   --delay-exit or --timeout command line switch.
167
168   Priority: Low
169   Complexity: C1
170
171 - Refactoring of gatt.c functions. Currently, the callbacks of the services
172   and characteristics discovery functions return the ATT PDU and the caller
173   needs to call again the same function to fetch the remaining data when
174   necessary. Investigate if all results can be returned in the callback
175   result to avoid repeated code. Before change the code, please analyze
176   if this change will not break the GATT/ATT qualification tests. Maybe
177   an interactive fetch/query is necessary to pass the tests.
178
179   Priority: Low
180   Complexity: C1
181
182 - Client needs to export a property in the Device Characteristic hierarchy
183   to manage characteristic value changes reports in the remote device.
184   Currently, Client Characteristic Configuration attribute is not exposed
185   as an object. The user needs to use gatttool to change the value of the
186   this attribute to receive notification/indications. Export this attribute
187   as a property is a proposal that needs further discussion.
188
189   Priority: Low
190   Complexity: C1
191
192 - Attribute server should process queued GATT/ATT commands if the
193   client disconnects. The client can simply send a command and quit,
194   without wait for a response(ex: Write Command). For this scenario
195   that the client disconnects the link quickly the queued received
196   command is ignored.
197
198   Priority: Low
199   Complecity: C1
200
201 - Add sdp discovery support to gattool with BR (--sdp, default is 0x1f)
202
203   Priority: Low
204   Complexity: C1
205
206 - Implement Server characteristic Configuration support in the attribute
207   server to manage characteristic value broadcasting. There is a single
208   instance of the Server Characteristic Configuration for all clients.
209   See Volume 3, Part G, section 3.3.3.4 for more information.
210
211   Priority: Low
212   Complexity: C1
213
214 - Long write is not implemented. Attribute server, client and command line
215   tool shall be changed to support this feature.
216
217   Priority: Low
218   Complexity: C2
219
220 - Define attribute server API. External applications needs to register,
221   change attributes and to be notified about changes. Example: Proximity,
222   Time and Alert Profiles. "Local Service hierarchy" in the attribute-api
223   needs to be proposed and a RFC shall be sent to the ML.
224
225   Priority: Low
226   Complexity: C2
227
228 Management Interface
229 ====================
230
231 - Device discovery support (both for BR/EDR & LE)
232
233   Priority: High
234   Complexity: C3
235
236 - EIR generation support
237
238   Priority: High
239   Complexity: C2
240
241 - Blacklist support
242
243   Priority: Medium
244   Complexity: C1
245
246 - mgmt_set_fast_connectable
247
248   Priority: Medium
249   Complexity: C1
250
251 - Whitelist support (initially only for LE)
252
253   Priority: Medium
254   Complexity: C2