Skip to content

Commit 455cabe

Browse files
committed
Add M8 strobe configuration
Signed-off-by: stas.bucik <[email protected]>
1 parent 6cf7c06 commit 455cabe

File tree

5 files changed

+45
-0
lines changed

5 files changed

+45
-0
lines changed

bindings/python/src/DeviceBindings.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,25 @@ void DeviceBindings::bind(pybind11::module& m, void* pCallstack) {
854854
},
855855
DOC(dai, DeviceBase, getM8FsyncRole)
856856
)
857+
.def(
858+
"setM8StrobeLimits",
859+
[](DeviceBase& d, float min, float max) {
860+
py::gil_scoped_release release;
861+
return d.setM8StrobeLimits(min, max);
862+
},
863+
py::arg("min"),
864+
py::arg("max"),
865+
DOC(dai, DeviceBase, setM8StrobeLimits)
866+
)
867+
.def(
868+
"setM8StrobeEnable",
869+
[](DeviceBase& d, bool enable) {
870+
py::gil_scoped_release release;
871+
d.setM8StrobeEnable(enable);
872+
},
873+
py::arg("enable"),
874+
DOC(dai, DeviceBase, setM8StrobeEnable)
875+
)
857876
.def(
858877
"getDeviceName",
859878
[](DeviceBase& d) {

examples/cpp/Misc/MultiDevice/multi_device_m8_fsync.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ int main(int argc, char** argv) {
8282
auto role = device->getM8FsyncRole();
8383

8484
if (role == dai::M8FsyncRole::MASTER) {
85+
device->setM8StrobeEnable(true);
86+
device->setM8StrobeLimits(0.05f, 0.95f);
8587
master_pipelines.push_back(pipeline);
8688
} else if (role == dai::M8FsyncRole::SLAVE) {
8789
slave_pipelines.push_back(pipeline);

examples/python/Misc/MultiDevice/multi_device_m8_fsync.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ def createPipeline(pipeline: dai.Pipeline, socket: dai.CameraBoardSocket = dai.C
100100
pipeline, out_q = createPipeline(pipeline, socket)
101101
role = device.getM8FsyncRole()
102102
if (role == dai.M8FsyncRole.MASTER):
103+
device.setM8StrobeEnable(True)
104+
device.setM8StrobeLimits(0.05, 0.95)
103105
master_pipelines.append(pipeline)
104106
elif (role == dai.M8FsyncRole.SLAVE):
105107
slave_pipelines.append(pipeline)

include/depthai/device/DeviceBase.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,20 @@ class DeviceBase {
811811
*/
812812
M8FsyncRole getM8FsyncRole();
813813

814+
/**
815+
* Sets the M8 Fsync strobe limits
816+
* @param min Minimum strobe value in percent
817+
* @param max Maximum strobe value in percent
818+
* @returns Tuple of bool and string. Bool specifies if role was set without failures. String is the error message describing the failure reason.
819+
*/
820+
std::tuple<bool, std::string> setM8StrobeLimits(float min, float max);
821+
822+
/**
823+
* Set whether the M8 Fsync strobe should be enabled
824+
* @param enable Enables or disables strobe
825+
*/
826+
void setM8StrobeEnable(bool enable);
827+
814828
protected:
815829
std::shared_ptr<XLinkConnection> connection;
816830

src/device/DeviceBase.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,6 +1236,14 @@ M8FsyncRole DeviceBase::getM8FsyncRole() {
12361236
return pimpl->rpcClient->call("getM8FsyncRole");
12371237
}
12381238

1239+
std::tuple<bool, std::string> DeviceBase::setM8StrobeLimits(float min, float max) {
1240+
return pimpl->rpcClient->call("setM8StrobeLimits", min, max);
1241+
}
1242+
1243+
void DeviceBase::setM8StrobeEnable(bool enable) {
1244+
pimpl->rpcCall("setM8StrobeEnable", enable);
1245+
}
1246+
12391247
dai::Version DeviceBase::getIMUFirmwareVersion() {
12401248
isClosed();
12411249
std::string versionStr = pimpl->rpcCall("getIMUFirmwareVersion").as<std::string>();

0 commit comments

Comments
 (0)