Exemple #1
0
void parse_ins_msg( void )
{
  while (InsLink(ChAvailable()))
  {
    uint8_t ch = InsLink(Getch());
    
    if (CHIMU_Parse(ch, 0, &CHIMU_DATA))
    {
      if(CHIMU_DATA.m_MsgID==0x03)
      {
	new_ins_attitude = 1;
	RunOnceEvery(25, LED_TOGGLE(3) );
	if (CHIMU_DATA.m_attitude.euler.phi > M_PI)
	{
	  CHIMU_DATA.m_attitude.euler.phi -= 2 * M_PI;
	}
	
	EstimatorSetAtt(CHIMU_DATA.m_attitude.euler.phi, CHIMU_DATA.m_attitude.euler.psi, CHIMU_DATA.m_attitude.euler.theta);
	EstimatorSetRate(CHIMU_DATA.m_sensor.rate[0],CHIMU_DATA.m_attrates.euler.theta);
      }
      else if(CHIMU_DATA.m_MsgID==0x02)
      {
	
	RunOnceEvery(25,DOWNLINK_SEND_AHRS_EULER(DefaultChannel, &CHIMU_DATA.m_sensor.rate[0], &CHIMU_DATA.m_sensor.rate[1], &CHIMU_DATA.m_sensor.rate[2]));
	
      }
    }
  }
}
Exemple #2
0
/*************************************************************************
                                主函数
**************************************************************************/
void main()
{

    uchar key;
    Init_Com();//串口初始化
    count=0;
    P0=0xbf;
    fmq=0;
    while(1)
    {
        P1=0x0f;
        if(P1!=0x0f)
        {
            delay(400);

            key=getkey();
            Getch(key);
            delay(400);

        }

        xianshi();

    }
}
Exemple #3
0
void main(void)
{
    int seg, data;
    char c;
    unsigned e=0x9000,i=0;
    
    InitLib();
    
    Print("\r\nPlease Input a value writting to segment 0x9000 of Flash Member: ");
    Scanf("%d", &seg);
    
    FlashErase(e);
    while(i<65535)
    {
        FlashWrite(e, i, seg);
        Print("\r\nThe value %d is writting to offset %d of Flash Memory", seg, i);
        i++;
        seg++;
        if(i%100==0)
        {
            Print("\r\nPress q to quit or any key to continue...");
            c=Getch();
            if ((c=='q') || (c=='Q'))
                return;
        }
    }
}
/*------------------------------------------------------*/
void	AuxRTCM (void)
{
	char c;
	while(Kbhit(CHAUX))
	{
		if(!AuxBuff)
			Auxp=AuxBuff=memalloc(LINK_LEN);
		switch(c=Getch(CHAUX))
		{
		case 0x0A:
		case 0x0D:
			*Auxp=null;
			Auxp=AuxBuff;
			if(RTCMDec(Auxp))
				if(dGPS)
				{
					SendDGPS(0);
					SendDGPS(LinkAddr(OBP));
				}
			break;
		default:
			if(Auxp != &AuxBuff[LINK_LEN-1])
				*Auxp++=c;
			else
				*Auxp=c;
			break;
		}
	}
}
Exemple #5
0
void xsens_event_task( void )
{
  while (Xsens1Link(ChAvailable()) && !xsens_msg_received[0]) {
    parse_xsens_msg(0, Xsens1Link(Getch()));
  }

/*
  while (Xsens2Link(ChAvailable()) && !xsens_msg_received[1])
    parse_xsens_msg(1, Xsens2Link(Getch()));
*/

  for (int i = 0; i < XSENS_COUNT; i++) {
    if (xsens_msg_received[i]) {

      // first make room
      while (xsens_msg_buf_count[i] >= XSENS_MSG_BUF) {
        // throwing away old stuff
        xsens_msg_buf_ci[i] = (xsens_msg_buf_ci[i] + 1 ) % XSENS_MSG_BUF;
        xsens_msg_buf_count[i]--;
      }

      xsens_msg_buf_pi[i] = (xsens_msg_buf_pi[i] + 1 ) % XSENS_MSG_BUF;
      xsens_msg_buf_count[i]++;

      //xsens_parse_msg(i);
      xsens_msg_received[i] = FALSE;
    }
  }
}
/*------------------------------------------------------*/
void	AuxDef (void)
{
	char c;
	while(Kbhit(CHAUX))
	{
		if(!AuxBuff)
			Auxp=AuxBuff=memalloc(LINK_LEN);
		switch(c=Getch(CHAUX))
		{
		case 0x0A:
		case 0x0D:
			puts_aux("\r\n");
			*Auxp=null;
			Auxp=AuxBuff;
			if(!strcmp("?v",Auxp))
				SysMessage(CHAUX);
			puts_aux(">");
			break;
		default:
			if(Auxp != &AuxBuff[LINK_LEN-1])
				*Auxp++=c;
			else
			{
				*Auxp=c;
				Putch('\b',CHAUX);
			}
			Putch(c,CHAUX);
			break;
		}
	}
}
Exemple #7
0
void main(int argc, char *argv[])
{   
    int skt;
    int err, quit=0;
    int DataBytes;
  
    InitLib();  
    
	err=NetStart();
	if(err<0)
	{
		Print("Init Ethernet error.\n\r");
		return;
	}
	GetIp(MyIp);
    Print("IP=%d.%d.%d.%d\r\n", MyIp[0], MyIp[1], MyIp[2], MyIp[3]);	

    skt=Nopen("*", "UDP/IP", 10000, 0, S_NOCON | S_NOWA);
    if(skt<0)
    {
        Print("Cannot open a connection for UDP/IP!");
        Nterm();
        
        return;
    }  
  
    Print("Socket=%d\r\n", skt);
    SOCKET_NOBLOCK(skt);
  
    while(!quit)
    {
        YIELD();    // must add this line in the while loop
        
        DataBytes=Nread(skt, InBuf, 1500);
        if(DataBytes>0)
        {
			Print("%s\n\r",InBuf);
            memcpy(OutBuf, InBuf, DataBytes);
            Nwrite(skt, OutBuf, DataBytes);
        }

        if(Kbhit())
        {
            switch(Getch())
            {
                case 'q':
                case 'Q':
                    quit=1;
                    break;
            }
        }
    }

    Nclose(skt);
    Nterm();
}
Exemple #8
0
/*......................................................................*/
void	JwRec(void)
		{
static	ack_flag;
		int	j;

		if(Kbhit(CHAUX))
			if(CheckTask(JwSend,PIT_task))
				switch(j=Getch(CHAUX)) {
					case ACK_COM:  ack_flag = ACK_COM;
									break;
					case NACK_COM:	JwSend();
									break;
					default:		if((ack_flag == ACK_COM) && (j == JwTx[0]))
										DeleteTask(JwSend,PIT_task);
									ack_flag = 0;
									break;
					}
			else
				switch(JwCount)	{
					case	0:	JwCount=JwCheck=Getch(CHAUX);
								if(JwCount > 16)
									JwCount=0;
								else{
									JwCount++;
									Jw=JwRx;
									SetTask(JwDrop,50,PIT_task);
									}
								break;
					case	1:  if(JwExe()) {
									Putch(ACK_COM,CHAUX);
									Putch(JwRx[0],CHAUX);
									}
								else
									Putch(NACK_COM,CHAUX);
								JwCount--;
								DeleteTask(JwDrop,PIT_task);
								break;
					default: 	*Jw = Getch(CHAUX);
								JwCheck += *Jw++;
								JwCount--;
								break;
					}
		}
