Exemple #1
0
int Ctcs::Report_Status()
{
  int changebw;
  dt_rate_t dlrate, ulrate, dlimit, ulimit;

  if( DT_TRACKER_READY != m_status ) return 0;

  dlrate = Self.RateDL();
  ulrate = Self.RateUL();
  dlimit = *cfg_max_bandwidth_down;
  ulimit = *cfg_max_bandwidth_up;

  changebw = (
    compset(m_ctstatus, dlrate) |
    compset(m_ctstatus, ulrate) |
    compset(m_ctstatus, dlimit) |
    compset(m_ctstatus, ulimit) );

  m_statustime = now;

  if( !m_sent_ctstatus ||
      (TRACKER.GetStatus() && now > m_sent_ctstatus_time+30) ){
    return Send_Status();
  }else return ( changebw || !m_sent_ctbw ) ? Send_bw() : 0;
}
void Commander::Data_Exchange(void)
{
	static u8 cnt = 0;
	
	switch(cnt)
	{
		case 1: 
			f.Send_RCData = 1;
			break;
		case 2:
			f.Send_MotoPwm = 1;
			break;
		case 30:
			cnt = 0;
			break;
		default:
			if(cnt%3)
				f.Send_Senser = 1;	
			else
				f.Send_Status = 1;
						
	}
	cnt++;
	
	if(f.Send_Status){
		f.Send_Status = 0;
		Send_Status();
	}	
	if(f.Send_Senser){
		f.Send_Senser = 0;
		Send_Senser();
	}	
	if(f.Send_RCData){
		f.Send_RCData = 0;
		Send_RCData();
	}		
	if(f.Send_MotoPwm){
		f.Send_MotoPwm = 0;
		Send_MotoPWM();
	}	
	if(f.Send_PID1){
		f.Send_PID1 = 0;
		Send_PID1();
	}	
	if(f.Send_PID2){
		f.Send_PID2 = 0;
		Send_PID2();
	}	
}
Exemple #3
0
void Data_Exchange(void)
{
	static int cnt = 0;
	
	switch(cnt)
	{
		case SEND_STATES:
			Send_Status();
			cnt++;
			break;
		case SEND_SENSER: 
			Send_Senser();
			cnt++;
			break;
		case SEND_PID1:
			Send_PID1();		
			cnt++;
			break;
		case SEND_PID2:
			Send_PID2();			
			cnt++;
			break;
		case SEND_RC:
			Send_RCData();
			cnt++;
			break;
		case SEND_MOTORPWM:
			Send_MotoPWM();
			cnt++;
			break;
		case SEND_DEBUG:
			Send_DEBUG();
			cnt++;
			break;
		default:
			cnt=0;
			break;
	}
}
Exemple #4
0
int Ctcs::CheckMessage()
{
  ssize_t r;
  size_t q;

  r = in_buffer.FeedIn(m_sock);

  // This differs from tracker.cpp since we maintain a persistent connection.
  if( r == 0 ) return 0;  // no data (should return an error)

  q = in_buffer.Count();

  if( !q ){
    int error = 0;
    socklen_t n = sizeof(error);
    if( getsockopt(m_sock, SOL_SOCKET, SO_ERROR, &error, &n) < 0 )
      error = errno;
    if( error != 0 ) CONSOLE.Warning(2,
      "warn, received nothing from CTCS:  %s", strerror(error));
    Reset(5);
    return -1;
  }

  const char *s, *p, *msgbuf;
  while( in_buffer.Count() ){
    msgbuf = in_buffer.BasePointer();
    p = (const char *)memchr(msgbuf, '\r', in_buffer.Count());
    s = (const char *)memchr(msgbuf, '\n', in_buffer.Count());
    if( p && s > p ) s = p;
    if( !s ) break;

    if( *cfg_verbose && s != msgbuf )
      CONSOLE.Debug("CTCS: %.*s", (int)(s - msgbuf), msgbuf);
    if( !strncmp("SETDLIMIT", msgbuf, 9) ){
      dt_rate_t arg = (dt_rate_t)strtod(msgbuf+10, NULL);
      if( !BTCONTENT.IsFull() || arg < *cfg_max_bandwidth_down ){
        cfg_max_bandwidth_down = arg;
      }
    }else if( !strncmp("SETULIMIT", msgbuf, 9) ){
      cfg_max_bandwidth_up = (dt_rate_t)strtod(msgbuf+10, NULL);
    }else if( !strncmp("SENDPEERS", msgbuf, 9) ){
      Send_Peers();
    }else if( !strncmp("SENDSTATUS", msgbuf, 10) ){
      Send_Status();
    }else if( !strncmp("SENDCONF", msgbuf, 8) ){
      Send_Config();
    }else if( !strncmp("CTCONFIG", msgbuf, 8) ){
      Set_Config(msgbuf);
    }else if( !strncmp("SENDDETAIL", msgbuf, 10) ){
      Send_Detail();
    }else if( !strncmp("CTQUIT", msgbuf, 6) ){
      CONSOLE.Print("CTCS sent Quit command");
      TRACKER.Stop();
    }else if( !strncmp("CTRESTART", msgbuf, 9) ){
      TRACKER.RestartTracker();
    }else if( !strncmp("CTUPDATE", msgbuf, 8) ){
      TRACKER.Update();
    }else if( !strncmp("PROTOCOL", msgbuf, 8) ){
      int proto = atoi(msgbuf+9);
      if( proto <= CTCS_PROTOCOL ) m_protocol = proto;
      else m_protocol = CTCS_PROTOCOL;
    }else if( s != msgbuf ){
      if(*cfg_verbose)
        CONSOLE.Debug("unknown CTCS message: %.*s", (int)(s - msgbuf), msgbuf);
    }
    in_buffer.PickUp(s - msgbuf + 1);
  }
  m_last_timestamp = now;
  return 0;
}
Exemple #5
0
void ANO_DT::Data_Exchange(void)
{
	static u8 cnt = 0;
	static u8 senser_cnt 	= 10;
	static u8 user_cnt 	  = 10;
	static u8 status_cnt 	= 15;
	static u8 rcdata_cnt 	= 50;
	static u8 motopwm_cnt	= 50;
	static u8 power_cnt		=	50;
	static u8 senser2_cnt = 50;
	
	if((cnt % senser_cnt) == (senser_cnt-1))
		f.send_senser = 1;	
	if((cnt % senser2_cnt) == (senser2_cnt-1))
		f.send_senser2 = 1;	
	
	if((cnt % user_cnt) == (user_cnt-1))
		f.send_user = 1;
	
	if((cnt % status_cnt) == (status_cnt-1))
		f.send_status = 1;	
	
	if((cnt % rcdata_cnt) == (rcdata_cnt-1))
		f.send_rcdata = 1;	
	
	if((cnt % motopwm_cnt) == (motopwm_cnt-1))
		f.send_motopwm = 1;	
	
	if((cnt % power_cnt) == (power_cnt-1))
		f.send_power = 1;		
	
	cnt++;
/////////////////////////////////////////////////////////////////////////////////////
	if(f.send_version)
	{
		f.send_version = 0;
		Send_Version(1,300,110,400,0);
	}
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_status)
	{
		f.send_status = 0;
		Send_Status(imu.angle.x,imu.angle.y,imu.angle.z,0,0,ano.f.ARMED);	
	}	
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_user)
	{
		f.send_user = 0;
		//Send_User();
	}
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_senser)
	{
		f.send_senser = 0;
		Send_Senser(imu.Acc.x,imu.Acc.y,imu.Acc.z,
								imu.Gyro.x,imu.Gyro.y,imu.Gyro.z,
								0,0,0);
	}	
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_senser2)
	{
		f.send_senser2 = 0;
		Send_Senser2(0,0);
	}	
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_rcdata)
	{
		f.send_rcdata = 0;
		Send_RCData(rc.rawData[THROTTLE],rc.rawData[YAW],rc.rawData[ROLL],rc.rawData[PITCH],
								rc.rawData[AUX1],rc.rawData[AUX2],rc.rawData[AUX3],
								rc.rawData[AUX4],rc.rawData[AUX5],rc.rawData[AUX6]);
	}	
