Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions Source/Devices/AnalogIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
#include "AnalogIO.h"

AnalogIO::AnalogIO(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> oni_ctx)
: OnixDevice(name, OnixDeviceType::ANALOGIO, deviceIdx_, oni_ctx)
: OnixDevice(name, BREAKOUT_BOARD_NAME, OnixDeviceType::ANALOGIO, deviceIdx_, oni_ctx)
{
StreamInfo analogInputStream = StreamInfo(
name + "-AnalogInput",
OnixDevice::createStreamName({ getHeadstageName(), name, "AnalogInput" }),
"Analog Input data",
"onix-analogio.data.input",
12,
Expand Down Expand Up @@ -54,17 +54,17 @@ int AnalogIO::configureDevice()
{
if (deviceContext == nullptr || !deviceContext->isInitialized()) return -1;

deviceContext->writeRegister(deviceIdx, (uint32_t)AnalogIORegisters::ENABLE, (oni_reg_val_t)(isEnabled() ? 1 : 0));

return deviceContext->getLastResult();
return deviceContext->writeRegister(deviceIdx, (uint32_t)AnalogIORegisters::ENABLE, (oni_reg_val_t)(isEnabled() ? 1 : 0));
}

bool AnalogIO::updateSettings()
{
int rc = 0;

for (int i = 0; i < numChannels; i += 1)
{
deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)AnalogIORegisters::CH00_IN_RANGE + i, (oni_reg_val_t)channelVoltageRange[i]);
if (deviceContext->getLastResult() != ONI_ESUCCESS) return false;
rc = deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)AnalogIORegisters::CH00_IN_RANGE + i, (oni_reg_val_t)channelVoltageRange[i]);
if (rc != ONI_ESUCCESS) return false;
}

uint32_t ioReg = 0;
Expand All @@ -74,8 +74,8 @@ bool AnalogIO::updateSettings()
ioReg = (ioReg & ~((uint32_t)1 << i)) | ((uint32_t)(channelDirection[i]) << i);
}

deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)AnalogIORegisters::CHDIR, ioReg);
if (deviceContext->getLastResult() != ONI_ESUCCESS) return false;
rc = deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)AnalogIORegisters::CHDIR, ioReg);
if (rc != ONI_ESUCCESS) return false;

