From e43149610e66ce90377df4a56bcf66cbb4980a91 Mon Sep 17 00:00:00 2001
From: Janis Streib <me@janis-streib.de>
Date: Fri, 31 Dec 2021 18:09:05 +0100
Subject: [PATCH] ADD: osc support

---
 src/G4Export.cpp |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/G4Export.cpp b/src/G4Export.cpp
index f4e70bf..53f0527 100644
--- a/src/G4Export.cpp
+++ b/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;

--
Gitblit v1.9.1