int main()
{
    short exit=0;
    double error;
    std::cout<<"Starting"<<std::endl;

    if ((error=testKalmanFilter())<0.1)
    {
        std::cout<<"Test Kalman filter SUCCEEDED: estimationError = "<<error<<std::endl;
    }
    else
    {
        exit=exit | BOOST_BINARY( 1 );
        std::cout<<"Test Kalman filter FAILED: estimationError = "<<error<<std::endl;
    }
    if ((error=testKalmanFilterZeroInput())<0.1)
    {
        std::cout<<"Test Kalman filter (zero input) SUCCEEDED: estimationError = "<<error<<std::endl;
    }
    else
    {
        exit=exit | BOOST_BINARY( 10 );
        std::cout<<"Test Kalman filter (zero input) FAILED: estimationError = "<<error<<std::endl;
    }
    if ((error=testExtendedKalmanFilter())<0.1)
    {
        std::cout<<"Test extended Kalman filter SUCCEEDED: estimationError = "<<error<<std::endl;
    }
    else
    {
        exit=exit | BOOST_BINARY( 100 );
        std::cout<<"Test extended Kalman filter FAILED: estimationError = "<<error<<std::endl;
    }
    if ((error=testExtendedKalmanFilterLTV())<0.1)
    {
        std::cout<<"Test extended Kalman filter (LTV) SUCCEEDED: estimationError = "<<error<<std::endl;
    }
    else
    {
        exit=exit | BOOST_BINARY( 1000 );
        std::cout<<"Test extended Kalman filter (LTV) FAILED: estimationError = "<<error<<std::endl;
    }
    if ((error=testExtendedKalmanFilterZeroInput())<0.1)
    {
        std::cout<<"Test extended Kalman filter (zero input) SUCCEEDED: estimationError = "<<error<<std::endl;
    }
    else
    {
        exit=exit | BOOST_BINARY( 10000 );
        std::cout<<"Test extended Kalman filter (zero input) FAILED: estimationError = "<<error<<std::endl<<std::endl;
    }


    std::cout<<"Test exit code "<< std::bitset< 16 >(exit) <<std::endl;

    return exit;

}
示例#2
0
    NodeFeatures_shmlink::NodeFeatures_shmlink(const NodeInfo& info):
        NodeFeatures(info)
    {
        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
        addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);
        addCalCoeffChannelGroup(5, NodeEepromMap::CH_ACTION_SLOPE_5, NodeEepromMap::CH_ACTION_ID_5);
        addCalCoeffChannelGroup(6, NodeEepromMap::CH_ACTION_SLOPE_6, NodeEepromMap::CH_ACTION_ID_6);
        addCalCoeffChannelGroup(7, NodeEepromMap::CH_ACTION_SLOPE_7, NodeEepromMap::CH_ACTION_ID_7);
        addCalCoeffChannelGroup(8, NodeEepromMap::CH_ACTION_SLOPE_8, NodeEepromMap::CH_ACTION_ID_8);

        static const ChannelMask DIFFERENTIAL_CHS(BOOST_BINARY(00000111));    //ch1-ch3
        static const ChannelMask DIFF_CH1(BOOST_BINARY(00000001));    //ch1
        static const ChannelMask DIFF_CH2(BOOST_BINARY(00000010));    //ch2
        static const ChannelMask DIFF_CH3(BOOST_BINARY(00000100));    //ch3

        m_channelGroups.emplace_back(DIFFERENTIAL_CHS, "Differential Channels",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_hardwareGain, NodeEepromMap::HW_GAIN_1}}
        );

        m_channelGroups.emplace_back(DIFF_CH1, "Differential Channel 1",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_shuntCal, NodeEepromMap::CH_ACTION_SLOPE_1}}
        );

        m_channelGroups.emplace_back(DIFF_CH2, "Differential Channel 2",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_2},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_2},
                                         {WirelessTypes::chSetting_shuntCal, NodeEepromMap::CH_ACTION_SLOPE_2}}
        );

        m_channelGroups.emplace_back(DIFF_CH3, "Differential Channel 3",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_3},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_3},
                                         {WirelessTypes::chSetting_shuntCal, NodeEepromMap::CH_ACTION_SLOPE_3}}
        );

        //Channels
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(5, WirelessChannel::channel_5, WirelessTypes::chType_acceleration);        //accel x
        m_channels.emplace_back(6, WirelessChannel::channel_6, WirelessTypes::chType_acceleration);        //accel y
        m_channels.emplace_back(7, WirelessChannel::channel_7, WirelessTypes::chType_acceleration);        //accel z
        m_channels.emplace_back(8, WirelessChannel::channel_8, WirelessTypes::chType_temperature);        //temp
    }
