Starting from 2021-07-01, all LRZ GitLab users will be required to explicitly accept the GitLab Terms of Service. Please see the detailed information at https://doku.lrz.de/display/PUBLIC/GitLab and make sure that your projects conform to the requirements.

Commit 54537480 authored by Christian Schulte zu Berge's avatar Christian Schulte zu Berge
Browse files

Introducing campcom module

parent 3f841777
# - Find CAMPCOM
# Find the native CAMPCOM includes and library.
# Once done this will define
#
# CAMPCOM_INCLUDE_DIRS - where to find the CAMPCom header files etc.
# CAMPCOM_LIBRARIES - List of libraries when using CAMPCOM.
# CAMPCOM_FOUND - True if CAMPCOM found.
#
# CAMPCOM_VERSION_STRING - The version of CAMPCOM found (x.y.z)
# CAMPCOM_VERSION_MAJOR - The major version of CAMPCOM
# CAMPCOM_VERSION_MINOR - The minor version of CAMPCOM
# CAMPCOM_VERSION_PATCH - The patch version of CAMPCOM
# CAMPCOM_VERSION_TWEAK - The tweak version of CAMPCOM
#
# The following variable are provided for backward compatibility
#
# CAMPCOM_MAJOR_VERSION - The major version of CAMPCOM
# CAMPCOM_MINOR_VERSION - The minor version of CAMPCOM
# CAMPCOM_PATCH_VERSION - The patch version of CAMPCOM
#
# An includer may set CAMPCOM_ROOT to a CAMPCOM installation root to tell
# this module where to look.
set(_CAMPCOM_SEARCHES)
# Search CAMPCOM_ROOT first if it is set.
if(CAMPCOM_ROOT)
set(_CAMPCOM_SEARCH_ROOT PATHS ${CAMPCOM_ROOT} NO_DEFAULT_PATH)
list(APPEND _CAMPCOM_SEARCHES _CAMPCOM_SEARCH_ROOT)
endif()
# Normal search.
set(_CAMPCOM_SEARCH_NORMAL
PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\CAMPCOM;InstallPath]"
"$ENV{PROGRAMFILES}/CAMPCOM"
"$ENV{CAMPCOM_DIR}"
"$ENV{CAMPCOM_ROOT}"
"${CAMPCOM_BUILD}/bin"
"${CAMPCOM_BUILD}/bin/Debug"
"${CAMPCOM_BUILD}/bin/Release"
)
list(APPEND _CAMPCOM_SEARCHES _CAMPCOM_SEARCH_NORMAL)
set(CAMPCOM_NAMES CCClientLib CCCCommonLib CCServerLib)
# Try each search configuration.
foreach(search ${_CAMPCOM_SEARCHES})
find_path(CAMPCOM_INCLUDE_DIR NAMES CommonLib/Main/CAMPComDefinitions.h ${${search}} PATH_SUFFIXES include)
find_library(CAMPCOM_LIBRARY NAMES ${CAMPCOM_NAMES} ${${search}} PATH_SUFFIXES lib)
endforeach()
mark_as_advanced(CAMPCOM_LIBRARY CAMPCOM_INCLUDE_DIR)
if(CAMPCOM_INCLUDE_DIR AND EXISTS "${CAMPCOM_INCLUDE_DIR}/CommonLib/Main/CAMPComDefinitions.h")
file(STRINGS "${CAMPCOM_INCLUDE_DIR}/CommonLib/Main/CAMPComDefinitions.h" CAMPCOM_H REGEX "^#define CAMPCOM_VERSION \"[^\"]*\"$")
string(REGEX REPLACE "^.*CAMPCOM_VERSION \"([0-9]+).*$" "\\1" CAMPCOM_VERSION_MAJOR "${CAMPCOM_H}")
string(REGEX REPLACE "^.*CAMPCOM_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" CAMPCOM_VERSION_MINOR "${CAMPCOM_H}")
string(REGEX REPLACE "^.*CAMPCOM_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" CAMPCOM_VERSION_PATCH "${CAMPCOM_H}")
set(CAMPCOM_VERSION_STRING "${CAMPCOM_VERSION_MAJOR}.${CAMPCOM_VERSION_MINOR}.${CAMPCOM_VERSION_PATCH}")
# only append a TWEAK version if it exists:
set(CAMPCOM_VERSION_TWEAK "")
if( "${CAMPCOM_H}" MATCHES "^.*CAMPCOM_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$")
set(CAMPCOM_VERSION_TWEAK "${CMAKE_MATCH_1}")
set(CAMPCOM_VERSION_STRING "${CAMPCOM_VERSION_STRING}.${CAMPCOM_VERSION_TWEAK}")
endif()
set(CAMPCOM_MAJOR_VERSION "${CAMPCOM_VERSION_MAJOR}")
set(CAMPCOM_MINOR_VERSION "${CAMPCOM_VERSION_MINOR}")
set(CAMPCOM_PATCH_VERSION "${CAMPCOM_VERSION_PATCH}")
endif()
# handle the QUIETLY and REQUIRED arguments and set CAMPCOM_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CAMPCOM REQUIRED_VARS CAMPCOM_LIBRARY CAMPCOM_INCLUDE_DIR
VERSION_VAR CAMPCOM_VERSION_STRING)
if(CAMPCOM_FOUND)
set(CAMPCOM_INCLUDE_DIRS ${CAMPCOM_INCLUDE_DIR})
set(CAMPCOM_LIBRARIES ${CAMPCOM_LIBRARY})
endif()
LIST(APPEND CAMPCOM_INCLUDE_DIRS
${CAMPCOM_INCLUDE_DIR}/CommonLib/MathLib
${CAMPCOM_INCLUDE_DIR}/CommonLib/MathLib/GL
${CAMPCOM_INCLUDE_DIR}/CommonLib/Messages
${CAMPCOM_INCLUDE_DIR}/CommonLib/Util
${CAMPCOM_INCLUDE_DIR}/CommonLib/Main
${CAMPCOM_INCLUDE_DIR}/CommonLib/Ext
${CAMPCOM_INCLUDE_DIR}/CommonLib/DataTypes
${CAMPCOM_INCLUDE_DIR}/TrackingLib/src
${CAMPCOM_INCLUDE_DIR}/TrackingLib/NDI
${CAMPCOM_INCLUDE_DIR}/TrackingLib/Ascension
${CAMPCOM_INCLUDE_DIR}/ClientLib/src
${CAMPCOM_INCLUDE_DIR}/ServerLib/src)
\ No newline at end of file
# CMake file for campcom module
LIST(APPEND CMAKE_MODULE_PATH "${ModulesDir}/campcom")
FIND_PACKAGE(CAMPCom REQUIRED)
IF(CAMPCOM_FOUND)
LIST(APPEND ThisModIncludeDirs ${CAMPCOM_INCLUDE_DIRS})
LIST(APPEND ThisModExternalLibs ${CAMPCOM_LIBRARIES})
ELSE()
MESSAGE(FATAL_ERROR "Could not find CAMPCom. Please specify CAMPCOM_ROOT.")
ENDIF()
# Source files:
FILE(GLOB ThisModSources RELATIVE ${ModulesDir}
modules/campcom/pipelines/*.cpp
modules/campcom/processors/*.cpp
)
# Header files (including GLSL files so that they'll appear in VS projects)
FILE(GLOB ThisModHeaders RELATIVE ${ModulesDir}
modules/campcom/pipelines/*.h
modules/campcom/processors/*.h
)
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitt Mnchen
// Boltzmannstr. 3, 85748 Garching b. Mnchen, Germany
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
//
// Legal disclaimer provided by the BSD license:
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// ================================================================================================
#include "streamingmhddemo.h"
#include "tgt/event/keyevent.h"
#include "core/datastructures/imagedata.h"
#include "core/classification/geometry1dtransferfunction.h"
#include "core/classification/tfgeometry1d.h"
namespace campvis {
StreamingMhdDemo::StreamingMhdDemo(DataContainer* dc)
: AutoEvaluationPipeline(dc)
, _imageReader()
, _ve(&_canvasSize)
{
addProcessor(&_imageReader);
addProcessor(&_ve);
addEventListenerToBack(&_ve);
}
StreamingMhdDemo::~StreamingMhdDemo() {
}
void StreamingMhdDemo::init() {
AutoEvaluationPipeline::init();
_imageReader.s_validated.connect(this, &StreamingMhdDemo::onProcessorValidated);
_ve.p_outputImage.setValue("combine");
_renderTargetID.setValue("combine");
_imageReader.p_address.setValue("127.0.0.1");
_imageReader.p_targetImageID.setValue("reader.output");
_imageReader.p_targetImageID.addSharedProperty(&_ve.p_inputVolume);
Geometry1DTransferFunction* dvrTF = new Geometry1DTransferFunction(128, tgt::vec2(0.f, 1.f));
dvrTF->addGeometry(TFGeometry1D::createQuad(tgt::vec2(.1f, .125f), tgt::col4(255, 0, 0, 32), tgt::col4(255, 0, 0, 32)));
dvrTF->addGeometry(TFGeometry1D::createQuad(tgt::vec2(.4f, .5f), tgt::col4(0, 255, 0, 128), tgt::col4(0, 255, 0, 128)));
static_cast<TransferFunctionProperty*>(_ve.getProperty("TransferFunction"))->replaceTF(dvrTF);
_canvasSize.s_changed.connect<StreamingMhdDemo>(this, &StreamingMhdDemo::onRenderTargetSizeChanged);
}
void StreamingMhdDemo::deinit() {
_canvasSize.s_changed.disconnect(this);
AutoEvaluationPipeline::deinit();
}
void StreamingMhdDemo::onRenderTargetSizeChanged(const AbstractProperty* prop) {
}
void StreamingMhdDemo::onProcessorValidated(AbstractProcessor* processor) {
}
}
\ No newline at end of file
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universität München
// Boltzmannstr. 3, 85748 Garching b. München, Germany
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
//
// Legal disclaimer provided by the BSD license:
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// ================================================================================================
#ifndef STREAMINGMHDDEMO_H__
#define STREAMINGMHDDEMO_H__
#include "modules/campcom/processors/campcommhdreceiver.h"
#include "core/pipeline/autoevaluationpipeline.h"
#include "core/properties/cameraproperty.h"
#include "modules/vis/processors/volumeexplorer.h"
namespace campvis {
class StreamingMhdDemo : public AutoEvaluationPipeline {
public:
/**
* Creates a AutoEvaluationPipeline.
*/
StreamingMhdDemo(DataContainer* dc);
/**
* Virtual Destructor
**/
virtual ~StreamingMhdDemo();
/// \see AutoEvaluationPipeline::init()
virtual void init();
/// \see AutoEvaluationPipeline::deinit()
virtual void deinit();
/// \see AbstractPipeline::getName()
virtual const std::string getName() const { return getId(); };
static const std::string getId() { return "StreamingMhdDemo"; };
void onRenderTargetSizeChanged(const AbstractProperty* prop);
protected:
/**
* Slot getting called when one of the observed processors got validated.
* Updates the camera properties, when the input image has changed.
* \param processor The processor that emitted the signal
*/
virtual void onProcessorValidated(AbstractProcessor* processor);
CampcomMhdReceiver _imageReader;
VolumeExplorer _ve;
};
}
#endif // STREAMINGMHDDEMO_H__
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitt Mnchen
// Boltzmannstr. 3, 85748 Garching b. Mnchen, Germany
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
//
// Legal disclaimer provided by the BSD license:
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// ================================================================================================
#include "campcommhdreceiver.h"
#include "core/datastructures/imagedata.h"
#include "core/datastructures/genericimagerepresentationlocal.h"
namespace campvis {
const std::string CampcomMhdReceiver::loggerCat_ = "CAMPVis.modules.io.CampcomMhdReceiver";
CampcomMhdReceiver::CampcomMhdReceiver()
: AbstractProcessor()
, p_address("ServerAddress", "Server Address", "127.0.0.1")
, p_connect("Connect", "Connect to Server", AbstractProcessor::VALID)
, p_targetImageID("targetImageName", "Target Image ID", "CampcomMhdReceiver.output", DataNameProperty::WRITE)
, p_imageOffset("ImageOffset", "Image Offset in mm", tgt::vec3(0.f), tgt::vec3(-10000.f), tgt::vec3(10000.f), tgt::vec3(0.1f))
, p_voxelSize("VoxelSize", "Voxel Size in mm", tgt::vec3(1.f), tgt::vec3(-100.f), tgt::vec3(100.f), tgt::vec3(0.1f))
, _ccclient(0)
{
addProperty(&p_address);
addProperty(&p_targetImageID);
addProperty(&p_connect);
addProperty(&p_imageOffset);
addProperty(&p_voxelSize);
}
CampcomMhdReceiver::~CampcomMhdReceiver() {
}
void CampcomMhdReceiver::init() {
p_connect.s_clicked.connect(this, &CampcomMhdReceiver::onBtnConnectClicked);
}
void CampcomMhdReceiver::deinit() {
p_connect.s_clicked.disconnect(this);
_ccclient->disconnect();
delete _ccclient;
_ccclient = 0;
}
void CampcomMhdReceiver::process(DataContainer& data) {
// all parsing done - lets create the image:
// ImageData* image = new ImageData(dimensionality, size, numChannels);
// ImageRepresentationDisk::create(image, url, pt, offset, e);
// image->setMappingInformation(ImageMappingInformation(size, imageOffset + p_imageOffset.getValue(), voxelSize * p_voxelSize.getValue()));
// data.addData(p_targetImageID.getValue(), image);
validate(INVALID_RESULT);
}
void CampcomMhdReceiver::onBtnConnectClicked() {
if (_ccclient) {
_ccclient->disconnect();
delete _ccclient;
_ccclient = 0;
}
_ccclient = new campcom::CAMPComClient("Campvis", campcom::Device_CAMPVis, p_address.getValue());
_ccclient->connect();
if (_ccclient->isConnected()) {
campcom::DataCallback dc;
dc = boost::bind(&CampcomMhdReceiver::ccReceiveImage, this, _1);
campcom::SuccessCallback sc = std::bind1st(std::mem_fun(&CampcomMhdReceiver::ccSuccessCalback), this);
_ccclient->subscribe(campcom::Type_Image, dc, sc);
}
else {
LWARNING("Could not connect to CAMPCom server.");
delete _ccclient;
_ccclient = 0;
}
}
void CampcomMhdReceiver::ccReceiveImage(std::vector<campcom::Byte>& msg) {
}
void CampcomMhdReceiver::ccSuccessCalback(bool b) {
LINFO("CAMPCom subscribe callback: " << b);
}
}
\ No newline at end of file
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitt Mnchen
// Boltzmannstr. 3, 85748 Garching b. Mnchen, Germany
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
//
// Legal disclaimer provided by the BSD license:
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// ================================================================================================
#ifndef CAMPCOMMHDRECEIVER_H__
#define CAMPCOMMHDRECEIVER_H__
#include <string>
#include <CommonLib/Main/CAMPComDefinitions.h>
#include <CommonLib/DataTypes/MHDImageData.hpp>
#include <ClientLib/src/CAMPComClient.hpp>
#include "core/pipeline/abstractprocessor.h"
#include "core/properties/buttonproperty.h"
#include "core/properties/datanameproperty.h"
#include "core/properties/floatingpointproperty.h"
namespace campvis {
/**
* Reads a MHD image file into the pipeline.
*
* \note Full format specification at http://www.itk.org/Wiki/MetaIO/Documentation
*/
class CampcomMhdReceiver : public AbstractProcessor {
public:
/**
* Constructs a new CampcomMhdReceiver Processor
**/
CampcomMhdReceiver();
/**
* Destructor
**/
virtual ~CampcomMhdReceiver();
/// \see AbstractProcessor::init()
virtual void init();
/// \see AbstractProcessor::deinit()
virtual void deinit();
/**
* Reads the MHD file into an ImageRepresentationDisk representation
* \param data DataContainer to work on
*/
virtual void process(DataContainer& data);
/// \see AbstractProcessor::getName()
virtual const std::string getName() const { return "CampcomMhdReceiver"; };
/// \see AbstractProcessor::getDescription()
virtual const std::string getDescription() const { return "Reads an MHD image into the pipeline."; };
/// \see AbstractProcessor::getAuthor()
virtual const std::string getAuthor() const { return "Christian Schulte zu Berge <christian.szb@in.tum.de>"; };
/// \see AbstractProcessor::getProcessorState()
virtual const ProcessorState getProcessorState() const { return AbstractProcessor::TESTING; };
StringProperty p_address; ///< URL for file to read
ButtonProperty p_connect; ///<
DataNameProperty p_targetImageID; ///< image ID for read image
Vec3Property p_imageOffset; ///< Image Offset in mm
Vec3Property p_voxelSize; ///< Voxel Size in mm
protected:
void onBtnConnectClicked();
void ccReceiveImage(std::vector<campcom::Byte>& msg);
void ccSuccessCalback(bool b);
campcom::CAMPComClient* _ccclient;
static const std::string loggerCat_;
};
}
#endif // CAMPCOMMHDRECEIVER_H__
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment