Janis Streib
04.07.22 ee3cd19bc4219fb78cbce560fb334b5d404d36f7
src/G4Export.cpp
@@ -6,11 +6,19 @@
#include "G4Hub.h"
#include <string.h>
#include <unistd.h>
#include <memory>
#include "clipp.h"
#include <ip/UdpSocket.h>
#include <osc/OscOutboundPacketStream.h>
#include <sstream>
using namespace clipp; using std::cout; using std::string;
#define OUTPUT_BUFFER_SIZE 512
int RunCollect=0;
std::unique_ptr<UdpTransmitSocket> transmitSocket;
bool use_text = false;
void* Collect(REND_STRUCT* prs){
@@ -39,11 +47,35 @@
      i++;
      prs->hubreadmap=0;
      prs->tot_hubs_on_system=prs->pTrk->GetHubsPno(prs);
      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]);
      }
      char buffer[OUTPUT_BUFFER_SIZE];
      for (int i=0;i<prs->numHub;i++){
         osc::OutboundPacketStream p( buffer, OUTPUT_BUFFER_SIZE );
         if(!use_text) {
            p << osc::BeginBundleImmediate;
         }
         for(int j=0;j<G4_SENSORS_PER_HUB;j++) {
            if(!prs->hubList[i].IsSenActive(j)){
               continue;
            }
            auto dat = prs->hubList[i].GetPnoData()[j];
            //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("/g4/hub/") + std::to_string(prs->hubList[i].GetId()) + string("/") + std::to_string(j)).c_str());
            std::ostringstream ss;
            if(use_text) {
               ss << "[" << dat[0] << "," << dat[1] << "," << dat[2] << "," << dat[3] << "," << dat[4] << "," << dat[5] << "]";
               auto res = ss.str();
               p << res.c_str();
            } else {
               p << dat[0] << dat[1] << dat[2] << dat[3] << dat[4] << dat[5];
            }
            p << osc::EndMessage;
         }
         if(!use_text) {
            p << osc::EndBundle;
         }
         transmitSocket->Send( p.Data(), p.Size() );
      }
      usleep(15000);
      // usleep(8000);
   }
@@ -56,22 +88,25 @@
  CG4Trk trk;
  REND_STRUCT rs;
  string cfgFile;
  string oscSink;
  string oscSinkAddr;
  int oscSinkPort;
  auto cli = (
   option("-t", "--text").set(use_text).doc("send strings in osc messages instead of a float bundle"),
        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;
  cfgFile="config.g4c";
  int resp=trk.Connect(const_cast<char*>(cfgFile.c_str())); // whaaaaa
  if (!resp){
    printf("Error Connecting to G4\n");