void
UnsupportRsvdFields_r11b::RunCoreTest()
{
    /** \verbatim
     * Assumptions:
     * 1) Test CreateResources_r10b has run prior.
     * \endverbatim
     */

    // Lookup objs which were created in a prior test within group
    SharedIOSQPtr iosq = CAST_TO_IOSQ(gRsrcMngr->GetObj(IOSQ_GROUP_ID));
    SharedIOCQPtr iocq = CAST_TO_IOCQ(gRsrcMngr->GetObj(IOCQ_GROUP_ID));

    SharedWritePtr writeCmd = CreateCmd();
    IO::SendAndReapCmd(mGrpName, mTestName, CALC_TIMEOUT_ms(1), iosq, iocq,
        writeCmd, "none.set", true);

    LOG_NRM("Set all cmd's rsvd bits");
    uint32_t work = writeCmd->GetDword(0);
    work |= 0x00007c00;      // Set DW0_b14:10 bits
    writeCmd->SetDword(work, 0);

    writeCmd->SetDword(0xffffffff, 2);
    writeCmd->SetDword(0xffffffff, 3);

    work = writeCmd->GetDword(12);
    work |= 0x03ff0000;      // Set DW12_b25:16 bits
    writeCmd->SetDword(work, 12);

    work = writeCmd->GetDword(13);
    work |= 0xffffff00;     // Set DW13_b31:8 bits
    writeCmd->SetDword(work, 13);

    IO::SendAndReapCmd(mGrpName, mTestName, CALC_TIMEOUT_ms(1), iosq, iocq,
        writeCmd, "all.set", true);

    LOG_NRM("Set DSM field reserved coded values");
    uint32_t cdw13 = writeCmd->GetDword(13) & ~0xf;
    for (uint32_t accFreq = BOOST_BINARY(111); accFreq <= BOOST_BINARY(1111);
            ++accFreq) {
        work = cdw13 | accFreq;
        writeCmd->SetDword(work, 13);

        /* Controller may ignore context attributes */
        IO::SendAndReapCmdIgnore(mGrpName, mTestName, CALC_TIMEOUT_ms(1), iosq,
            iocq, writeCmd, "rsvd.val.set", true);
    }
}
NodeFeatures_envlinkMini::NodeFeatures_envlinkMini(const NodeInfo& info) :
    NodeFeatures(info)
{
    addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
    addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
    addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);
    addCalCoeffChannelGroup(7, NodeEepromMap::CH_ACTION_SLOPE_7, NodeEepromMap::CH_ACTION_ID_7);
    addCalCoeffChannelGroup(8, NodeEepromMap::CH_ACTION_SLOPE_8, NodeEepromMap::CH_ACTION_ID_8);

    static const ChannelMask THERMOCPL_CHS(BOOST_BINARY(00000111)); //ch1 - ch3

    m_channelGroups.emplace_back(THERMOCPL_CHS, "Thermocouple Channels",
    ChannelGroup::SettingsMap{
        {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_1},
        {WirelessTypes::chSetting_filterSettlingTime, NodeEepromMap::FILTER_1},
        {WirelessTypes::chSetting_thermocoupleType, NodeEepromMap::THERMOCPL_TYPE}}
                                );

    //Channels
    m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_diffTemperature);    //temp
    m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_diffTemperature);    //temp
    m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_diffTemperature);    //temp
    m_channels.emplace_back(7, WirelessChannel::channel_7, WirelessTypes::chType_temperature);        //internal temp
    m_channels.emplace_back(8, WirelessChannel::channel_8, WirelessTypes::chType_rh);                //% RH
}
    NodeFeatures_bladeImpactLink::NodeFeatures_bladeImpactLink(const NodeInfo& info):
        NodeFeatures(info)
    {
        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
        addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);
        //addCalCoeffChannelGroup(4, NodeEepromMap::CH_ACTION_SLOPE_4, NodeEepromMap::CH_ACTION_ID_4);

        static const ChannelMask CH1(BOOST_BINARY(00000001)); //ch1
        static const ChannelMask CH2(BOOST_BINARY(00000010)); //ch2
        static const ChannelMask CH3(BOOST_BINARY(00000100)); //ch3
        m_channelGroups.emplace_back(CH1, "Accel Channel 1", ChannelGroup::SettingsMap{{WirelessTypes::chSetting_lowPassFilter, NodeEepromMap::LOW_PASS_FILTER_1}});
        m_channelGroups.emplace_back(CH2, "Accel Channel 2", ChannelGroup::SettingsMap{{WirelessTypes::chSetting_lowPassFilter, NodeEepromMap::LOW_PASS_FILTER_2}});
        m_channelGroups.emplace_back(CH3, "Accel Channel 3", ChannelGroup::SettingsMap{{WirelessTypes::chSetting_lowPassFilter, NodeEepromMap::LOW_PASS_FILTER_3}});

        //Channels
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_acceleration);    //accel x
        m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_acceleration);    //accel y
        m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_acceleration);    //accel z
        //m_channels.emplace_back(4, WirelessChannel::channel_4, WirelessTypes::chType_temperature);    //internal temp
    }
    NodeFeatures_iepeLink::NodeFeatures_iepeLink(const NodeInfo& info):
        NodeFeatures(info)
    {
        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(4, NodeEepromMap::CH_ACTION_SLOPE_4, NodeEepromMap::CH_ACTION_ID_4);

        static const ChannelMask CH1(BOOST_BINARY(00000001)); //ch1
        m_channelGroups.emplace_back(CH1, "Accel Channel 1", ChannelGroup::SettingsMap{{WirelessTypes::chSetting_antiAliasingFilter, NodeEepromMap::ANTI_ALIASING_FILTER_1}});

        //Channels
        //    Note: Channel 4 is unique in that it doesn't follow the sample rate of the node. 
        //          Instead, it is sent once every burst, with a provided sample rate of once every 24 hours.
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_acceleration);   //accel
        m_channels.emplace_back(4, WirelessChannel::channel_4, WirelessTypes::chType_temperature);    //temp    
    }
    NodeFeatures_sglinkMicro::NodeFeatures_sglinkMicro(const NodeInfo& info):
        NodeFeatures(info)
    {
        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);

        static const ChannelMask DIFFERENTIAL_CHS(BOOST_BINARY(00000001));    //ch1

        m_channelGroups.emplace_back(DIFFERENTIAL_CHS, "Differential Channels",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_1},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_legacyShuntCal, NodeEepromMap::CH_ACTION_SLOPE_1}}
        );

        //Channels
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_temperature);        //temperature
    }
