コード例 #1
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::MifareReadBlock(u8 block, u8 *buf)
{
    nfc_buf[0] = PN532_COMMAND_INDATAEXCHANGE;
    nfc_buf[1] = 1; // logical number of the relevant target
    nfc_buf[2] = MIFARE_CMD_READ;
    nfc_buf[3] = block;

    if(!write_cmd_check_ack(nfc_buf, 4)){
        return 0;
    }
    wait_ready();
    read_dt(nfc_buf, 26);
/**
    if(nfc_buf[5] == 0xD5){
        Serial.print("Block receive:");
        puthex(nfc_buf, nfc_buf[3]+6);
        Serial.println();
    }
*/
    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INDATAEXCHANGE+1)){
#ifdef PN532DEBUG
        puthex(nfc_buf, 20);
        Serial.println("Authentication fail.");
#endif
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
        return 0;
    }

    memcpy(buf, nfc_buf+8, 16);

    return 1;
}
コード例 #2
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u32 NFC_Module::get_version(void)
{
    u32 version;

    nfc_buf[0] = PN532_COMMAND_GETFIRMWAREVERSION;
    if(!write_cmd_check_ack(nfc_buf, 1)){
        return 0;
    }
    wait_ready();
    read_dt(nfc_buf, 12);
    if(nfc_buf[5] != 0xD5){
        return 0;
    }
    // check some basic stuff
	if (0 != strncmp((char *)nfc_buf, (char *)nfc_version, 6)) {
#ifdef PN532DEBUG
		Serial.println("Firmware doesn't match!");
#endif
		return 0;
	}

	version = nfc_buf[7];
	version <<= 8;
	version |= nfc_buf[8];
	version <<= 8;
	version |= nfc_buf[9];
	version <<= 8;
	version |= nfc_buf[10];

	return version;
}
コード例 #3
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::MifareWriteBlock(u8 block, u8 *buf)
{
    nfc_buf[0] = PN532_COMMAND_INDATAEXCHANGE;
    nfc_buf[1] = 1; // logical number of the relevant target
    nfc_buf[2] = MIFARE_CMD_WRITE;
    nfc_buf[3] = block;

    memcpy(nfc_buf+4, buf, 16);

    if(!write_cmd_check_ack(nfc_buf, 20)){
        return 0;
    }
    wait_ready();
    read_dt(nfc_buf, 26);
    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INDATAEXCHANGE+1)){
#ifdef PN532DEBUG
        puthex(nfc_buf, 20);
        Serial.println("Authentication fail.");
#endif
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
        return 0;
    }
    return 1;
}
コード例 #4
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::InListPassiveTarget(u8 *buf, u8 brty, u8 maxtg, u8 *idata)
{
    nfc_buf[0] = PN532_COMMAND_INLISTPASSIVETARGET;
    nfc_buf[1] = maxtg;
    nfc_buf[2] = brty;

    if(!write_cmd_check_ack(nfc_buf, 3)){
        return 0;
    }

    /** "Waiting for IRQ (indicates card presence)" */
    wait_ready();
#ifdef PN532DEBUG
	Serial.print(" Found Card.\n");
#endif
    read_dt(nfc_buf,20);
    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INLISTPASSIVETARGET+1)){
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]!=1){
        Serial.println(nfc_buf[NFC_FRAME_ID_INDEX+1],DEC);
        return 0;
    }
    /** UUID length */
    buf[0] = nfc_buf[12];

    for(u8 i=1; i<5; i++){
        buf[i] = nfc_buf[12+i];
    }
    return 1;
}
コード例 #5
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::TgInitAsTarget()
{
    nfc_buf[0] = PN532_COMMAND_TGINITASTARGET;
    /** 14443-4A Card only */
    nfc_buf[1] = 0x04;

    /** SENS_RES */
    nfc_buf[2] = 0x04;
    nfc_buf[3] = 0x00;

    /** NFCID1 */
    nfc_buf[4] = 0x12;
    nfc_buf[5] = 0x34;
    nfc_buf[6] = 0x56;

    /** SEL_RES */
    nfc_buf[7] = 0x60;

    /**Parameters to build POL_RES (18 bytes including system code) */
    nfc_buf[8] = 0x01;
    nfc_buf[9] = 0xFE;
    nfc_buf[10] = 0xA2;
    nfc_buf[11] = 0xA3;
    nfc_buf[12] = 0xA4;
    nfc_buf[13] = 0xA5;
    nfc_buf[14] = 0xA6;
    nfc_buf[15] = 0xA7;
    nfc_buf[16] = 0xC0;
    nfc_buf[17] = 0xC1;
    nfc_buf[18] = 0xC2;
    nfc_buf[19] = 0xC3;
    nfc_buf[20] = 0xC4;
    nfc_buf[21] = 0xC5;
    nfc_buf[22] = 0xC6;
    nfc_buf[23] = 0xC7;
    nfc_buf[24] = 0xFF;
    nfc_buf[25] = 0xFF;
    /** NFCID3t */
    nfc_buf[26] = 0xAA;
    nfc_buf[27] = 0x99;
    nfc_buf[28] = 0x88;
    nfc_buf[29] = 0x77;
    nfc_buf[30] = 0x66;
    nfc_buf[31] = 0x55;
    nfc_buf[32] = 0x44;
    nfc_buf[33] = 0x33;
    nfc_buf[34] = 0x22;
    nfc_buf[35] = 0x11;
    /** Length of general bytes  */
    nfc_buf[36] = 0x00;
    /** Length of historical bytes  */
    nfc_buf[37] = 0x00;

    if(!write_cmd_check_ack(nfc_buf, 38)){
        return 0;
    }

    return 1;
}
コード例 #6
0
ファイル: nfc.cpp プロジェクト: Swifty88/nfc-pn532
u8 NFC_Module::InListPassiveTarget(u8 *buf, u8 brty,
                                   u8 len, u8 *idata, u8 maxtg)
{
    nfc_buf[0] = PN532_COMMAND_INLISTPASSIVETARGET;
    nfc_buf[1] = maxtg;
    nfc_buf[2] = brty;
    if(len){
        memcpy(nfc_buf+3, idata, len);
    }
    if(!write_cmd_check_ack(nfc_buf, 3+len)){
        return 0;
    }
#ifdef PN532DEBUG
    puthex(nfc_buf, 3+len);
    Serial.println();
#endif
//	puthex(nfc_buf, 3+len);
//    Serial.println();
	
    /** "Waiting for IRQ (indicates card presence)" */
    wait_ready();
	wait_ready();
	wait_ready();
#ifdef PN532DEBUG
	Serial.print(" Found Card.\n");
#endif
    read_dt(nfc_buf,40);
//	puthex(nfc_buf, nfc_buf[3]+6);
//    Serial.println();
    if(nfc_buf[NFC_FRAME_ID_INDEX-1] != 0xD5){
        return 0;
    }
	
    puthex(nfc_buf, nfc_buf[3]+6);
    Serial.println();

    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INLISTPASSIVETARGET+1)){
        return 0;
    }
