void ProprietaryMessageA_c::close() { isoaglib_assert( NULL != m_ident ); isoaglib_assert( !m_isRegistered ); m_ident = NULL; m_remote = IsoName_c::IsoNameUnspecified(); m_dp = 0; }
void ProprietaryMessageA_c::disableReception() { isoaglib_assert( NULL != m_ident ); isoaglib_assert( m_isRegistered ); getProprietaryMessageHandlerInstance( m_ident->getMultitonInst() ).deregisterProprietaryMessage( *this ); m_isRegistered = false; }
void IsoMonitor_c::close() { isoaglib_assert (initialized()); isoaglib_assert( m_arrClientC1.empty() ); isoaglib_assert( mvec_saClaimHandler.empty() ); getSchedulerInstance().deregisterTask( *this ); // We can clear the list of remote nodes. /// NOTE: We do currently NOT call "internalIsoItemErase", /// because the list of SaClaimHandlers is empty anyway. /// But if the erase does some more stuff, it may be needed /// to call "internalIsoItemErase" for each item instead /// of just clearing the container of isoMembers. mvec_isoMember.clear(); getIsoRequestPgnInstance4Comm().unregisterPGN (mt_handler, ADDRESS_CLAIM_PGN); #ifdef USE_WORKING_SET getIsoRequestPgnInstance4Comm().unregisterPGN (mt_handler, WORKING_SET_MASTER_PGN); getIsoRequestPgnInstance4Comm().unregisterPGN (mt_handler, WORKING_SET_MEMBER_PGN); #endif getIsoBusInstance4Comm().deleteFilter( mt_customer, IsoAgLib::iMaskFilter_c( 0x3FFFF00UL, ((ADDRESS_CLAIM_PGN+0xFF) << 8) ) ); #ifdef USE_WORKING_SET getIsoBusInstance4Comm().deleteFilter( mt_customer, IsoAgLib::iMaskFilter_c( 0x3FFFF00UL, ((WORKING_SET_MASTER_PGN) << 8) ) ); getIsoBusInstance4Comm().deleteFilter( mt_customer, IsoAgLib::iMaskFilter_c( 0x3FFFF00UL, ((WORKING_SET_MEMBER_PGN) << 8) ) ); #endif setClosed(); }
bool ProprietaryMessageA_c::sendWithPrio( unsigned prio, const IsoName_c& a_overwrite_remote ) { isoaglib_assert( prio <= 7 ); isoaglib_assert(m_ident); // do not allow overwrite to a different target if m_remote is specified isoaglib_assert(!m_remote.isSpecified() || a_overwrite_remote.isUnspecified() || (a_overwrite_remote == m_remote)); const uint32_t pgn = ( uint32_t( m_dp ) << 16) | PROPRIETARY_A_PGN; if (getDataSend().getLen() <= 8) { CanPkgExt_c pkg; pkg.setIsoPri( static_cast<uint8_t>( prio ) ); pkg.setIsoPgn( pgn ); pkg.setISONameForDA( a_overwrite_remote.isSpecified() ? a_overwrite_remote : m_remote ); pkg.setMonitorItemForSA( m_ident->getIsoItem() ); pkg.setDataFromString ( getDataSend().getDataStream(), static_cast<uint8_t>( getDataSend().getLen() ) ); getIsoBusInstance( m_ident->getMultitonInst() ) << pkg; return true; } else { /** multi-packet */ /** variable should be evaluated */ // const bool cb_couldStartMultiSend = // we could catch the information if the sending succeeded, but what to do with it anyway? return getMultiSendInstance( m_ident->getMultitonInst() ).sendIsoTarget( m_ident->isoName(), a_overwrite_remote.isSpecified() ? a_overwrite_remote : m_remote, getDataSend().getDataStream(0), getDataSend().getLen(), pgn, this ); } }
void DevicePool_c::add( ProcData_c& pd ) { isoaglib_assert( pd.getDpd() ); isoaglib_assert( pd.getDet() ); isoaglib_assert( m_devicePool.find( pd.getDpd()->getObjectId() ) != m_devicePool.end() ); isoaglib_assert( m_devicePool.find( pd.getDet()->getObjectId() ) != m_devicePool.end() ); addPdBase( pd ); }
void DeviceObjectDet_c::init( uint16_t pid, uint16_t element, uint8_t type, const char* desig ) { isoaglib_assert( m_elementNumber == 4096 ); isoaglib_assert( element <= 4095 ); DeviceObject_c::init( desig ); m_type = type; m_elementNumber = element; m_parentId = pid; }
void DeviceObjectDpt_c::init( uint16_t dpt_ddi, int32_t value, const char* desig, const DeviceObjectDvp_c* dvpRef ) { isoaglib_assert( m_ddi == 0xFFFF ); isoaglib_assert( dpt_ddi != 0xFFFF ); m_ddi = dpt_ddi; m_value = value; DeviceObject_c::init( desig ); m_dvpObjectId = ( dvpRef ) ? dvpRef->getObjectId() : 0xFFFF; }
void DeviceObjectDpd_c::init( uint16_t dpd_ddi, const IsoAgLib::ProcData::Properties_t& bitmaskProps, const IsoAgLib::ProcData::Methods_t& bitmaskMethods, const char* desig, const DeviceObjectDvp_c* dvp ) { isoaglib_assert( m_ddi == 0xFFFF ); isoaglib_assert( dpd_ddi != 0xFFFF ); DeviceObject_c::init( desig ); m_ddi = dpd_ddi; m_properties = bitmaskProps.getByte( 0 ); m_method = bitmaskMethods.getByte( 0 ); m_dvpObjectId = ( dvp ) ? dvp->getObjectId() : 0xFFFF; }
DeviceObjectDpd_c::DeviceObjectDpd_c( uint16_t dpd_ddi, uint8_t properties, uint8_t triggerMethods, const char* desig, const DeviceObjectDvp_c* dvp ) : DeviceObject_c( IsoAgLib::ProcData::ObjectTypeDPD, desig ) , m_ddi( dpd_ddi ) , m_properties( properties ) , m_method( triggerMethods ) , m_dvpObjectId( ( dvp ) ? dvp->getObjectId() : 0xFFFF ) { isoaglib_assert( dpd_ddi != 0xFFFF ); isoaglib_assert( properties < (1<<3) ); isoaglib_assert( triggerMethods < (1<<5) ); }
void DigitalI_c::setOnLow( void ) { if ( channelNr() < 16 ) { // register pointer to IRQ handler const int16_t i16_initResult = HAL::init_digin(channelNr(), DIGIN, IsoAgLib::iInput_c::OnLow, digitalInputIrqFuncArr[channelNr()] ); isoaglib_assert( ! i16_initResult ); (void)i16_initResult; } else { const int16_t i16_initResult = HAL::init_digin(channelNr(), DIGIN, IsoAgLib::iInput_c::OnLow, NULL); isoaglib_assert( ! i16_initResult ); (void)i16_initResult; } }
void BaseCommon_c::close( ) { isoaglib_assert (initialized()); isoaglib_assert( mvec_msgEventHandlers.empty() ); close_specialized(); getSchedulerInstance().deregisterTask(mt_task); // actually the filters aren't getting removed, but this is just a quick workaround until the Trac-classes-redesign! clearFilterCreated(); setClosed(); };
void DeviceObjectDvc_c::setExtendedStructureLabel( const char* s, uint8_t length ) { isoaglib_assert( length <= 32 ); m_extendedStructureLabel.length = length; CNAMESPACE::memcpy( m_extendedStructureLabel.byteString, s, length ); }
void System_c::close() { isoaglib_assert( HAL::isSystemOpened() ); HAL::powerHold( false ); HAL::closeSystem(); }
void System_c::init() { isoaglib_assert( ! HAL::isSystemOpened() ); HAL::openSystem(); HAL::powerHold( true ); }
bool EepromIo_c::setg(uint16_t aui16_adress) { isoaglib_assert( eepromSize() > aui16_adress ); mui16_rPosition = aui16_adress; return true; };
bool ProprietaryMessageB_c::send( uint8_t ps ) { isoaglib_assert(m_ident); const uint32_t pgn = ( uint32_t( m_dp ) << 16) | PROPRIETARY_B_PGN | ps; if (getDataSend().getLen() <= 8) { CanPkgExt_c pkg; pkg.setIsoPri( 6 ); pkg.setIsoPgn( pgn ); pkg.setMonitorItemForSA( m_ident->getIsoItem() ); pkg.setDataFromString ( getDataSend().getDataStream(), static_cast<uint8_t>( getDataSend().getLen() ) ); getIsoBusInstance( m_ident->getMultitonInst() ) << pkg; return true; } else { /** multi-packet */ /** variable should be evaluated */ // const bool cb_couldStartMultiSend = // we could catch the information if the sending succeeded, but what to do with it anyway? return getMultiSendInstance( m_ident->getMultitonInst() ).sendIsoTarget( m_ident->isoName(), m_remote, getDataSend().getDataStream(0), getDataSend().getLen(), pgn, this ); } }
IsoItem_c & IsoMonitor_c::insertIsoMember( const IsoName_c& acrc_isoName, uint8_t aui8_nr, IState_c::itemState_t ren_state, IdentItem_c* apc_identItemForLocalItems, bool ab_announceAddition ) { isoaglib_assert( item( acrc_isoName ) == NULL ); // prepare temp item with wanted data mc_tempIsoMemberItem.set (System_c::getTime(), // Actually this value/time can be anything. The time is NOT used in PreAddressClaim and when entering AddressClaim it is being set correctly! acrc_isoName, aui8_nr, IState_c::itemState_t(ren_state | IState_c::Active), getMultitonInst() ); // if it's a local item, we need to set the back-reference. if (apc_identItemForLocalItems) mc_tempIsoMemberItem.setIdentItem(*apc_identItemForLocalItems); // now insert element mvec_isoMember.push_front(mc_tempIsoMemberItem); IsoItem_c &insertedItem = *mvec_isoMember.begin(); if( ren_state & ( IState_c::AddressClaim | IState_c::ClaimedAddress ) ) { // update lookup updateSaItemTable( insertedItem, true ); } if (ab_announceAddition) { // immediately announce addition. // only not do this if you insert a local isoitem that is in state "AddressClaim" - it will be done there if it changes its state to "ClaimedAddress". broadcastIsoItemModification2Clients( ControlFunctionStateHandler_c::AddToMonitorList, insertedItem ); } return insertedItem; }
void defineRxFilter( unsigned channel, bool xtd, uint32_t filter, uint32_t mask ) { unsigned idx = 1; for( std::set<__HAL::idFilter_s>::const_iterator i = __HAL::filterIdx[channel].begin(); i != __HAL::filterIdx[channel].end(); ++i ) { if( ( i->idx - idx ) > 0 ) break; idx++; } __HAL::transferBuf_s b; b.i32_mtypePid = __HAL::msqDataClient.i32_pid; b.ui16_command = COMMAND_CONFIG; b.s_config.ui8_bus = channel; b.s_config.ui8_obj = idx; b.s_config.ui8_bXtd = xtd ? 1 : 0; b.s_config.ui32_mask = mask; b.s_config.ui8_bMsgType = RX; b.s_config.ui32_dwId = filter; b.s_config.ui16_wNumberMsgs = 0x20; const bool r = ( HAL_NO_ERR == __HAL::send_command( &b, &__HAL::msqDataClient ) ); isoaglib_assert( r ); (void)r; struct __HAL::idFilter_s f; f.idx = idx; f.filter.xtd = xtd; f.filter.mask = mask; f.filter.filter = filter; __HAL::filterIdx[channel].insert( f ); }
bool canInit( unsigned channel, unsigned baudrate ) { bool r = true; __HAL::transferBuf_s b; b.i32_mtypePid = __HAL::msqDataClient.i32_pid; b.ui16_command = COMMAND_INIT; b.s_init.ui8_bus = channel; b.s_init.ui16_wGlobMask = 0x0; b.s_init.ui32_dwGlobMask = 0x0; b.s_init.ui32_dwGlobMaskLastmsg = 0x0; b.s_init.ui16_wBitrate = baudrate; r &= ( HAL_NO_ERR == __HAL::send_command( &b, &__HAL::msqDataClient ) ); b.ui16_command = COMMAND_CONFIG; b.s_config.ui8_bus = channel; b.s_config.ui8_obj = 0; b.s_config.ui8_bXtd = 0; b.s_config.ui32_mask = 0; b.s_config.ui8_bMsgType = TX; b.s_config.ui32_dwId = 0x0; b.s_config.ui16_wNumberMsgs = 0x20; r &= ( HAL_NO_ERR == __HAL::send_command( &b, &__HAL::msqDataClient ) ); isoaglib_assert( r ); return r; }
DeviceObjectDet_c::DeviceObjectDet_c( uint16_t pid, uint16_t element, uint8_t type, const char* desig ) : DeviceObject_c( IsoAgLib::ProcData::ObjectTypeDET, desig ) , m_type( type ) , m_elementNumber( element ) , m_parentId( pid ) , m_childList() { isoaglib_assert( element <= 4095 ); }
DeviceObjectDpd_c::DeviceObjectDpd_c( uint16_t dpd_ddi, const IsoAgLib::ProcData::Properties_t& bitmaskProps, const IsoAgLib::ProcData::Methods_t& bitmaskMethods, const char* desig, const DeviceObjectDvp_c* dvp ) : DeviceObject_c( IsoAgLib::ProcData::ObjectTypeDPD, desig ) , m_ddi( dpd_ddi ) , m_properties( bitmaskProps.getByte( 0 ) ) , m_method( bitmaskMethods.getByte( 0 ) ) , m_dvpObjectId( ( dvp ) ? dvp->getObjectId() : 0xFFFF ) { isoaglib_assert( dpd_ddi != 0xFFFF ); }
void DigitalI_c::init(uint8_t ab_channel, IsoAgLib::iInput_c::onoff_t ren_onoff, bool ab_static, IsoAgLib::iInputEventHandler* apc_handler) { InputBase_c::init(ab_channel, IsoAgLib::iInput_c::digital); if ( ( apc_handler != NULL ) && ( ab_channel < 16 ) ) { // register pointer to IRQ handler const int16_t i16_initResult = HAL::init_digin(channelNr(), BOTH_EDGE, ren_onoff,digitalInputIrqFuncArr[ab_channel] ); isoaglib_assert( ! i16_initResult ); (void)i16_initResult; } else { const int16_t i16_initResult = HAL::init_digin(channelNr(), DIGIN, ren_onoff, NULL); isoaglib_assert( ! i16_initResult ); (void)i16_initResult; } b_static = ab_static; // register optional pointer to handler if ( ab_channel < 16 ) ppc_handler[ab_channel] = apc_handler; }
void FsManager_c::init() { isoaglib_assert (!initialized()); m_commands.init(); getSchedulerInstance().registerTask( *this, 0 ); getIsoMonitorInstance4Comm().registerControlFunctionStateHandler(mc_saClaimHandler); setInitialized(); }
void BaseCommon_c::init() { isoaglib_assert (!initialized()); getSchedulerInstance().registerTask(mt_task, 0); // set configure values with call for config config_base (NULL, IsoAgLib::IdentModeImplement, 0 /* No individual PGN disabling */); // now let concrete specialized classes init their part... init_specialized(); setInitialized(); }
IsoMonitor_c::IsoMonitor_c() : SchedulerTask_c( 125, true ), mvec_isoMember(), mt_handler(*this), mt_customer(*this), CONTAINER_CLIENT1_CTOR_INITIALIZER_LIST { } void IsoMonitor_c::init() { isoaglib_assert (!initialized()); isoaglib_assert (mvec_isoMember.empty()); mi32_lastSaRequest = -1; // not yet requested. Do NOT use 0, as the first "setLastRequest()" could (and does randomly) occur at time0 as it's called at init() time. mc_tempIsoMemberItem.set( 0, IsoName_c::IsoNameUnspecified(), 0xFE, IState_c::Active, getMultitonInst() ); setPeriod( 125, false ); getSchedulerInstance().registerTask( *this, 0 ); CNAMESPACE::memset( &m_isoItems, 0x0, sizeof( m_isoItems ) ); // add filter REQUEST_PGN_MSG_PGN via IsoRequestPgn_c getIsoRequestPgnInstance4Comm().registerPGN (mt_handler, ADDRESS_CLAIM_PGN); #ifdef USE_WORKING_SET getIsoRequestPgnInstance4Comm().registerPGN (mt_handler, WORKING_SET_MASTER_PGN); getIsoRequestPgnInstance4Comm().registerPGN (mt_handler, WORKING_SET_MEMBER_PGN); #endif getIsoBusInstance4Comm().insertFilter( mt_customer, IsoAgLib::iMaskFilter_c( 0x3FFFF00UL, ((ADDRESS_CLAIM_PGN)+0xFF)<<8 ), 8 ); #ifdef USE_WORKING_SET getIsoBusInstance4Comm().insertFilter( mt_customer, IsoAgLib::iMaskFilter_c( 0x3FFFF00UL, (WORKING_SET_MASTER_PGN<<8) ), 8 ); getIsoBusInstance4Comm().insertFilter( mt_customer, IsoAgLib::iMaskFilter_c( 0x3FFFF00UL, (WORKING_SET_MEMBER_PGN<<8) ), 8 ); #endif setInitialized(); }
DeviceObjectDvc_c::DeviceObjectDvc_c( const char* version, const char* desig ) : __IsoAgLib::DeviceObject_c( IsoAgLib::ProcData::ObjectTypeDVC, desig ) , m_version( version ) //, m_serialNumber() , m_structLabel() , m_extendedStructureLabel() , m_identItem( NULL ) , m_localization() { isoaglib_assert( version != NULL ); m_serialNumber[ 0 ] = 0x00; // no init here, appropriate setters need to be called. basta. }
void DeviceObjectDvc_c::setStructureLabel( const char* label ) { uint8_t tmpBuf[7] = {0, 0, 0, 0, 0, 0, 0}; unsigned int len = CNAMESPACE::strlen( label ); isoaglib_assert( len <= 7 ); // limit length only to not crash in release, but problem should be caught in debug! if( len > 7 ) len = 7; for( unsigned int i = 0; i < len; i++ ) tmpBuf[i] = label[i]; setStructureLabel( tmpBuf ); }
uint16_t DigitalI_c::val() const { int16_t i16_val; if (b_static) { // static was forced i16_val = HAL::getDiginOnoffStatic(channelNr()); } else { // normal i16_val = HAL::getDiginOnoff(channelNr()); } isoaglib_assert (i16_val != HAL_RANGE_ERR); return (i16_val == ON)?1:0; }
void deleteRxFilter( unsigned channel, bool xtd, uint32_t filter, uint32_t mask ) { for( std::set<__HAL::idFilter_s>::const_iterator i = __HAL::filterIdx[channel].begin(); i != __HAL::filterIdx[channel].end(); ++i ) { if( ( i->filter.xtd == xtd ) && ( i->filter.mask == mask ) && ( i->filter.filter == filter ) ) { __HAL::transferBuf_s b; b.i32_mtypePid = __HAL::msqDataClient.i32_pid; b.ui16_command = COMMAND_CLOSEOBJ; b.s_config.ui8_bus = channel; b.s_config.ui8_obj = i->idx; const bool r = ( HAL_NO_ERR == __HAL::send_command( &b, &__HAL::msqDataClient ) ); isoaglib_assert( r ); (void)r; __HAL::filterIdx[channel].erase( i ); break; } } }
void FsManager_c::deregisterFsClient(IdentItem_c &identItem) { for (STL_NAMESPACE::vector<FsClientServerCommunication_c *>::iterator iter = mv_communications.begin(); iter != mv_communications.end(); ++iter) { if (&((*iter)->getClientIdentItem()) == &identItem) { m_commands.handleDestructingFsCsc( **iter ); delete *iter; mv_communications.erase(iter); return; } } isoaglib_assert( !"deregister of FS-Client for unregistered instance found!" ); }