Difference between revisions of "Bluetooth Driver services"
Line 560: | Line 560: | ||
Takes a type-0xA output buffer, returns an output [[#BleEventType]]. | Takes a type-0xA output buffer, returns an output [[#BleEventType]]. | ||
− | This copies 0x400-bytes from state to the output buffer, and copies the [[#BleEventType]] from state to output. This also resets the state which was used for the outbuf-copy. | + | This copies 0x400-bytes from state to the output buffer, and copies the [[#BleEventType]] from state to output. This also resets the state which was used for the outbuf-copy. Once finished, this signals an event. |
== RegisterBleHidEvent == | == RegisterBleHidEvent == | ||
Line 636: | Line 636: | ||
== GetLeEventInfo == | == GetLeEventInfo == | ||
Takes a PID, a type-0xA output buffer, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#BleEventType]]. | Takes a PID, a type-0xA output buffer, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#BleEventType]]. | ||
+ | |||
+ | This is identical to [[#GetLeHidEventInfo]] except different state is used. | ||
== RegisterBleEvent == | == RegisterBleEvent == |
Revision as of 21:29, 10 July 2020
btdrv
This is "nn::bluetooth::IBluetoothDriver".
The bluetooth driver implements the bluetooth protocol over h4/uart.
It interfaces with the uart service to actually talk with the bluetooth hardware.
The code seems to be derived from a broadcom stack. A good starting point for similar source code can be found in the MICO project: https://github.com/yinhongxing/mico/tree/ea67ff3659f12d730d4dc3b8d547b093bd2ee2ee/MICO/bluetooth_bte Note that the library files contain many (symbolized) functions which match btdrv.
Support for "nn::bluetooth::*" was added to sdknso with 6.x.
Various cmdids were moved with [4.0.0+] and [5.0.0+].
InitializeBluetoothDriver
No input/output.
This is the first cmd used during service init.
InitializeBluetooth
No input, returns an output Event handle with EventClearMode=1.
EnableBluetooth
No input/output.
DisableBluetooth
No input/output.
FinalizeBluetooth
No input/output.
GetAdapterProperties
Takes a type-0x1A output buffer containing an #AdapterProperty.
GetAdapterProperty
Takes an input #BluetoothPropertyType and a type-0xA output buffer.
SetAdapterProperty
Takes an input #BluetoothPropertyType and a type-0x9 input buffer.
StartInquiry
No input/output.
StopInquiry
No input/output.
CreateBond
Takes an input #Address and a type-0x19 input buffer containing a #TransportType, no output.
[9.0.0+] Now only takes an #Address and a #TransportType without a buffer, no output.
RemoveBond
Takes an input #Address, no output.
CancelBond
Takes an input #Address, no output.
RespondToPinRequest
Takes an input #Address, a bool, an u8, a #BluetoothPinCode, no output.
sdknso uses an user-specified s32 for the u8.
RespondToSspRequest
Takes an input #Address, a #BluetoothSspVariant, a bool, an u32, no output.
GetEventInfo
Takes a type-0xA output buffer and returns an output #EventType.
InitializeHid
Takes an input u16, returns an output Event with EventClearMode=1.
Originally sdknso used an user-specified value for the u16, however with [9.0.0+] it uses hard-coded value 0x1 instead.
OpenHidConnection
Takes an input #Address, no output.
CloseHidConnection
Takes an input #Address, no output.
HidSendData
Takes an input #Address and a type-0x19 input buffer containing a #HidData, no output.
WriteHidData
Takes an input #Address and a type-0x19 input buffer containing a #HidReport, no output.
WriteHidData2
Takes an input #Address and a type-0x9 input buffer, no output.
This is internally the same as #WriteHidData, with the input buffer being directly passed to the funcptr instead of a tmp copy of the input #HidReport.
HidSetReport
Takes an input #Address, a #BluetoothHhReportType, a type-0x19 input buffer containing a #HidData, no output.
SetHidReport
Takes an input #Address, a #BluetoothHhReportType, a type-0x19 input buffer containing a #HidReport, no output.
GetHidReport
Takes an input #Address, an u8, a #BluetoothHhReportType, no output.
HidWakeController
Takes an input #Address, no output.
TriggerConnection
Takes an input #Address and an u16, no output.
AddPairedDeviceInfo
Takes a type-0x19 input buffer containing BluetoothDevicesSettings, no output.
GetPairedDeviceInfo
Takes an input #Address and a type-0x1A output buffer containing BluetoothDevicesSettings.
FinalizeHid
No input/output.
GetHidEventInfo
Takes a type-0xA output buffer, returns an output #HidEventType.
This copies 0x480-bytes from state to the output buffer. #HidEventType is set to: stateval!=0 ? 7 : 0.
SetTsi
Takes an input #Address and an u8, no output.
EnableBurstMode
Takes an input #Address and a bool, no output.
SetZeroRetransmission
Takes an input #Address and a type-0x9 input buffer containing an array of u8s, no output.
EnableMcMode
Takes an input bool, no output.
EnableLlrScan
No input/output.
DisableLlrScan
No input/output.
EnableRadio
Takes an input bool, no output.
SetVisibility
Takes two input bools, no output.
EnableTbfcScan
Takes an input bool, no output.
RegisterHidReportEvent
No input, returns an output Event handle with EventClearMode=1.
GetHidReportEventInfo
No input, takes a type-0xA output buffer and returns a #HidEventType.
[7.0.0+] No longer takes a buffer or returns output, now returns an output sharedmem handle. sdknso maps this with size=0x3000 and permissions=RW-.
Originally this was used in a dedicated sdknso func, with [7.0.0+] this is now used at the start of the sdknso impl for #RegisterHidReportEvent if the above sharedmem was not mapped yet.
The [7.0.0+] GetHidReportEventInfo sdknso func loads data using the above sharedmem.
GetLatestPlr
Takes a type-0x16 output buffer containing a #PlrList ([1.0.0-8.1.1] #PlrStatistics).
GetPendingConnections
No input/output.
GetChannelMap
Takes a type-0x16 output buffer containing a #ChannelMapList.
EnableTxPowerBoostSetting
Takes an input bool, no output.
IsTxPowerBoostSettingEnabled
No input, returns an output bool.
sdknso sets the tmpout_bool to 1, and uses that with the cmd. The sdknso func directly returns tmpout_bool, errors from the cmd are ignored.
EnableAfhSetting
Takes an input bool, no output.
IsAfhSettingEnabled
sdknso sets the tmpout_bool to 1, and uses that with the cmd. The sdknso func directly returns tmpout_bool, errors from the cmd are ignored.
InitializeBle
No input, returns an output Event handle with EventClearMode=1.
EnableBle
No input/output.
DisableBle
No input/output.
FinalizeBle
No input/output.
SetBleVisibility
Takes two input bools, no output.
SetLeConnectionParameter
Takes a #LeConnectionParams, no output.
SetBleConnectionParameter
Takes an input #Address, a bool, a #BleConnectionParameter, no output.
SetLeDefaultConnectionParameter
Takes a #LeConnectionParams, no output.
SetBleDefaultConnectionParameter
Takes a #BleConnectionParameter, no output.
SetBleAdvertiseData
Takes an input #BleAdvertisePacketData, no output.
SetBleAdvertiseParameter
Takes an input #Address, two u16s, no output.
StartBleScan
No input/output.
StopBleScan
No input/output.
AddBleScanFilterCondition
Takes a type-0x19 input buffer containing a #BleAdvertiseFilter, no output.
DeleteBleScanFilterCondition
Takes a type-0x19 input buffer containing a #BleAdvertiseFilter, no output.
DeleteBleScanFilter
Takes an input u8, no output.
Originally the sdknso func used an u8 for the user-specified param, with [9.0.0+] it's a s32.
ClearBleScanFilters
No input/output.
EnableBleScanFilter
Takes an input bool, no output.
RegisterGattClient
Takes an input #GattAttributeUuid, no output.
UnregisterGattClient
Takes an input u8, no output.
UnregisterAllGattClients
No input/output.
ConnectGattServer
Takes an input u8, an #Address, a bool, an AppletResourceUserId, no output.
CancelConnectGattServer
Takes an input u8, an #Address, a bool, no output.
DisconnectGattServer
Takes an input u32, no output.
GetGattAttribute
Takes an #Address and an u32, no output.
[9.0.0+] Now takes an input u32, no output.
GetGattService
Takes an input u32 and a #GattAttributeUuid, no output.
ConfigureAttMtu
Takes an input u16 and u32, no output.
RegisterGattServer
Takes an input #GattAttributeUuid, no output.
UnregisterGattServer
Takes an input u8, no output.
ConnectGattClient
Takes an input u8, an #Address, a bool, no output.
LeServerDisconnect
Takes an input u8, an #Address, no output.
DisconnectGattClient
Takes an input u8, no output.
AddGattService
Takes an input u8, an u8, a bool, a #GattAttributeUuid, no output.
Originally sdknso used an user-specified u8 for the second u8, with [9.0.0+] that func param is now a s32.
EnableGattService
Takes an input u8, a #GattAttributeUuid, no output.
AddGattCharacteristic
Takes an input u8, an u8, an u16, a #GattAttributeUuid, a #GattAttributeUuid, no output.
AddGattDescriptor
Takes an input u8, an u16, a #GattAttributeUuid, a #GattAttributeUuid, no output.
GetBleManagedEventInfo
Takes a type-0xA output buffer, returns an output #BleEventType.
This copies 0x400-bytes from state to the output buffer, and copies the #BleEventType from state to output.
GetGattFirstCharacteristic
Takes an input bool, an u32, a #GattId, a #GattAttributeUuid, returns an output u8 and #GattId.
GetGattNextCharacteristic
Takes an input bool, an u32, a #GattId, a #GattId, a #GattAttributeUuid, returns an output u8 and #GattId.
GetGattFirstDescriptor
Takes an input bool, an u32, a #GattId, a #GattId, a #GattAttributeUuid, returns an output #GattId.
GetGattNextDescriptor
Takes an input bool, an u32, a #GattId, a #GattId, a #GattId, a #GattAttributeUuid, returns an output #GattId.
RegisterGattManagedDataPath
Takes an input #GattAttributeUuid, no output.
UnregisterGattManagedDataPath
Takes an input #GattAttributeUuid, no output.
RegisterGattHidDataPath
Takes an input #GattAttributeUuid, no output.
UnregisterGattHidDataPath
Takes an input #GattAttributeUuid, no output.
RegisterGattDataPath
Takes an input #GattAttributeUuid, no output.
UnregisterGattDataPath
Takes an input #GattAttributeUuid, no output.
ReadGattCharacteristic
Takes an input bool, an u8, an u32, a #GattId, a #GattId, no output.
ReadGattDescriptor
Takes an input bool, an u8, an u32, a #GattId, a #GattId, a #GattId, no output.
WriteGattCharacteristic
Takes a type-0x9 input buffer, a bool, an u8, a bool, an u32, a #GattId, a #GattId, no output.
WriteGattDescriptor
Takes a type-0x9 input buffer, a bool, an u8, an u32, a #GattId, a #GattId, a #GattId, no output.
RegisterGattNotification
Takes an input bool, an u32, a #GattId, a #GattId, no output.
UnregisterGattNotification
Takes an input bool, an u32, a #GattId, a #GattId, no output.
GetLeHidEventInfo
Takes a type-0xA output buffer, returns an output #BleEventType.
This copies 0x400-bytes from state to the output buffer, and copies the #BleEventType from state to output. This also resets the state which was used for the outbuf-copy. Once finished, this signals an event.
RegisterBleHidEvent
No input, returns an output Event handle with EventClearMode=1.
SetBleScanParameter
Takes two input u16s, no output.
MoveToSecondaryPiconet
Takes an input #Address, no output.
IsManufacturingMode
No input, returns an output bool.
EmulateBluetoothCrash
Takes an input #FatalReason, no output.
sdknso masks the FatalReason with an u16-mask before passing it to the cmd.
GetBleChannelMap
Takes a type-0x16 output buffer containing a #ChannelMapList.
bt
This is "nn::bluetooth::IBluetoothUser".
LeClientReadCharacteristic
Takes a PID, a bool, an u8, an u32, a #GattId, a #GattId, an AppletResourceUserId, no output.
LeClientReadDescriptor
Takes a PID, a bool, an u8, an u32, a #GattId, a #GattId, a #GattId, an AppletResourceUserId, no output.
LeClientWriteCharacteristic
Takes a PID, a type-0x9 input buffer, a bool, an u8, a bool, an u32, a #GattId, a #GattId, an AppletResourceUserId, no output.
LeClientWriteDescriptor
Takes a PID, a type-0x9 input buffer, a bool, an u8, an u32, a #GattId, a #GattId, a #GattId, an AppletResourceUserId, no output.
LeClientRegisterNotification
Takes a PID, an input bool, an u32, a #GattId, a #GattId, an AppletResourceUserId, no output.
LeClientDeregisterNotification
Takes a PID, an input bool, an u32, a #GattId, a #GattId, an AppletResourceUserId, no output.
SetLeResponse
Takes a PID, a type-0x9 input buffer, an u8, a #GattAttributeUuid, a #GattAttributeUuid, an AppletResourceUserId, no output.
LeSendIndication
Takes a PID, a type-0x9 input buffer, an u8, a bool, a #GattAttributeUuid, a #GattAttributeUuid, an AppletResourceUserId, no output.
GetLeEventInfo
Takes a PID, a type-0xA output buffer, an AppletResourceUserId, returns an output #BleEventType.
This is identical to #GetLeHidEventInfo except different state is used.
RegisterBleEvent
Takes a PID, an AppletResourceUserId, returns an output Event handle with EventClearMode=1.
BluetoothPropertyType
This is u32 enum "nn::bluetooth::BluetoothPropertyType".
TransportType
This is u32 enum "nn::bluetooth::TransportType".
BluetoothSspVariant
This is u8 enum "nn::bluetooth::BluetoothSspVariant".
EventType
This is u32 enum "nn::bluetooth::EventType".
BluetoothHhReportType
This is u32 enum "nn::bluetooth::BluetoothHhReportType".
HidEventType
This is u32 enum "nn::bluetooth::HidEventType".
BleEventType
This is u32 enum "nn::bluetooth::BleEventType".
FatalReason
This is u32 enum "nn::bluetooth::FatalReason".
AdapterProperty
This is "nn::bluetooth::AdapterProperty". This is a 0x103-byte struct.
Address
This is "nn::bluetooth::Address". This is a 0x6-byte struct with 1-byte alignment.
BluetoothPinCode
This is "nn::bluetooth::BluetoothPinCode". This is a 0x10-byte struct with 1-byte alignment.
HidData
This is "nn::bluetooth::HidData". This is a 0x282-byte struct.
HidReport
This is "nn::bluetooth::HidReport". This is a 0x2BE-byte struct.
PlrStatistics
This is "nn::bluetooth::PlrStatistics". This is a 0x84-byte struct.
PlrList
This is "nn::bluetooth::PlrList". This is a 0xA4-byte struct.
ChannelMapList
This is "nn::bluetooth::ChannelMapList". This is a 0x88-byte struct.
LeConnectionParams
This is "nn::bluetooth::LeConnectionParams". This is a 0x14-byte struct with 2-byte alignment.
BleConnectionParameter
This is "nn::bluetooth::BleConnectionParameter". This is a 0xC-byte struct with 2-byte alignment.
BleAdvertisePacketData
This is "nn::bluetooth::BleAdvertisePacketData" ([5.0.0-8.1.1] "nn::bluetooth::LeAdvertiseData"). This is a 0xCC-byte struct.
BleAdvertiseFilter
This is "nn::bluetooth::BleAdvertiseFilter". This is a 0x3E-byte struct.
GattAttributeUuid
This is "nn::bluetooth::GattAttributeUuid". This is a 0x14-byte struct with 4-byte alignment.
GattId
This is "nn::bluetooth::GattId". This is a 0x18-byte struct with 4-byte alignment.