From 31ca6f5c53981ec75ab38d148163b17294ea3924 Mon Sep 17 00:00:00 2001 From: HiddenRambler Date: Thu, 13 Jul 2017 17:33:22 +0100 Subject: [PATCH] add nfcStartOtherTagScanning Old3DS compatibility. --- libctru/source/services/nfc.c | 69 +++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/libctru/source/services/nfc.c b/libctru/source/services/nfc.c index 00140a2..e62e9ea 100644 --- a/libctru/source/services/nfc.c +++ b/libctru/source/services/nfc.c @@ -15,12 +15,14 @@ static NFC_OpType nfc_optype = NFC_OpType_NFCTag; static Result NFC_Initialize(NFC_OpType type); static Result NFC_Shutdown(NFC_OpType type); +static Result NFC_StartCommsAdapter(void); static Result NFC_StartCommunication(void); static Result NFC_StopCommunication(void); static Result NFC_CommunicationGetStatus(u8 *out); static Result NFC_CommunicationGetResult(Result *out); static Result NFC_StartTagScanning(u16 unknown); +static Result NFC_StartOtherTagScanning(u16 unk0, u32 unk1); static Result NFC_StopTagScanning(void); static Result NFC_InitializeWriteAppData(u32 amiibo_appid, NFC_AppDataInitStruct *initstruct, const void *buf, size_t size); @@ -63,7 +65,7 @@ Handle nfcGetSessionHandle(void) return nfcHandle; } -Result nfcStartScanning(u16 inval) +static Result NFC_StartCommsAdapter(void) { Result ret, ret2; bool new3ds_flag = false; @@ -71,41 +73,54 @@ Result nfcStartScanning(u16 inval) APT_CheckNew3DS(&new3ds_flag); - if(!new3ds_flag) + if(new3ds_flag) return 0; + + ret = NFC_StartCommunication(); + if(R_FAILED(ret))return ret; + + while(1) { - ret = NFC_StartCommunication(); - if(R_FAILED(ret))return ret; + status = 0; + ret = NFC_CommunicationGetStatus(&status); + if(R_FAILED(ret))break; - while(1) + if(status==1)//"Attempting to initialize Old3DS NFC adapter communication." { - status = 0; - ret = NFC_CommunicationGetStatus(&status); - if(R_FAILED(ret))break; - - if(status==1)//"Attempting to initialize Old3DS NFC adapter communication." - { - svcSleepThread(1000000*100); - continue; - } - else if(status==2)//"Old3DS NFC adapter communication initialization successfully finished." - { - break; - } - - //An error occured with Old3DS NFC-adapter communication initialization. - - ret = NFC_CommunicationGetResult(&ret2); - if(R_FAILED(ret))break; - - return ret2; + svcSleepThread(1000000*100); + continue; + } + else if(status==2)//"Old3DS NFC adapter communication initialization successfully finished." + { + break; } - if(R_FAILED(ret))return ret; + //An error occured with Old3DS NFC-adapter communication initialization. + + ret = NFC_CommunicationGetResult(&ret2); + if(R_FAILED(ret))break; + + return ret2; } + return ret; +} + +Result nfcStartScanning(u16 inval) +{ + Result ret = NFC_StartCommsAdapter(); + if(R_FAILED(ret)) return ret; + return NFC_StartTagScanning(inval); } +Result nfcStartOtherTagScanning(u16 unk0, u32 unk1) +{ + Result ret = NFC_StartCommsAdapter(); + if(R_FAILED(ret)) return ret; + + return NFC_StartOtherTagScanning(unk0, unk1); +} + void nfcStopScanning(void) { bool new3ds_flag = false; @@ -442,7 +457,7 @@ static Result NFC_GetAppDataInitStruct(NFC_AppDataInitStruct *out) return ret; } -Result nfcStartOtherTagScanning(u16 unk0, u32 unk1) +static Result NFC_StartOtherTagScanning(u16 unk0, u32 unk1) { Result ret=0; u32* cmdbuf=getThreadCommandBuffer();