コード例 #1
0
ファイル: mrf_buff.c プロジェクト: smurf0/mrfbus
void _mrf_buff_print(){
  int i;
  mrf_debug("_mrf_buff_print warning is %s\n",illegal_state_warning);
  mrf_debug("free?  %s\n",mrf_buff_state_name(0));
  for ( i = 0 ; i < _MRF_BUFFS ; i++){
    MRF_BUFF_STATE *bst = _mrf_buff_state(i);
    mrf_debug("buff %d state %d (%s) owner %d\n",i,bst->state,mrf_buff_state_name(i),_mrf_buffst[i].owner);    
  }
}
コード例 #2
0
ファイル: mrf_buff.c プロジェクト: smurf0/mrfbus
void mrf_free(uint8* buff){
  int i;
  for ( i = 0 ; i < _MRF_BUFFS ; i++)
    if(buff == &(_mrf_buff[i][0])){
      _mrf_buff_free(i);
      mrf_debug("mrf_free : free buff %d  %d/%d buffs free\n",i,mrf_buff_num_free(),_MRF_BUFFS);
      return;
    }
  mrf_debug("ERROR : buff was not found or freed\n\n");
}
コード例 #3
0
ファイル: mrf_buff.c プロジェクト: smurf0/mrfbus
//extern const MRF_CMD const mrf_cmds[];
void _mrf_buff_free(uint8 i){
  if (i < _MRF_BUFFS){
    _mrf_buffst[i].state = FREE;
    _mrf_buffst[i].owner = NUM_INTERFACES;   
    mrf_debug("_mrf_buff_free : free buff %d  %d/%d buffs free\n",i,mrf_buff_num_free(),_MRF_BUFFS);

    return;
  }
  mrf_debug("_mrf_buff_free error buff num was %d\n",i);
}
コード例 #4
0
ファイル: mrf_buff.c プロジェクト: smurf0/mrfbus
uint8 mrf_alloc_if(I_F i_f){
  uint8 i;
  mrf_debug("mrf_alloc_if entry i_f %d\n",i_f);
  //_mrf_buff_print();
  for ( i = 0 ; i < _MRF_BUFFS ; i++){
    if ( _mrf_buffst[i].state == FREE)
      {
	_mrf_buffst[i].state = LOADING;
	_mrf_buffst[i].owner = i_f;	
        mrf_debug("mrf_alloc_if : alloc buff %d to i_f %d\n",i,i_f);
        return i;
      }
  }
  return _MRF_BUFFS;
}
コード例 #5
0
ファイル: mrf_if.c プロジェクト: ReallyGnusys/mrfbus
int8 mrf_if_tx_queue(I_F i_f, uint8 bnum ){
  const MRF_IF *mif = mrf_if_ptr(i_f);
  MRF_BUFF_STATE *mbst = _mrf_buff_state(bnum);
  BuffQueue *qp = mif->txqueue;
  //mrf_debug(5,"mrf_if_tx_queue entry\n");
  if ( bnum >= _MRF_BUFFS)
    return -2;
  //mrf_debug(5,"mrf_if_tx_queue 1\n");
  if (qp->push(bnum) == 0)    {
    //_sys_ifs[i_f].status->state = MRF_ST_TXQ;
      mbst->owner = i_f;
      mbst->tx_timer = mif->type->tx_del;  // FIXME shouldn't need any of this
      mbst->state = TXQUEUE;
      mbst->retry_count = 0;
      mrf_tick_enable();
      mrf_debug(5,"mrf_if_tx_queue OK i_f %d buff %d retry_count %d qip %d qop %d items %d\n",
                i_f,bnum,mbst->retry_count,qp->get_qip(),qp->get_qop(),qp->items());
      return 0;
  }
  else {
  // fall through if no space in queue
    mrf_if_ptr(i_f)->status->stats.tx_overruns++;
  return -1;
  }
}
コード例 #6
0
ファイル: mrf_relays.c プロジェクト: ReallyGnusys/mrfbus
uint8 get_relay_state(uint8 chan){
  mrf_debug(4,"get_relay_state 0x%u\n",_relay_state);
  if ( _relay_state & (uint16)( 1 << chan ))
    return 1;
  else
    return 0;
}
コード例 #7
0
ファイル: mrf_buff.c プロジェクト: smurf0/mrfbus
// this is where OS processes buffer
int mrf_buff_loaded(uint8 bnum){
  MRF_IF *ifp;
  if (bnum <  _MRF_BUFFS){
    mrf_debug("mrf_buff_loaded bnum entry  %u owner %u\n",bnum, _mrf_buffst[bnum].owner);
    ifp = mrf_if_ptr( _mrf_buffst[bnum].owner);
    printf("ifp = %p\n",ifp);
    ifp->status->stats.rx_pkts += 1;
    _mrf_buffst[bnum].state = LOADED;
    //_mrf_buff_print();
    _mrf_process_buff(bnum);
    mrf_debug("mrf_buff_loaded exit\n");
    //_mrf_buff_print();

    return 0;
  } else {
    return -1;
  }
}
コード例 #8
0
ファイル: mrf_if.c プロジェクト: ReallyGnusys/mrfbus
void mrf_if_print_info(I_F i_f){
  const MRF_IF *ifp;
  IF_STATUS *ifs = mrf_if_ptr(i_f)->status;
  int i = (int)i_f;
  ifp = mrf_if_ptr((I_F)i);
  mrf_debug(5,"I_F %d state %s waiting_resp %d txq_da %d ackq da %d timer %d resp_timer %d\n",i,
            mrf_if_state_name(i_f),ifs->waiting_resp,
            ifp->txqueue->data_avail(),ifp->ackqueue->items(),
            ifs->timer,ifs->resp_timer);

}
コード例 #9
0
ファイル: mrf_relays.c プロジェクト: ReallyGnusys/mrfbus
uint8 set_relay_state(uint8 chan,uint8 val){
  if (chan >= NUM_RELAY_CHANNELS)
    return 0;   //FIXME should be error
  if ( val == 0 ){
    _relay_state &=  ~((uint16)( 1 << chan ));
  }
  else {
    _relay_state |=  (uint16)( 1 << chan );
  }
  mrf_debug(4,"set_relay_state 0x%u\n",_relay_state);

  return 0;
}
コード例 #10
0
ファイル: mrf_buff.c プロジェクト: smurf0/mrfbus
uint8 *mrf_alloc_if_tbd(I_F i_f){
  int i;
  _mrf_buff_print();
  for ( i = 0 ; i < _MRF_BUFFS ; i++){
    if ( _mrf_buffst[i].state == FREE)
      {
	_mrf_buffst[i].state = LOADING;
	_mrf_buffst[i].owner = i_f;	
        mrf_debug("mrf_alloc_if_tbd : alloc buff %d to i_f %d\n",i,i_f);
	return &(_mrf_buff[i][0]);
      }
  }
  return NULL;
}
コード例 #11
0
ファイル: mrf_relays.c プロジェクト: ReallyGnusys/mrfbus
uint16 relay_state(){
  mrf_debug(4,"relay_state 0x%u\n",_relay_state);
  return _relay_state;
}
コード例 #12
0
ファイル: mrf_relays.c プロジェクト: ReallyGnusys/mrfbus
void clear_relay_state(){
  _relay_state = 0;
  mrf_debug(4,"clear_relay_state 0x%u\n",_relay_state);
}