示例#8
0
    NodeFeatures_tclink1ch::NodeFeatures_tclink1ch(const NodeInfo& info) :
        NodeFeatures(info)
    {
        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(7, NodeEepromMap::CH_ACTION_SLOPE_7, NodeEepromMap::CH_ACTION_ID_7);
        addCalCoeffChannelGroup(8, NodeEepromMap::CH_ACTION_SLOPE_8, NodeEepromMap::CH_ACTION_ID_8);

        static const ChannelMask THERMOCPL_CHS(BOOST_BINARY(00000001)); //ch1

        m_channelGroups.emplace_back(THERMOCPL_CHS, "Thermocouple Channels",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_hardwareGain, NodeEepromMap::HW_GAIN_1},
                                         {WirelessTypes::chSetting_filterSettlingTime, NodeEepromMap::FILTER_1},
                                         {WirelessTypes::chSetting_thermocoupleType, NodeEepromMap::THERMOCPL_TYPE} }
        );

        //Channels
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_diffTemperature);    //temp (thermocouple)
        m_channels.emplace_back(7, WirelessChannel::channel_7, WirelessTypes::chType_temperature);        //cjc temp
        m_channels.emplace_back(8, WirelessChannel::channel_8, WirelessTypes::chType_rh);                //% RH
    }
	NodeFeatures_sglinkoemHermetic::NodeFeatures_sglinkoemHermetic(const NodeInfo& info):
		NodeFeatures(info)
	{
		addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
		addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
		addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);
		addCalCoeffChannelGroup(4, NodeEepromMap::CH_ACTION_SLOPE_4, NodeEepromMap::CH_ACTION_ID_4);

		static const ChannelMask DIFFERENTIAL_CHS(BOOST_BINARY(00000001));	//ch1

		m_channelGroups.emplace_back(DIFFERENTIAL_CHS, "Differential Channels",
									 ChannelGroup::SettingsMap{
										 {WirelessTypes::chSetting_hardwareGain, NodeEepromMap::HW_GAIN_1}}
		);

		//Channels
		m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_fullDifferential);	//full diff
		m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_battery);			//battery
		m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_temperature);		//temp
		m_channels.emplace_back(4, WirelessChannel::channel_4, WirelessTypes::chType_voltage);			//voltage
	}
