| 39 | |
| 40 | '''Overview:''' |
| 41 | |
| 42 | Bluetooth is wireless low-power network stack. The target is implement Bluetooth 2.0, although the major differences between 2.0 and 1.1 are in the HW specs. |
| 43 | The Project has been divided in 3 phases. The specifications document for Bluetooth, depending its version, very between 1200 and 1500 pages which |
| 44 | covers phase 1 and 2 plus hardware device specifications. |
| 45 | |
| 46 | The development of the stack will be done keeping an eye to another operating systems, such as Linux and FreeBSD bluetooth kernel land implementations. And MacOS for the user land integration, and SymbianOS or JSR-82 for the possible bluetooth kit. |
| 47 | |
| 48 | The reading specs process can be mostly skipped, although is being using as well as other OS source code as consulting material. All non started parts are still to be designed before implementation |
| 49 | |
| 50 | Troubleshooting:[[BR]] |
| 51 | 1. Strong dependency with Haiku network stack, which is making hard to keep the development in R5. With the self compiling problem that it implies.[[BR]] |
| 52 | 2. Hardware availability(2 dongle(1damaged), 1 telephone, 2 PCMCIA)[[BR]] |
| 53 | |
| 54 | |
| 55 | As many of you know from my blog, the project started from scratch with some success. |
| 56 | |
| 57 | |
| 58 | Technical Info: |
| 59 | |
| 60 | '''Phase 1: Base Stack:''' |
| 61 | |
| 62 | In this phase the intention would be give a a base for further development, user feedback of the technology and real communication. |
| 63 | |
| 64 | In an overview provide: |
| 65 | * Physical layer of the architecture[[BR]] |
| 66 | * User interaction for managing with devices local & remote(discovery, pairing, properties)[[BR]] |
| 67 | * Connection oriented / Connectionless services through L2CAP[[BR]] |
| 68 | |
| 69 | H2: USB Transport driver (Commands/Events/ACL) 90%[[BR]] |
| 70 | |
| 71 | HCI: |
| 72 | * Core layer 80%[[BR]] |
| 73 | * Userland interface(ioctls/rawsocket) 70%[[BR]] |
| 74 | * Managing tools(bluetoot_server, bluetooth kit) 70%[[BR]] |
| 75 | |
| 76 | L2CAP: |
| 77 | * (core protocol/sockets) 65%[[BR]] |
| 78 | |
| 79 | Milestones: |
| 80 | 1. Real comunication with the driver (27/09/07)[[BR]] |
| 81 | 2. Stack allowing devices to discover the Haiku node (17/03/08)[[BR]] |
| 82 | 3. Stack allowing discover remote devices through an inquiry process (19/04/08)[[BR]] |
| 83 | 4. Stack handling correctily a pairing process between 2 devices (23/07/08)[[BR]] |
| 84 | 5. L2CAP connection-oriented channels (23/11/08)[[BR]] |
| 85 | 6. L2CAP connection-less channels (23/11/08) (no device available for testing)[[BR]] |
| 86 | |
| 87 | '''Phase 2: Basic Stack:''' |
| 88 | |
| 89 | The intention of this phase would be complete the stack, and let all prepared for the 3rd phase. |
| 90 | |
| 91 | H2: USB Transport driver (SCO) |
| 92 | |
| 93 | HCI: |
| 94 | * SCO interface[[BR]] |
| 95 | * Managing tools(SDP server & client)[[BR]] |
| 96 | |
| 97 | RFCOMM: (core protocol/sockets) |
| 98 | |
| 99 | |
| 100 | '''Phase 3: Upper Protocols, Profiles and Applications:''' |
| 101 | |
| 102 | Bluetooth profiles define how the bluetooth technology functionality is used, while the protocols is the implementation of the technology. |
| 103 | An overview of all these functionalities: |
| 104 | http://bluetooth.com/Bluetooth/Technology/Works/Profiles_Overview.htm |
| 105 | |
| 106 | Approximately, the specifications for each of these profiles do not go beyond the 100 pages. So Individuals could implement easily one of those functionalities. |
| 107 | |
| 108 | '''Bluetooth Identified tasks:''' |
| 109 | |
| 110 | Haiku Bluetooth Stack implements basic functionality on lower and middle layers, this functionality needs to be completed and all Bluetooth 2.X possibilities explored. |
| 111 | |
| 112 | Requirement: Bluetooth enabled Haiku system |
| 113 | |
| 114 | Skill set: C++ kernel development, userland development, overview bluetooth stack knowledge(optional) |
| 115 | |
| 116 | * New Tasks: |
| 117 | * RemoteDevices Database |
| 118 | * Implement RemoteDevice Archivability (Code-In) |
| 119 | * Manage server existence depending of LocalDevices (Code-In) |
| 120 | * Fixes: |
| 121 | * Fix monitoring of incoming LocalDevices(USB) |
| 122 | * LocalDevices allocation/leaking LocalDevice::GetLocalDevice |
| 123 | * Wrong Create Connection parameters(paging) for Bluetooth 2.X |
| 124 | * Improvements |
| 125 | * UI |
| 126 | * Improve Deskbar Addon |
| 127 | * Improve PinCode Window, move to kit? (Code-In) |
| 128 | * Improve Incomming connection Window, move to kit? (Code-In) |
| 129 | * Add Remaining Features in DeviceView |
| 130 | * Put non relevant information under a ToolTip (Code-In) |
| 131 | * Functionality |
| 132 | * UserLand tools(Preferences) |
| 133 | * Retrieve Discovery and DevClass (other settings?) in Startup (Code-In) |
| 134 | * Store information |
| 135 | * Window position |
| 136 | * Default LocalDevice |
| 137 | * Settings (Inquiry time, Policy) |
| 138 | * WriteLocal name to devices |
| 139 | * Pairing/Auth/Encryption use cases ... |
| 140 | |
| 141 | Bluetooth UI Requirements[[BR]] |
| 142 | Server Classes:[[BR]] |
| 143 | |
| 144 | PincodePanel (implemented)[[BR]] |
| 145 | ConnectionPanel (implemented)[[BR]] |
| 146 | Deskbar Applet (implemented)[[BR]] |
| 147 | |
| 148 | User Classes: |
| 149 | |
| 150 | LocalDeviceView: View that shows a LocalDevice (implemented) |
| 151 | * Icon with the type of device (from device class) |
| 152 | * BDADDR |
| 153 | * FriendlyName |
| 154 | * … |
| 155 | * HCIDelegate Control Flow |
| 156 | * l2cap make sched connection to use portListener |
| 157 | * addtoExpected → protect |
| 158 | |
| 159 | InquiryPanel: Window to perform a discovery of devices |
| 160 | |
| 161 | Preferences: |
| 162 | * Connections & Channels List |
| 163 | |
| 164 | Table Of Devices (Archived RemoteDevices classes) (to be reviewed): |
| 165 | * Known devices |
| 166 | * Trusted devices |
| 167 | * Blocked devices |
| 168 | * Connected Devices |
| 169 | |
| 170 | ExtendedLocalDeviceView |
| 171 | * Set LocalName |
| 172 | * View LinkKeys |
| 173 | |
| 174 | General settings (implemented): |
| 175 | * Connections acceptation policy |
| 176 | * Identify current host as... (set localDeviceClass) |
| 177 | * Start/Stop server |
| 178 | * Show debug window |
| 179 | * About |
| 180 | |
| 181 | Device-specific settings: |
| 182 | * Enable/disable device |
| 183 | * Enable/disable services |
| 184 | |
| 185 | Documentation[[BR]] |
| 186 | AFAIR in the software layers point of view there were not important changes from 1.2 until 4.0. Most of them were focused in the physical layers. |
| 187 | |
| 188 | |
| 189 | Currently on the Kernel area there is the L2CAP[1] and HCI[5] implementations and there is the HCI transport protocol H2[2] (hardware support for usb dongles). |
| 190 | In the userland area we have the bluetooth_server[3] which interfaces with the kernel. Then there is a kit[4] which provides an API for applications development.[[BR]] |
| 191 | Currently the best example of an application using this API would be the bluetooth preferences[6].[[BR]] |
| 192 | [1]http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/kernel/network/protocols/l2cap[[BR]] |
| 193 | [2]http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/kernel/drivers/bluetooth/h2/h2generic[[BR]] |
| 194 | [3]http://dev.haiku-os.org/browser/haiku/trunk/src/servers/bluetooth[[BR]] |
| 195 | [4]http://dev.haiku-os.org/browser/haiku/trunk/src/kits/bluetooth[[BR]] |
| 196 | [5]http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/kernel/bluetooth[[BR]] |
| 197 | [6]http://dev.haiku-os.org/browser/haiku/trunk/src/preferences/bluetooth[[BR]] |