//    if(nfc_buf[NFC_FRAME_ID_INDEX+1]!=1){
//#ifdef PN532DEBUG
//        Serial.println(nfc_buf[NFC_FRAME_ID_INDEX+1],DEC);
//#endif
//        return 0;
//    }
    if(brty == PN532_BRTY_ISO14443A){
        /** UUID length */
        buf[0] = nfc_buf[12];

        for(u8 i=1; i<5; i++){
            buf[i] = nfc_buf[12+i];
        }
    }else{
        buf[0] = nfc_buf[3];
        memcpy(buf, nfc_buf+5, nfc_buf[3]);
    }

    return 1;
}
コード例 #7
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::P2PInitiatorTxRx(u8 *t_buf, u8 t_len, u8 *r_buf, u8 *r_len)
{
//    wait_ready();
//    wait_ready();
    wait_ready(15);
    nfc_buf[0] = PN532_COMMAND_INDATAEXCHANGE;
    nfc_buf[1] = 0x01; // logical number of the relevant target

    memcpy(nfc_buf+2, t_buf, t_len);

    if(!write_cmd_check_ack(nfc_buf, t_len+2)){
        return 0;
    }
#ifdef PN532_P2P_DEBUG
    Serial.println("Initiator DataExchange sent.");
#endif

    wait_ready(200);

    read_dt(nfc_buf, 60);
    if(nfc_buf[5] != 0xD5){
        return 0;
    }

#ifdef PN532_P2P_DEBUG
    Serial.println("Initiator DataExchange Get.");
#endif

    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INDATAEXCHANGE+1)){
#ifdef PN532_P2P_DEBUG
        puthex(nfc_buf, nfc_buf[3]+7);
        Serial.println("Send data failed");
#endif
        return 0;
    }

    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
