lasp/lasp/device/lasp_devicepybind.cpp

112 lines
4.4 KiB
C++

#include <algorithm>
#include <assert.h>
#include <pybind11/numpy.h>
#include <stdint.h>
#include <iostream>
#include "lasp_daqconfig.h"
#include "lasp_deviceinfo.h"
using std::cerr;
namespace py = pybind11;
PYBIND11_MODULE(lasp_device, m) {
m.doc() = "Lasp device interface";
/// DataType
py::class_<DataTypeDescriptor> dtype_desc(m, "DataTypeDescriptor");
dtype_desc.def_readonly("name", &DataTypeDescriptor::name);
dtype_desc.def_readonly("sw", &DataTypeDescriptor::sw);
dtype_desc.def_readonly("is_floating", &DataTypeDescriptor::is_floating);
py::enum_<DataTypeDescriptor::DataType>(dtype_desc, "DataType")
.value("dtype_fl32", DataTypeDescriptor::DataType::dtype_fl32)
.value("dtype_fl64", DataTypeDescriptor::DataType::dtype_fl64)
.value("dtype_int8", DataTypeDescriptor::DataType::dtype_int8)
.value("dtype_int16", DataTypeDescriptor::DataType::dtype_int16)
.value("dtype_int32", DataTypeDescriptor::DataType::dtype_int32).export_values();
dtype_desc.def_readonly("dtype", &DataTypeDescriptor::dtype);
/// DaqApi
py::class_<DaqApi> daqapi(m, "DaqApi");
daqapi.def_readonly("apiname", &DaqApi::apiname);
daqapi.def_readonly("apicode", &DaqApi::apicode);
daqapi.def_readonly("api_specific_subcode", &DaqApi::api_specific_subcode);
daqapi.def("__str__", [](const DaqApi &d) { return std::string(d); });
/// DeviceInfo
py::class_<DeviceInfo> devinfo(m, "DeviceInfo");
devinfo.def_readonly("api", &DeviceInfo::api);
devinfo.def_readonly("device_name", &DeviceInfo::device_name);
devinfo.def_readonly("availableDataTypes", &DeviceInfo::availableDataTypes);
devinfo.def_readonly("prefDataTypeIndex", &DeviceInfo::prefDataTypeIndex);
devinfo.def_readonly("availableSampleRates",
&DeviceInfo::availableSampleRates);
devinfo.def_readonly("prefSampleRateIndex", &DeviceInfo::prefSampleRateIndex);
devinfo.def_readonly("availableFramesPerBlock",
&DeviceInfo::availableFramesPerBlock);
devinfo.def_readonly("prefFramesPerBlockIndex",
&DeviceInfo::prefFramesPerBlockIndex);
devinfo.def_readonly("availableInputRanges",
&DeviceInfo::availableInputRanges);
devinfo.def_readonly("prefInputRangeIndex", &DeviceInfo::prefInputRangeIndex);
devinfo.def_readonly("ninchannels", &DeviceInfo::ninchannels);
devinfo.def_readonly("noutchannels", &DeviceInfo::noutchannels);
devinfo.def_readonly("hasInputIEPE", &DeviceInfo::hasInputIEPE);
devinfo.def_readonly("hasInputACCouplingSwitch",
&DeviceInfo::hasInputACCouplingSwitch);
devinfo.def("serialize", &DeviceInfo::serialize);
devinfo.def_static("deserialize", &DeviceInfo::deserialize);
/// DaqConfiguration
py::class_<DaqConfiguration> daqconfig(m, "DaqConfiguration");
daqconfig.def(py::init<>());
daqconfig.def_readwrite("eninchannels", &DaqConfiguration::eninchannels);
daqconfig.def_readwrite("enoutchannels", &DaqConfiguration::enoutchannels);
daqconfig.def_readwrite("inchannel_sensitivities",
&DaqConfiguration::inchannel_sensitivities);
daqconfig.def_readwrite("inchannel_metadata",
&DaqConfiguration::inchannel_metadata);
daqconfig.def_readwrite("inchannel_names",
&DaqConfiguration::inchannel_names);
daqconfig.def_readwrite("outchannel_sensitivities",
&DaqConfiguration::outchannel_sensitivities);
daqconfig.def_readwrite("outchannel_names",
&DaqConfiguration::outchannel_names);
daqconfig.def_readwrite("inchannel_metadata",
&DaqConfiguration::inchannel_metadata);
daqconfig.def_readwrite("sampleRateIndex",
&DaqConfiguration::sampleRateIndex);
daqconfig.def_readwrite("dataTypeIndex",
&DaqConfiguration::dataTypeIndex);
daqconfig.def_readwrite("framesPerBlockIndex",
&DaqConfiguration::framesPerBlockIndex);
daqconfig.def_readwrite("monitorOutput",
&DaqConfiguration::monitorOutput);
daqconfig.def_readwrite("inputIEPEEnabled",
&DaqConfiguration::inputIEPEEnabled);
daqconfig.def_readwrite("inputACCouplingMode",
&DaqConfiguration::inputACCouplingMode);
daqconfig.def_readwrite("inputRangeIndices",
&DaqConfiguration::inputRangeIndices);
daqconfig.def("match", &DaqConfiguration::match);
}