Line 266: |
Line 266: |
| * Calls a modified version of BSA_Boot, which handles BSA server initialization. | | * 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 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 handles BSA client initialization. This also sends a message to the "nn.bluetooth.HidMessageHandler" 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 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. | + | * Calls a func which initializes global state and uses BSA 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#GetBluetoothBoostEnableFlag|GetBluetoothBoostEnableFlag]] is set, a func is called. |
| * If the output flag from [[Settings_services#GetBluetoothAfhEnableFlag|GetBluetoothAfhEnableFlag]] is not set, a func is called. | | * If the output flag from [[Settings_services#GetBluetoothAfhEnableFlag|GetBluetoothAfhEnableFlag]] is not set, a func is called. |
Line 283: |
Line 283: |
| | | |
| This is used by [[BTM_services|btm]]. | | This is used by [[BTM_services|btm]]. |
| + | |
| + | This calls an interface funcptr. On success, the funcs for updating the interface funcptr tables are called (same as [[#InitializeBluetooth]]). Then the converted ret is returned as needed. |
| + | |
| + | When bluetooth is already disabled, that funcptr just returns 0. Otherwise when it's already enabled, it does the following: |
| + | * Calls a func which closes the HID-Host UIPC channel, and uses BSA for disabling HID-Host. |
| + | * Calls a func which uses <code>nn::os::FinalizeMutex</code> and <code>nn::os::FinalizeEvent</code> with global state. |
| + | * Uses <code>nn::os::InitializeEvent</code>, <code>nn::os::InitializeTimerEvent</code>, with a ptr for the former Event being written into global state. |
| + | * Uses BTA_DisableBluetooth. |
| + | * Uses <code>nn::os::StartOneShotTimerEvent</code> with a value of 5 seconds. |
| + | * Waits for either of the above to trigger using <code>nn::os::TryWaitEvent</code> and <code>nn::os::TryWaitTimerEvent</code>, with each loop iteration [[SVC|sleeping]] for 5000000 nanoseconds. |
| + | ** The Event is signaled when disabling bluetooth finishes. |
| + | * Cleanup for the above Event/TimerEvent is done. |
| + | * Calls a func which handles BSA client cleanup. |
| + | * Calls a func which does the following: |
| + | ** Calls a func which tells the "nn.bluetooth.TimerThread" to exit, then destroys that thread (GKI timer thread). |
| + | ** Calls a func which just returns. |
| + | ** Calls a func which handles GKI cleanup (including destroying the task threads). |
| + | ** Calls a func which waits for the UIPC threads to exit + destroys the threads and handles cleanup. |
| + | * Calls the same GPIO func as [[#EnableBluetooth]] with param=0. |
| + | * Sends a message to the "nn.bluetooth.HidMessageHandler" thread for disabling bluetooth (which updates the interface funcptr tables, etc). |
| | | |
| == FinalizeBluetooth == | | == FinalizeBluetooth == |