void CActiveConsole::GetNumberL(TUint& aNumber)
	{
	OstTraceFunctionEntry0( CACTIVECONSOLE_GETNUMBERL_ENTRY );
	TBuf<12> addrAsText;
	addrAsText.Zero();
	if ( aNumber != 0 )
		{
		addrAsText.Format(_L("%d"), aNumber);
		}
	WriteNoReturn(_L8("Enter a number: "));
	if ( addrAsText.Length() > 0 )
		{
		TBuf8<100> narrowBuf;
		narrowBuf.Copy(addrAsText);
		WriteNoReturn(narrowBuf);
		}
	TKeyCode code;
	TBuf<1> character;
	FOREVER
		{
		code = Getch();
		character.SetLength(0);
		character.Append(code);
	
		// If <CR> finish editing string
		if (code == 0x0d)
			break;
		
		// if <BS> remove last character
		if ((code == 0x08)&&(addrAsText.Length() != 0))
			{
			WriteNoReturn(_L8("%S"),&character);
			addrAsText.SetLength((addrAsText.Length()-1));
			}
		else
			{
			if (addrAsText.Length() < addrAsText.MaxLength())
				{
				WriteNoReturn(_L8("%S"),&character);
				addrAsText.Append(code);
				}
			}
		}
	//now extract the new address from the string...
	if( !addrAsText.Length() )
		{
		addrAsText.Append('0'); //null string causes TLex::Val to return an error
		}
	TLex lex(addrAsText);
	TInt err = lex.Val(aNumber, EDecimal);
	User::LeaveIfError(err);
	OstTraceFunctionExit0( CACTIVECONSOLE_GETNUMBERL_EXIT );
	}