#ifdef PN532_P2P_DEBUG
        Serial.print("InExchangeData Error:");
        puthex(nfc_buf, nfc_buf[3]+7);
        Serial.println();
#endif
        return 0;
    }

#ifdef PN532_P2P_DEBUG
    puthex(nfc_buf, nfc_buf[3]+7);
    Serial.println();
#endif
    /** return read data */
    *r_len = nfc_buf[3]-3;
    memcpy(r_buf, nfc_buf+8, *r_len);
    return 1;
}
コード例 #8
0
ファイル: nfc.cpp プロジェクト: Swifty88/nfc-pn532
u8 NFC_Module::FelicaPoll(u8 *buf, u8 len, u8 *idata)
{
	static u8 sta=0;
	if(!sta){
		nfc_buf[0] = PN532_COMMAND_INLISTPASSIVETARGET;
		nfc_buf[1] = 0x02;
		nfc_buf[2] = 0x02;
		if(len){
			memcpy(nfc_buf+3, idata, len);
		}
		if(!write_cmd_check_ack(nfc_buf, 3+len)){
			return 0;
		}
#ifdef PN532DEBUG
		puthex(nfc_buf, 3+len);
		Serial.println();
#endif
	//	puthex(nfc_buf, 3+len);
	    Serial.println("Send command");
	}
    sta = 1;
    /** "Waiting for IRQ (indicates card presence)" */
    wait_ready();
	wait_ready();
	wait_ready();
#ifdef PN532DEBUG
	Serial.print(" Found Card.\n");
#endif
    read_dt(nfc_buf,40);
	puthex(nfc_buf, nfc_buf[3]+6);
    Serial.println();
    if(nfc_buf[NFC_FRAME_ID_INDEX-1] != 0xD5){
        return 0;
    }
	sta = 0;
    puthex(nfc_buf, nfc_buf[3]+6);
    Serial.println();

    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INLISTPASSIVETARGET+1)){
        return 0;
    }
