From c3e514ec08c09477a8d54713e90877bc6e3dc19b Mon Sep 17 00:00:00 2001 From: ndeadly <24677491+ndeadly@users.noreply.github.com> Date: Sun, 18 Apr 2021 14:19:18 +0200 Subject: [PATCH] btdrv: split RespondToPinRequest service wrapper into legacy and current versions --- nx/include/switch/services/btdrv.h | 11 ++++++-- nx/source/services/btdrv.c | 40 ++++++++++++++++-------------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/nx/include/switch/services/btdrv.h b/nx/include/switch/services/btdrv.h index dec326ff..4d7ab525 100644 --- a/nx/include/switch/services/btdrv.h +++ b/nx/include/switch/services/btdrv.h @@ -492,14 +492,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 6a20dc72..5cfa6df5 100644 --- a/nx/source/services/btdrv.c +++ b/nx/source/services/btdrv.c @@ -213,26 +213,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) {