示例#10
0
	NodeFeatures_rtdlink::NodeFeatures_rtdlink(const NodeInfo& info) :
		NodeFeatures(info)
	{
		addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
		addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
		addCalCoeffChannelGroup(7, NodeEepromMap::CH_ACTION_SLOPE_7, NodeEepromMap::CH_ACTION_ID_7);
		addCalCoeffChannelGroup(8, NodeEepromMap::CH_ACTION_SLOPE_8, NodeEepromMap::CH_ACTION_ID_8);

		static const ChannelMask THERMOCPL_CHS(BOOST_BINARY(00000011)); //ch1 - ch2

		m_channelGroups.emplace_back(THERMOCPL_CHS, "Thermocouple Channels",
									 ChannelGroup::SettingsMap{
										 {WirelessTypes::chSetting_hardwareGain, NodeEepromMap::HW_GAIN_1},
										 {WirelessTypes::chSetting_filterSettlingTime, NodeEepromMap::FILTER_1}}
		);

		//Channels
		m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_diffTemperature);	//4-wire
		m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_diffTemperature);	//2-wire
		m_channels.emplace_back(7, WirelessChannel::channel_7, WirelessTypes::chType_temperature);		//internal temp
		m_channels.emplace_back(8, WirelessChannel::channel_8, WirelessTypes::chType_rh);					//% RH
	}