//    if(nfc_buf[NFC_FRAME_ID_INDEX+1]!=1){
//#ifdef PN532DEBUG
//        Serial.println(nfc_buf[NFC_FRAME_ID_INDEX+1],DEC);
//#endif
//        return 0;
//    }
    buf[0] = nfc_buf[3];
    memcpy(buf, nfc_buf+5, nfc_buf[3]);


    return 1;
}
コード例 #9
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::P2PInitiatorInit()
{
    /** avoid resend command */
    static u8 send_flag=1;
    nfc_buf[0] = PN532_COMMAND_INJUMPFORDEP;
    nfc_buf[1] = 0x01; // avtive mode
    nfc_buf[2] = 0x02; // 201Kbps
    nfc_buf[3] = 0x01;

    nfc_buf[4] = 0x00;
    nfc_buf[5] = 0xFF;
    nfc_buf[6] = 0xFF;
    nfc_buf[7] = 0x00;
    nfc_buf[8] = 0x00;

    if(send_flag){
        send_flag = 0;
        if(!write_cmd_check_ack(nfc_buf, 9)){
#ifdef PN532_P2P_DEBUG
            Serial.println("InJumpForDEP sent fialed\n");
#endif
            return 0;
        }
#ifdef PN532_P2P_DEBUG
        Serial.println("InJumpForDEP sent ******\n");
#endif
    }
    wait_ready(10);
    read_dt(nfc_buf, 25);

    if(nfc_buf[5] != 0xD5){
//        Serial.println("InJumpForDEP sent read failed");
        return 0;
    }

    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INJUMPFORDEP+1)){
#ifdef PN532_P2P_DEBUG
        puthex(nfc_buf, nfc_buf[3]+7);
        Serial.println("Initiator init failed");
#endif
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
        return 0;
    }

#ifdef PN532_P2P_DEBUG
    Serial.println("InJumpForDEP read success");