for (int i = 0; i < numChannels; i += 1)
{
Expand Down
25 changes: 11 additions & 14 deletions Source/Devices/Bno055.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@

#include "Bno055.h"

Bno055::Bno055(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> ctx)
: OnixDevice(name, OnixDeviceType::BNO, deviceIdx_, ctx)
Bno055::Bno055(String name, String headstageName, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> ctx)
: OnixDevice(name, headstageName, OnixDeviceType::BNO, deviceIdx_, ctx)
{
const float bitVolts = 1.0;

String port = PortController::getPortName(PortController::getPortFromIndex(deviceIdx));
StreamInfo eulerAngleStream = StreamInfo(
name + "-Euler",
OnixDevice::createStreamName({ port, getHeadstageName(), getName(), "Euler" }),
"Bosch Bno055 9-axis inertial measurement unit (IMU) Euler angle",
"onix-bno055.data.euler",
3,
Expand All @@ -41,7 +42,7 @@ Bno055::Bno055(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix
streamInfos.add(eulerAngleStream);

StreamInfo quaternionStream = StreamInfo(
name + "-Quaternion",
OnixDevice::createStreamName({ port, getHeadstageName(), getName(), "Quaternion" }),
"Bosch Bno055 9-axis inertial measurement unit (IMU) Quaternion",
"onix-bno055.data.quat",
4,
Expand All @@ -54,7 +55,7 @@ Bno055::Bno055(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix
streamInfos.add(quaternionStream);

StreamInfo accelerationStream = StreamInfo(
name + "-Acceleration",
OnixDevice::createStreamName({ port, getHeadstageName(), getName(), "Acceleration" }),
"Bosch Bno055 9-axis inertial measurement unit (IMU) Acceleration",
"onix-bno055.data.acc",
3,
Expand All @@ -67,7 +68,7 @@ Bno055::Bno055(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix
streamInfos.add(accelerationStream);

StreamInfo gravityStream = StreamInfo(
name + "-Gravity",
OnixDevice::createStreamName({ port, getHeadstageName(), getName(), "Gravity" }),
"Bosch Bno055 9-axis inertial measurement unit (IMU) Gravity",
"onix-bno055.data.grav",
3,
Expand All @@ -80,7 +81,7 @@ Bno055::Bno055(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix
streamInfos.add(gravityStream);

StreamInfo temperatureStream = StreamInfo(
name + "-Temperature",
OnixDevice::createStreamName({ port, getHeadstageName(), getName(), "Temperature" }),
"Bosch Bno055 9-axis inertial measurement unit (IMU) Temperature",
"onix-bno055.data.temp",
1,
Expand All @@ -92,6 +93,8 @@ Bno055::Bno055(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix
{ "" });
streamInfos.add(temperatureStream);

// TODO: Add calibration stream here?

for (int i = 0; i < numFrames; i++)
eventCodes[i] = 0;
}
Expand All @@ -100,9 +103,7 @@ int Bno055::configureDevice()
{
if (deviceContext == nullptr || !deviceContext->isInitialized()) return -1;

deviceContext->writeRegister(deviceIdx, (uint32_t)Bno055Registers::ENABLE, isEnabled() ? 1 : 0);

return deviceContext->getLastResult();
return deviceContext->writeRegister(deviceIdx, (uint32_t)Bno055Registers::ENABLE, isEnabled() ? 1 : 0);
}

bool Bno055::updateSettings()
Expand Down Expand Up @@ -154,10 +155,6 @@ void Bno055::processFrames()

int dataOffset = 4;

const float eulerAngleScale = 1.0f / 16; // 1 degree = 16 LSB
const float quaternionScale = 1.0f / (1 << 14); // 1 = 2^14 LSB
const float accelerationScale = 1.0f / 100; // 1m / s^2 = 100 LSB

int channelOffset = 0;

// Euler
Expand Down
7 changes: 6 additions & 1 deletion Source/Devices/Bno055.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#pragma once

#include "../OnixDevice.h"
#include "PortController.h"

enum class Bno055Registers
{
Expand All @@ -37,7 +38,7 @@ class Bno055 : public OnixDevice
public:

/** Constructor */
Bno055(String name, const oni_dev_idx_t, std::shared_ptr<Onix1> ctx);
Bno055(String name, String headstageName, const oni_dev_idx_t, std::shared_ptr<Onix1> ctx);

int configureDevice() override;

Expand All @@ -60,6 +61,10 @@ class Bno055 : public OnixDevice

DataBuffer* bnoBuffer;

const float eulerAngleScale = 1.0f / 16; // 1 degree = 16 LSB
const float quaternionScale = 1.0f / (1 << 14); // 1 = 2^14 LSB
const float accelerationScale = 1.0f / 100; // 1m / s^2 = 100 LSB

static const int numFrames = 2;

Array<oni_frame_t*, CriticalSection, numFrames> frameArray;
Expand Down
8 changes: 6 additions & 2 deletions Source/Devices/DS90UB9x.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
static class DS90UB9x
{
public:
const int ID = 24;

// managed registers
static const uint32_t ENABLE = 0x8000;
static const uint32_t READSZ = 0x8001;
Expand Down Expand Up @@ -89,6 +87,12 @@ static class DS90UB9x
enum class DS90UB9xDeserializerI2CRegister : uint32_t
{
PortMode = 0x6D,
PortSel = 0x4C,
I2CConfig = 0x58,
GpioCtrl0 = 0x6E,
GpioCtrl1 = 0x6F,

SerAlias = 0x5C,

SlaveID1 = 0x5E,
SlaveID2 = 0x5F,
Expand Down
1 change: 1 addition & 0 deletions Source/Devices/DeviceList.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@
#include "AnalogIO.h"
#include "DigitalIO.h"
#include "PortController.h"
#include "PolledBno055.h"
8 changes: 3 additions & 5 deletions Source/Devices/DigitalIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,15 @@
#include "DigitalIO.h"

DigitalIO::DigitalIO(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> oni_ctx)
: OnixDevice(name, OnixDeviceType::DIGITALIO, deviceIdx_, oni_ctx)
: OnixDevice(name, BREAKOUT_BOARD_NAME, OnixDeviceType::DIGITALIO, deviceIdx_, oni_ctx)
{
}

int DigitalIO::configureDevice()
{
if (deviceContext == nullptr || !deviceContext->isInitialized()) return -1;

deviceContext->writeRegister(deviceIdx, (uint32_t)DigitalIORegisters::ENABLE, (oni_reg_val_t)(isEnabled() ? 1 : 0));

return deviceContext->getLastResult();
return deviceContext->writeRegister(deviceIdx, (uint32_t)DigitalIORegisters::ENABLE, (oni_reg_val_t)(isEnabled() ? 1 : 0));
}

bool DigitalIO::updateSettings()
Expand All @@ -59,7 +57,7 @@ EventChannel::Settings DigitalIO::getEventChannelSettings()
// NB: The stream must be assigned before adding the channel
EventChannel::Settings settings{
EventChannel::Type::TTL,
"DigitalIO Event Channel",
OnixDevice::createStreamName({getHeadstageName(), getName(), "Events"}),
"Digital inputs and breakout button states coming from a DigitalIO device",
"onix-digitalio.events",
nullptr,
Expand Down
12 changes: 4 additions & 8 deletions Source/Devices/HarpSyncInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@
#include "HarpSyncInput.h"

HarpSyncInput::HarpSyncInput(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> oni_ctx)
: OnixDevice(name, OnixDeviceType::HARPSYNCINPUT, deviceIdx_, oni_ctx)
: OnixDevice(name, BREAKOUT_BOARD_NAME, OnixDeviceType::HARPSYNCINPUT, deviceIdx_, oni_ctx)
{
setEnabled(false);

StreamInfo harpTimeStream = StreamInfo(
name + "-HarpTime",
OnixDevice::createStreamName({ getHeadstageName(), getName(), "HarpTime" }),
"Harp clock time corresponding to the local acquisition ONIX clock count",
"onix-harpsyncinput.data.harptime",
1,
Expand All @@ -48,16 +48,12 @@ int HarpSyncInput::configureDevice()
{
if (deviceContext == nullptr || !deviceContext->isInitialized()) return -1;

deviceContext->writeRegister(deviceIdx, (uint32_t)HarpSyncInputRegisters::ENABLE, (oni_reg_val_t)(isEnabled() ? 1 : 0));

return deviceContext->getLastResult();
return deviceContext->writeRegister(deviceIdx, (uint32_t)HarpSyncInputRegisters::ENABLE, (oni_reg_val_t)(isEnabled() ? 1 : 0));
}

bool HarpSyncInput::updateSettings()
{
deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)HarpSyncInputRegisters::SOURCE, (oni_reg_val_t)HarpSyncSource::Breakout);

return deviceContext->getLastResult() == ONI_ESUCCESS;
return deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)HarpSyncInputRegisters::SOURCE, (oni_reg_val_t)HarpSyncSource::Breakout);
}

void HarpSyncInput::startAcquisition()
Expand Down
9 changes: 6 additions & 3 deletions Source/Devices/HeadStageEEPROM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,21 @@ HeadStageEEPROM::HeadStageEEPROM(const oni_dev_idx_t dev_id, std::shared_ptr<Oni
{
auto deserializer = std::make_unique<I2CRegisterContext>(DS90UB9x::DES_ADDR, dev_id, ctx);
uint32_t alias = HeadStageEEPROM::EEPROM_ADDRESS << 1;
deserializer->WriteByte((uint32_t)DS90UB9x::DS90UB9xDeserializerI2CRegister::SlaveID7, alias);
int rc = deserializer->WriteByte((uint32_t)DS90UB9x::DS90UB9xDeserializerI2CRegister::SlaveID7, alias);
if (rc != ONI_ESUCCESS) return;
deserializer->WriteByte((uint32_t)DS90UB9x::DS90UB9xDeserializerI2CRegister::SlaveAlias7, alias);
if (rc != ONI_ESUCCESS) return;
}

uint32_t HeadStageEEPROM::GetHeadStageID()
{
uint32_t data = 0;
int rc = 0;
for (unsigned int i = 0; i < sizeof(uint32_t); i++)
{
oni_reg_val_t val;
ReadByte(DEVID_START_ADDR + i, &val, true);
if (i2cContext->getLastResult() != ONI_ESUCCESS) return data;
rc = ReadByte(DEVID_START_ADDR + i, &val, true);
if (rc != ONI_ESUCCESS) return data;
data += (val & 0xFF) << (8 * i);
}
return data;
Expand Down
15 changes: 7 additions & 8 deletions Source/Devices/Heartbeat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "Heartbeat.h"

Heartbeat::Heartbeat(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> oni_ctx)
: OnixDevice(name, OnixDeviceType::HEARTBEAT, deviceIdx_, oni_ctx)
: OnixDevice(name, BREAKOUT_BOARD_NAME, OnixDeviceType::HEARTBEAT, deviceIdx_, oni_ctx)
{
}

Expand All @@ -33,17 +33,16 @@ int Heartbeat::configureDevice()

if (deviceContext == nullptr || !deviceContext->isInitialized()) return -1;

deviceContext->writeRegister(deviceIdx, (uint32_t)HeartbeatRegisters::ENABLE, 1);

return deviceContext->getLastResult();
return deviceContext->writeRegister(deviceIdx, (uint32_t)HeartbeatRegisters::ENABLE, 1);
}

bool Heartbeat::updateSettings()
{
oni_reg_val_t clkHz = deviceContext->readRegister(deviceIdx, (oni_reg_addr_t)HeartbeatRegisters::CLK_HZ);
deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)HeartbeatRegisters::CLK_DIV, clkHz / beatsPerSecond);
oni_reg_val_t clkHz;
int rc = deviceContext->readRegister(deviceIdx, (oni_reg_addr_t)HeartbeatRegisters::CLK_HZ, &clkHz);
rc = deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)HeartbeatRegisters::CLK_DIV, clkHz / beatsPerSecond);

if (deviceContext->getLastResult() == ONI_EREADONLY) return true; // NB: Ignore read-only errors
if (rc == ONI_EREADONLY) return true; // NB: Ignore read-only errors

return deviceContext->getLastResult() == ONI_ESUCCESS;
return rc == ONI_ESUCCESS;
}
2 changes: 1 addition & 1 deletion Source/Devices/Heartbeat.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ enum class HeartbeatRegisters : uint32_t
};

/*
Configures and streams data from a MemoryMonitor device on a Breakout Board
Configures and streams data from a Heartbeat device on a Breakout Board
*/
class Heartbeat : public OnixDevice
{
Expand Down
22 changes: 12 additions & 10 deletions Source/Devices/MemoryMonitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ void MemoryMonitorUsage::stopAcquisition()
}

MemoryMonitor::MemoryMonitor(String name, const oni_dev_idx_t deviceIdx_, std::shared_ptr<Onix1> oni_ctx)
: OnixDevice(name, OnixDeviceType::MEMORYMONITOR, deviceIdx_, oni_ctx)
: OnixDevice(name, BREAKOUT_BOARD_NAME, OnixDeviceType::MEMORYMONITOR, deviceIdx_, oni_ctx)
{
StreamInfo percentUsedStream = StreamInfo(
name + "-PercentUsed",
OnixDevice::createStreamName({ getHeadstageName(), getName(), "PercentUsed" }),
"Percent of available memory that is currently used",
"onix - memorymonitor.data.percentused",
1,
Expand All @@ -68,7 +68,7 @@ MemoryMonitor::MemoryMonitor(String name, const oni_dev_idx_t deviceIdx_, std::s
ContinuousChannel::Type::AUX,
1.0f,
"%",
{""});
{ "" });
streamInfos.add(percentUsedStream);

for (int i = 0; i < numFrames; i++)
Expand All @@ -81,21 +81,23 @@ int MemoryMonitor::configureDevice()

if (deviceContext == nullptr || !deviceContext->isInitialized()) return -1;

deviceContext->writeRegister(deviceIdx, (uint32_t)MemoryMonitorRegisters::ENABLE, 1);
if (deviceContext->getLastResult() != ONI_ESUCCESS) return deviceContext->getLastResult();
int rc = deviceContext->writeRegister(deviceIdx, (uint32_t)MemoryMonitorRegisters::ENABLE, 1);
if (rc != ONI_ESUCCESS) return rc;

totalMemory = deviceContext->readRegister(deviceIdx, (oni_reg_addr_t)MemoryMonitorRegisters::TOTAL_MEM);
rc = deviceContext->readRegister(deviceIdx, (oni_reg_addr_t)MemoryMonitorRegisters::TOTAL_MEM, &totalMemory);

return deviceContext->getLastResult();
return rc;
}

bool MemoryMonitor::updateSettings()
{
oni_reg_val_t clkHz = deviceContext->readRegister(deviceIdx, (oni_reg_addr_t)MemoryMonitorRegisters::CLK_HZ);
oni_reg_val_t clkHz;
int rc = deviceContext->readRegister(deviceIdx, (oni_reg_addr_t)MemoryMonitorRegisters::CLK_HZ, &clkHz);
if (rc != ONI_ESUCCESS) return rc;

deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)MemoryMonitorRegisters::CLK_DIV, clkHz / samplesPerSecond);
rc = deviceContext->writeRegister(deviceIdx, (oni_reg_addr_t)MemoryMonitorRegisters::CLK_DIV, clkHz / samplesPerSecond);

return deviceContext->getLastResult() == ONI_ESUCCESS;
return rc == ONI_ESUCCESS;
}

void MemoryMonitor::startAcquisition()
Expand Down
Loading