blob: b52277fae089d1df8acf91adb088f83df599cb36 [file] [log] [blame]
@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