示例#11
0
//-*****************************************************************************
void WritePropertyInfo( hid_t iGroup,
                    const std::string &iName,
                    AbcA::PropertyType iPropertyType,
                    const AbcA::DataType &iDataType,
                    bool isScalarLike,
                    uint32_t iTimeSamplingIndex,
                    uint32_t iNumSamples,
                    uint32_t iFirstChangedIndex,
                    uint32_t iLastChangedIndex )
{

    uint32_t info[5] = {0, 0, 0, 0, 0};
    uint32_t numFields = 1;

    static const uint32_t ptypeMask = ( uint32_t )BOOST_BINARY (
        0000 0000 0000 0000 0000 0000 0000 0011 );

    static const uint32_t podMask = ( uint32_t )BOOST_BINARY (
        0000 0000 0000 0000 0000 0000 0011 1100 );

    static const uint32_t hasTsidxMask = ( uint32_t )BOOST_BINARY (
        0000 0000 0000 0000 0000 0000 0100 0000 );

    static const uint32_t noRepeatsMask = ( uint32_t )BOOST_BINARY (
        0000 0000 0000 0000 0000 0000 1000 0000 );

    static const uint32_t extentMask = ( uint32_t )BOOST_BINARY(
        0000 0000 0000 0000 1111 1111 0000 0000 );

    // for compounds we just write out 0
    if ( iPropertyType != AbcA::kCompoundProperty )
    {
        // Slam the property type in there.
        info[0] |= ptypeMask & ( uint32_t )iPropertyType;

        // arrays may be scalar like, scalars are already scalar like
        info[0] |= ( uint32_t ) isScalarLike;

        uint32_t pod = ( uint32_t )iDataType.getPod();
        info[0] |= podMask & ( pod << 2 );

        if (iTimeSamplingIndex != 0)
        {
            info[0] |= hasTsidxMask;
        }

        if (iFirstChangedIndex == 1 && iLastChangedIndex == iNumSamples - 1)
        {
            info[0] |= noRepeatsMask;
        }

        uint32_t extent = ( uint32_t )iDataType.getExtent();
        info[0] |= extentMask & ( extent << 8 );

        ABCA_ASSERT( iFirstChangedIndex <= iNumSamples &&
            iLastChangedIndex <= iNumSamples &&
            iFirstChangedIndex <= iLastChangedIndex,
            "Illegal Sampling!" << std::endl <<
            "Num Samples: " << iNumSamples << std::endl <<
            "First Changed Index: " << iFirstChangedIndex << std::endl <<
            "Last Changed Index: " << iLastChangedIndex << std::endl );

        // Write the num samples. Only bother writing if
        // the num samples is greater than 1.  Existence of name.smp0
        // is used by the reader to determine if 0 or 1 sample.
        if ( iNumSamples > 1 )
        {
            info[1] = iNumSamples;
            numFields ++;
            if ( iFirstChangedIndex > 1 || ( iLastChangedIndex != 0 &&
                iLastChangedIndex != iNumSamples - 1 ) )
            {
                info[2] = iFirstChangedIndex;
                info[3] = iLastChangedIndex;
                numFields += 2;
            }
        }

        // finally set time sampling index on the end if necessary
        if (iTimeSamplingIndex != 0)
        {
            info[numFields] = iTimeSamplingIndex;
            numFields ++;
        }

    }

    WriteSmallArray( iGroup, iName + ".info",
        H5T_STD_U32LE, H5T_NATIVE_UINT32, numFields,
        ( const void * ) info );
}
    NodeFeatures_vlink200::NodeFeatures_vlink200(const NodeInfo& info):
        NodeFeatures(info)
    {
        //Channels
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_fullDifferential);     //full diff
        m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_fullDifferential);     //full diff
        m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_fullDifferential);     //full diff
        m_channels.emplace_back(4, WirelessChannel::channel_4, WirelessTypes::chType_fullDifferential);     //full diff
        m_channels.emplace_back(5, WirelessChannel::channel_5, WirelessTypes::chType_singleEnded);          //single ended
        m_channels.emplace_back(6, WirelessChannel::channel_6, WirelessTypes::chType_singleEnded);          //single ended
        m_channels.emplace_back(7, WirelessChannel::channel_7, WirelessTypes::chType_singleEnded);          //single ended
        m_channels.emplace_back(8, WirelessChannel::channel_8, WirelessTypes::chType_singleEnded);          //single ended


        //Channel Groups
        static const ChannelMask DIFFERENTIAL_CH1(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_CH4(BOOST_BINARY(00001000));    //ch4
        static const ChannelMask SINGLEENDED_CH5(BOOST_BINARY(00010000));    //ch5
        static const ChannelMask SINGLEENDED_CH6(BOOST_BINARY(00100000));    //ch6
        static const ChannelMask SINGLEENDED_CH7(BOOST_BINARY(01000000));    //ch7
        static const ChannelMask SINGLEENDED_CH8(BOOST_BINARY(10000000));    //ch8

        m_channelGroups.emplace_back(DIFFERENTIAL_CH1, "Differential Channel 1",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_1},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_1},
                                         {WirelessTypes::chSetting_antiAliasingFilter, NodeEepromMap::ANTI_ALIASING_FILTER_1}}
        );

        m_channelGroups.emplace_back(DIFFERENTIAL_CH2, "Differential Channel 2",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_2},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_2},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_2},
                                         {WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_2},
                                         {WirelessTypes::chSetting_antiAliasingFilter, NodeEepromMap::ANTI_ALIASING_FILTER_2}}
        );

        m_channelGroups.emplace_back(DIFFERENTIAL_CH3, "Differential Channel 3",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_3},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_3},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_3},
                                         {WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_3},
                                         {WirelessTypes::chSetting_antiAliasingFilter, NodeEepromMap::ANTI_ALIASING_FILTER_3}}
        );

        m_channelGroups.emplace_back(DIFFERENTIAL_CH4, "Differential Channel 4",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_4},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_4},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_4},
                                         {WirelessTypes::chSetting_autoShuntCal, NodeEepromMap::CH_ACTION_SLOPE_4},
                                         {WirelessTypes::chSetting_antiAliasingFilter, NodeEepromMap::ANTI_ALIASING_FILTER_4}}
        );

        m_channelGroups.emplace_back(SINGLEENDED_CH5, "Single Ended Channel 5",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_5}}
        );

        m_channelGroups.emplace_back(SINGLEENDED_CH6, "Single Ended Channel 6",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_6}}
        );

        m_channelGroups.emplace_back(SINGLEENDED_CH7, "Single Ended Channel 7",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_7}}
        );

        m_channelGroups.emplace_back(SINGLEENDED_CH8, "Single Ended Channel 8",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_8}}
        );

        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
        addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);
        addCalCoeffChannelGroup(4, NodeEepromMap::CH_ACTION_SLOPE_4, NodeEepromMap::CH_ACTION_ID_4);
        addCalCoeffChannelGroup(5, NodeEepromMap::CH_ACTION_SLOPE_5, NodeEepromMap::CH_ACTION_ID_5);
        addCalCoeffChannelGroup(6, NodeEepromMap::CH_ACTION_SLOPE_6, NodeEepromMap::CH_ACTION_ID_6);
        addCalCoeffChannelGroup(7, NodeEepromMap::CH_ACTION_SLOPE_7, NodeEepromMap::CH_ACTION_ID_7);
        addCalCoeffChannelGroup(8, NodeEepromMap::CH_ACTION_SLOPE_8, NodeEepromMap::CH_ACTION_ID_8);
    }