#endif
    send_flag = 1;
    return 1;
}
コード例 #10
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::SetParameters(u8 para)
{
    nfc_buf[0] = PN532_COMMAND_SETPARAMETERS;
    nfc_buf[1] = para;

    if(!write_cmd_check_ack(nfc_buf, 2)){
        return 0;
    }
    read_dt(nfc_buf, 8);
    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_SETPARAMETERS+1)){
        return 0;
    }
    return 1;
}
コード例 #11
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::SAMConfiguration(u8 mode, u8 timeout, u8 irq)
{
#ifdef PN532DEBUG
    Serial.print("SAMConfiguration\n");
#endif
	nfc_buf[0] = PN532_COMMAND_SAMCONFIGURATION;
	nfc_buf[1] = mode; // normal mode;
	nfc_buf[2] = timeout; // timeout 50ms * 20 = 1 second
	nfc_buf[3] = irq; // use IRQ pin!

    if(!write_cmd_check_ack(nfc_buf, 4)){
        return 0;
    }

	// read data packet
	read_dt(nfc_buf, 8);

	return  (nfc_buf[6] == PN532_COMMAND_SAMCONFIGURATION);
}
コード例 #12
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::MifareAuthentication(u8 type, u8 block,
                                    u8 *uuid, u8 uuid_len, u8 *key)
{
    u8 i;
    nfc_buf[0] = PN532_COMMAND_INDATAEXCHANGE;
    nfc_buf[1] = 1; // logical number of the relevant target
    nfc_buf[2] = MIFARE_CMD_AUTH_A+type;
    nfc_buf[3] = block;

    for(i=0; i<6; i++){
        nfc_buf[4+i] = key[i];
    }
    for(i=0; i<uuid_len; i++){
        nfc_buf[10+i] = uuid[i];
    }

    if(!write_cmd_check_ack( nfc_buf, (10+uuid_len) )){
        return 0;
    }

    wait_ready();
    read_dt(nfc_buf, 8);
#if 0
    if(nfc_buf[5] == 0xD5){
        Serial.print("Authentication receive:");
        puthex(nfc_buf, nfc_buf[3]+6);
        Serial.println();
    }
#endif
    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_INDATAEXCHANGE+1)){
#ifdef PN532DEBUG
        puthex(nfc_buf, 20);
        Serial.println("Authentication fail.");
#endif
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
        return 0;
    }
    return 1;
}
コード例 #13
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::TargetPolling()
{
    static poll_sta_type sta;
    static u8 count=0;
    wait_ready();
    read_dt(nfc_buf, 30);
#ifdef PN532DEBUG
    delay(300);
    puthex(nfc_buf, 9);
    Serial.println();
#endif
    switch(sta){
        case NFC_STA_TAG:
            break;
        case NFC_STA_GETDATA:
            count++;
            if(count > 10){
                Serial.println("*************Reinit Target************");
                /** Target release */
                TgInitAsTarget();
                Serial.println("*************Reinit Target************");
                sta = NFC_STA_TAG;
            }
            break;
        case NFC_STA_SETDATA:
            break;
    }
    if(nfc_buf[5] == 0xD5){
        puthex(nfc_buf, nfc_buf[3]+6);
        switch(nfc_buf[NFC_FRAME_ID_INDEX]){
            case PN532_COMMAND_TGINITASTARGET+1:
                Serial.println("TgInitTatget");
                nfc_buf[0] = PN532_COMMAND_TGGETDATA;
                sta = NFC_STA_GETDATA;
                count=0;
                if(!write_cmd_check_ack(nfc_buf, 1)){
                    return 0;
                }
                break;
            case PN532_COMMAND_TGRESPONSETOINITIATOR+1:
                Serial.println("TgResponseToInitiator");
                break;
            case PN532_COMMAND_TGGETINITIATORCOMMAND+1:
                Serial.println("TgGetInitiatorCommand");
                break;
            case PN532_COMMAND_TGGETDATA+1:
                Serial.println("TgGetData");
                if(!nfc_buf[NFC_FRAME_ID_INDEX+1]){
                    Serial.println("TgGetData Success.");
                    switch(nfc_buf[NFC_FRAME_ID_INDEX+2]){
                        case 0x60:
                            nfc_buf[0] = PN532_COMMAND_TGSETDATA;
                            nfc_buf[1] = 0x00;
                            nfc_buf[2] = 0xFF;
                            if(!write_cmd_check_ack(nfc_buf, 3)){
                                return 0;
                            }
                            break;
                        case 0x30:
                            nfc_buf[0] = PN532_COMMAND_TGSETDATA;
                            for(u8 i=1; i<17; i++){
                                nfc_buf[i] = i;
                            }
                            if(!write_cmd_check_ack(nfc_buf, 17)){
                                return 0;
                            }
                            break;
                        default:
                            Serial.println("TgGetData Error.");
                            wait_ready();
                            /** Target release */
                            TgInitAsTarget();
                            break;
                    }

                }else{
                    /** Target release */
                    TgInitAsTarget();
                }
                break;
            case PN532_COMMAND_TGSETDATA+1:
                Serial.println("TgSetData");
                if(!nfc_buf[NFC_FRAME_ID_INDEX+1]){
                    Serial.println("TgSetData Success.");
                    nfc_buf[0] = PN532_COMMAND_TGGETDATA;
                    sta = NFC_STA_GETDATA;
                    count=0;
                    if(!write_cmd_check_ack(nfc_buf, 1)){
                        /**  */
                        Serial.println("SetData check error.");
                        return 0;
                    }
                }
                break;
            default:
                Serial.println("Undifined command");
                break;
        }
    }else{
        Serial.println(".");
    }
    return 1;
}
コード例 #14
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::P2PTargetTxRx(u8 *t_buf, u8 t_len, u8 *r_buf, u8 *r_len)
{
    nfc_buf[0] = PN532_COMMAND_TGGETDATA;
    if(!write_cmd_check_ack(nfc_buf, 1)){
        return 0;
    }
    wait_ready(100);
    read_dt(nfc_buf, 60);
    if(nfc_buf[5] != 0xD5){
        return 0;
    }

    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_TGGETDATA+1)){
#ifdef PN532_P2P_DEBUG
        puthex(nfc_buf, 20);
        Serial.println("Target GetData failed");
#endif
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
 #ifdef PN532_P2P_DEBUG
        Serial.print("TgGetData Error:");
        puthex(nfc_buf, nfc_buf[3]+7);
        Serial.println();
#endif
        return 0;
    }

#ifdef PN532_P2P_DEBUG
    Serial.println("TgGetData:");
    puthex(nfc_buf, nfc_buf[3]+7);
    Serial.println();
