int main(int argc, const char** argv)
{
    NFC_REQ req;

    memset(&req, 0, sizeof(NFC_REQ));

    META_NFC_Register(nfc_info_callback);

    if (META_NFC_init() != 0) {
        META_LOG("META_NFC_init Failure\n");
        return -1;
    }
    sleep(1);

    nfc_cnf.header.id = FT_NFC_CNF_ID;
    nfc_cnf.header.token = req->header.token;
    nfc_cnf.op = req->op;


    req.cmd.m_setting_req.debug_enable = 1;
    req.cmd.m_setting_req.get_capabilities = 1;
    req.cmd.m_setting_req.nfc_enable = 1;
    req.cmd.m_setting_req.sw_protocol = 1;

    req.header.id = 1;
    req.header.token = 1;
    req.op = NFC_OP_SETTING;
    META_NFC_OP(&req, NULL, 0);

    sleep(10);

    META_NFC_OP(&req, NULL, 0);

    sleep(1);

    META_NFC_deinit();
    META_NFC_Register(NULL);

    return 0;
}
int CMetaNfc::SendCommand(NFC_REQ *req, char *peer_buff,
		unsigned short peer_len, /*IN OUT*/NFC_CNF* resp) {

	LOGD("CMetaNfc::SendCommand, CMD=%d, NFC_OP_END=%d", req->op, NFC_OP_END);
	int idx = getOPIdx(req->op);

	mNewObjectLock->Lock();
	LOGD("CMetaNfc::SendCommand  locked");
	if (respMap[idx] == 0) {
		LOGD("CMetaNfc::SendCommand  new SyncedElement");
		respMap[idx] = new SyncedElement();
	}
	mNewObjectLock->Unlock();
	LOGD("CMetaNfc::SendCommand  unlocked");

	respMap[idx]->TransferLock();
	LOGD("CMetaNfc::SendCommand  TransferLocked");

	respMap[idx]->isReqSent = true;
	META_NFC_OP(req, peer_buff, peer_len);
	LOGD("META_NFC_OP()  returned");

	if (!respMap[idx]->TimedWait(50000))//wait for 50000sec, remove timeout
	{
		//timeout
		LOGE("META_NFC_OP 50000 Seconds TimeOut.");
		resp->status = RESULT_STATUS_TIMEOUT;
		respMap[idx]->isReqSent = false;
		respMap[idx]->TransferUnLock();
		return ERR_TIMEOUT;
	} else {
		memcpy(resp, respMap[idx]->resp, sizeof(NFC_CNF));
	}
	LOGD("META_NFC_OP()  Sync returned");

	respMap[idx]->isReqSent = false;
	respMap[idx]->TransferUnLock();
	LOGD("CMetaNfc::SendCommand  Transfer UnLocked");
	return ERR_OK;
}