Janis Streib
31.12.21 e43149610e66ce90377df4a56bcf66cbb4980a91
ADD: osc support
2 files modified
1 files added
46 ■■■■ changed files
CMakeLists.txt 5 ●●●●● patch | view | raw | blame | history
cmake/Modules/FindOscPack.cmake 18 ●●●●● patch | view | raw | blame | history
src/G4Export.cpp 23 ●●●● patch | view | raw | blame | history
CMakeLists.txt
@@ -5,6 +5,7 @@
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(G4Track REQUIRED)
find_package(OscPack REQUIRED)
set(SOURCE_FILES
    src/G4Export.cpp
@@ -17,5 +18,5 @@
    src/struct.h)
add_executable(g4export ${SOURCE_FILES})
target_include_directories(g4export PRIVATE ${G4Track_INCLUDE_DIRS})
target_link_libraries(g4export ${G4Track_LIBRARIES})
target_include_directories(g4export PRIVATE ${G4Track_INCLUDE_DIRS} ${OscPack_INCLUDE_DIRS})
target_link_libraries(g4export ${G4Track_LIBRARIES} ${OscPack_LIBRARIES})
cmake/Modules/FindOscPack.cmake
New file
@@ -0,0 +1,18 @@
find_path(OscPack_INCLUDE_DIR NAMES osc/OscPacketListener.h PATH_SUFFIXES oscpack)
find_library(OscPack_LIBRARY NAMES liboscpack.so)
IF (OscPack_INCLUDE_DIR AND OscPack_LIBRARY)
   SET(OscPack_FOUND TRUE)
   SET(OscPack_INCLUDE_DIRS ${OscPack_INCLUDE_DIR})
   SET(OscPack_LIBRARIES ${OscPack_LIBRARY})
ENDIF (OscPack_INCLUDE_DIR AND OscPack_LIBRARY)
IF (OscPack_FOUND)
   IF (NOT OscPack_FIND_QUIETLY)
      MESSAGE(STATUS "Found liboscpack: ${OscPack_LIBRARIES}")
   ENDIF (NOT OscPack_FIND_QUIETLY)
ELSE (OscPack_FOUND)
   IF (OscPack_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Could not find liboscpack")
   ENDIF (OscPack_FIND_REQUIRED)
ENDIF (OscPack_FOUND)
src/G4Export.cpp
@@ -6,11 +6,16 @@
#include "G4Hub.h"
#include <string.h>
#include <unistd.h>
#include <memory>
#include "clipp.h"
#include <ip/UdpSocket.h>
#include <osc/OscOutboundPacketStream.h>
using namespace clipp; using std::cout; using std::string;
#define OUTPUT_BUFFER_SIZE 512
int RunCollect=0;
std::unique_ptr<UdpTransmitSocket> transmitSocket;
void* Collect(REND_STRUCT* prs){
@@ -39,11 +44,18 @@
        i++;
        prs->hubreadmap=0;
        prs->tot_hubs_on_system=prs->pTrk->GetHubsPno(prs);
        char buffer[OUTPUT_BUFFER_SIZE];
        osc::OutboundPacketStream p( buffer, OUTPUT_BUFFER_SIZE );
        p << osc::BeginBundleImmediate;
        for (int i=0;i<prs->numHub;i++){
            auto dat = prs->hubList[i].GetPnoData()[0];
            printf("sns: %i: [%f;%f;%f],[%f,%f,%f]\n",i, dat[0],dat[1],dat[2], dat[3],dat[4],dat[5]);
            //printf("sns: %i: [%f;%f;%f],[%f,%f,%f]\n",i, dat[0],dat[1],dat[2], dat[3],dat[4],dat[5]);
            p << osc::BeginMessage( (string("/hub/") + std::to_string(i)).c_str() )
                << dat[0] << dat[1] << dat[2] << dat[3] << dat[4] << dat[5] << osc::EndMessage;
        }
        p << osc::EndBundle;
        transmitSocket->Send( p.Data(), p.Size() );
        usleep(15000);
        // usleep(8000);
    }
@@ -56,17 +68,20 @@
  CG4Trk trk;
  REND_STRUCT rs;
  string cfgFile;
  string oscSink;
  string oscSinkAddr;
  int oscSinkPort;
  auto cli = (
        value("c4g configuration file", cfgFile),
        value("osc sink", oscSink)
        value("osc sink address", oscSinkAddr),
        integer("osc sink port", oscSinkPort)
  );
  if(!parse(argc, argv, cli)) {
      cout << make_man_page(cli, argv[0]);
    return 1;
  }
  transmitSocket = std::make_unique<UdpTransmitSocket>( IpEndpointName( oscSinkAddr.c_str(), oscSinkPort ) );
  memset(rs.viewTrans,0,sizeof(float)*3);
  rs.srcScale=rs.senScale=0.5;
  rs.counter=0;