void DeviceRS232::search ()
{
    //подметод
    idInSearchList++;
    ms(tr ("Search: idInSearchList=%1").arg(idInSearchList),MSG_DEBUG);


    if (idInSearchList>=searchPortLst.size())
    {
        //ругнулись на то, что найти не удалось
        ms(tr ("Найти устройство не вышло id=%1").arg(id), MSG_ERROR);
        emit fireDisconnected(id); //чтобы менеджер знал, что найти не удалось!
        portIsSearched=0;//сняли флаг поиска, так как поиск завершён, пусть и неудачей
     //   searchPortLst.clear(); //чтоб даже искать не пытался вдруг
        return;

    }


    //собственно, действия
    //устанавливаем порт
    port->setPortName(searchPortLst.at(idInSearchList).portName);


        ms(tr ("Search: portname=%1").arg(port->portName()),MSG_DEBUG);


        //если законнектиться не вышло, что может произойти в случае, если на порту уже есть какое-то устройство,
        //то надо продвигаться дальше по портам
    while (connectx()) {
        idInSearchList++;
        port->setPortName(searchPortLst.at(idInSearchList).portName);
    }

        //connectx();
     ms(tr ("Connect triggered"),MSG_DEBUG);


    //и мы пытаемся подключиться. Если подключиться получилось, то устройство
    //запустит слот fireConnected
    /*
        Дальше вопрос - либо сносить подключенный порт из списка и возвращать список, либо
        менеджер сам по пришествии сигнала от того девайса, который сейчас в активном поиске,
        выведет ошибку (если не нашёлся), а если нашёлся, то перед подачей списка другому устройству
        сам посносит оттуда порты подключенных устройств.

        УПРТСТЬ!!!!!!Ё!!!!Омск!!!!!


        Важный момент! до тех пор пока не случилось коннекта или дисконнекта, менеджер не
        должен разрешать поиск порта, не то конфликт и ужос. 13 портов тестятся 40 сек, не менее!



    */



}
void Device::setConnectedState (bool isState)
{
if (isState==isConnected)
return;
    isConnected=isState;

if (isConnected)
{ emit fireConnected(id);}

else
{
if (!portIsSearched)  emit fireDisconnected(id);
}

}
void DeviceRS232::setConnectedState (bool isState)
{

    if (portIsSearched) //если мы ищем порт

    {
        if (!isState)  //, то дело лишь в том, что на  данном порту нет устройства

        {
            port->close(); //порт закрываем
            ms(tr ("setConnectedState triggered with 0 parameter, starting search"),MSG_DEBUG); //рассказываем, что таки нет устройства
            search (); // и запускаем поиск обратно, он сам уже начнёт другой порт опрашивать

        return; //вернуться из функции, чтоб левого ничего не запустить
        }


    }
    //теперь если порт не ищем

    //ms(tr ("nexxt"),MSG_DEBUG); //рассказываем, что таки нет устройства




    isConnected=isState;  //иначе присвариваем

    if (isConnected) //если наконец подключились
    {
        //if (isState!=isConnected)  //если состояние не такое, как пришло
       //{
            emit fireConnected(id); //рассказать, что подключились
            portIsSearched=0; //и отключить поиск порта,если он был включен
        //}
    }

   else //иначе, если мы отключены
    {
            emit fireDisconnected(id);//об этом надо рассказать
    }



    }
int  DeviceRS232Rubin201::measure(QString type)
{
//запущает  процесс измерений

    //for debugging
//    qDebug ("MEASURE STARTED DEVICE RUBIN");


    waitingForConnect=0;

    if (!isConnected)
        {
            emit fireDisconnected(id);
            ms("ERR 2651 Not connected",MSG_ERROR);
            return 2691;
        }



    return sendToPort("0x82");

}
		void ApiP2PExtensionHandler::processCommand(const std::vector<std::string> &cmd)
		{
			try {
				if (cmd[0] == "connected") {
					if (cmd.size() < 4) throw ibrcommon::Exception("not enough parameters");

					const dtn::data::EID eid(cmd[1]);
					dtn::core::Node::Protocol proto = dtn::core::Node::CONN_TCPIP;

					if (cmd[2] == "tcp") {
						proto = dtn::core::Node::CONN_TCPIP;
					}
					else if (cmd[2] == "udp") {
						proto = dtn::core::Node::CONN_UDPIP;
					}

					const dtn::core::Node::URI uri(dtn::core::Node::NODE_CONNECTED, proto, cmd[3], 0, 30);
					fireConnected(eid, uri);

					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_OK << " NODE CONNECTED" << std::endl;
				}
				else if (cmd[0] == "disconnected") {
					if (cmd.size() < 2) throw ibrcommon::Exception("not enough parameters");

					const dtn::data::EID eid(cmd[1]);
					dtn::core::Node::Protocol proto = dtn::core::Node::CONN_TCPIP;

					if (cmd[2] == "tcp") {
						proto = dtn::core::Node::CONN_TCPIP;
					}
					else if (cmd[2] == "udp") {
						proto = dtn::core::Node::CONN_UDPIP;
					}

					const dtn::core::Node::URI uri(dtn::core::Node::NODE_CONNECTED, proto, cmd[3], 0, 10);
					fireDisconnected(eid, uri);

					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_OK << " NODE DISCONNECTED" << std::endl;
				}
				else if (cmd[0] == "discovered") {
					if (cmd.size() < 2) throw ibrcommon::Exception("not enough parameters");

					const dtn::data::EID eid(cmd[1]);
					const dtn::core::Node::URI uri(dtn::core::Node::NODE_P2P_DIALUP, this->getProtocol(), cmd[2], 120, 10);
					fireDiscovered(eid, uri);

					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_OK << " NODE DISCOVERED" << std::endl;
				}
				else if (cmd[0] == "interface") {
					if (cmd.size() < 2) throw ibrcommon::Exception("not enough parameters");

					if (cmd[1] == "up") {
						const ibrcommon::vinterface iface(cmd[2]);
						fireInterfaceUp(iface);

						ibrcommon::MutexLock l(_write_lock);
						_stream << ClientHandler::API_STATUS_OK << " INTERFACE UP" << std::endl;
					}
					else if (cmd[1] == "down") {
						const ibrcommon::vinterface iface(cmd[2]);
						fireInterfaceDown(iface);

						ibrcommon::MutexLock l(_write_lock);
						_stream << ClientHandler::API_STATUS_OK << " INTERFACE DOWN" << std::endl;
					}
					else {
						ibrcommon::MutexLock l(_write_lock);
						_stream << ClientHandler::API_STATUS_BAD_REQUEST << " UNKNOWN INTERFACE STATE" << std::endl;
					}
				}
				else {
					ibrcommon::MutexLock l(_write_lock);
					_stream << ClientHandler::API_STATUS_BAD_REQUEST << " UNKNOWN ACTION" << std::endl;
				}
			} catch (const std::exception&) {
				ibrcommon::MutexLock l(_write_lock);
				_stream << ClientHandler::API_STATUS_BAD_REQUEST << " ERROR" << std::endl;
			}
		}