std::string OK5553ReaderUnit::getName() const
{
    return getDataTransport()->getName();
}
	void OSDPReaderUnit::disconnectFromReader()
	{
		getDataTransport()->disconnect();
	}
	std::vector<unsigned char> RplethReaderCardAdapter::sendRplethCommand(const std::vector<unsigned char>& data, long timeout)
	{
		COM_("Send Rpleth Command : %s", BufferHelper::getHex(data).c_str());
		std::vector<unsigned char> res;

		boost::shared_ptr<RplethDataTransport> dt = boost::dynamic_pointer_cast<RplethDataTransport>(getDataTransport());
		if (dt)
		{
			if (adaptCommand(data).size() > 0)
			{
				dt->sendll(adaptCommand(data));
			}
			res = adaptAnswer(dt->receive(timeout));
		}
		else
		{
			ERROR_SIMPLE_("Not a Rpleth data transport.");
		}

		return res;
	}
void OK5553ReaderUnit::disconnectFromReader()
{
    LOG(LogLevel::INFOS) << "Starting disconnection to reader...";
    getDataTransport()->disconnect();
}
	void AxessTMCLegicReaderUnit::disconnectFromReader()
	{
		getDataTransport()->disconnect();
	}
	std::string AxessTMCLegicReaderUnit::getName() const
	{
		return getDataTransport()->getName();
	}
	bool AxessTMCLegicReaderUnit::connectToReader()
	{
		getDataTransport()->setReaderUnit(shared_from_this());
		return getDataTransport()->connect();
	}
    std::vector<unsigned char> GunneboReaderCardAdapter::adaptAnswer(const std::vector<unsigned char>& answer)
    {
        LOG(LogLevel::COMS) << "Processing the received command buffer " << BufferHelper::getHex(answer) << " command size {" << answer.size() << "}...";

        std::shared_ptr<GunneboReaderUnit> ru = std::dynamic_pointer_cast<GunneboReaderUnit>(getDataTransport()->getReaderUnit());

        EXCEPTION_ASSERT_WITH_LOG(answer.size() >= 3, std::invalid_argument, "A valid command buffer size must be at least 3 bytes long");
        EXCEPTION_ASSERT_WITH_LOG(answer[0] == STX, std::invalid_argument, "The supplied command buffer is not valid (bad STX)");
        size_t foolen = 2;
        if (answer[1] == 0x31 && answer[2] == 0x46)
        {
            foolen = 1;
        }
        EXCEPTION_ASSERT_WITH_LOG(answer[answer.size() - foolen] == ETX, std::invalid_argument, "The supplied command buffer is not valid (bad ETX)");

        // Gunnebo ID is like that: [STX - 1 byte][id - x bytes][ETX - 1 byte][checksum - 1 byte]
        // We don't calculate the checksum ! Who cares ?!? :)

        return std::vector<unsigned char>(answer.begin() + 1, answer.end() - 2);
    }
 std::string DeisterReaderUnit::getName() const
 {
     return getDataTransport()->getName();
 }
 void DeisterReaderUnit::disconnectFromReader()
 {
     getDataTransport()->disconnect();
 }
 bool DeisterReaderUnit::connectToReader()
 {
     getDataTransport()->setReaderUnit(shared_from_this());
     return getDataTransport()->connect();
 }