#endif

    /** return read data */
    *r_len = nfc_buf[3]-3;
    memcpy(r_buf, nfc_buf+8, *r_len);

    nfc_buf[0] = PN532_COMMAND_TGSETDATA;
    memcpy(nfc_buf+1, t_buf, t_len);

    if(!write_cmd_check_ack(nfc_buf, 1+t_len)){
        return 0;
    }
    wait_ready(100);
    read_dt(nfc_buf, 26);

    if(nfc_buf[5] != 0xD5){
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_TGSETDATA+1)){
#ifdef PN532_P2P_DEBUG
        puthex(nfc_buf, 20);
        Serial.println("Send data failed");
#endif
        return 0;
    }
    if(nfc_buf[NFC_FRAME_ID_INDEX+1]){
        return 0;
    }

    return 1;
}
コード例 #15
0
ファイル: nfc.cpp プロジェクト: babylazy/smartdoor
u8 NFC_Module::P2PTargetInit()
{
    /** avoid resend command */
    static u8 send_flag=1;
    nfc_buf[0] = PN532_COMMAND_TGINITASTARGET;
    /** 14443-4A Card only */
    nfc_buf[1] = 0x00;

    /** SENS_RES */
    nfc_buf[2] = 0x04;
    nfc_buf[3] = 0x00;

    /** NFCID1 */
    nfc_buf[4] = 0x12;
    nfc_buf[5] = 0x34;
    nfc_buf[6] = 0x56;

    /** SEL_RES */
    nfc_buf[7] = 0x40;      // DEP only mode

    /**Parameters to build POL_RES (18 bytes including system code) */
    nfc_buf[8] = 0x01;
    nfc_buf[9] = 0xFE;
    nfc_buf[10] = 0xA2;
    nfc_buf[11] = 0xA3;
    nfc_buf[12] = 0xA4;
    nfc_buf[13] = 0xA5;
    nfc_buf[14] = 0xA6;
    nfc_buf[15] = 0xA7;
    nfc_buf[16] = 0xC0;
    nfc_buf[17] = 0xC1;
    nfc_buf[18] = 0xC2;
    nfc_buf[19] = 0xC3;
    nfc_buf[20] = 0xC4;
    nfc_buf[21] = 0xC5;
    nfc_buf[22] = 0xC6;
    nfc_buf[23] = 0xC7;
    nfc_buf[24] = 0xFF;
    nfc_buf[25] = 0xFF;
    /** NFCID3t */
    nfc_buf[26] = 0xAA;
    nfc_buf[27] = 0x99;
    nfc_buf[28] = 0x88;
    nfc_buf[29] = 0x77;
    nfc_buf[30] = 0x66;
    nfc_buf[31] = 0x55;
    nfc_buf[32] = 0x44;
    nfc_buf[33] = 0x33;
    nfc_buf[34] = 0x22;
    nfc_buf[35] = 0x11;
    /** Length of general bytes  */
    nfc_buf[36] = 0x00;
    /** Length of historical bytes  */
    nfc_buf[37] = 0x00;

    if(send_flag){
        send_flag = 0;
        if(!write_cmd_check_ack(nfc_buf, 38)){
            send_flag = 1;
            return 0;
        }
#ifdef PN532_P2P_DEBUG
        Serial.println("Target init sent.");
#endif
    }

    wait_ready(10);
    read_dt(nfc_buf, 24);

    if(nfc_buf[5] != 0xD5){
        return 0;
    }

    if(nfc_buf[NFC_FRAME_ID_INDEX] != (PN532_COMMAND_TGINITASTARGET+1)){
#ifdef PN532_P2P_DEBUG
        puthex(nfc_buf, nfc_buf[3]+7);
        Serial.println("Target init fail.");
#endif
        return 0;
    }

    send_flag = 1;
#ifdef PN532_P2P_DEBUG
    Serial.println("TgInitAsTarget read success");
#endif
    return 1;
}