std::vector<boost::shared_ptr<Chip> > DeisterReaderUnit::getChipList()
	{
		std::vector<boost::shared_ptr<Chip> > chipList;
		boost::shared_ptr<Chip> singleChip = getSingleChip();
		if (singleChip)
		{
			chipList.push_back(singleChip);
		}
		return chipList;
	}
 std::vector<std::shared_ptr<Chip> > IdOnDemandReaderUnit::getChipList()
 {
     std::vector<std::shared_ptr<Chip> > chipList;
     std::shared_ptr<Chip> singleChip = getSingleChip();
     if (singleChip)
     {
         chipList.push_back(singleChip);
     }
     return chipList;
 }
    bool OK5553ReaderUnit::connect()
    {
        LOG(LogLevel::INFOS) << "Starting connect...";
        if (getSingleChip())
        {
            if (getSingleChip()->getCardType() == "DESFire")
            {
                std::vector<unsigned char> tmp = rats();
                if (tmp.size() == 0)
                {
                    d_insertedChip = getChipInAir();
                    tmp = rats();
                    if (tmp.size() == 0)
                    {
                        d_insertedChip.reset();
                    }
                }
            }
        }

        return bool(d_insertedChip);
    }
    bool ISO7816ReaderUnit::reconnect(int action)
    {
        try
        {
            auto chip = getSingleChip();
            if (chip
                && chip->getGenericCardType() == CHIP_SAM)
            {
                std::this_thread::sleep_for(std::chrono::milliseconds(200));

                auto command = std::dynamic_pointer_cast<logicalaccess::SAMCommands<logicalaccess::KeyEntryAV2Information, logicalaccess::SETAV2 >>(chip->getCommands());
                if (command)
                    command->lockUnlock(getISO7816Configuration()->getSAMUnLockKey(), logicalaccess::SAMLockUnlock::Unlock, 0, 0, 0);
            }
        }
        catch (std::exception& ex)
        {
            LOG(ERRORS) << "ISO7816ReaderUnit reconnect: " << ex.what();
            return false;
        }

        return true;
    }