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);