diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 96ef791e6..77b920559 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -14,6 +14,27 @@ RENAMED - A function/class has been renamed. REMOVED - A function/class has been removed. ====================================================================================================== +62.0.0 - 2021-05-19 +- update inertial time of week channel names from _lastValidTow to _tow for accuracy: + - GNSS Position Aiding Status (0x82,0x43) + - GNSS Attitude Aiding Status (0x82,0x44) + - Aiding Measurement Summary (0x82,0x46) + +61.2.3 - 2021-05-18 +- Fix InertialTypes::GnssAidingStatus enum values, add NO_FIX and CONFIG_ERROR entries - definition for status value of fields: GNSS Position Aiding Status (0x82,0x43), GNSS Attitude Aiding Status (0x82,0x44) + +61.2.2 - 2021-04-20 +- Add ability to set lastDeviceState on MipNode objects (MipNode::setLastDeviceState()) + +61.2.1 - 2021-04-16 +- Fix available options for Estimation Control Flags (0x0D,0x14) config command for CV5-25 (MipNodeFeatures::supportedEstimationControlOptions()) - hard, soft iron auto calibration now available + +61.2.0 - 2021-03-23 +- Add support for Torque-Link-200-3ch + +61.1.7 - 2021-03-22 +- Remove assert(false) from MipTypes::channelName() and MipChannelIdentifier::name() on undefined channel field/qualifier or identifier type + 61.1.6 - 2021-03-04 - Add support for inertial command Input Speed Measurement (0x0D,0x60) diff --git a/MSCL/MSCL.vcxproj b/MSCL/MSCL.vcxproj index 78d220e39..ba30edd3b 100644 --- a/MSCL/MSCL.vcxproj +++ b/MSCL/MSCL.vcxproj @@ -907,6 +907,7 @@ + @@ -1231,6 +1232,7 @@ + diff --git a/MSCL/MSCL.vcxproj.filters b/MSCL/MSCL.vcxproj.filters index 525476a3d..37e85fc82 100644 --- a/MSCL/MSCL.vcxproj.filters +++ b/MSCL/MSCL.vcxproj.filters @@ -1010,6 +1010,9 @@ MicroStrain\RTK\Commands + + MicroStrain\Wireless\Features\Nodes + @@ -1911,6 +1914,9 @@ MicroStrain\RTK\Commands + + MicroStrain\Wireless\Features\Nodes + diff --git a/MSCL/source/mscl/LibVersion.h b/MSCL/source/mscl/LibVersion.h index 363b91a26..c4314dcc5 100644 --- a/MSCL/source/mscl/LibVersion.h +++ b/MSCL/source/mscl/LibVersion.h @@ -10,9 +10,9 @@ MIT Licensed. See the included LICENSE.txt for a copy of the full MIT License. #ifndef SWIG //update with each release -#define MSCL_MAJOR 61 -#define MSCL_MINOR 1 -#define MSCL_PATCH 6 +#define MSCL_MAJOR 62 +#define MSCL_MINOR 0 +#define MSCL_PATCH 0 #endif namespace mscl diff --git a/MSCL/source/mscl/MicroStrain/Inertial/ExposedInertialTypes.h b/MSCL/source/mscl/MicroStrain/Inertial/ExposedInertialTypes.h index 11d39bf2a..66a944fbe 100644 --- a/MSCL/source/mscl/MicroStrain/Inertial/ExposedInertialTypes.h +++ b/MSCL/source/mscl/MicroStrain/Inertial/ExposedInertialTypes.h @@ -568,19 +568,23 @@ namespace mscl // GNSS_AIDING_TIGHT_COUPLING - 0x0001 - 0000 0000 0000 0001 // GNSS_AIDING_DIFFERENTIAL - 0x0002 - 0000 0000 0000 0010 // GNSS_AIDING_INTEGER_FIX - 0x0004 - 0000 0000 0000 0100 - // GNSS_AIDING_GPS - 0x0018 - 0000 0000 0001 1000 - // GNSS_AIDING_GLONASS - 0x0060 - 0000 0000 0110 0000 - // GNSS_AIDING_GALILEO - 0x0180 - 0000 0001 1000 0000 - // GNSS_AIDING_BEIDOU - 0x0600 - 0000 0110 0000 0000 + // GNSS_AIDING_GPS - 0x0038 - 0000 0000 0011 1000 + // GNSS_AIDING_GLONASS - 0x00C0 - 0000 0000 1100 0000 + // GNSS_AIDING_GALILEO - 0x0700 - 0000 0111 0000 0000 + // GNSS_AIDING_BEIDOU - 0x3800 - 0011 1000 0000 0000 + // GNSS_AIDING_NO_FIX - 0x4000 - 0100 0000 0000 0000 + // GNSS_AIDING_CONFIG_ERROR - 0x8000 - 1000 0000 0000 0000 enum GnssAidingStatus { - GNSS_AIDING_TIGHT_COUPLING = 0x0001, // 0000 0000 0000 0001 - GNSS_AIDING_DIFFERENTIAL = 0x0002, // 0000 0000 0000 0010 - GNSS_AIDING_INTEGER_FIX = 0x0004, // 0000 0000 0000 0100 - GNSS_AIDING_GPS = 0x0018, // 0000 0000 0001 1000 - GNSS_AIDING_GLONASS = 0x0060, // 0000 0000 0110 0000 - GNSS_AIDING_GALILEO = 0x0180, // 0000 0001 1000 0000 - GNSS_AIDING_BEIDOU = 0x0600, // 0000 0110 0000 0000 + GNSS_AIDING_TIGHT_COUPLING = 0x0001, // 0000 0000 0000 0001 + GNSS_AIDING_DIFFERENTIAL = 0x0002, // 0000 0000 0000 0010 + GNSS_AIDING_INTEGER_FIX = 0x0004, // 0000 0000 0000 0100 + GNSS_AIDING_GPS = 0x0038, // 0000 0000 0011 1000 + GNSS_AIDING_GLONASS = 0x00C0, // 0000 0000 1100 0000 + GNSS_AIDING_GALILEO = 0x0700, // 0000 0111 0000 0000 + GNSS_AIDING_BEIDOU = 0x3800, // 0011 1000 0000 0000 + GNSS_AIDING_NO_FIX = 0x4000, // 0100 0000 0000 0000 + GNSS_AIDING_CONFIG_ERROR = 0x8000 // 1000 0000 0000 0000 }; //API Enum: AidingMeasurementStatus diff --git a/MSCL/source/mscl/MicroStrain/MIP/MipNode.cpp b/MSCL/source/mscl/MicroStrain/MIP/MipNode.cpp index a535f32a8..ba84bd5d3 100644 --- a/MSCL/source/mscl/MicroStrain/MIP/MipNode.cpp +++ b/MSCL/source/mscl/MicroStrain/MIP/MipNode.cpp @@ -80,6 +80,11 @@ namespace mscl return m_impl->lastDeviceState(); } + void MipNode::setLastDeviceState(DeviceState state) + { + m_impl->setLastDeviceState(state); + } + Version MipNode::firmwareVersion() const { return m_impl->firmwareVersion(); diff --git a/MSCL/source/mscl/MicroStrain/MIP/MipNode.h b/MSCL/source/mscl/MicroStrain/MIP/MipNode.h index 5165ca7bb..2604f8e3a 100644 --- a/MSCL/source/mscl/MicroStrain/MIP/MipNode.h +++ b/MSCL/source/mscl/MicroStrain/MIP/MipNode.h @@ -162,6 +162,15 @@ namespace mscl // The last known . DeviceState lastDeviceState() const; + //API Function: setLastDeviceState + // Most users will not need this functionality. + // The device state defaults to unknown on connection but then automatically updates to streaming upon receiving data packets or idle when the set to idle command is sent. + // Setting this will not stop auto-detection - the manually set value will be overwritten when the value would otherwise be set. + // + //Parameters: + // state - the to set + void setLastDeviceState(DeviceState state); + //API Function: firmwareVersion // Gets the firmware of the MipNode. // diff --git a/MSCL/source/mscl/MicroStrain/MIP/MipNodeFeatures.cpp b/MSCL/source/mscl/MicroStrain/MIP/MipNodeFeatures.cpp index 69133f39a..6677369a7 100644 --- a/MSCL/source/mscl/MicroStrain/MIP/MipNodeFeatures.cpp +++ b/MSCL/source/mscl/MicroStrain/MIP/MipNodeFeatures.cpp @@ -345,9 +345,7 @@ namespace mscl case MipModels::node_3dm_gx4_25: case MipModels::node_3dm_gx4_15: case MipModels::node_3dm_gx3_45: - case MipModels::node_3dm_cv5_25: case MipModels::node_3dm_cv5_15: - case MipModels::node_3dm_cl5_25: case MipModels::node_3dm_cl5_15: return EstimationControlOptions( InertialTypes::EstimationControlOption::ENABLE_GYRO_BIAS_ESTIMATION @@ -366,6 +364,8 @@ namespace mscl ); case MipModels::node_3dm_gx5_25: + case MipModels::node_3dm_cv5_25: + case MipModels::node_3dm_cl5_25: return EstimationControlOptions( InertialTypes::EstimationControlOption::ENABLE_GYRO_BIAS_ESTIMATION | InertialTypes::EstimationControlOption::ENABLE_HARD_IRON_AUTO_CALIBRATION | diff --git a/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.cpp b/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.cpp index 2b5381b7f..92d63264f 100644 --- a/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.cpp +++ b/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.cpp @@ -109,6 +109,11 @@ namespace mscl return m_lastDeviceState; } + void MipNode_Impl::setLastDeviceState(DeviceState state) + { + m_lastDeviceState = state; + } + void MipNode_Impl::resetNodeInfo() { m_nodeInfo.reset(); diff --git a/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.h b/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.h index 7f476ad87..483acb45b 100644 --- a/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.h +++ b/MSCL/source/mscl/MicroStrain/MIP/MipNode_Impl.h @@ -184,6 +184,16 @@ namespace mscl // Gets the last known for the Node. DeviceState lastDeviceState() const; + //Function: setLastDeviceState + // Most users will not need this functionality. + // The device state defaults to unknown on connection but then automatically updates to streaming upon receiving data packets + // or idle when the set to idle command is sent. + // Setting this will not stop auto-detection - the manually set value will be overwritten when the value would otherwise be set. + // + //Parameters: + // state - the to set + void setLastDeviceState(DeviceState state); + //Function: resetNodeInfo // Clears cached info read from device (ie fw version, receiver info, etc.) void resetNodeInfo(); diff --git a/MSCL/source/mscl/MicroStrain/MIP/MipTypes.cpp b/MSCL/source/mscl/MicroStrain/MIP/MipTypes.cpp index c7948bfb7..1f3ff8f0f 100644 --- a/MSCL/source/mscl/MicroStrain/MIP/MipTypes.cpp +++ b/MSCL/source/mscl/MicroStrain/MIP/MipTypes.cpp @@ -36,7 +36,6 @@ namespace mscl //if we failed to find the channel if(result == CHANNEL_NAMES.end()) { - assert(false); return "unknown_" + Utils::toStr(field) + "-" + Utils::toStr(qualifier); } @@ -425,13 +424,13 @@ namespace mscl { ChannelId(CH_FIELD_ESTFILTER_NED_RELATIVE_POS, CH_Y), "estNedRelPos_y" }, { ChannelId(CH_FIELD_ESTFILTER_NED_RELATIVE_POS, CH_Z), "estNedRelPos_z" }, - { ChannelId(CH_FIELD_ESTFILTER_POSITION_AIDING_STATUS, CH_TIME_OF_WEEK), "gnssAiding_pos_lastValidTow" }, + { ChannelId(CH_FIELD_ESTFILTER_POSITION_AIDING_STATUS, CH_TIME_OF_WEEK), "gnssAiding_pos_tow" }, { ChannelId(CH_FIELD_ESTFILTER_POSITION_AIDING_STATUS, CH_STATUS), "gnssAiding_pos_status" }, - { ChannelId(CH_FIELD_ESTFILTER_ATTITUDE_AIDING_STATUS, CH_TIME_OF_WEEK), "gnssAiding_att_lastValidTow" }, + { ChannelId(CH_FIELD_ESTFILTER_ATTITUDE_AIDING_STATUS, CH_TIME_OF_WEEK), "gnssAiding_att_tow" }, { ChannelId(CH_FIELD_ESTFILTER_ATTITUDE_AIDING_STATUS, CH_STATUS), "gnssAiding_att_status" }, - { ChannelId(CH_FIELD_ESTFILTER_AIDING_MEASURE_SUMMARY, CH_TIME_OF_WEEK), "aidingSummary_lastValidTow" }, + { ChannelId(CH_FIELD_ESTFILTER_AIDING_MEASURE_SUMMARY, CH_TIME_OF_WEEK), "aidingSummary_tow" }, { ChannelId(CH_FIELD_ESTFILTER_AIDING_MEASURE_SUMMARY, CH_STATUS), "aidingSummary_status" }, { ChannelId(CH_FIELD_ESTFILTER_ODOMETER_SCALE_FACTOR_ERROR, CH_ERROR), "odometer_scaleFactorError" }, @@ -749,7 +748,6 @@ namespace mscl //if we failed to find the channel if (typeName == TYPE_NAMES.end()) { - assert(false); return "unknownId_" + Utils::toStr(m_id); } diff --git a/MSCL/source/mscl/MicroStrain/Wireless/Configuration/InputRange.cpp b/MSCL/source/mscl/MicroStrain/Wireless/Configuration/InputRange.cpp index 845299056..d1e1ce648 100644 --- a/MSCL/source/mscl/MicroStrain/Wireless/Configuration/InputRange.cpp +++ b/MSCL/source/mscl/MicroStrain/Wireless/Configuration/InputRange.cpp @@ -261,6 +261,7 @@ namespace mscl case WirelessModels::node_sgLink200_oem_qbridge_120_ufl: case WirelessModels::node_sgLink200_oem_qbridge_350: case WirelessModels::node_sgLink200_oem_qbridge_350_ufl: + case WirelessModels::node_torqueLink200_3ch: case WirelessModels::node_torqueLink200: { if(channelType == WirelessTypes::chType_fullDifferential) diff --git a/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures.cpp b/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures.cpp index 6ec44eb04..9f69d8ea8 100644 --- a/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures.cpp +++ b/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures.cpp @@ -46,6 +46,7 @@ MIT Licensed. See the included LICENSE.txt for a copy of the full MIT License. #include "NodeFeatures_tclink6ch.h" #include "NodeFeatures_torqueLink.h" #include "NodeFeatures_torqueLink200.h" +#include "NodeFeatures_torqueLink200_3ch.h" #include "NodeFeatures_vlink200.h" #include "NodeFeatures_vlink.h" #include "NodeFeatures_vlink_legacy.h" @@ -241,6 +242,9 @@ namespace mscl case WirelessModels::node_torqueLink: return std::unique_ptr(new NodeFeatures_torqueLink(info)); + case WirelessModels::node_torqueLink200_3ch: + return std::unique_ptr(new NodeFeatures_torqueLink200_3ch(info)); + case WirelessModels::node_torqueLink200: return std::unique_ptr(new NodeFeatures_torqueLink200(info)); diff --git a/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures_torqueLink200_3ch.cpp b/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures_torqueLink200_3ch.cpp new file mode 100644 index 000000000..563ac9f62 --- /dev/null +++ b/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures_torqueLink200_3ch.cpp @@ -0,0 +1,190 @@ +/******************************************************************************* +Copyright(c) 2015-2021 Parker Hannifin Corp. All rights reserved. + +MIT Licensed. See the included LICENSE.txt for a copy of the full MIT License. +*******************************************************************************/ +#include "stdafx.h" +#include "NodeFeatures_torqueLink200_3ch.h" +#include "AvailableSampleRates.h" +#include "mscl/MicroStrain/Wireless/Configuration/NodeEepromMap.h" +#include "mscl/Utils.h" + +namespace mscl +{ + NodeFeatures_torqueLink200_3ch::NodeFeatures_torqueLink200_3ch(const NodeInfo& info): + NodeFeatures_200series(info) + { + addCalCoeffChannelGroup(1, "Differential", NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1); + addCalCoeffChannelGroup(2, "Differential", NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2); + addCalCoeffChannelGroup(3, "Differential", NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3); + addCalCoeffChannelGroup(5, "Pulse Frequency", NodeEepromMap::CH_ACTION_SLOPE_5, NodeEepromMap::CH_ACTION_ID_5); + addCalCoeffChannelGroup(6, "Total Pulses", NodeEepromMap::CH_ACTION_SLOPE_6, NodeEepromMap::CH_ACTION_ID_6); + + static const ChannelMask DIFFERENTIAL_CHS(BOOST_BINARY(00000001)); //ch1 + static const ChannelMask DIFFERENTIAL_CH2(BOOST_BINARY(00000010)); //ch2 + static const ChannelMask DIFFERENTIAL_CH3(BOOST_BINARY(00000100)); //ch3 + static const ChannelMask DIFFERENTIAL_ALL(BOOST_BINARY(00000111)); // all differential (1, 2, 3) + static const ChannelMask PULSE_CHS(BOOST_BINARY(00110000)); //ch5 and ch6 + + m_channelGroups.emplace_back(DIFFERENTIAL_CHS, "Differential", + ChannelGroup::SettingsMap{ + {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_1}, + {WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_1}} + ); + + m_channelGroups.emplace_back(DIFFERENTIAL_CH2, "Differential", + ChannelGroup::SettingsMap{ + { WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_2 }, + { WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_2 } } + ); + + m_channelGroups.emplace_back(DIFFERENTIAL_CH3, "Differential", + ChannelGroup::SettingsMap{ + { WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_3 }, + { WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_3 } } + ); + + //all channels configured with 1 low pass filter setting in this firmware + m_channelGroups.emplace_back(DIFFERENTIAL_ALL, "Differential", + ChannelGroup::SettingsMap{ + { WirelessTypes::chSetting_lowPassFilter, NodeEepromMap::LOW_PASS_FILTER_1 } } + ); + + m_channelGroups.emplace_back(PULSE_CHS, "Pulse Input", + ChannelGroup::SettingsMap{ + {WirelessTypes::chSetting_debounceFilter, NodeEepromMap::DEBOUNCE_FILTER}, + {WirelessTypes::chSetting_pullUpResistor, NodeEepromMap::INTERNAL_PULLUP_RESISTOR}} + ); + + //Channels + m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_fullDifferential, "Differential", 24); + m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_fullDifferential, "Differential", 24); + m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_fullDifferential, "Differential", 24); + m_channels.emplace_back(5, WirelessChannel::channel_5, WirelessTypes::chType_digital, "Pulse Frequency"); + m_channels.emplace_back(6, WirelessChannel::channel_6, WirelessTypes::chType_digital, "Total Pulses"); + } + + bool NodeFeatures_torqueLink200_3ch::supportsSensorDelayConfig() const + { + return true; + } + + const WirelessTypes::DerivedChannelMasks NodeFeatures_torqueLink200_3ch::channelsPerDerivedCategory() const + { + const ChannelMask ALL_CHS(BOOST_BINARY(00110111)); + + const WirelessTypes::DerivedChannelMasks result = { + {std::make_pair(WirelessTypes::derivedCategory_rms, ALL_CHS)}, + {std::make_pair(WirelessTypes::derivedCategory_peakToPeak, ALL_CHS)}, + {std::make_pair(WirelessTypes::derivedCategory_mean, ALL_CHS)} + }; + + return result; + } + + const WirelessTypes::Filters NodeFeatures_torqueLink200_3ch::lowPassFilters() const + { + static const WirelessTypes::Filters filters = { + {WirelessTypes::filter_4416hz}, + {WirelessTypes::filter_1104hz}, + {WirelessTypes::filter_12_66hz} + }; + return filters; + } + + WirelessTypes::WirelessSampleRate NodeFeatures_torqueLink200_3ch::maxSampleRateForLowPassFilter(WirelessTypes::Filter lowPassFilter, + WirelessTypes::SamplingMode samplingMode, + WirelessTypes::DataCollectionMethod dataCollectionMethod, + WirelessTypes::DataMode dataMode, + const ChannelMask& channels) const + { + //find the max sample rate allowed for the settling time + SampleRate maxRate; + + switch(lowPassFilter) + { + case WirelessTypes::filter_4416hz: + maxRate = SampleRate::Hertz(1024); + break; + + case WirelessTypes::filter_1104hz: + maxRate = SampleRate::Hertz(256); + break; + + case WirelessTypes::filter_12_66hz: + maxRate = SampleRate::Hertz(4); + break; + + default: + throw Error_NotSupported("Invalid Low Pass Filter"); + } + + const WirelessTypes::WirelessSampleRates rates = sampleRates(samplingMode, dataCollectionMethod, dataMode); + + //even though we found the max rate, that sample rate might not actually be supported by the Node. + //look through all the supported rates and find the max one supported below the given rate. + for(const auto& rate : rates) + { + if(SampleRate::FromWirelessEepromValue(rate) <= maxRate) + { + return rate; + } + } + + //should never get to this if this function is used correctly (passed in valid sample rates) + //and node features are built correctly. + assert(false); + return rates.at(rates.size() - 1); + } + + const WirelessTypes::Voltages NodeFeatures_torqueLink200_3ch::excitationVoltages() const + { + static const WirelessTypes::Voltages excitationVoltages = { + {WirelessTypes::voltage_2500mV}, + {WirelessTypes::voltage_1500mV} + }; + return excitationVoltages; + } + + const WirelessTypes::VoltageType NodeFeatures_torqueLink200_3ch::adcVoltageInputType() const + { + return WirelessTypes::VoltageType::voltageType_differential; + } + + bool NodeFeatures_torqueLink200_3ch::supportsPullUpResistor() const + { + return true; + } + + bool NodeFeatures_torqueLink200_3ch::supportsExcitationVoltageConfig() const + { + return true; + } + + bool NodeFeatures_torqueLink200_3ch::supportsPoll() const + { + static const Version MIN_POLL_FW(12, 44849); + + return (m_nodeInfo.firmwareVersion() >= MIN_POLL_FW); + } + + const WirelessTypes::WirelessSampleRates NodeFeatures_torqueLink200_3ch::sampleRates(WirelessTypes::SamplingMode samplingMode, WirelessTypes::DataCollectionMethod dataCollectionMethod, WirelessTypes::DataMode dataMode) const + { + //the list of sample rates varies for each sampling mode + switch(samplingMode) + { + case WirelessTypes::samplingMode_nonSync: + return AvailableSampleRates::continuous; + + case WirelessTypes::samplingMode_sync: + return AvailableSampleRates::continuous_sglink200; + + case WirelessTypes::samplingMode_syncBurst: + case WirelessTypes::samplingMode_syncEvent: + return AvailableSampleRates::burst_sglink200; + + default: + throw Error_NotSupported("The sampling mode is not supported by this Node"); + } + } +} \ No newline at end of file diff --git a/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures_torqueLink200_3ch.h b/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures_torqueLink200_3ch.h new file mode 100644 index 000000000..b367e3a6a --- /dev/null +++ b/MSCL/source/mscl/MicroStrain/Wireless/Features/NodeFeatures_torqueLink200_3ch.h @@ -0,0 +1,47 @@ +/******************************************************************************* +Copyright(c) 2015-2021 Parker Hannifin Corp. All rights reserved. + +MIT Licensed. See the included LICENSE.txt for a copy of the full MIT License. +*******************************************************************************/ +#pragma once + +#include "NodeFeatures_200series.h" + +namespace mscl +{ + //Class: NodeFeatures_torqueLink200_3ch + // Contains information on features for the Torque-Link-200-3ch nodes. Inherits from . + class NodeFeatures_torqueLink200_3ch: public NodeFeatures_200series + { + private: + NodeFeatures_torqueLink200_3ch(); //disabled default constructor + + public: + virtual ~NodeFeatures_torqueLink200_3ch(){}; + + //Constructor: NodeFeatures_torqueLink200_3ch + // Creates a NodeFeatures_torqueLink200_3ch object. + NodeFeatures_torqueLink200_3ch(const NodeInfo& info); + + virtual bool supportsSensorDelayConfig() const override; + + virtual const WirelessTypes::DerivedChannelMasks channelsPerDerivedCategory() const override; + + virtual const WirelessTypes::Filters lowPassFilters() const override; + + virtual WirelessTypes::WirelessSampleRate maxSampleRateForLowPassFilter(WirelessTypes::Filter lowPassFilter, WirelessTypes::SamplingMode samplingMode, WirelessTypes::DataCollectionMethod dataCollectionMethod, WirelessTypes::DataMode dataMode, const ChannelMask& channels) const override; + + virtual const WirelessTypes::Voltages excitationVoltages() const override; + + virtual const WirelessTypes::VoltageType adcVoltageInputType() const override; + + virtual bool supportsPullUpResistor() const override; + + virtual bool supportsExcitationVoltageConfig() const override; + + virtual bool supportsPoll() const override; + + virtual const WirelessTypes::WirelessSampleRates sampleRates(WirelessTypes::SamplingMode samplingMode, WirelessTypes::DataCollectionMethod dataCollectionMethod, WirelessTypes::DataMode dataMode) const override; + }; +} + diff --git a/MSCL/source/mscl/MicroStrain/Wireless/WirelessModels.h b/MSCL/source/mscl/MicroStrain/Wireless/WirelessModels.h index c5f2c5570..ccee72d66 100644 --- a/MSCL/source/mscl/MicroStrain/Wireless/WirelessModels.h +++ b/MSCL/source/mscl/MicroStrain/Wireless/WirelessModels.h @@ -110,6 +110,7 @@ namespace mscl // node_shmLink210_fullbridge - 63290170 - SHM-Link 210 - Full Bridge // node_shmLink210_qbridge_3K - 63290171 - SHM-Link 210 - Quarter Bridge - 3K OHM // node_torqueLink - 63309999 - Torque-Link + // node_torqueLink200_3ch - 63313000 - Torque-Link-200-3ch // node_torqueLink200 - 63319999 - Torque-Link-200 // node_sgLink_herm - 65010000 - SG-Link-Hermetic // node_sgLink_herm_2600 - 65011110 - SG-Link-Hermetic 2600 belt assembly @@ -210,6 +211,7 @@ namespace mscl node_shmLink210_fullbridge = 63290170, //SHM-Link 210 - Full Bridge node_shmLink210_qbridge_3K = 63290171, //SHM-Link 210 - Quarter Bridge - 3K OHM node_torqueLink = 63309999, //Torque-Link + node_torqueLink200_3ch = 63313000, //Torque-Link-200-3ch node_torqueLink200 = 63319999, //Torque-Link-200 node_sgLink_herm = 65010000, //SG-Link-Hermetic node_sgLink_herm_2600 = 65011110, //SG-Link-Hermetic 2600 belt assembly diff --git a/MSCL/source/mscl/MicroStrain/Wireless/WirelessNode_Impl.cpp b/MSCL/source/mscl/MicroStrain/Wireless/WirelessNode_Impl.cpp index 082a63667..616b68b1b 100644 --- a/MSCL/source/mscl/MicroStrain/Wireless/WirelessNode_Impl.cpp +++ b/MSCL/source/mscl/MicroStrain/Wireless/WirelessNode_Impl.cpp @@ -643,6 +643,7 @@ namespace mscl case WirelessModels::node_sgLink200_oem_qbridge_350: case WirelessModels::node_sgLink200_oem_qbridge_350_ufl: case WirelessModels::node_torqueLink200: + case WirelessModels::node_torqueLink200_3ch: assert(false); throw Error("This Node should read Excitation Voltage from EEPROM!"); @@ -712,6 +713,7 @@ namespace mscl case WirelessModels::node_sgLink200_oem_qbridge_350: case WirelessModels::node_sgLink200_oem_qbridge_350_ufl: case WirelessModels::node_torqueLink200: + case WirelessModels::node_torqueLink200_3ch: case WirelessModels::node_shmLink210_fullbridge: case WirelessModels::node_shmLink210_qbridge_3K: return m_eepromHelper->read_excitationVoltage(); //gain amplifier voltage is the same as the excitation, which is read from eeprom @@ -789,6 +791,7 @@ namespace mscl case WirelessModels::node_sgLink200_oem_qbridge_350: case WirelessModels::node_sgLink200_oem_qbridge_350_ufl: case WirelessModels::node_torqueLink200: + case WirelessModels::node_torqueLink200_3ch: case WirelessModels::node_shmLink210_fullbridge: case WirelessModels::node_shmLink210_qbridge_3K: return m_eepromHelper->read_excitationVoltage(); //gain amplifier voltage is the same as the excitation, which is read from eeprom diff --git a/MSCL_Managed/Properties/AssemblyInfo.cs b/MSCL_Managed/Properties/AssemblyInfo.cs index 6be83b8a1..151457573 100644 --- a/MSCL_Managed/Properties/AssemblyInfo.cs +++ b/MSCL_Managed/Properties/AssemblyInfo.cs @@ -33,5 +33,5 @@ // [assembly: AssemblyVersion("1.0.*")] // //update with each release -[assembly: AssemblyVersion("61.1.6.0")] -[assembly: AssemblyFileVersion("61.1.6.0")] +[assembly: AssemblyVersion("62.0.0.0")] +[assembly: AssemblyFileVersion("62.0.0.0")] diff --git a/MSCL_Managed/mscl/InertialTypes.cs b/MSCL_Managed/mscl/InertialTypes.cs index e4fec4c29..e9a28d075 100644 --- a/MSCL_Managed/mscl/InertialTypes.cs +++ b/MSCL_Managed/mscl/InertialTypes.cs @@ -289,10 +289,12 @@ public enum GnssAidingStatus { GNSS_AIDING_TIGHT_COUPLING = 0x0001, GNSS_AIDING_DIFFERENTIAL = 0x0002, GNSS_AIDING_INTEGER_FIX = 0x0004, - GNSS_AIDING_GPS = 0x0018, - GNSS_AIDING_GLONASS = 0x0060, - GNSS_AIDING_GALILEO = 0x0180, - GNSS_AIDING_BEIDOU = 0x0600 + GNSS_AIDING_GPS = 0x0038, + GNSS_AIDING_GLONASS = 0x00C0, + GNSS_AIDING_GALILEO = 0x0700, + GNSS_AIDING_BEIDOU = 0x3800, + GNSS_AIDING_NO_FIX = 0x4000, + GNSS_AIDING_CONFIG_ERROR = 0x8000 } public enum AidingMeasurementStatus { diff --git a/MSCL_Managed/mscl/MipNode.cs b/MSCL_Managed/mscl/MipNode.cs index 8bdf2116b..b104a5d23 100644 --- a/MSCL_Managed/mscl/MipNode.cs +++ b/MSCL_Managed/mscl/MipNode.cs @@ -107,6 +107,11 @@ public DeviceState lastDeviceState() { return ret; } + public void setLastDeviceState(DeviceState state) { + msclPINVOKE.MipNode_setLastDeviceState(swigCPtr, (int)state); + if (msclPINVOKE.SWIGPendingException.Pending) throw msclPINVOKE.SWIGPendingException.Retrieve(); + } + public Version firmwareVersion() { Version ret = new Version(msclPINVOKE.MipNode_firmwareVersion(swigCPtr), true); if (msclPINVOKE.SWIGPendingException.Pending) throw msclPINVOKE.SWIGPendingException.Retrieve(); diff --git a/MSCL_Managed/mscl/WirelessModels.cs b/MSCL_Managed/mscl/WirelessModels.cs index db8e1a876..15cc88813 100644 --- a/MSCL_Managed/mscl/WirelessModels.cs +++ b/MSCL_Managed/mscl/WirelessModels.cs @@ -139,6 +139,7 @@ public enum NodeModel { node_shmLink210_fullbridge = 63290170, node_shmLink210_qbridge_3K = 63290171, node_torqueLink = 63309999, + node_torqueLink200_3ch = 63313000, node_torqueLink200 = 63319999, node_sgLink_herm = 65010000, node_sgLink_herm_2600 = 65011110, diff --git a/MSCL_Managed/mscl/msclPINVOKE.cs b/MSCL_Managed/mscl/msclPINVOKE.cs index a77a65dde..d34bd8228 100644 --- a/MSCL_Managed/mscl/msclPINVOKE.cs +++ b/MSCL_Managed/mscl/msclPINVOKE.cs @@ -5208,6 +5208,9 @@ static Exception_Helper__MSCL_InvalidNodeConfig() [global::System.Runtime.InteropServices.DllImport("mscl", EntryPoint="CSharp_mscl_MipNode_lastDeviceState")] public static extern int MipNode_lastDeviceState(global::System.Runtime.InteropServices.HandleRef jarg1); + [global::System.Runtime.InteropServices.DllImport("mscl", EntryPoint="CSharp_mscl_MipNode_setLastDeviceState")] + public static extern void MipNode_setLastDeviceState(global::System.Runtime.InteropServices.HandleRef jarg1, int jarg2); + [global::System.Runtime.InteropServices.DllImport("mscl", EntryPoint="CSharp_mscl_MipNode_firmwareVersion")] public static extern global::System.IntPtr MipNode_firmwareVersion(global::System.Runtime.InteropServices.HandleRef jarg1);