Exemple #10
0
void link_mcu_event_task( void ) {
  /* A message has been received */
  if (InterMcuBuffer()) {
    while (InterMcuLink(ChAvailable())&&!intermcu_data.msg_available)
      intermcu_parse(InterMcuLink(Getch()));
  }

  if (intermcu_data.msg_available) {
    parse_mavpilot_msg();
    intermcu_data.msg_available = FALSE;
  }
}
Exemple #11
0
/*......................................................................*/
int		JwExe(void)
		{
		int		i;

		if(Getch(CHAUX) != JwCheck)
			return(null);
		switch(JwRx[0]) {
			case AZ_DATA:   shaft_enable();
							i = JwRx[1]*256 + JwRx[2];
							az_off += read_AZ()/maxmils*2.0*M_PI
										- (double)i / 3200.0 * M_PI;
							break;
			case IBIT_COM:	Ibit |= 0x80;
							break;
			default:        return(null);
			}
		return(eof);
		}
/*------------------------------------------------------*/
void	ReadPc (void)
{
	char c;
	while(Kbhit(CHPC))
	{
		if(!LinkBuff)
			Linkp=LinkBuff=memalloc(LINK_LEN);
		switch(c=Getch(CHPC))
		{
		case 0x0A:
		case 0x0D:
			puts_pc("\r\n");
			*Linkp=null;
			Linkp=LinkBuff;
			PcLinkDecode(Linkp);
			puts_pc(">");
			break;
		case 0x7F:
			if(Linkp != LinkBuff)
			{
				--Linkp;
				if(!LPP)
					puts_pc("\b \b");
			}
			break;
		default:
			if(Linkp != &LinkBuff[LINK_LEN-1])
				*Linkp++=c;
			else
			{
				*Linkp=c;
				if(!LPP)
					Putch('\b',CHPC);
			}
			if(!LPP)
				Putch(c,CHPC);
			break;
		}
	}
}
Exemple #13
0
void parse_ins_msg( void )
{
    while (InsLink(ChAvailable())) {
        uint8_t ch = InsLink(Getch());

        if (CHIMU_Parse(ch, 0, &CHIMU_DATA)) {
            if(CHIMU_DATA.m_MsgID==0x03) {
                new_ins_attitude = 1;
                RunOnceEvery(25, LED_TOGGLE(3) );
                if (CHIMU_DATA.m_attitude.euler.phi > M_PI) {
                    CHIMU_DATA.m_attitude.euler.phi -= 2 * M_PI;
                }

                EstimatorSetAtt(CHIMU_DATA.m_attitude.euler.phi, CHIMU_DATA.m_attitude.euler.psi, CHIMU_DATA.m_attitude.euler.theta);
                //EstimatorSetRate(ins_p,ins_q,ins_r);

                DOWNLINK_SEND_AHRS_EULER(DefaultChannel, DefaultDevice, &CHIMU_DATA.m_attitude.euler.phi, &CHIMU_DATA.m_attitude.euler.theta, &CHIMU_DATA.m_attitude.euler.psi);

            }
        }
    }
}
Exemple #14
0
/*************************************************************************
                                主函数	
**************************************************************************/
 void main()
{ 

uchar key;
Init_Com();//串口初始化
count=0;
P0=0xbf;
fmq=0;
while(1)
	{
P1=0x0f;
if(P1!=0x0f)  
 {
  delay(400);
   
  key=getkey(); 
  Getch(key);
  delay(400); 
  
 } 
  disp();
  if(cesi==0){{pwflag = pwcmp();if(pwflag==1){fmq=1;}}}
  xianshi();
 if(QX==1)
{
mbuf[count]=0; count++;
mbuf[count]=0; count++;
mbuf[count]=0; count++;
mbuf[count]=0; count++;
mbuf[count]=0; count++;
mbuf[count]=0; 
xianshi();
QX=0;
count=0;

}  
}
}		
Exemple #15
0
void main()
{initsound();readsong("music",song);playsong(-1,song);
 register int temp;rec3d startpagerec;stick3d titlestick;
 sks key;
 char3d title;hz3d prognam;
 init();mx=getmaxx();my=getmaxy();setbkcolor(0);If=Fpmk;Of=Fc;
 startpagerec.x1=startpagerec.y1=5;startpagerec.x2=mx-5;startpagerec.y2=my-100;startpagerec.widtho=startpagerec.heighto=10;startpagerec.widthm=10;startpagerec.heightm=15;startpagerec.widthi=startpagerec.heighti=7;startpagerec.fl=SOLID_FILL;startpagerec.fd=SOLID_FILL;startpagerec.fb=SOLID_FILL;startpagerec.bc=4;startpagerec.db=1;startpagerec.draw();
 titlestick.x=startpagerec.x1+startpagerec.widtho+startpagerec.widthm+startpagerec.widthi+20;titlestick.y=startpagerec.y1+startpagerec.heighto+startpagerec.heightm+startpagerec.heighti+20;titlestick.wl=titlestick.hu=10;titlestick.wr=titlestick.hd=20;titlestick.wm=150;titlestick.hm=40;titlestick.fl=titlestick.fr=titlestick.fu=titlestick.fd=titlestick.fm=1;titlestick.cl=titlestick.cu=15;titlestick.cr=titlestick.cd=8;titlestick.cm=7;titlestick.bc=1;titlestick.db=1;titlestick.draw();
 title.x=titlestick.x+20;title.y=titlestick.y+10;title.horiz=LEFT_TEXT;title.vert=TOP_TEXT;title.fontname=SANS_SERIF_FONT;title.fontdir=HORIZ_DIR;title.fontsize=4;title.c=15;title.co=9;title.depth=5;title.skip=1;title.dir=0;title.st="Pmk100!";title.draw();
 titlestick.x=startpagerec.x2-startpagerec.widtho-startpagerec.widthm-startpagerec.widthi-20;titlestick.y=startpagerec.y1+startpagerec.heighto+startpagerec.heightm+startpagerec.heighti+20;titlestick.wl=-10;titlestick.hu=10;titlestick.wr=-20;titlestick.hd=20;titlestick.wm=-190;titlestick.hm=40;titlestick.fl=titlestick.fr=titlestick.fu=titlestick.fd=titlestick.fm=1;titlestick.cl=titlestick.cu=15;titlestick.cr=titlestick.cd=8;titlestick.cm=7;titlestick.bc=1;titlestick.db=1;titlestick.draw();
 title.x=titlestick.x+titlestick.wr+titlestick.wm+titlestick.wl+30;title.y=titlestick.y+10;title.horiz=LEFT_TEXT;title.vert=TOP_TEXT;title.fontname=SANS_SERIF_FONT;title.fontdir=HORIZ_DIR;title.fontsize=4;title.c=15;title.co=9;title.depth=5;title.skip=1;title.dir=0;title.st="Made:DanSei";title.draw();prognam.x=mx/2-174;prognam.y=titlestick.y+titlestick.hu+titlestick.hm+titlestick.hd+20;prognam.fontsize=48;prognam.string=rname;prognam.c=0;prognam.co=14;prognam.depth=15;prognam.draw();d24(lib24k,rmade,mx/2-70,my-90,9,5);snhz16(eng16[_mh-1],mx/2-12,my-90,9);d24(lib24k,rds,mx/2+12,my-90,9,5);d16(eng16,vern1eng,mx/2-176,my-60,14,0);d16(eng16,vern2eng,mx/2-48,my-60,14,0);d16(eng16,vern3eng,mx/2+48,my-60,14,0);
 pmkm.init();pmkm.maxx=mx;pmkm.maxy=my;pmkm.cursor(knife[0]);
 m3dm mm(5);mm.w.cb=1;mm.it[0].st="System";mm.it[1].st="File";mm.it[2].st="Edit";mm.it[3].st="Config";mm.it[4].st="Translate";mm.it[5].st="Store";mm.set1(set1fn,TRIPLEX_FONT);mm.set1(set1vt,2);mm.set1(set1skp,15);mm.set1(set1fs,3);mm.setxy();mm.set1(set1cy,-5);mm.set1(set1cb,~4);mm.set1(set1cc,~1);mm.draw();mm.run(temp);
 Getch(key);
 cmd3d cmd;cmd.c.st="Command3d";cmd.c.fontname=TRIPLEX_FONT;cmd.c.fontsize=2;cmd.c.depth=5;
 cmd.setxy(stomach);
 cmd.o.bc=14;
 cmd.draw(0); 
 while(getch()!=13);
 cmd.draw(1);
 getch();
 stopsong();quitsound();
} 
Exemple #16
0
void parse_ins_msg(void)
{
  while (InsLink(ChAvailable())) {
    uint8_t ch = InsLink(Getch());

    if (CHIMU_Parse(ch, 0, &CHIMU_DATA)) {
      RunOnceEvery(25, LED_TOGGLE(3));
      if (CHIMU_DATA.m_MsgID == CHIMU_Msg_3_IMU_Attitude) {
        new_ins_attitude = 1;
        if (CHIMU_DATA.m_attitude.euler.phi > M_PI) {
          CHIMU_DATA.m_attitude.euler.phi -= 2 * M_PI;
        }

        struct FloatEulers att = {
          CHIMU_DATA.m_attitude.euler.phi,
          CHIMU_DATA.m_attitude.euler.theta,
          CHIMU_DATA.m_attitude.euler.psi
        };
        stateSetNedToBodyEulers_f(&att);
        struct FloatRates rates = {
          CHIMU_DATA.m_sensor.rate[0],
          CHIMU_DATA.m_attrates.euler.theta,
          0.
        }; // FIXME rate r
        stateSetBodyRates_f(&rates);
        //FIXME
        ahrs_chimu.is_aligned = TRUE;
      } else if (CHIMU_DATA.m_MsgID == 0x02) {
#if CHIMU_DOWNLINK_IMMEDIATE
        RunOnceEvery(25, DOWNLINK_SEND_AHRS_EULER(DefaultChannel, DefaultDevice, &CHIMU_DATA.m_sensor.rate[0],
                     &CHIMU_DATA.m_sensor.rate[1], &CHIMU_DATA.m_sensor.rate[2]));
#endif
      }
    }
  }
}
Exemple #17
0
void digital_cam_uart_event(void)
{
  while (CameraLink(ChAvailable())) {
    parse_mora(&mora_protocol, CameraLink(Getch()));
    if (mora_protocol.msg_received) {
      switch (mora_protocol.msg_id) {
        case MORA_STATUS:
          for (int i = 0; i < MORA_STATUS_MSG_SIZE; i++) {
            mora_status_msg.bin[i] = mora_protocol.payload[i];
          }
          digital_cam_uart_status = mora_status_msg.data.shots;
          break;
        case MORA_PAYLOAD:
          for (int i = 0; i < MORA_PAYLOAD_MSG_SIZE; i++) {
            thumbs[thumb_pointer][i] = mora_protocol.payload[i];
          }
          break;
        default:
          break;
      }
      mora_protocol.msg_received = 0;
    }
  }
}
Exemple #18
0
char *GetHistory()
{
  int     ch, tmp;
  int     start_x;
  char    *RetVal = NULL;
  History *TMP;
  int     hide_left, hide_right;


  disp_begin_pos = 0;
  cursor_pos     = 0;
  start_x        = 0;
  /* leaveok(stdscr, TRUE); */
  (void) DisplayHistory();

  do
  {
    RefreshWindow( history_window );
    doupdate();
    ch = Getch();

    if(ch != -1 && ch != KEY_RIGHT && ch != KEY_LEFT) {
      if(start_x) {
        start_x = 0;
	PrintHstEntry( disp_begin_pos + cursor_pos,
		       cursor_pos, HIHST_COLOR, 
		       start_x, &hide_left, &hide_right);
      }
    }

    switch( ch )
    {
      case -1:       RetVal = NULL;
                     break;

      case ' ':      break;  /* Quick-Key */

      case KEY_RIGHT: start_x++;
		      PrintHstEntry( disp_begin_pos + cursor_pos,
			             cursor_pos, HIHST_COLOR,
		                     start_x, &hide_left, &hide_right);
		      if(hide_right < 0) 
		        start_x--;
		      break;
      
      case KEY_LEFT:  if(start_x > 0)
       		        start_x--;
		      PrintHstEntry( disp_begin_pos + cursor_pos,
			             cursor_pos, HIHST_COLOR,
		                     start_x, &hide_left, &hide_right);
		      break;
      
      case '\t':
      case KEY_DOWN: if (disp_begin_pos + cursor_pos+1 >= total_hist)
      		     {
		       beep();
		     }
		     else
		     { if( cursor_pos + 1 < HISTORY_WINDOW_HEIGHT )
		       {
			 PrintHstEntry( disp_begin_pos + cursor_pos,
					cursor_pos, HST_COLOR,
		                        start_x, &hide_left, &hide_right);
			 cursor_pos++;
			 PrintHstEntry( disp_begin_pos + cursor_pos,
					cursor_pos, HIHST_COLOR,
		                        start_x, &hide_left, &hide_right);
                       }
		       else
		       {
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HST_COLOR,
		                        start_x, &hide_left, &hide_right);
			 scroll( history_window );
			 disp_begin_pos++;
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HIHST_COLOR,
		                        start_x, &hide_left, &hide_right);
                       }
		     }
                     break;
      case KEY_BTAB:
      case KEY_UP  : if( disp_begin_pos + cursor_pos - 1 < 0 )
		     {   beep(); }
		     else
		     {
		       if( cursor_pos - 1 >= 0 )
		       {
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HST_COLOR,
		                        start_x, &hide_left, &hide_right);
			 cursor_pos--;
			 PrintHstEntry( disp_begin_pos + cursor_pos,
					cursor_pos, HIHST_COLOR,
		                        start_x, &hide_left, &hide_right);
                       }
		       else
		       {
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HST_COLOR,
		                        start_x, &hide_left, &hide_right);
			 wmove( history_window, 0, 0 );
			 winsertln( history_window );
			 disp_begin_pos--;
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HIHST_COLOR,
		                        start_x, &hide_left, &hide_right);
                       }
		     }
                     break;
      case KEY_NPAGE:
      		     if( disp_begin_pos + cursor_pos >= total_hist - 1 )
		     {  beep();  }
		     else
		     {
		       if( cursor_pos < HISTORY_WINDOW_HEIGHT - 1 )
		       {
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HST_COLOR,
		                        start_x, &hide_left, &hide_right);
		         if( disp_begin_pos + HISTORY_WINDOW_HEIGHT > total_hist  - 1 )
			   cursor_pos = total_hist - disp_begin_pos - 1;
			 else
			   cursor_pos = HISTORY_WINDOW_HEIGHT - 1;
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HIHST_COLOR,
		                        start_x, &hide_left, &hide_right);
		       }
		       else
		       {
			 if( disp_begin_pos + cursor_pos + HISTORY_WINDOW_HEIGHT < total_hist )
			 {
			   disp_begin_pos += HISTORY_WINDOW_HEIGHT;
			   cursor_pos = HISTORY_WINDOW_HEIGHT - 1;
			 }
			 else
			 {
			   disp_begin_pos = total_hist - HISTORY_WINDOW_HEIGHT;
			   if( disp_begin_pos < 0 ) disp_begin_pos = 0;
			   cursor_pos = total_hist - disp_begin_pos - 1;
			 }
                         DisplayHistory();
		       } 
		     }
                     break;
      case KEY_PPAGE:
		     if( disp_begin_pos + cursor_pos <= 0 )
		     {  beep();  }
		     else
		     {
		       if( cursor_pos > 0 )
		       {
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HST_COLOR,
		                        start_x, &hide_left, &hide_right);
			 cursor_pos = 0;
			 PrintHstEntry( disp_begin_pos + cursor_pos, 
					cursor_pos, HIHST_COLOR,
		                        start_x, &hide_left, &hide_right);
		       }
		       else
		       {
			 if( (disp_begin_pos -= HISTORY_WINDOW_HEIGHT) < 0 )
			 {
			   disp_begin_pos = 0;
			 }
                         cursor_pos = 0;
                         DisplayHistory();
		       } 
		     }
                     break;
      case KEY_HOME: if( disp_begin_pos == 0 && cursor_pos == 0 )
		     {   beep();    }
		     else
		     {
		       disp_begin_pos = 0;
		       cursor_pos     = 0;
                       DisplayHistory();
		     }
                     break;
      case KEY_END : 
                     disp_begin_pos = MAX(0, total_hist - HISTORY_WINDOW_HEIGHT);
		     cursor_pos     = total_hist - disp_begin_pos - 1;
                     DisplayHistory();
                     break;
      case LF :
      case CR : 
                     TMP = Hist;
                     for(tmp = 0; (tmp != disp_begin_pos + cursor_pos); tmp++)
                     {
                        TMP = TMP -> next;
                        if (TMP == NULL)
                          break;
                     }
                     if (TMP != NULL)
                        RetVal = TMP -> hst;
                     else
                        RetVal = NULL;
		     break;

      case ESC:      RetVal = NULL;
                     break;

      default :      beep();
		     break;
    } /* switch */
  } while(ch != CR && ch != ESC && ch != -1);
  /* leaveok(stdscr, FALSE); */
  touchwin(stdscr);
  return RetVal;
}
void airspeed_otf_event(void) {
  while (MetLink(ChAvailable())) {
    uint8_t ch = MetLink(Getch());
    airspeed_otf_parse(ch);
  }
}
void aerocomm_init( void ) {

aerocomm_confirmation_received=TRUE;
{  uint8_t init_cpt = 120;
  while (init_cpt) {
    if (sys_time_periodic())
      init_cpt--;
  }
}

#ifdef NO_API_INIT
#warning "NO_API_INIT defined"
#else
#warning "NO_API_INIT not defined"
#endif

#ifndef NO_API_INIT
  /** Switching to AT mode (FIXME: busy waiting) */
  AerocommPrintString(AT_COMMAND_SEQUENCE);
  char c;
  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  int j;
  j=0;
  while (AerocommLink(ChAvailable()) && j<4) 
  {
	c=AerocommLink(Getch()); j++;
  }

  uint16_t addr = AEROCOMM_MY_ADDR;
  char s[]=AT_SET_MY;
  s[4]=(unsigned int)(0x00);
  s[5]=(unsigned int)(0x50);
  s[6]=(unsigned int)(0x67);
  s[7]=(unsigned int)(0x00);
  s[8]=(unsigned int)(addr>> 8);
  s[9]=(unsigned int)(addr & 0xff);
  AerocommPrintString(AT_READ_MY);
  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  j=0;
  while (AerocommLink(ChAvailable()) && j<4) 
  {
	c=AerocommLink(Getch()); j++;
  }

  if (c!=s[9]) for (j=0; j<10; j++)  AerocommTransportPut1Byte(s[j]);

  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  j=0;
  while (AerocommLink(ChAvailable()) && j<3) 
  {
	c=AerocommLink(Getch()); j++;
  }
  AerocommPrintString(AT_RESET);
  {  uint8_t init_cpt = 60;
     while (init_cpt) {
     if (sys_time_periodic())
        init_cpt--;
     }
   }

  AerocommPrintString(AT_COMMAND_SEQUENCE);
  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  j=0;
  while (AerocommLink(ChAvailable()) && j<4) 
  {
	c=AerocommLink(Getch()); j++;
  }
  AerocommPrintString(AT_AP_MODE);
  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  j=0;
  while (AerocommLink(ChAvailable()) && j<2) 
  {
	c=AerocommLink(Getch()); j++;
  }
  char s1[]=AT_DEST_ADDR;
  s1[2]=(unsigned int)(0x00);
  s1[3]=(unsigned int)(0x01);
  s1[4]=(unsigned int)(0x00);
  for (j=0; j<5; j++)  AerocommTransportPut1Byte(s1[j]);
  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  j=0;
  while (AerocommLink(ChAvailable()) && j<4) 
  {
	c=AerocommLink(Getch()); j++;
  }

  AerocommPrintString(AT_EXIT);
  while (!AerocommLink(ChAvailable())) { 
     uint8_t init_cpt = 3;
     while (init_cpt) {
       if (sys_time_periodic())
          init_cpt--;
     }
  }
  j=0;
  while (AerocommLink(ChAvailable()) && j<4) 
  {
	c=AerocommLink(Getch()); j++;
  }

#endif
}