ECode CGeckoNetworkManager::UpdateNetworkType() { NetworkType previousNetworkType = mNetworkType; mNetworkType = GetNetworkType(); if (mNetworkType == previousNetworkType || !mShouldNotify) { return NOERROR; } return GeckoAppShell::SendEventToGecko(new GeckoEvent(GetNetworkSpeed(mNetworkType), IsNetworkUsuallyMetered(mNetworkType))); }
const Error *Node::SynchStart( void ) { // Ignore this for EtherCAT networks if( GetNetworkType() != NET_TYPE_CANOPEN ) return 0; uint32 id; const Error *err = GetSynchId( id ); if( !err ) err = SetSynchId( id | 0x40000000 ); if( err ) return err; RefObjLocker<CanOpen> co( GetNetworkRef() ); if( !co ) return &NodeError::NetworkUnavailable; co->SetSynchProducer( nodeID ); return 0; }
const Error *Node::SynchStop( void ) { // Ignore this for EtherCAT networks if( GetNetworkType() != NET_TYPE_CANOPEN ) return 0; uint32 id; const Error *err = GetSynchId( id ); if( !err && (id&0x40000000) ) err = SetSynchId( id & 0x3FFFFFFF ); RefObjLocker<CanOpen> co( GetNetworkRef() ); if( !co ) return &NodeError::NetworkUnavailable; if( !err && (co->GetSynchProducer() == nodeID) ) co->SetSynchProducer(0); return err; }
// Uninitialize the PDOs used to get status from the drive. const Error *Amp::UninitPDOs( void ) { const Error *err = 0; // If this is a secondary axis, we shouldn't have to uninit the PDOs if( primaryAmpRef ) { return err; } // Disable all the default PDOs cml.Debug( "Amp %d, Uninitting PDOs\n", GetNodeID() ); // See if I need to uninit for multiple axes int16 numAxes = 1; if( GetNetworkType() == NET_TYPE_ETHERCAT ) { err = Upld16( OBJID_AMP_INFO, 25, numAxes ); if( err ) return err; } if (statPDO) { err = statPDO->Uninit( *this, 0, numAxes ); if( err ) { delete statPDO; statPDO = 0; return err; } } if (pvtStatPDO) { err = pvtStatPDO->Uninit( *this, 1, numAxes ); if( err ) { delete pvtStatPDO; pvtStatPDO = 0; return err; } } if( GetNetworkType() == NET_TYPE_ETHERCAT ) { if (ctrlPDO) { err = ctrlPDO->Uninit( *this, 0, numAxes ); if( err ) { delete ctrlPDO; ctrlPDO = 0; return err; } } } else { if (pvtCtrlPDO) { err = pvtCtrlPDO->Uninit( *this, 0, numAxes ); if( err ) { delete pvtCtrlPDO; pvtCtrlPDO = 0; return err; } } } return 0; }
// Initialize the PDOs used to get status from the drive and send control info to it. const Error *Amp::InitPDOs( void ) { const Error *err = 0; // If this is a secondary axis, just attach to the primary axis status PDO if( primaryAmpRef ) { RefObjLocker<Amp> pri( primaryAmpRef ); if( !pri ) return &AmpError::NotInit; if( !err ) err = pri->statPDO->ConnectSubAxis( axisNum, this ); if( !err ) err = pri->pvtStatPDO->ConnectSubAxis( axisNum, this ); return err; } // Disable all the default PDOs cml.Debug( "Amp %d, Initting PDOs\n", GetNodeID() ); for( int i=0; i<8; i++ ) { if( !err ) err = TpdoDisable( i ); if( !err ) err = RpdoDisable( i ); } // See if I need to init for multiple axes int16 numAxes = 1; if( GetNetworkType() == NET_TYPE_ETHERCAT ) { err = Upld16( OBJID_AMP_INFO, 25, numAxes ); if( err ) return err; } // Release any PDOs that were previously allocated FreePDOs(); statPDO = new TPDO_Status(); err = statPDO->Init( *this, 0, numAxes ); if( err ) { delete statPDO; statPDO = 0; return err; } pvtStatPDO = new TPDO_PvtStat(); err = pvtStatPDO->Init( *this, 1, numAxes ); if( err ) { delete pvtStatPDO; pvtStatPDO = 0; return err; } if( GetNetworkType() == NET_TYPE_ETHERCAT ) { ctrlPDO = new RPDO_Ctrl(); err = ctrlPDO->Init( *this, 0, numAxes ); if( err ) { delete ctrlPDO; ctrlPDO = 0; return err; } } else { pvtCtrlPDO = new RPDO_PvtCtrl(); err = pvtCtrlPDO->Init( *this, 0, numAxes ); if( err ) { delete pvtCtrlPDO; pvtCtrlPDO = 0; return err; } } return 0; }
ECode CGeckoNetworkManager::Init() { FAIL_RETURN(mNetworkFilter->AddAction(String(IConnectivityManager::CONNECTIVITY_ACTION))); mNetworkType = GetNetworkType(); return NOERROR; }