Commit 5a01a0c1 authored by Tobias Hunger's avatar Tobias Hunger
Browse files

Add SymbianIDevice



Change-Id: I0332e6a5e8db6e25a87804c647e920cab537eafe
Reviewed-by: default avatarTobias Hunger <tobias.hunger@nokia.com>
parent b439999f
......@@ -34,6 +34,8 @@
#include <projectexplorer/projectexplorer_export.h>
#include <coreplugin/id.h>
#include <QSharedPointer>
#include <QStringList>
#include <QVariantMap>
......@@ -43,8 +45,6 @@ class QDialog;
class QWidget;
QT_END_NAMESPACE
namespace Core { class Id; }
namespace ProjectExplorer {
namespace Internal { class IDevicePrivate; }
class IDeviceWidget;
......
......@@ -41,12 +41,16 @@
#include "toolchainmanager.h"
#include <limits>
#include <extensionsystem/pluginmanager.h>
#include <coreplugin/coreconstants.h>
#include <projectexplorer/buildmanager.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/devicesupport/idevice.h>
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/projectexplorer.h>
#include <utils/qtcassert.h>
#include <QIcon>
#include <QPainter>
namespace {
const char ACTIVE_BC_KEY[] = "ProjectExplorer.Target.ActiveBuildConfiguration";
......@@ -87,13 +91,18 @@ public:
DeployConfiguration *m_activeDeployConfiguration;
QList<RunConfiguration *> m_runConfigurations;
RunConfiguration* m_activeRunConfiguration;
QPixmap m_connectedPixmap;
QPixmap m_disconnectedPixmap;
};
TargetPrivate::TargetPrivate() :
m_isEnabled(true),
m_activeBuildConfiguration(0),
m_activeDeployConfiguration(0),
m_activeRunConfiguration(0)
m_activeRunConfiguration(0),
m_connectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOn.png")),
m_disconnectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOff.png"))
{
}
......@@ -106,6 +115,11 @@ QList<DeployConfigurationFactory *> TargetPrivate::deployFactories() const
Target::Target(Project *project, const QString &id) :
ProjectConfiguration(project, id), d(new TargetPrivate)
{
connect(DeviceManager::instance(), SIGNAL(deviceUpdated(ProjectExplorer::IDevice::Id)),
this, SLOT(updateDeviceState(ProjectExplorer::IDevice::Id)));
// everything changed...
connect(DeviceManager::instance(), SIGNAL(deviceListChanged()),
this, SLOT(updateDeviceState()));
}
Target::~Target()
......@@ -311,6 +325,7 @@ void Target::setActiveDeployConfiguration(DeployConfiguration *dc)
emit activeDeployConfigurationChanged(d->m_activeDeployConfiguration);
emit deployConfigurationEnabledChanged();
}
updateDeviceState();
}
QStringList Target::availableDeployConfigurationIds()
......@@ -398,6 +413,7 @@ void Target::setActiveRunConfiguration(RunConfiguration* configuration)
emit activeRunConfigurationChanged(d->m_activeRunConfiguration);
emit runConfigurationEnabledChanged();
}
updateDeviceState();
}
bool Target::isEnabled() const
......@@ -483,6 +499,59 @@ QVariantMap Target::toMap() const
return map;
}
static QString formatToolTip(const IDevice::DeviceInfo &input)
{
QStringList lines;
foreach (const IDevice::DeviceInfoItem &item, input)
lines << QString::fromLatin1("<b>%1:</b> %2").arg(item.key, item.value);
return lines.join(QLatin1String("<br>"));
}
void Target::updateDeviceState()
{
updateDeviceState(currentDevice()->id());
}
void Target::updateDeviceState(Core::Id devId)
{
IDevice::ConstPtr dev = DeviceManager::instance()->find(devId);
QTC_ASSERT(!dev.isNull(), return);
IDevice::ConstPtr current = currentDevice();
if (current.isNull()
|| devId != current->id()
|| dev->availability() == IDevice::DeviceAvailabilityUnknown) {
setOverlayIcon(QIcon());
setToolTip(QString());
return;
}
static const int TARGET_OVERLAY_ORIGINAL_SIZE = 32;
QPixmap overlay;
if (dev->availability() == IDevice::DeviceAvailable)
overlay = d->m_connectedPixmap;
else
overlay = d->m_disconnectedPixmap;
double factor = Core::Constants::TARGET_ICON_SIZE / (double)TARGET_OVERLAY_ORIGINAL_SIZE;
QSize overlaySize(overlay.size().width()*factor, overlay.size().height()*factor);
QPixmap pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.drawPixmap(Core::Constants::TARGET_ICON_SIZE - overlaySize.width(),
Core::Constants::TARGET_ICON_SIZE - overlaySize.height(),
overlay.scaled(overlaySize));
setOverlayIcon(QIcon(pixmap));
setToolTip(formatToolTip(dev->deviceInformation()));
}
ProjectExplorer::IDevice::ConstPtr Target::currentDevice() const
{
return IDevice::ConstPtr(0);
}
void Target::setEnabled(bool enabled)
{
if (enabled == d->m_isEnabled)
......@@ -580,7 +649,6 @@ bool Target::fromMap(const QVariantMap &map)
return true;
}
// -------------------------------------------------------------------------
// ITargetFactory
// -------------------------------------------------------------------------
......
......@@ -33,14 +33,13 @@
#ifndef TARGET_H
#define TARGET_H
#include "devicesupport/idevice.h"
#include "projectconfiguration.h"
#include "projectexplorer_export.h"
QT_FORWARD_DECLARE_CLASS(QIcon)
namespace Utils {
class Environment;
}
namespace Utils { class Environment; }
namespace ProjectExplorer {
class RunConfiguration;
......@@ -147,11 +146,15 @@ signals:
protected:
Target(Project *parent, const QString &id);
virtual ProjectExplorer::IDevice::ConstPtr currentDevice() const;
void setEnabled(bool);
virtual bool fromMap(const QVariantMap &map);
private slots:
void updateDeviceState();
void updateDeviceState(Core::Id devId);
void changeEnvironment();
void changeBuildConfigurationEnabled();
void changeDeployConfigurationEnabled();
......
......@@ -75,6 +75,7 @@
#include <qt4projectmanager/qt-s60/s60devicedebugruncontrol.h>
#include <qt4projectmanager/qt-s60/s60devicerunconfiguration.h>
#include <qt4projectmanager/qt-s60/s60deployconfiguration.h>
#include <qt4projectmanager/qt-s60/symbianidevice.h>
#include <QApplication>
#include <QHBoxLayout>
......@@ -253,9 +254,9 @@ IAnalyzerEngine *QmlProfilerTool::createEngine(const AnalyzerStartParameters &sp
if (Qt4ProjectManager::S60DeployConfiguration *deployConfig
= qobject_cast<Qt4ProjectManager::S60DeployConfiguration*>(
runConfiguration->target()->activeDeployConfiguration())) {
if (deployConfig->communicationChannel()
== Qt4ProjectManager::S60DeployConfiguration::CommunicationCodaSerialConnection) {
d->m_profilerConnections->setOstConnection(deployConfig->serialPortName());
if (deployConfig->device()->communicationChannel()
== Qt4ProjectManager::SymbianIDevice::CommunicationCodaSerialConnection) {
d->m_profilerConnections->setOstConnection(deployConfig->device()->serialPortName());
isTcpConnection = false;
}
}
......@@ -352,7 +353,7 @@ AnalyzerStartParameters QmlProfilerTool::createStartParameters(RunConfiguration
sp.debuggeeArgs = rc4->commandLineArguments();
sp.displayName = rc4->displayName();
sp.connParams.host = deployConf->deviceAddress();
sp.connParams.host = deployConf->device()->address();
sp.connParams.port = rc4->debuggerAspect()->qmlDebugServerPort();
} else {
// What could that be?
......
......@@ -34,6 +34,7 @@
#include "s60deployconfiguration.h"
#include "s60devicerunconfiguration.h"
#include "symbianidevice.h"
#include "codadevice.h"
#include "codamessage.h"
......@@ -75,13 +76,14 @@ CodaRunControl::CodaRunControl(RunConfiguration *runConfiguration, RunMode mode)
QTC_ASSERT(s60runConfig, return);
const S60DeployConfiguration *activeDeployConf = qobject_cast<S60DeployConfiguration *>(s60runConfig->target()->activeDeployConfiguration());
QTC_ASSERT(activeDeployConf, return);
S60DeployConfiguration::CommunicationChannel channel = activeDeployConf->communicationChannel();
if (channel == S60DeployConfiguration::CommunicationCodaTcpConnection) {
m_address = activeDeployConf->deviceAddress();
m_port = activeDeployConf->devicePort().toInt();
} else if (channel == S60DeployConfiguration::CommunicationCodaSerialConnection) {
m_serialPort = activeDeployConf->serialPortName();
QTC_ASSERT(activeDeployConf->device(), return);
SymbianIDevice::CommunicationChannel channel = activeDeployConf->device()->communicationChannel();
if (channel == SymbianIDevice::CommunicationCodaTcpConnection) {
m_address = activeDeployConf->device()->address();
m_port = activeDeployConf->device()->port().toInt();
} else if (channel == SymbianIDevice::CommunicationCodaSerialConnection) {
m_serialPort = activeDeployConf->device()->serialPortName();
} else {
QTC_ASSERT(false, return);
}
......
SOURCES += $$PWD/s60manager.cpp \
$$PWD/symbianidevice.cpp \
$$PWD/symbianideviceconfigwidget.cpp \
$$PWD/symbianidevicefactory.cpp \
$$PWD/sbsv2parser.cpp \
$$PWD/winscwtoolchain.cpp \
$$PWD/gccetoolchain.cpp \
......@@ -35,6 +38,9 @@ SOURCES += $$PWD/s60manager.cpp \
$$PWD/s60devicedebugruncontrol.cpp
HEADERS += $$PWD/s60manager.h \
$$PWD/symbianidevice.h \
$$PWD/symbianideviceconfigwidget.h \
$$PWD/symbianidevicefactory.h \
$$PWD/sbsv2parser.h \
$$PWD/winscwtoolchain.h \
$$PWD/gccetoolchain.h \
......
......@@ -35,19 +35,17 @@
#include "qt4project.h"
#include "qt4nodes.h"
#include "qt4buildconfiguration.h"
#include "symbianidevice.h"
#include "qt-s60/s60deployconfiguration.h"
#include "qt-s60/s60emulatorrunconfiguration.h"
#include "qt-s60/s60devicerunconfiguration.h"
#include <coreplugin/coreconstants.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
#include <projectexplorer/project.h>
#include <projectexplorer/toolchainmanager.h>
#include <projectexplorer/toolchain.h>
#include <symbianutils/symbiandevicemanager.h>
#include <extensionsystem/pluginmanager.h>
#include <QPainter>
#include <QApplication>
using namespace Qt4ProjectManager;
......@@ -55,22 +53,14 @@ using namespace Qt4ProjectManager::Internal;
Qt4SymbianTarget::Qt4SymbianTarget(Qt4Project *parent, const QString &id) :
Qt4BaseTarget(parent, id),
m_connectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOn.png")),
m_disconnectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOff.png")),
m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this))
{
setDisplayName(defaultDisplayName(id));
setIcon(iconForId(id));
connect(this, SIGNAL(addedDeployConfiguration(ProjectExplorer::DeployConfiguration*)),
this, SLOT(onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration*)));
connect(this, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
this, SLOT(updateToolTipAndIcon()));
}
Qt4SymbianTarget::~Qt4SymbianTarget()
{
}
{ }
QString Qt4SymbianTarget::defaultDisplayName(const QString &id)
{
......@@ -167,91 +157,8 @@ QList<ProjectExplorer::RunConfiguration *> Qt4SymbianTarget::runConfigurationsFo
return result;
}
bool Qt4SymbianTarget::isSymbianConnectionAvailable(QString &tooltipText)
{
const S60DeployConfiguration *s60DeployConf = qobject_cast<S60DeployConfiguration *>(activeDeployConfiguration());
if (!s60DeployConf)
return false;
switch (s60DeployConf->communicationChannel()) {
case S60DeployConfiguration::CommunicationCodaSerialConnection: {
const SymbianUtils::SymbianDeviceManager *sdm = SymbianUtils::SymbianDeviceManager::instance();
const int deviceIndex = sdm->findByPortName(s60DeployConf->serialPortName());
if (deviceIndex == -1) {
tooltipText = tr("<b>Device:</b> Not connected");
return false;
} else {
// device connected
const SymbianUtils::SymbianDevice device = sdm->devices().at(deviceIndex);
tooltipText = device.additionalInformation().isEmpty() ?
tr("<b>Device:</b> %1").arg(device.friendlyName()) :
tr("<b>Device:</b> %1, %2").arg(device.friendlyName(), device.additionalInformation());
return true;
}
}
break;
case S60DeployConfiguration::CommunicationCodaTcpConnection: {
if (!s60DeployConf->deviceAddress().isEmpty() && !s60DeployConf->devicePort().isEmpty()) {
tooltipText = tr("<b>IP address:</b> %1:%2").arg(s60DeployConf->deviceAddress(), s60DeployConf->devicePort());
return true;
}
return false;
}
break;
default:
break;
}
return false;
}
void Qt4SymbianTarget::onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc)
ProjectExplorer::IDevice::ConstPtr Qt4SymbianTarget::currentDevice() const
{
Q_ASSERT(dc);
S60DeployConfiguration *deployConf(qobject_cast<S60DeployConfiguration *>(dc));
if (!deployConf)
return;
connect(deployConf, SIGNAL(serialPortNameChanged()),
this, SLOT(slotUpdateDeviceInformation()));
connect(deployConf, SIGNAL(communicationChannelChanged()),
this, SLOT(slotUpdateDeviceInformation()));
connect(deployConf, SIGNAL(deviceAddressChanged()),
this, SLOT(slotUpdateDeviceInformation()));
connect(deployConf, SIGNAL(devicePortChanged()),
this, SLOT(slotUpdateDeviceInformation()));
}
void Qt4SymbianTarget::slotUpdateDeviceInformation()
{
S60DeployConfiguration *dc(qobject_cast<S60DeployConfiguration *>(sender()));
if (dc && dc == activeDeployConfiguration()) {
updateToolTipAndIcon();
}
}
void Qt4SymbianTarget::updateToolTipAndIcon()
{
static const int TARGET_OVERLAY_ORIGINAL_SIZE = 32;
if (qobject_cast<S60DeployConfiguration *>(activeDeployConfiguration())) {
QPixmap overlay;
QString tooltip;
if (isSymbianConnectionAvailable(tooltip))
overlay = m_connectedPixmap;
else
overlay = m_disconnectedPixmap;
setToolTip(tooltip);
double factor = Core::Constants::TARGET_ICON_SIZE / (double)TARGET_OVERLAY_ORIGINAL_SIZE;
QSize overlaySize(overlay.size().width()*factor, overlay.size().height()*factor);
QPixmap pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE);
pixmap.fill(Qt::transparent);
QPainter painter(&pixmap);
painter.drawPixmap(Core::Constants::TARGET_ICON_SIZE - overlaySize.width(),
Core::Constants::TARGET_ICON_SIZE - overlaySize.height(),
overlay.scaled(overlaySize));
setOverlayIcon(QIcon(pixmap));
} else {
setToolTip(QString());
setOverlayIcon(QIcon());
}
S60DeployConfiguration *dc = dynamic_cast<S60DeployConfiguration *>(activeDeployConfiguration());
return ProjectExplorer::IDevice::ConstPtr(dc ? dc->device() : 0);
}
......@@ -60,18 +60,11 @@ public:
static QString defaultDisplayName(const QString &id);
static QIcon iconForId(const QString &id);
private:
bool isSymbianConnectionAvailable(QString &tooltipText);
private slots:
void onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);
void slotUpdateDeviceInformation();
void updateToolTipAndIcon();
protected:
ProjectExplorer::IDevice::ConstPtr currentDevice() const;
private:
const QPixmap m_connectedPixmap;
const QPixmap m_disconnectedPixmap;
Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
};
} // namespace Internal
......
......@@ -41,14 +41,18 @@
#include "qt4symbiantarget.h"
#include "s60createpackagestep.h"
#include "s60deploystep.h"
#include "symbianidevice.h"
#include "symbianidevicefactory.h"
#include <utils/qtcassert.h>
#include <symbianutils/symbiandevicemanager.h>
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <projectexplorer/project.h>
#include <projectexplorer/toolchain.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <QFileInfo>
......@@ -59,14 +63,8 @@ using namespace Qt4ProjectManager::Internal;
namespace {
const char S60_DC_PREFIX[] = "Qt4ProjectManager.S60DeployConfiguration.";
const char SERIAL_PORT_NAME_KEY[] = "Qt4ProjectManager.S60DeployConfiguration.SerialPortName";
const char INSTALLATION_DRIVE_LETTER_KEY[] = "Qt4ProjectManager.S60DeployConfiguration.InstallationDriveLetter";
const char SILENT_INSTALL_KEY[] = "Qt4ProjectManager.S60DeployConfiguration.SilentInstall";
const char DEVICE_ADDRESS_KEY[] = "Qt4ProjectManager.S60DeployConfiguration.DeviceAddress";
const char DEVICE_PORT_KEY[] = "Qt4ProjectManager.S60DeployConfiguration.DevicePort";
const char COMMUNICATION_CHANNEL_KEY[] = "Qt4ProjectManager.S60DeployConfiguration.CommunicationChannel";
const char DEFAULT_CODA_TCP_PORT[] = "65029";
QString pathFromId(const QString &id)
{
......@@ -82,15 +80,8 @@ QString pathFromId(const QString &id)
S60DeployConfiguration::S60DeployConfiguration(Target *parent) :
DeployConfiguration(parent, QLatin1String(S60_DEPLOYCONFIGURATION_ID)),
m_activeBuildConfiguration(0),
#ifdef Q_OS_WIN
m_serialPortName(QLatin1String("COM5")),
#else
m_serialPortName(QLatin1String(SymbianUtils::SymbianDeviceManager::linuxBlueToothDeviceRootC) + QLatin1Char('0')),
#endif
m_installationDrive('C'),
m_silentInstall(true),
m_devicePort(QLatin1String(DEFAULT_CODA_TCP_PORT)),
m_communicationChannel(CommunicationCodaSerialConnection)
m_silentInstall(true)
{
ctor();
}
......@@ -98,18 +89,18 @@ S60DeployConfiguration::S60DeployConfiguration(Target *parent) :
S60DeployConfiguration::S60DeployConfiguration(Target *target, S60DeployConfiguration *source) :
DeployConfiguration(target, source),
m_activeBuildConfiguration(0),
m_serialPortName(source->m_serialPortName),
m_deviceId(source->m_deviceId),
m_installationDrive(source->m_installationDrive),
m_silentInstall(source->m_silentInstall),
m_deviceAddress(source->m_deviceAddress),
m_devicePort(source->m_devicePort),
m_communicationChannel(source->m_communicationChannel)
m_silentInstall(source->m_silentInstall)
{
ctor();
}
void S60DeployConfiguration::ctor()
{
ProjectExplorer::DeviceManager *dm = ProjectExplorer::DeviceManager::instance();
m_deviceId = dm->defaultDevice(Internal::SymbianIDeviceFactory::deviceType())->id();
setDefaultDisplayName(defaultDisplayName());
// TODO disable S60 Deploy Configuration while parsing
// requires keeping track of the parsing state of the project
......@@ -123,8 +114,7 @@ void S60DeployConfiguration::ctor()
}
S60DeployConfiguration::~S60DeployConfiguration()
{
}
{ }
ProjectExplorer::DeployConfigurationWidget *S60DeployConfiguration::configurationWidget() const
{
......@@ -181,6 +171,11 @@ QString S60DeployConfiguration::createPackageName(const QString &baseName) const
return name;
}
SymbianIDevice *S60DeployConfiguration::device() const
{
return dynamic_cast<SymbianIDevice *>(const_cast<ProjectExplorer::IDevice *>(ProjectExplorer::DeviceManager::instance()->find(m_deviceId).data()));
}
QStringList S60DeployConfiguration::packageFileNamesWithTargetInfo() const
{
QList<Qt4ProFileNode *> leafs = qt4Target()->qt4Project()->allProFiles();
......@@ -303,12 +298,8 @@ void S60DeployConfiguration::updateActiveRunConfiguration(ProjectExplorer::RunCo
QVariantMap S60DeployConfiguration::toMap() const
{
QVariantMap map(ProjectExplorer::DeployConfiguration::toMap());
map.insert(QLatin1String(SERIAL_PORT_NAME_KEY), m_serialPortName);
map.insert(QLatin1String(INSTALLATION_DRIVE_LETTER_KEY), QChar(QLatin1Char(m_installationDrive)));
map.insert(QLatin1String(SILENT_INSTALL_KEY), QVariant(m_silentInstall));
map.insert(QLatin1String(DEVICE_ADDRESS_KEY), QVariant(m_deviceAddress));
map.insert(QLatin1String(DEVICE_PORT_KEY), m_devicePort);
map.insert(QLatin1String(COMMUNICATION_CHANNEL_KEY), QVariant(m_communicationChannel));
return map;
}
......@@ -328,14 +319,9 @@ bool S60DeployConfiguration::fromMap(const QVariantMap &map)
{
if (!DeployConfiguration::fromMap(map))
return false;
m_serialPortName = map.value(QLatin1String(SERIAL_PORT_NAME_KEY)).toString().trimmed();
m_installationDrive = map.value(QLatin1String(INSTALLATION_DRIVE_LETTER_KEY), QChar(QLatin1Char('C')))
.toChar().toAscii();
m_silentInstall = map.value(QLatin1String(SILENT_INSTALL_KEY), QVariant(true)).toBool();
m_deviceAddress = map.value(QLatin1String(DEVICE_ADDRESS_KEY)).toString();
m_devicePort = map.value(QLatin1String(DEVICE_PORT_KEY), QString(QLatin1String(DEFAULT_CODA_TCP_PORT))).toString();
m_communicationChannel = static_cast<CommunicationChannel>(map.value(QLatin1String(COMMUNICATION_CHANNEL_KEY),
QVariant(CommunicationCodaSerialConnection)).toInt());
setDefaultDisplayName(defaultDisplayName());
return true;
......@@ -346,20 +332,6 @@ Qt4SymbianTarget *S60DeployConfiguration::qt4Target() const
return static_cast<Qt4SymbianTarget *>(target());
}
QString S60DeployConfiguration::serialPortName() const
{
return m_serialPortName;
}
void S60DeployConfiguration::setSerialPortName(const QString &name)
{
const QString &candidate = name.trimmed();
if (m_serialPortName == candidate)
return;
m_serialPortName = candidate;
emit serialPortNameChanged();
}
char S60DeployConfiguration::installationDrive() const
{
return m_installationDrive;
......@@ -383,48 +355,6 @@ void S60DeployConfiguration::setSilentInstall(bool silent)
m_silentInstall = silent;
}
QString S60DeployConfiguration::deviceAddress() const
{
return m_deviceAddress;
}
void S60DeployConfiguration::setDeviceAddress(const QString &address)
{
if (m_deviceAddress != address) {
m_deviceAddress = address;
emit deviceAddressChanged();
}
}
QString S60DeployConfiguration::devicePort() const
{
return m_devicePort;
}
void S60DeployConfiguration::setDevicePort(const QString &port)
{
if (m_devicePort != port) {
if (port.isEmpty()) //setup the default CODA's port
m_devicePort = QLatin1String(DEFAULT_CODA_TCP_PORT);
else