45ad5c83ee
The pcloudData socket is now opened by UdpCommandDemuxer, when libLivoxProto1 is initialized. We can now just pick up the socket and be certain it'll be there if the lib is being executed.
123 lines
2.9 KiB
C++
123 lines
2.9 KiB
C++
#include <stdexcept>
|
|
#include <callback.h>
|
|
#include <boost/asio/posix/stream_descriptor.hpp>
|
|
#include "livoxProto1.h"
|
|
#include "device.h"
|
|
#include "core.h"
|
|
#include "udpCommandDemuxer.h"
|
|
|
|
|
|
extern "C" {
|
|
|
|
void livoxProto1_getOrCreateDeviceReq(
|
|
const std::string& deviceIdentifier,
|
|
const std::shared_ptr<smo::ComponentThread>& componentThread,
|
|
int commandTimeoutMs, int retryDelayMs,
|
|
const std::string& smoIp, uint8_t smoSubnetNbits,
|
|
uint16_t dataPort, uint16_t cmdPort, uint16_t imuPort,
|
|
smo::Callback<livoxProto1_getOrCreateDeviceReqCbFn> callback
|
|
)
|
|
{
|
|
// Get the global DeviceManager instance
|
|
auto& protoState = livoxProto1::getProtoState();
|
|
if (!protoState.deviceManager)
|
|
{
|
|
throw std::runtime_error(
|
|
std::string(__func__) + ": LivoxProto1 not initialized - call "
|
|
"livoxProto1_main first");
|
|
}
|
|
|
|
// Delegate to DeviceManager
|
|
protoState.deviceManager->getOrCreateDeviceReq(
|
|
deviceIdentifier, componentThread,
|
|
commandTimeoutMs, retryDelayMs,
|
|
smoIp, smoSubnetNbits,
|
|
dataPort, cmdPort, imuPort,
|
|
callback);
|
|
}
|
|
|
|
void livoxProto1_destroyDeviceReq(
|
|
std::shared_ptr<livoxProto1::Device> device,
|
|
smo::Callback<livoxProto1_destroyDeviceReqCbFn> callback
|
|
)
|
|
{
|
|
auto& protoState = livoxProto1::getProtoState();
|
|
if (!protoState.deviceManager)
|
|
{
|
|
throw std::runtime_error(std::string(__func__)
|
|
+ ": DeviceManager not initialized");
|
|
}
|
|
|
|
protoState.deviceManager->destroyDeviceReq(
|
|
device, callback);
|
|
}
|
|
|
|
void livoxProto1_main(
|
|
const std::shared_ptr<smo::ComponentThread>& componentThread,
|
|
const smo::stim_buff::SmoCallbacks& smoCallbacks)
|
|
{
|
|
livoxProto1::main(componentThread, smoCallbacks);
|
|
}
|
|
|
|
void livoxProto1_exit(void)
|
|
{
|
|
livoxProto1::exit();
|
|
}
|
|
|
|
void livoxProto1_device_enablePcloudDataReq(
|
|
std::shared_ptr<livoxProto1::Device> device,
|
|
smo::Callback<livoxProto1_device_enablePcloudDataReqCbFn> callback
|
|
)
|
|
{
|
|
if (!device)
|
|
{
|
|
throw std::runtime_error(std::string(__func__)
|
|
+ ": Device pointer is null");
|
|
}
|
|
|
|
device->enablePcloudDataReq(callback);
|
|
}
|
|
|
|
void livoxProto1_device_disablePcloudDataReq(
|
|
std::shared_ptr<livoxProto1::Device> device,
|
|
smo::Callback<livoxProto1_device_disablePcloudDataReqCbFn> callback
|
|
)
|
|
{
|
|
if (!device)
|
|
{
|
|
throw std::runtime_error(std::string(__func__)
|
|
+ ": Device pointer is null");
|
|
}
|
|
|
|
device->disablePcloudDataReq(callback);
|
|
}
|
|
|
|
void livoxProto1_device_getReturnModeReq(
|
|
std::shared_ptr<livoxProto1::Device> device,
|
|
smo::Callback<livoxProto1_device_getReturnModeReqCbFn> callback
|
|
)
|
|
{
|
|
if (!device)
|
|
{
|
|
throw std::runtime_error(std::string(__func__)
|
|
+ ": Device pointer is null");
|
|
}
|
|
|
|
device->getReturnModeReq(callback);
|
|
}
|
|
|
|
std::shared_ptr<boost::asio::posix::stream_descriptor>
|
|
livoxProto1_getPcloudDataFdDesc(void)
|
|
{
|
|
auto& protoState = livoxProto1::getProtoState();
|
|
if (!protoState.deviceManager)
|
|
{
|
|
throw std::runtime_error(std::string(__func__)
|
|
+ ": DeviceManager not initialized");
|
|
}
|
|
|
|
return protoState.deviceManager->udpCommandDemuxer.pcloudDataSocketDesc;
|
|
}
|
|
|
|
} // extern "C"
|