Bluetooth Driver services: Difference between revisions
Line 254: | Line 254: | ||
This is used by [[BTM_services|btm]]. | This is used by [[BTM_services|btm]]. | ||
This first calls an interface funcptr, on failure 0xCA71 is returned. | |||
A global fixed [[#Address]] is copied to stack, this stack data is then overwritten with the output from [[Settings_services|GetBluetoothBdAddress]]. If GetBluetoothBdAddress fails, this will Abort. Then the same funcptr used by [[#SetAdapterProperty]] is called with this stack data, with [[#BluetoothPropertyType|type2]]. A converted error is returned if needed. | |||
The last two bytes of the stack [[#Address]] are inverted (byteval = ~byteval), then the above funcptr is called with this for [[#BluetoothPropertyType|type3]]. Error conversion is handled if needed, then this returns 0. | |||
The first funcptr called above does the following: | |||
* Calls a GPIO func with param=0, [[SVC|sleeps]] for 10000000 nanoseconds, then calls the GPIO func again with param=1. | |||
* Calls a func for initializing the paired-devices table (empty). | |||
* Calls a modified version of BSA_Boot, which handles BSA server initialization. | |||
* Calls a func which uses <code>nn::os::InitializeEvent</code> and <code>nn::os::InitializeMutex</code> with global state. | |||
* Calls a func which handles BSA client initialization. This also sends a message to another thread for enabling bluetooth (which updates the interface funcptr tables, etc). | |||
* Calls a func which enables HID-Host with BSA, and opens the UIPC channel where the registered funcptr is used for writing HID DATA [[#GetHidReportEventInfo|reports]] which were received. | |||
* Calls a func which initializes global state and uses the BSA API for initializing Security. | |||
* If the output flag from [[Settings_services#GetBluetoothBoostEnableFlag|GetBluetoothBoostEnableFlag]] is set, a func is called. | |||
* If the output flag from [[Settings_services#GetBluetoothAfhEnableFlag|GetBluetoothAfhEnableFlag]] is not set, a func is called. | |||
The GPIO func does the following: | |||
* Initializes the [[Bus_services|gpio]] service. | |||
* Uses [[Bus_services#OpenSession|OpenSession]] with value 0x03 (BtRst). | |||
* Uses SetDirection with value 0x1. | |||
* Uses SetValue with the param which was passed to this func. | |||
* Does cleanup for the session object and exits the service. | |||
== DisableBluetooth == | == DisableBluetooth == |