From b2b3680b91735e28f9a16d7dc2353fdf9811fff1 Mon Sep 17 00:00:00 2001 From: yellows8 Date: Sat, 8 Aug 2020 21:47:08 -0400 Subject: [PATCH] btmu/btdrv: Use bool flag where needed and updated docs. --- nx/include/switch/services/btdrv.h | 2 +- nx/include/switch/services/btmu.h | 10 +++++----- nx/source/services/btmu.c | 14 ++++++++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/nx/include/switch/services/btdrv.h b/nx/include/switch/services/btdrv.h index b26b9ee5..b609c8ea 100644 --- a/nx/include/switch/services/btdrv.h +++ b/nx/include/switch/services/btdrv.h @@ -242,7 +242,7 @@ typedef struct { /// BleConnectionInfo typedef struct { - u32 id; ///< Id, 0xFFFFFFFF is invalid. + u32 id; ///< Id, 0xFFFFFFFF ([5.0.0-5.0.2] 0xFFFF) is invalid. BtdrvAddress addr; ///< \ref BtdrvAddress u8 pad[2]; ///< Padding } BtdrvBleConnectionInfo; diff --git a/nx/include/switch/services/btmu.h b/nx/include/switch/services/btmu.h index 249a7bdb..1641682c 100644 --- a/nx/include/switch/services/btmu.h +++ b/nx/include/switch/services/btmu.h @@ -136,7 +136,7 @@ Result btmuBleConnect(BtdrvAddress addr); /** * @brief BleDisconnect - * @param[in] id This must match a BtdrvBleConnectionInfo::id from \ref btmuBleGetConnectionState (0xFFFFFFFF is invalid). + * @param[in] id This must match a BtdrvBleConnectionInfo::id from \ref btmuBleGetConnectionState. [5.1.0+] 0xFFFFFFFF is invalid. */ Result btmuBleDisconnect(u32 id); @@ -206,9 +206,9 @@ Result btmuGetGattServices(u32 id, BtmuGattService *services, u8 count, u8 *tota * @param[in] id Same as \ref btmuBleDisconnect. * @param[in] uuid \ref BtdrvGattAttributeUuid * @param[out] service \ref BtmuGattService - * @param[out] total_out Total output entries. + * @param[out] flag Whether a \ref BtmuGattService was returned. */ -Result btmuGetGattService(u32 id, const BtdrvGattAttributeUuid *uuid, BtmuGattService *service, u8 *total_out); +Result btmuGetGattService(u32 id, const BtdrvGattAttributeUuid *uuid, BtmuGattService *service, bool *flag); /** * @brief Same as \ref btmuGetGattServices except this only returns \ref BtmuGattService entries where various checks pass with u16 fields. @@ -225,9 +225,9 @@ Result btmuGetGattIncludedServices(u32 id, u16 unk1, BtmuGattService *services, * @param[in] id Same as \ref btmuBleDisconnect. * @param[in] unk1 Unknown * @param[out] service \ref BtmuGattService - * @param[out] total_out Total output entries. + * @param[out] flag Whether a \ref BtmuGattService was returned. */ -Result btmuGetBelongingGattService(u32 id, u16 unk1, BtmuGattService *service, u8 *total_out); +Result btmuGetBelongingGattService(u32 id, u16 unk1, BtmuGattService *service, bool *flag); /** * @brief GetGattCharacteristics diff --git a/nx/source/services/btmu.c b/nx/source/services/btmu.c index b46ea874..70b7d16d 100644 --- a/nx/source/services/btmu.c +++ b/nx/source/services/btmu.c @@ -247,25 +247,28 @@ Result btmuGetGattServices(u32 id, BtmuGattService *services, u8 count, u8 *tota ); } -Result btmuGetGattService(u32 id, const BtdrvGattAttributeUuid *uuid, BtmuGattService *service, u8 *total_out) { +Result btmuGetGattService(u32 id, const BtdrvGattAttributeUuid *uuid, BtmuGattService *service, bool *flag) { const struct { u32 id; BtdrvGattAttributeUuid uuid; u64 AppletResourceUserId; } in = { id, *uuid, appletGetAppletResourceUserId() }; - return serviceDispatchInOut(&g_btmuIBtmUserCore, 28, in, *total_out, + u8 tmp=0; + Result rc = serviceDispatchInOut(&g_btmuIBtmUserCore, 28, in, tmp, .buffer_attrs = { SfBufferAttr_HipcPointer | SfBufferAttr_Out | SfBufferAttr_FixedSize }, .buffers = { { service, sizeof(*service) } }, .in_send_pid = true, ); + if (R_SUCCEEDED(rc) && flag) *flag = tmp & 1; + return rc; } Result btmuGetGattIncludedServices(u32 id, u16 unk1, BtmuGattService *services, u8 count, u8 *out) { return _btmuGetGattServiceData(id, unk1, services, sizeof(BtmuGattService), count, out, 29); } -Result btmuGetBelongingGattService(u32 id, u16 unk1, BtmuGattService *service, u8 *total_out) { +Result btmuGetBelongingGattService(u32 id, u16 unk1, BtmuGattService *service, bool *flag) { const struct { u16 unk1; u16 pad; @@ -273,11 +276,14 @@ Result btmuGetBelongingGattService(u32 id, u16 unk1, BtmuGattService *service, u u64 AppletResourceUserId; } in = { unk1, 0, id, appletGetAppletResourceUserId() }; - return serviceDispatchInOut(&g_btmuIBtmUserCore, 30, in, *total_out, + u8 tmp=0; + Result rc = serviceDispatchInOut(&g_btmuIBtmUserCore, 30, in, tmp, .buffer_attrs = { SfBufferAttr_HipcPointer | SfBufferAttr_Out | SfBufferAttr_FixedSize }, .buffers = { { service, sizeof(*service) } }, .in_send_pid = true, ); + if (R_SUCCEEDED(rc) && flag) *flag = tmp & 1; + return rc; } Result btmuGetGattCharacteristics(u32 id, u16 unk1, BtmuGattCharacteristic *characteristics, u8 count, u8 *total_out) {