TODO 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. Background
  2. ==========
  3. - Priority scale: High, Medium and Low
  4. - Complexity scale: C1, C2, C4 and C8. The complexity scale is exponential,
  5. with complexity 1 being the lowest complexity. Complexity is a function
  6. of both task 'complexity' and task 'scope'.
  7. The general rule of thumb is that a complexity 1 task should take 1-2 weeks
  8. for a person very familiar with BlueZ codebase. Higher complexity tasks
  9. require more time and have higher uncertainty.
  10. Higher complexity tasks should be refined into several lower complexity tasks
  11. once the task is better understood.
  12. General
  13. =======
  14. - UUID handling: Use the new functions created for UUID handling in all parts
  15. of BlueZ code. Currently, the new bt_uuid_* functions are being used by
  16. GATT-related code only.
  17. Priority: high
  18. Complexity: C4
  19. - Update PBAP client/server implementation to 1.2 and create necessary APIs for
  20. new features it introduces.
  21. Priority: Medium
  22. Complexity: C4
  23. - Create GOEP unit tests based on its test specification:
  24. https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=230559
  25. Priority: Medium
  26. Complexity: C2
  27. - Function in src/adapter.c to convert old storage files to new ini-file format
  28. should be removed 6-8 months after first BlueZ 5 release.
  29. Priority: Low
  30. Complexity: C1
  31. - Remove usage of symlinks for drivers, such as profiles/input/suspend.c and
  32. profiles/sap/sap.c. Instead, select drivers at runtime by using config
  33. options or probing for running D-Bus services (using e.g.
  34. g_dbus_add_service_watch()). Idea first mentioned on
  35. http://thread.gmane.org/gmane.linux.bluez.kernel/30175/focus=30190.
  36. - Reuse connection handling code of src/profile.c also for built-in profiles
  37. so plugins would only need to register their btd_profile and the core takes
  38. care of the rest including listen to the right channel and manages the sdp
  39. record. Once btd_profile manages the connection it can also notify about
  40. their state, this probably remove the need of having callbacks to
  41. .connect/.disconnect since their state can be tracked, it also enables any
  42. plugin to track any profile state change which can be useful for e.g.
  43. a connection policy plugin in case one is needed.
  44. Priority: Low
  45. Complexity: C2
  46. - Add queueing support for src/agent.c, currently if there is any request
  47. pending the code fail with error EBUSY which is very inconvenient.
  48. Priority: Low
  49. Complexity: C2
  50. Low Energy
  51. ==========
  52. - Connection modes. Adapter interface needs to be changed to manage
  53. connection modes and adapter type. See Volume 3, Part C, section 9.3.
  54. 1. Mode management: Peripheral / Central
  55. Priority: Medium
  56. Complexity: C2
  57. - Advertising data. The D-Bus interface needs to be updated to enable setting
  58. scan response data, and to read the advertising and scan response data which
  59. has been broadcast from other LE devices.
  60. Priority: Medium
  61. Complexity: C2
  62. - Static random address setup and storage. Once this address is written
  63. in a given remote, the address can not be changed anymore.
  64. Priority: Low
  65. Complexity: C1
  66. - Device Name Characteristic is a GAP characteristic for Low Energy. This
  67. characteristic shall be integrated/used in the discovery procedure. The
  68. idea is to report the value of this characteristic using DeviceFound signals.
  69. Discussion with the community is needed before to start this task. Other GAP
  70. characteristics for LE needs to follow a similar approach. It is not clear
  71. if all GAP characteristics can be exposed using properties instead of a primary
  72. service characteristics.
  73. See Volume 3, Part C, section 12.1 for more information.
  74. Priority: Low
  75. Complexity: C2
  76. ATT/GATT (new shared stack)
  77. ===========================
  78. - Add complete GATT test coverage in unit/test-gatt following the GATT test
  79. spec. This could use shared/gatt-client and shared/gatt-server at the same
  80. time to test both against eachother. We should definitely have tests for
  81. gatt-server and gatt-client simultaneously on one side of the connection.
  82. Priority: High
  83. Complexity: C4
  84. - Write an example using client D-Bus API using C.
  85. Priority: High
  86. Complexity: C2
  87. - Write an example using client D-Bus API using python.
  88. Priority: High
  89. Complexity: C2
  90. - Define packed structs for ATT protocol PDUs in shared/att-types to improve
  91. readability. We should probably do this once there are extensive unit tests
  92. for gatt-client/gatt-server so that we don't accidentally break working code.
  93. Priority: Medium
  94. Complexity: C2
  95. - Use struct iovec to pass around byte buffers that will be sent over the wire,
  96. instead of passing uint8_t and size_t parameters everywhere.
  97. Priority: Medium
  98. Complexity: C1
  99. - Move all daemon plugins and profiles that are GATT based to use
  100. shared/gatt-client instead of attrib/*. This is a complicated task that
  101. potentially needs a new plugin/profile probing interface and a lot of
  102. rewriting that can cause regressions in existing functionality.
  103. Priority: Medium
  104. Complexity: C4
  105. - Introduce a way for shared/gatt-server to check security permissions on the
  106. current connection through bt_att.
  107. Priority: Medium
  108. Complexity: C2
  109. - Implement other low-priority ATT protocol operations for shared/gatt-server:
  110. Read Multiple Request
  111. Priority: Low
  112. Complexity: C1
  113. - Send out indications from the "Service Changed" characteristic upon
  114. reconnection if a bonded device is not connected when the local database is
  115. modified.
  116. Priority: High
  117. Complexity: C2
  118. - Unify the GATT server and client D-Bus implementations into a single module.
  119. While these don't share a lot of code, keeping them all in src/gatt-dbus seems
  120. to make more sense from an organizational perspective.
  121. Priority: Low
  122. Complexity: C1
  123. - Isolate all GATT code inside the daemon into its own module and perform
  124. interaction with other modules (e.g. src/device.c) via callbacks. This
  125. includes client/server management, tracking incoming/outgoing connections for
  126. ATT, and callbacks to perform profile probing.
  127. Priority: Low
  128. Complexity: C4
  129. - Support included services in the GATT D-Bus client API.
  130. Priority: Medium
  131. Complexity: C1
  132. Management Interface
  133. ====================
  134. Mesh
  135. ====
  136. - Add unit tests
  137. Priority: High
  138. Complexity: C1
  139. - Implement unified feature management mechanism for mesh nodes that are hosted
  140. on the same device
  141. Priority: Medium
  142. Complexity: C2
  143. - Implement mandatory Health Server model. Most likely, this will involve
  144. additions to mesh D-Bus API
  145. Priority: Medium
  146. Complexity: C2
  147. - Add support for GATT proxy server
  148. Priority: Low
  149. Complexity: C4
  150. - Merge common functionality from tools/mesh. Ideally, source code from the
  151. tools/mesh directory should completely dissapear.
  152. Priority: Low
  153. Complexity: C2
  154. - Support for Low Power Node (LPN)
  155. Priority: Low
  156. Complexity: C4