/**
 * @file btmsys.h
 * @brief btm:sys (btm system) service IPC wrapper.
 * @author yellows8
 */
#pragma once
#include "../types.h"
#include "../kernel/event.h"
#include "../sf/service.h"

/// Initialize btm:sys.
Result btmsysInitialize(void);

/// Exit btm:sys.
void btmsysExit(void);

/// Gets the Service object for the actual btm:sys service session. This object must be closed by the user once finished using cmds with this.
Result btmsysGetServiceSession(Service* srv_out);

/// Gets the Service object for IBtmSystemCore.
Service* btmsysGetServiceSession_IBtmSystemCore(void);

/**
 * @brief StartGamepadPairing
 */
Result btmsysStartGamepadPairing(void);

/**
 * @brief CancelGamepadPairing
 */
Result btmsysCancelGamepadPairing(void);

/**
 * @brief ClearGamepadPairingDatabase
 */
Result btmsysClearGamepadPairingDatabase(void);

/**
 * @brief GetPairedGamepadCount
 * @param[out] out Output count.
 */
Result btmsysGetPairedGamepadCount(u8 *out);

/**
 * @brief EnableRadio
 */
Result btmsysEnableRadio(void);

/**
 * @brief DisableRadio
 */
Result btmsysDisableRadio(void);

/**
 * @brief GetRadioOnOff
 * @param[out] out Output flag.
 */
Result btmsysGetRadioOnOff(bool *out);

/**
 * @brief AcquireRadioEvent
 * @note Only available on [3.0.0+].
 * @note The Event must be closed by the user once finished with it.
 * @param[out] out_event Output Event with autoclear=true.
 */
Result btmsysAcquireRadioEvent(Event* out_event);

/**
 * @brief AcquireGamepadPairingEvent
 * @note Only available on [3.0.0+].
 * @note The Event must be closed by the user once finished with it.
 * @param[out] out_event Output Event with autoclear=true.
 */
Result btmsysAcquireGamepadPairingEvent(Event* out_event);

/**
 * @brief IsGamepadPairingStarted
 * @note Only available on [3.0.0+].
 * @param[out] out Output flag.
 */
Result btmsysIsGamepadPairingStarted(bool *out);