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 );
    }
  }
Exemple #5
0
  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 );
  }
Exemple #6
0
  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;
  }
Exemple #7
0
  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;
  }
Exemple #8
0
  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;
  }
Exemple #9
0
 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) );
 }
Exemple #10
0
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;
  }
}
Exemple #11
0
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();
};
Exemple #12
0
  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 );
  }
Exemple #13
0
void
System_c::close()
{
  isoaglib_assert( HAL::isSystemOpened() );
  HAL::powerHold( false );
  HAL::closeSystem();
}
Exemple #14
0
void
System_c::init()
{
  isoaglib_assert( ! HAL::isSystemOpened() );
  HAL::openSystem();
  HAL::powerHold( true );
}
Exemple #15
0
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;
  }
Exemple #20
0
 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 );
 }
Exemple #21
0
 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 );
 }
Exemple #22
0
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;
}
Exemple #23
0
void
FsManager_c::init()
{
  isoaglib_assert (!initialized());

  m_commands.init();

  getSchedulerInstance().registerTask( *this, 0 );
  getIsoMonitorInstance4Comm().registerControlFunctionStateHandler(mc_saClaimHandler);

  setInitialized();
}
Exemple #24
0
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();
}
Exemple #26
0
 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.
 }
Exemple #27
0
  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 );
  }
Exemple #28
0
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;
      }
    }
  }
Exemple #30
0
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!" );
}