diff --git a/nx/include/switch/services/btdrv.h b/nx/include/switch/services/btdrv.h index df763329..a952c748 100644 --- a/nx/include/switch/services/btdrv.h +++ b/nx/include/switch/services/btdrv.h @@ -501,14 +501,21 @@ Result btdrvRemoveBond(BtdrvAddress addr); Result btdrvCancelBond(BtdrvAddress addr); /** - * @brief RespondToPinRequest + * @brief RespondToPinRequest [1.0.0-11.0.1] * @note The official sysmodule only uses the input \ref BtdrvAddress. * @param[in] addr \ref BtdrvAddress * @param[in] flag Flag * @param[in] pin_code \ref BtdrvBluetoothPinCode * @param[in] length Length of pin_code */ -Result btdrvRespondToPinRequest(BtdrvAddress addr, bool flag, const BtdrvBluetoothPinCode *pin_code, u8 length); +Result btdrvLegacyRespondToPinRequest(BtdrvAddress addr, bool flag, const BtdrvBluetoothPinCode *pin_code, u8 length); + +/** + * @brief RespondToPinRequest [12.0.0+] + * @param[in] addr \ref BtdrvAddress + * @param[in] pin_code \ref BtdrvPinCode + */ +Result btdrvRespondToPinRequest(BtdrvAddress addr, const BtdrvPinCode *pin_code); /** * @brief RespondToSspRequest diff --git a/nx/source/services/btdrv.c b/nx/source/services/btdrv.c index 6464615c..a4226ca9 100644 --- a/nx/source/services/btdrv.c +++ b/nx/source/services/btdrv.c @@ -229,26 +229,30 @@ Result btdrvCancelBond(BtdrvAddress addr) { return _btdrvCmdInAddrNoOut(addr, 12); } -Result btdrvRespondToPinRequest(BtdrvAddress addr, bool flag, const BtdrvBluetoothPinCode *pin_code, u8 length) { - if (hosversionBefore(12,0,0)) { - const struct { - BtdrvAddress addr; - u8 flag; - u8 length; - BtdrvBluetoothPinCode pin_code; - } in = { addr, flag!=0, length, *pin_code }; +Result btdrvLegacyRespondToPinRequest(BtdrvAddress addr, bool flag, const BtdrvBluetoothPinCode *pin_code, u8 length) { + if (hosversionAtLeast(12,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return serviceDispatchIn(&g_btdrvSrv, 13, in); - } - else { - const struct { - BtdrvAddress addr; - BtdrvBluetoothPinCode pin_code; - uint8_t length; - } in = { addr, *pin_code, length }; + const struct { + BtdrvAddress addr; + u8 flag; + u8 length; + BtdrvBluetoothPinCode pin_code; + } in = { addr, flag!=0, length, *pin_code }; - return serviceDispatchIn(&g_btdrvSrv, 13, in); - } + return serviceDispatchIn(&g_btdrvSrv, 13, in); +} + +Result btdrvRespondToPinRequest(BtdrvAddress addr, const BtdrvPinCode *pin_code) { + if (hosversionBefore(12,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + const struct { + BtdrvAddress addr; + BtdrvPinCode pin_code; + } in = { addr, *pin_code }; + + return serviceDispatchIn(&g_btdrvSrv, 13, in); } Result btdrvRespondToSspRequest(BtdrvAddress addr, u8 variant, bool flag, u32 unk) {