| @startuml |
| |
| !include template.plantuml |
| |
| title "Chrome OS Bluetooth architecture" |
| |
| package "Chrome" as chrome { |
| package cras { |
| object hfp |
| } |
| object system /' UI etc... '/ |
| object webBluetooth |
| |
| webBluetooth -down-> system |
| } |
| |
| package "ARC++" as arc { |
| } |
| |
| /' Storage locations for keys and caches '/ |
| database "File System" as storage { |
| } |
| |
| package "BlueZ" as bluezuser { |
| package "bluetoothd" as bluetoothd { |
| package "Dbus Interfaces" as dbus { |
| /' ... generally means there are multiple related interfaces '/ |
| object org.BlueZ.Adapter1 |
| object "org.BlueZ.Agent..." as org.BlueZ.Agent |
| object "org.BlueZ.LEAdvertisement..." as org.BlueZ.LEAdvertisement |
| object org.BlueZ.Battery1 |
| object org.BlueZ.Device1 |
| object "org.BlueZ.Gatt..." as org.BlueZ.Gatt |
| object org.BlueZ.Input1 |
| object "org.BlueZ.Media..." as org.BlueZ.Media |
| object "org.BlueZ.Profile..." as org.BlueZ.Profile |
| } |
| |
| object att |
| object gatt |
| object sdp |
| object adapter |
| object agent |
| object device |
| object profile_manager |
| object advertising |
| |
| package "profiles" as profiles { |
| package "Input" as input { |
| object hid |
| object hogp |
| } |
| |
| object gap |
| object battery |
| object scanparam |
| |
| object a2dp |
| object avrcp |
| |
| hogp -down-> scanparam |
| hogp -down-> battery |
| } |
| |
| org.BlueZ.Adapter1 -down-> adapter |
| org.BlueZ.Agent -down-> agent |
| org.BlueZ.Profile -down-> profile_manager |
| org.BlueZ.Battery1 -down-> battery |
| org.BlueZ.Device1 -down-> device |
| org.BlueZ.Gatt -down-> gatt |
| org.BlueZ.Media -down-> avrcp |
| org.BlueZ.Media -down->a2dp |
| org.BlueZ.LEAdvertisement -down-> advertising |
| org.BlueZ.Input1 -down-> input |
| |
| profile_manager -down-> profiles |
| profile_manager -down-> device |
| |
| agent -down-> adapter |
| device -down-> adapter |
| |
| hogp -down-> gatt |
| battery -down-> gatt |
| scanparam -down-> gatt |
| |
| gatt -down-> att |
| } |
| } |
| |
| package "Linux Kernel (net/bluetooth)" as bluezkernel { |
| |
| package "sockets" as sockets { |
| object BTPROTO_L2CAP |
| object BTPROTO_SCO |
| object BTPROTO_RFCOMM |
| |
| object BTPROTO_HIDP |
| object BTPROTO_HCI |
| } |
| |
| object Smp |
| object Rfcomm |
| object L2cap |
| object HidP |
| |
| object mgmt |
| object Hci |
| |
| BTPROTO_L2CAP -down-> L2cap |
| BTPROTO_RFCOMM -down-> Rfcomm |
| BTPROTO_HIDP -down-> HidP |
| BTPROTO_HCI -down-> Hci |
| BTPROTO_HCI -down-> mgmt |
| |
| mgmt -down-> Hci |
| mgmt -down-> Smp |
| Smp -down-> L2cap |
| Rfcomm -down-> L2cap |
| L2cap -down-> Hci |
| } |
| |
| package "Linux Kernel (drivers/bluetooth)" as kernel_drivers { |
| object vendorDrivers |
| } |
| |
| /' ARC mostly just dependends on the Bluetooth Bridge '/ |
| arc -down-> system |
| |
| /' Chrome Bluetooth Bridge dependencies '/ |
| system -down-> org.BlueZ.Adapter1 |
| system -down-> org.BlueZ.Device1 |
| system -down-> org.BlueZ.Agent |
| system -down-> org.BlueZ.Battery1 |
| system -down-> BTPROTO_RFCOMM |
| |
| /' Cras dependencies '/ |
| cras -down-> org.BlueZ.Media |
| cras -down-> BTPROTO_SCO |
| |
| /' Protocol dependencies '/ |
| sdp -down-> BTPROTO_L2CAP |
| att -down-> BTPROTO_L2CAP |
| a2dp -down-> BTPROTO_L2CAP |
| |
| /' Profile dependencies '/ |
| gap -down-> BTPROTO_HCI |
| |
| hid -down-> sdp |
| hid -down-> BTPROTO_L2CAP |
| hid -down-> BTPROTO_HIDP |
| hogp -down-> BTPROTO_HIDP |
| |
| avrcp -down-> BTPROTO_L2CAP |
| |
| hfp -down-> BTPROTO_RFCOMM |
| |
| /' Storage dependencies '/ |
| gatt -down-> storage /' Gatt database cache '/ |
| sdp -down-> storage /' Sdp database cache '/ |
| adapter -down-> storage /' Device association '/ |
| |
| adapter -down-> BTPROTO_HCI |
| advertising -down-> BTPROTO_HCI |
| |
| Hci -down-> vendorDrivers |
| |
| @enduml |