/////////////////////////////////////////////////////////////////////////////////////	
	else if(f.send_motopwm)
	{
		f.send_motopwm = 0;
		int16_t Moto_PWM[4];
		motor.getPWM(Moto_PWM);
		for(u8 i=0;i<4;i++)
			Moto_PWM[i] -= 1000;

		Send_MotoPWM(Moto_PWM[0],Moto_PWM[1],Moto_PWM[2],Moto_PWM[3],0,0,0,0);
	}	
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_power)
	{
		f.send_power = 0;
		Send_Power(123,456);
	}
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_pid1)
	{
		f.send_pid1 = 0;
		Send_PID(1,fc.pid[PIDROLL].kP,fc.pid[PIDROLL].kI,fc.pid[PIDROLL].kD,
							 fc.pid[PIDPITCH].kP,fc.pid[PIDPITCH].kI,fc.pid[PIDPITCH].kD,
							 fc.pid[PIDYAW].kP,fc.pid[PIDYAW].kI,fc.pid[PIDYAW].kD);
	}	
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_pid2)
	{
		f.send_pid2 = 0;
		Send_PID(2,fc.pid[PIDANGLE].kP,fc.pid[PIDANGLE].kI,fc.pid[PIDANGLE].kD,
							 fc.pid[PIDMAG].kP,fc.pid[PIDMAG].kI,fc.pid[PIDMAG].kD,
							 fc.pid[PIDVELZ].kP,fc.pid[PIDVELZ].kI,fc.pid[PIDVELZ].kD);
	}
/////////////////////////////////////////////////////////////////////////////////////
	else if(f.send_pid3)
	{
		f.send_pid3 = 0;
		Send_PID(3,fc.pid[PIDALT].kP,fc.pid[PIDALT].kI,fc.pid[PIDALT].kD,
							 0,0,0,
							 0,0,0);
	}
}