示例#13
0
#include "named_bits.h"

// -------------------------------------------------------------
// SPECIFIC CODE HERE (adapts generic code to specific needs)
//
//       Bit: 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
enum FBB { //--------------------|-----|  |  |  |-----|--------
	FOO= BOOST_BINARY( 0  0  0  0  0  0  0  0  0  1  0  0 ),
	BAR= BOOST_BINARY( 0  0  0  0  1  1  1  1  0  0  0  0 ),
	BAZ= BOOST_BINARY( 0  0  1  0  0  0  0  0  0  0  0  0 ),
}; //                    BAZ-bit-^     |BAR-bits|     ^-FOO-bit

// -------------------------------------------------------------
// TYPICAL CLIENT SIDE CODE (making use of adapted generic code)
//
void xxx() {
	extern unsigned short ov;
	named_bits<FBB>::uval<BAR>(&ov, 3u);
}
int yyy() {
	extern unsigned short ov;
	return named_bits<FBB>::uval<BAR, unsigned short>(&ov);
}

    NodeFeatures_vlink::NodeFeatures_vlink(const NodeInfo& info):
        NodeFeatures(info)
    {
        //Channels
        m_channels.emplace_back(1, WirelessChannel::channel_1, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(2, WirelessChannel::channel_2, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(3, WirelessChannel::channel_3, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(4, WirelessChannel::channel_4, WirelessTypes::chType_fullDifferential);    //full diff
        m_channels.emplace_back(5, WirelessChannel::channel_5, WirelessTypes::chType_voltage);            //voltage 
        m_channels.emplace_back(6, WirelessChannel::channel_6, WirelessTypes::chType_voltage);            //voltage 
        m_channels.emplace_back(7, WirelessChannel::channel_7, WirelessTypes::chType_voltage);            //voltage 
        m_channels.emplace_back(8, WirelessChannel::channel_8, WirelessTypes::chType_temperature);        //temp


        //Channel Groups
        static const ChannelMask DIFFERENTIAL_CH1(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_CH4(BOOST_BINARY(00001000));    //ch4

        m_channelGroups.emplace_back(DIFFERENTIAL_CH1, "Differential Channel 1",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_1},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_1},
                                         {WirelessTypes::chSetting_legacyShuntCal, NodeEepromMap::CH_ACTION_SLOPE_1}}
        );

        m_channelGroups.emplace_back(DIFFERENTIAL_CH2, "Differential Channel 2",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_2},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_2},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_2},
                                         {WirelessTypes::chSetting_legacyShuntCal, NodeEepromMap::CH_ACTION_SLOPE_2}}
        );

        m_channelGroups.emplace_back(DIFFERENTIAL_CH3, "Differential Channel 3",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_3},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_3},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_3},
                                         {WirelessTypes::chSetting_legacyShuntCal, NodeEepromMap::CH_ACTION_SLOPE_3}}
        );

        m_channelGroups.emplace_back(DIFFERENTIAL_CH4, "Differential Channel 4",
                                     ChannelGroup::SettingsMap{
                                         {WirelessTypes::chSetting_inputRange, NodeEepromMap::HW_GAIN_4},
                                         {WirelessTypes::chSetting_hardwareOffset, NodeEepromMap::HW_OFFSET_4},
                                         {WirelessTypes::chSetting_autoBalance, NodeEepromMap::HW_OFFSET_4},
                                         {WirelessTypes::chSetting_legacyShuntCal, NodeEepromMap::CH_ACTION_SLOPE_4}}
        );

        addCalCoeffChannelGroup(1, NodeEepromMap::CH_ACTION_SLOPE_1, NodeEepromMap::CH_ACTION_ID_1);
        addCalCoeffChannelGroup(2, NodeEepromMap::CH_ACTION_SLOPE_2, NodeEepromMap::CH_ACTION_ID_2);
        addCalCoeffChannelGroup(3, NodeEepromMap::CH_ACTION_SLOPE_3, NodeEepromMap::CH_ACTION_ID_3);
        addCalCoeffChannelGroup(4, NodeEepromMap::CH_ACTION_SLOPE_4, NodeEepromMap::CH_ACTION_ID_4);
        addCalCoeffChannelGroup(5, NodeEepromMap::CH_ACTION_SLOPE_5, NodeEepromMap::CH_ACTION_ID_5);
        addCalCoeffChannelGroup(6, NodeEepromMap::CH_ACTION_SLOPE_6, NodeEepromMap::CH_ACTION_ID_6);
        addCalCoeffChannelGroup(7, NodeEepromMap::CH_ACTION_SLOPE_7, NodeEepromMap::CH_ACTION_ID_7);
        addCalCoeffChannelGroup(8, NodeEepromMap::CH_ACTION_SLOPE_8, NodeEepromMap::CH_ACTION_ID_8);
    }
