Commit 5133ef63 authored by LorenzoMonti's avatar LorenzoMonti
Browse files

improve the algorithm, tested with the real recevitor

parent 9e4b897a
Loading
Loading
Loading
Loading
+7 −73
Original line number Diff line number Diff line
@@ -1149,9 +1149,6 @@ ReceiverControl::FetValues ReceiverControl::fetValues(
    
    FetValues values;
	
	 cout << "feed number " << feed_number << endl;
	 cout << "m_number_of_feeds " << m_number_of_feeds << endl;
	 cout << "stage_number " << stage_number << endl;
    if(feed_number >= m_number_of_feeds)
        throw ReceiverControlEx("ReceiverControl error: invalid feed number.");

@@ -1376,10 +1373,6 @@ ReceiverControl::StageValues ReceiverControl::stageValues(
    std::string vg_selector;               // A03: it allows to select the value requested for a given stadium
    std::string quantity_selector;         // A03: it allows to select the value requested for a given stadium
    
    cout << "m_number_of_feeds " << m_number_of_feeds << endl;
    //cout << "stage_number " << stage_number << endl;
    //cout << "quantity" << quantity << endl;
    
    if(m_number_of_feeds == 1)
        column_selectors.push_back("0001");
    else if(m_number_of_feeds <= 8)  {
@@ -1398,10 +1391,6 @@ ReceiverControl::StageValues ReceiverControl::stageValues(
        column_selectors.push_back("0100");
    }
	
    for (std::size_t x = 0; x < column_selectors.size(); x++){
	   cout << "column_sel " << column_selectors[x] << endl;	
	 }
	
    switch(stage_number) {
        case 1:
            vd_selector = "0000"; 
@@ -1432,11 +1421,6 @@ ReceiverControl::StageValues ReceiverControl::stageValues(
            throw ReceiverControlEx("ReceiverControl error: invalid stage number.");
    }
    
    cout << "vd_selector " << vd_selector << endl;
    cout << "id_selector " << id_selector << endl;
    cout << "vg_selector " << vg_selector << endl;
    cout << "quantity " << quantity << endl;
    
    switch(quantity) {
        case DRAIN_VOLTAGE:
            quantity_selector = vd_selector;
@@ -1485,7 +1469,6 @@ ReceiverControl::StageValues ReceiverControl::stageValues(
                    MCB_PORT_NUMBER_00_07   // Port Number from 08 to 15
            );
            pthread_mutex_unlock(&m_lna_mutex); 
				//cout << "parameters.size() " << parameters.size() << endl;
            if(parameters.size() != AD24_LEN * AD24_TYPE_LEN)
                throw MicroControllerBoardEx("Error: wrong number of parameters received.");

@@ -1537,14 +1520,6 @@ ReceiverControl::StageValues ReceiverControl::stageValues(
                rvalues.push_back(rdvalues[offset+idx+4]); // Add the item of the fourth column
            }
        }
    cout << "lvalues.size() " << lvalues.size() << endl;
	 cout << "rvalues.size() " << rvalues.size() << endl;
	 cout << "m_number_of_feeds " << m_number_of_feeds << endl;
    
    for(std::size_t i = 0; i < lvalues.size(); i++)
    	cout << i << " lvalues " << lvalues[i] << endl;
    for(std::size_t j = 0; j < rvalues.size(); j++)
    	cout  << j << "rvalues " << rvalues[j] << endl;

    if(lvalues.size() < m_number_of_feeds || rvalues.size() < m_number_of_feeds)
        throw ReceiverControlEx("Error: the vector size doesn't match the number of feeds.");
@@ -1580,10 +1555,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
    
    const unsigned short feeds_per_pcb = ceil(m_number_of_feeds/5.0f);
    
    //cout << "m_number_of_feeds " << m_number_of_feeds << endl;
    //cout << "stage_number " << stage_number << endl;
    //cout << "quantity" << quantity << endl;
    
	if(m_number_of_feeds <= 5)
        column_selectors.push_back("0001");
    else if(m_number_of_feeds <= 40)  {
@@ -1602,10 +1573,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
        column_selectors.push_back("0100");
    }
	
   /* for (std::size_t x = 0; x < column_selectors.size(); x++){
	   cout << "column_sel " << column_selectors[x] << endl;	
	 }*/
	
    switch(feed_number) {
        case 1:
            vd_selector = "0000"; 
@@ -1636,11 +1603,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
            throw ReceiverControlEx("ReceiverControl error: invalid stage number.");
    }
    
    /*cout << "vd_selector " << vd_selector << endl;
    cout << "id_selector " << id_selector << endl;
    cout << "vg_selector " << vg_selector << endl;
    cout << "quantity " << quantity << endl;*/
    
    switch(quantity) {
        case DRAIN_VOLTAGE:
            quantity_selector = vd_selector;
@@ -1658,8 +1620,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
            throw ReceiverControlEx("ReceiverControl::stageValues(): the quantity requested does not exist.");
    }

    cout << quant << " " << quantity_selector << endl;

    // Left channel values, right channel values, left channel disorderly values, right channel disorderly values
    std::vector<double> lvalues, rvalues, ldvalues, rdvalues;
    std::vector<BYTE> parameters;
@@ -1690,7 +1650,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
                    MCB_PORT_NUMBER_00_07   // Port Number from 08 to 15
            );
            pthread_mutex_unlock(&m_lna_mutex); 
				//cout << "parameters.size() " << parameters.size() << endl;
            if(parameters.size() != AD24_LEN * AD24_TYPE_LEN)
                throw MicroControllerBoardEx("Error: wrong number of parameters received.");

@@ -1711,9 +1670,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
    }	 
	 
    if(m_number_of_feeds <= 5) { // just one column (BRD Selection 0)
    	  cout << "feeds <=10" << endl;
        cout << "ldvalues.size()" << ldvalues.size() << endl;
        cout << "rdvalues.size()" << rdvalues.size() << endl;
        if(ldvalues.size() != 4 || rdvalues.size() != 4)  // Just five feeds means just one column 
            throw ReceiverControlEx("Error: mismatch between number of feeds and number of parameters");
        lvalues.push_back(ldvalues.front());
@@ -1728,9 +1684,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
        }

    if(m_number_of_feeds >= 41 && m_number_of_feeds <= 50) { // third column if we have from 41 to 50 feeds
        cout << "feeds >=41 to <=50" << endl;
        cout << "ldvalues.size()" << ldvalues.size() << endl;
        cout << "rdvalues.size()" << rdvalues.size() << endl;
        if(ldvalues.size() != 12 || rdvalues.size() != 12)  // Nine feeds means three columns
            throw ReceiverControlEx("Error: mismatch between number of feeds and number of parameters");
        lvalues.push_back(ldvalues[8]);
@@ -1738,9 +1691,6 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
    }
    else 
        if(m_number_of_feeds > 50) {
        	   cout << "feeds > 50" << endl;
            cout << "ldvalues.size()" << ldvalues.size() << endl;
            cout << "rdvalues.size()" << rdvalues.size() << endl;
            if(ldvalues.size() != 16 || rdvalues.size() != 16)  // More than nine feeds means four columns
                throw ReceiverControlEx("Error: mismatch between number of feeds and number of parameters");
            std::vector<BYTE>::size_type offset=8;
@@ -1752,32 +1702,16 @@ ReceiverControl::FeedValues ReceiverControl::feedValues(
            }
        }

	     
    cout << "lvalues.size() " << lvalues.size() << endl;
	 cout << "rvalues.size() " << rvalues.size() << endl;
	 cout << "m_number_of_feeds " << m_number_of_feeds << endl;
    
    /*for(std::size_t i = 0; i < lvalues.size(); i++)
       cout << i << " lvalues " << lvalues[i] << endl;
    for(std::size_t j = 0; j < rvalues.size(); j++)
       cout  << j << "rvalues " << rvalues[j] << endl;*/


    if(lvalues.size() < feeds_per_pcb || rvalues.size() < feeds_per_pcb)
        throw ReceiverControlEx("Error: the vector size doesn't match the number of feeds.");
        throw ReceiverControlEx("Error: the vector size doesn't match the number of feeds per pcb.");
	
    // Add the first "feeds_per_pcb" converted items of lvalues and rvalues
    FeedValues values;
    try {
        for(size_t idx=0; idx<feeds_per_pcb; idx++) {
        for(size_t idx=0; idx<m_number_of_feeds; idx++) {
            (values.left_channel).push_back(converter != NULL ? converter(lvalues[idx]) : lvalues[idx]);
            (values.right_channel).push_back(converter != NULL ? converter(rvalues[idx]) : rvalues[idx]);                   
        }        
        
        
        cout << "values.left_channel " << values.left_channel.size() << endl;
        cout << "values.right_channel " << values.right_channel.size() << endl;
        
    }
    catch(...) {
        throw ReceiverControlEx("ReceiverControl error: unexpected exception occurs performing the conversion.");
+3 −3
Original line number Diff line number Diff line
@@ -15,16 +15,16 @@
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    actionThreadStackSize="2048"
    monitoringThreadStackSize="4096"
    DewarIPAddress="192.168.3.115"
    DewarIPAddress="192.168.60.51"
    DewarPort="5002"
    LNAIPAddress="192.168.3.114"
    LNAIPAddress="192.168.60.50"
    LNAPort="5002"   
    WatchDogResponseTime="10000000"
    WatchDogSleepTime="10000000"
    LNASamplingTime="250000"
    RepetitionCacheTime="7000000"
    RepetitionExpireTime="10000000"
    LocalOscillatorInstance="RECEIVERS/LO_CBAND"
    LocalOscillatorInstance="RECEIVERS/LO_QBAND"
    ReceiverName="SRTQBand"
>
    <LO description="Sequence of local oscillator values for each IF chain" />
+140 −128
Original line number Diff line number Diff line
@@ -2,7 +2,8 @@

#define NUMBER_OF_FEEDS 5 // Number of feeds per AD24 port

SRTQBandCore::SRTQBandCore() {
SRTQBandCore::SRTQBandCore()
{
    voltage2mbar = voltage2mbarF;
    voltage2Kelvin = voltage2KelvinF;
    voltage2Celsius = voltage2CelsiusF;
@@ -12,7 +13,6 @@ SRTQBandCore::SRTQBandCore() {

SRTQBandCore::~SRTQBandCore() {}


void SRTQBandCore::initialize(maci::ContainerServices *services)
{
    m_vdFeedValues = std::vector<IRA::ReceiverControl::FeedValues>(NUMBER_OF_FEEDS);
@@ -28,84 +28,91 @@ ACS::doubleSeq SRTQBandCore::getFeedValues(const IRA::ReceiverControl::FetValue&

    ACS::doubleSeq values;
    values.length(getFeeds());
    cout << "getFeeds() " << getFeeds() << endl;
	 cout << "ifs " << ifs  << endl;
    cout << "feed " << feed << endl;
	 cout << "m_configuration.getIFs() " << m_configuration.getIFs()  << endl;
	 cout << "m_configuration.getFeeds()" << m_configuration.getFeeds() << endl;
    size_t feed_offs = 0;

    for (size_t i = 0; i < getFeeds(); i++)
        values[i] = 0.0;
    if (ifs >= m_configuration.getIFs() || feed > NUMBER_OF_FEEDS || feed < 1)
        return values;
    cout << "m_polarization[ifs] " << m_polarization[ifs] << endl;
	 cout << "Receivers::RCV_LCP " << Receivers::RCV_LCP << endl;
    cout << "control " << control << endl;
    cout << "IRA::ReceiverControl::DRAIN_VOLTAGE " << IRA::ReceiverControl::DRAIN_VOLTAGE << endl;
    cout << "IRA::ReceiverControl::DRAIN_CURRENT " << IRA::ReceiverControl::DRAIN_CURRENT << endl;
        cout << "IRA::ReceiverControl::GATE_VOLTAGE " << IRA::ReceiverControl::GATE_VOLTAGE << endl;
	 cout << "m_vdFeedValues[feed-1].left_channel.size() " << m_vdFeedValues[feed-1].left_channel.size() << endl;
	 cout << "m_idFeedValues[feed-1].left_channel.size() " << m_idFeedValues[feed-1].left_channel.size() << endl;
	 cout << "m_vgFeedeValues[feed-1].left_channel.size() " << m_vgFeedValues[feed-1].left_channel.size() << endl;

	 cout << "m_vdFeedValues[feed-1].right_channel.size() " << m_vdFeedValues[feed-1].right_channel.size() << endl;
	 cout << "m_idFeedValues[feed-1].right_channel.size() " << m_idFeedValues[feed-1].right_channel.size() << endl;
	 cout << "m_vgFeedeValues[feed-1].right_channel.size() " << m_vgFeedValues[feed-1].right_channel.size() << endl;

    // Left Channel
    if(m_polarization[ifs] == (long)Receivers::RCV_LCP) {
        if (control == IRA::ReceiverControl::DRAIN_VOLTAGE) {
        		if (getFeeds()>m_vdFeedValues[feed-1].left_channel.size())
    				return values;
            for(size_t i=0; i<getFeeds(); i++) {
            	values[i] = (m_vdFeedValues[feed-1]).left_channel[i];
    if (m_polarization[ifs] == (long)Receivers::RCV_LCP)
    {
        if (control == IRA::ReceiverControl::DRAIN_VOLTAGE)
        {
            for (size_t i = 0; i < 4; i++){
                for (size_t j = 0; j < NUMBER_OF_FEEDS; j++){
                    if(i + j + feed_offs < getFeeds())
                        values[i + j + feed_offs] = (m_vdFeedValues[j]).left_channel[i];
                }
                feed_offs +=4;
            }
        else {
            if (control == IRA::ReceiverControl::DRAIN_CURRENT) {
           		if (getFeeds()>m_idFeedValues[feed-1].left_channel.size())
    					return values;
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_idFeedValues[feed-1]).left_channel[i];
        }
            else {
            	if (getFeeds()>m_vgFeedValues[feed-1].left_channel.size())
    					return values;
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_vgFeedValues[feed-1]).left_channel[i];
        else
        {
            if (control == IRA::ReceiverControl::DRAIN_CURRENT)
            {
                for (size_t i = 0; i < 4; i++){
                    for (size_t j = 0; j < NUMBER_OF_FEEDS; j++){
                        if(i + j + feed_offs < getFeeds())
                            values[i + j + feed_offs] = (m_idFeedValues[j]).left_channel[i];
                    }
                    feed_offs +=4;
                }
            }
            else
            {
                for (size_t i = 0; i < 4; i++){
                    for (size_t j = 0; j < NUMBER_OF_FEEDS; j++){
                        if(i + j + feed_offs < getFeeds())
                            values[i + j + feed_offs] = (m_vgFeedValues[j]).left_channel[i];
                    }
                    feed_offs +=4;
                }
            }
        }
    }
    // Right Channel
    if (m_polarization[ifs] == (long)Receivers::RCV_RCP) {
        if (control==IRA::ReceiverControl::DRAIN_VOLTAGE) {
        		if (getFeeds()>m_vdFeedValues[feed-1].right_channel.size())
    				return values;
            for(size_t i=0;i<getFeeds();i++)
                values[i] = (m_vdFeedValues[feed-1]).right_channel[i];
    if (m_polarization[ifs] == (long)Receivers::RCV_RCP)
    {
        if (control == IRA::ReceiverControl::DRAIN_VOLTAGE)
        {
            size_t feed_offs = 0;
            for (size_t i = 0; i < 4; i++){
                for (size_t j = 0; j < NUMBER_OF_FEEDS; j++){
                    if(i + j + feed_offs < getFeeds())
                        values[i + j + feed_offs] = (m_vdFeedValues[j]).right_channel[i];
                }
        else {
            if (control == IRA::ReceiverControl::DRAIN_CURRENT) {
            	if (getFeeds()>m_idFeedValues[feed-1].right_channel.size())
    					return values; 
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_idFeedValues[feed-1]).right_channel[i];
                feed_offs +=4;
            }
            else { 
            	if (getFeeds()>m_vgFeedValues[feed-1].right_channel.size())
    					return values;
               for(size_t i=0; i<getFeeds(); i++)
               	values[i] = (m_vgFeedValues[feed-1]).right_channel[i];
        }
        else
        {
            if (control == IRA::ReceiverControl::DRAIN_CURRENT)
            {
                for (size_t i = 0; i < 4; i++){
                    for (size_t j = 0; j < NUMBER_OF_FEEDS; j++){
                        if(i + j + feed_offs < getFeeds())
                            values[i + j + feed_offs] = (m_idFeedValues[j]).right_channel[i];
                    }
                    feed_offs +=4;
                }
            }
            else
            {
                for (size_t i = 0; i < 4; i++){
                    for (size_t j = 0; j < NUMBER_OF_FEEDS; j++){
                        if(i + j + feed_offs < getFeeds())
                            values[i + j + feed_offs] = (m_vgFeedValues[j]).right_channel[i];
                    }
                    feed_offs +=4;
                }
            }
    
    for(size_t j = 0; j < getFeeds(); j++){
      cout << "values " << values[j] << endl;
        }
    return values;
    }


    return values;
}

void SRTQBandCore::setMode(const char *mode) throw(
    ReceiversErrors::ModeErrorExImpl,
@@ -114,8 +121,7 @@ void SRTQBandCore::setMode(const char * mode) throw (
    ComponentErrors::ValueOutofRangeExImpl,
    ComponentErrors::CouldntGetComponentExImpl,
    ComponentErrors::CORBAProblemExImpl,
        ReceiversErrors::LocalOscillatorErrorExImpl
        )
    ReceiversErrors::LocalOscillatorErrorExImpl)
{
    baci::ThreadSyncGuard guard(&m_mutex);
    m_setupMode = ""; // If we don't reach the end of the method then the mode will be unknown
@@ -123,18 +129,18 @@ void SRTQBandCore::setMode(const char * mode) throw (
    cmdMode.MakeUpper();

    _EXCPT(ReceiversErrors::ModeErrorExImpl, impl, "CConfiguration::setMode()");
    cout << "cmdMode " << cmdMode << endl;
    // Set the operating mode to the board
    try {
    try
    {
        if (cmdMode == "SINGLEDISH")
            m_control->setSingleDishMode();
        else
            if(cmdMode == "VLBI")
        else if (cmdMode == "VLBI")
            m_control->setVLBIMode();
        else
            throw impl; // If the mode is not supported, raise an exception
    }
    catch (IRA::ReceiverControlEx& ex) {
    catch (IRA::ReceiverControlEx &ex)
    {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::setMode()");
        impl.setDetails(ex.what().c_str());
        setStatusBit(CONNECTIONERROR);
@@ -143,7 +149,8 @@ void SRTQBandCore::setMode(const char * mode) throw (

    m_configuration.setMode(cmdMode);

    for (WORD i=0;i<m_configuration.getIFs();i++) {
    for (WORD i = 0; i < m_configuration.getIFs(); i++)
    {
        m_startFreq[i] = m_configuration.getIFMin()[i];
        m_bandwidth[i] = m_configuration.getIFBandwidth()[i];
        m_polarization[i] = (long)m_configuration.getPolarizations()[i];
@@ -151,7 +158,8 @@ void SRTQBandCore::setMode(const char * mode) throw (
    // The set the default LO for the default LO for the selected mode.....
    ACS::doubleSeq lo;
    lo.length(m_configuration.getIFs());
    for (WORD i=0;i<m_configuration.getIFs();i++) {
    for (WORD i = 0; i < m_configuration.getIFs(); i++)
    {
        lo[i] = m_configuration.getDefaultLO()[i];
    }
    // setLO throws:
@@ -164,17 +172,20 @@ void SRTQBandCore::setMode(const char * mode) throw (

    // Verify the m_setupMode is the same mode active on the board
    bool isSingleDishModeOn, isVLBIModeOn;
    try {
    try
    {
        isSingleDishModeOn = m_control->isSingleDishModeOn();
        isVLBIModeOn = m_control->isVLBIModeOn();
    }
    catch (IRA::ReceiverControlEx& ex) {
    catch (IRA::ReceiverControlEx &ex)
    {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::setMode()");
        impl.setDetails(ex.what().c_str());
        setStatusBit(CONNECTIONERROR);
        throw impl;
    }
    if((cmdMode == "SINGLEDISH" && !isSingleDishModeOn) || (cmdMode == "VLBI" && !isVLBIModeOn)) {
    if ((cmdMode == "SINGLEDISH" && !isSingleDishModeOn) || (cmdMode == "VLBI" && !isVLBIModeOn))
    {
        m_setupMode = ""; // If m_setupMode doesn't match the mode active on the board, then set un unknown mode
        throw impl;
    }
@@ -187,16 +198,16 @@ void SRTQBandCore::setMode(const char * mode) throw (
    ACS_LOG(LM_FULL_INFO, "CComponentCore::setMode()", (LM_NOTICE, "RECEIVER_MODE %s", (const char *)cmdMode));
}


void SRTQBandCore::updateVdLNAControls() throw(ReceiversErrors::ReceiverControlBoardErrorExImpl)
{
    // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage)
    try {
        cout << "Number of feeds per pcb " << NUMBER_OF_FEEDS << endl;
    try
    {
        for (size_t i = 0; i < NUMBER_OF_FEEDS; i++)
            m_vdFeedValues[i] = m_control->feedValues(IRA::ReceiverControl::DRAIN_VOLTAGE, i + 1, SRTQBandCore::voltageConverter);
    }
    catch (IRA::ReceiverControlEx& ex) {
    catch (IRA::ReceiverControlEx &ex)
    {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::updateVdLNAControls()");
        impl.setDetails(ex.what().c_str());
        setStatusBit(CONNECTIONERROR);
@@ -205,15 +216,16 @@ void SRTQBandCore::updateVdLNAControls() throw (ReceiversErrors::ReceiverControl
    clearStatusBit(CONNECTIONERROR); // The communication was ok so clear the CONNECTIONERROR bit
}


void SRTQBandCore::updateIdLNAControls() throw(ReceiversErrors::ReceiverControlBoardErrorExImpl)
{
    // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage)
    try {
    try
    {
        for (size_t i = 0; i < NUMBER_OF_FEEDS; i++)
            m_idFeedValues[i] = m_control->feedValues(IRA::ReceiverControl::DRAIN_CURRENT, i + 1, SRTQBandCore::currentConverter);
    }
    catch (IRA::ReceiverControlEx& ex) {
    catch (IRA::ReceiverControlEx &ex)
    {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::updateIdLNAControls()");
        impl.setDetails(ex.what().c_str());
        setStatusBit(CONNECTIONERROR);
@@ -222,15 +234,16 @@ void SRTQBandCore::updateIdLNAControls() throw (ReceiversErrors::ReceiverControl
    clearStatusBit(CONNECTIONERROR); // The communication was ok so clear the CONNECTIONERROR bit
}


void SRTQBandCore::updateVgLNAControls() throw(ReceiversErrors::ReceiverControlBoardErrorExImpl)
{
    // Not under the mutex protection because the m_control object is thread safe (at the micro controller board stage)
    try {
    try
    {
        for (size_t i = 0; i < NUMBER_OF_FEEDS; i++)
            m_vgFeedValues[i] = m_control->feedValues(IRA::ReceiverControl::GATE_VOLTAGE, i + 1, SRTQBandCore::voltageConverter);
    }
    catch (IRA::ReceiverControlEx& ex) {
    catch (IRA::ReceiverControlEx &ex)
    {
        _EXCPT(ReceiversErrors::ReceiverControlBoardErrorExImpl, impl, "SRTQBandCore::updateVgLNAControls()");
        impl.setDetails(ex.what().c_str());
        setStatusBit(CONNECTIONERROR);
@@ -238,4 +251,3 @@ void SRTQBandCore::updateVgLNAControls() throw (ReceiversErrors::ReceiverControl
    }
    clearStatusBit(CONNECTIONERROR); // The communication was ok so clear the CONNECTIONERROR bit
}