示例#15
0
TEST(readBitsTest, orBits)
{
	// NOTE!: In the binary diagrams below, the rightmost bit of each byte
	// is the LSB.

	size_t bitSize, bitOffset;
	char src[2];
	char dest[4];

	// SUBTEST: src size < 1 byte
	//
	// src             = 101
	// bit offset      = 9
	// dest            = 10101010 10101010 10101010 10101010
	// expected result = 10101010 11111010 10101010 10101010

	bitSize = 3;
	bitOffset = 9;
	memset(src, 0x00, 2);
	src[0] = BOOST_BINARY(10100000);
	memset(dest, BOOST_BINARY(10101010), 4);

	std::istringstream in1(std::string(src, (bitSize + 7)/8));

	readBits(in1, dest, bitSize, bitOffset, BITWISE_OR);

	EXPECT_EQ((char)BOOST_BINARY(10101010), dest[0]);
	EXPECT_EQ((char)BOOST_BINARY(11111010), dest[1]);
	EXPECT_EQ((char)BOOST_BINARY(10101010), dest[2]);
	EXPECT_EQ((char)BOOST_BINARY(10101010), dest[3]);

	// SUBTEST: byte-aligned with partial last byte
	//
	// src             = 01010101 010
	// bit offset      = 8
	// dest            = 10101010 10101010 10101010 10101010
	// expected result = 10101010 11111111 11101010 10101010

	bitSize = 11;
	bitOffset = 8;
	memset(src, 0x00, 2);
	src[0] = BOOST_BINARY(01010101);
	src[1] = BOOST_BINARY(01000000);
	memset(dest, BOOST_BINARY(10101010), 4);

	std::istringstream in2(std::string(src, (bitSize + 7)/8));

	readBits(in2, dest, bitSize, bitOffset, BITWISE_OR);

	EXPECT_EQ((char)BOOST_BINARY(10101010), dest[0]);
	EXPECT_EQ((char)BOOST_BINARY(11111111), dest[1]);
	EXPECT_EQ((char)BOOST_BINARY(11101010), dest[2]);
	EXPECT_EQ((char)BOOST_BINARY(10101010), dest[3]);

	// SUBTEST: not byte-aligned, src size > 1 byte
	//
	// src             = 01010101 0101010
	// bit offset      = 4
	// dest            = 10101010 10101010 10101010 10101010
	// expected result = 10101111 11111111 11101010 10101010

	bitSize = 15;
	bitOffset = 4;
	memset(src, 0x00, 2);
	src[0] = BOOST_BINARY(01010101);
	src[1] = BOOST_BINARY(01010100);
	memset(dest, BOOST_BINARY(10101010), 4);

	std::istringstream in3(std::string(src, (bitSize + 7)/8));

	readBits(in3, dest, bitSize, bitOffset, BITWISE_OR);

	EXPECT_EQ((char)BOOST_BINARY(10101111), dest[0]);
	EXPECT_EQ((char)BOOST_BINARY(11111111), dest[1]);
	EXPECT_EQ((char)BOOST_BINARY(11101010), dest[2]);
	EXPECT_EQ((char)BOOST_BINARY(10101010), dest[3]);
}