Example #1
0
void GUI_X_WaitEvent (void) 
{
    INT8U  err;


    (void)OSMboxPend(EventMbox, 0, &err);
}
Example #2
0
/*****************************************************************************
** Function name:	LiftTableHandle	
** Descriptions:	给设备管理任务发送升降机控制邮箱														 			
** parameters:		HandleType:操作类型1:出货操作 2:检查状态 3:查询出货结果
					ChannelNum:逻辑货道编号
					LevelNum:层编号
					Binnum:箱柜编号
					BackMsg:返回的数据
** Returned value:	0:成功;1:失败;
*****************************************************************************/
unsigned char LiftTableHandle(unsigned char HandleType,unsigned char ChannelNum,unsigned char LevelNum,unsigned char Binnum,unsigned char *BackMsg)
{
	MessagePack *RecvBoxPack;
	uint8_t err,i;

	MsgAccepterPack.ChnlHandleType = HandleType;
	MsgAccepterPack.ChannelNum = ChannelNum;
	MsgAccepterPack.Binnum = Binnum;
	MsgAccepterPack.LevelNum = LevelNum;
	TraceChannel("LiftTableHandle[start]:type = %d\r\n",HandleType);
	liftSetReady(0);
	OSMboxPost(g_LiftTableMail,&MsgAccepterPack);
	RecvBoxPack = OSMboxPend(g_LiftTableBackMail,LIFT_HANDLE_TIMEOUT,&err);
	liftSetReady(1);
	if(err == OS_NO_ERR){
		TraceChannel("LiftTableHandle[pend]:type=%d\r\n",HandleType);
		for(i=0;i<10;i++){
			BackMsg[i] = RecvBoxPack->LiftTablePack[i];
		}
		return RecvBoxPack->HandleResult;
	}
	TraceChannel("LiftTableHandle[pend]:timeout!\r\n");
	return 0xFF;


}
Example #3
0
void Task1_Task(void * ptr_args)
{
    INT8U err;
    TASK1_MBOX_TypeDef * mbox;
    
    //
    // The first task to run must call this function
    //
    OS_CPU_SysTickInit(1000);
	
    LEDS_Off(LED_0);
    LEDS_Off(LED_1);
    
    for (;;){
	mbox = (TASK1_MBOX_TypeDef *) OSMboxPend(task1_mbox, OS_MBOX_TIMEOUT_MAX, &err);
	if (err == OS_ERR_NONE){
	    if (mbox->action == 0x01){
		LEDS_Toggle(LED_0);		
	    }else{
		LEDS_Toggle(LED_1);		
	    }
	    
	}	
    }    
}
Example #4
0
File: os_view.c Project: flyoo/gprs
static  void  OSView_Task (void *p_arg)
{
    INT16U     len;
    INT8U      err;
#if OS_SEM_EN == 0 && OS_MBOX_EN > 0
    void      *msg;
#endif
#if OS_CRITICAL_METHOD == 3                       /* Allocate storage for CPU status register          */
    OS_CPU_SR  cpu_sr = 0;
#endif


    (void)p_arg;
    while (1) 
	{
#if OS_SEM_EN > 0
        (void)OSSemPend(OSView_Sem, 0, &err);     /* Wait for a packet to be received                  */
#else
#if OS_MBOX_EN > 0
        (void)OSMboxPend(OSView_Mbox, 0, &err);   /* Wait for a packet to be received                  */
#endif
#endif
        len = OSView_CmdParsePkt();               /* Parse packet and formulate a response             */
        if (len > 0) {                            /* If we have a response                             */
            OS_ENTER_CRITICAL();                  /* Setup transmission of the response                */
            OSView_TxLen = len;
            OS_EXIT_CRITICAL();
            OSView_TxStart();
        }
    }
}
Example #5
0
void inquiry_slave_status(u8 id)   
  {  u8 *msg;
        u8 err;
   order_trans_rs485(mybox.myid,id,2,0,0);
  // delay_us(10000);
   msg=(u8 *)OSMboxPend(RS485_STUTAS_MBOX,OS_TICKS_PER_SEC/50,&err);
   if(err==OS_ERR_TIMEOUT)
   	{      
               	      set_statuslist_1(id,0,2,0,0);set_statuslist_2(id,0,2,0,0);set_statuslist_3(id, 0,2,0,0);
              
         }//(u8 id, u8 size, u8 work_status, u8 work_time) 
	else 
	  rs485_trans_status(msg);
	if(id==mybox.myid)
		{
                    if(mystatus.three_offset==0)
                    	{
	   set_statuslist_1(mystatus.myid,mystatus.size[0],mystatus.work_status[0],mystatus.work_time[0],0);//主机状态信息写入状态表
          set_statuslist_2(mystatus.myid,mystatus.size[1],mystatus.work_status[1],mystatus.work_time[1],0);
		  set_statuslist_3(id, 0,2,0,0);
                    	}
		  if(mystatus.three_offset==1)
		  	{
            set_statuslist_1(mystatus.myid,mystatus.size[0],mystatus.work_status[0],mystatus.work_time[0],1);//主机状态信息写入状态表
          set_statuslist_2(mystatus.myid,mystatus.size[1],mystatus.work_status[1],mystatus.work_time[1],1);
	             set_statuslist_3(mystatus.myid,mystatus.size[2],mystatus.work_status[2],mystatus.work_time[2],1);	  
           
		        }
		}
	} //查询从机状态并保存到从机状态表中,参数id是要查询的从机号
Example #6
0
/************************************************************
 * 函数名:handshake_task
 * 描述  :握手任务
 * 输入  :无
 * 输出  :无
 * 调用  :无
 ************************************************************/
void handshake_task(void *pdata)
{
	u8 *rxbuf;
	INT8U err;
	while(1)
	{
		OSTimeDlyHMSM(0, 0,1,0);
		if(Usart_flag)
		{
			HandShake();
			rxbuf = (u8*)OSMboxPend(msg_hand,100,&err);
			
			if(0x51 == rxbuf[1])//收到回复
			{
				UsartAskCnt = 0;
			}
			else //未收到回复
			{
				if(UsartAskCnt<=5)
					UsartAskCnt++;
				
				if(UsartAskCnt==5)
				{
					State = 0;
					netState.Net_Insert[0] = 0;
					netState.Net_Insert[1] = 0;
					netState.Net_Insert[2] = 0;
					DisableEncode();
					AllLedOff();
					NixieTube_AllOff();
				}
			}
		}
	}
}
Example #7
0
int getCurrentFingerprintId(bool enrollNow) {
	INT8U err;
	int *fid;
	err = OSSemPost(fingerprintSem);
	m_enrollNow = enrollNow;
	fid = (int*) OSMboxPend(fingerprintMailbox, 0, &err);
	return *fid;
}
Example #8
0
void Task_UART0Rx(void *pdata){
	INT8U err;
	INT32U Recv = 0;
	Recv = Recv;
	
	while(1){
		Recv = (INT32U)OSMboxPend(Mbox_UART0Rx,0,&err);
		OSMboxPost(Mbox_UART0Tx,(void*)PackageRx0.iData);
		OSMboxPost(Mbox_BEEPMAN,(void*)PackageRx0.iType);
	}
}
Example #9
0
//邮箱接收函数任务
void AppMBOXTask(void *pdata)
{
	uint8_t key;
	uint8_t err;
	uint16_t TaskCtr=0;
  pdata=pdata; //防止编译器出错 无实际意义
	while(1)
	{
		key=(uint32_t)OSMboxPend(msg_test,0,&err);  //等待消息邮箱
		TaskCtr++;
      UART_printf("Received MBox:%d \r\n", key);
	}
}
Example #10
0
void Task_LCDMAN(void *pdata){
	char* src;
	INT8U err;
	while(1){
		src = (char*)OSMboxPend(Mbox_LCDMAN,0,&err);
		LCDClear();
		//LCDString(0,"ID:");
		LCDString(0,src);
		OSTimeDlyHMSM(0,0,3,0);
		LCDClear();
		LCDString(0,"   Bitman Lab\n   Log System.");
	}
}
Example #11
0
void Task_UART0TX(void *pdata){
	INT8U err;
	INT32U Recv = 0;
	
	while(1){
		Recv = (INT32U)OSMboxPend(Mbox_UART0Tx,0,&err);
		PackageTx0.iSave = 0x0;
		PackageTx0.iType = iOPcode;
		PackageTx0.iData = Recv;
		PackageTx0.iMagicNumber = MAGIC;
		sendbin0((INT8U*)&PackageTx0,sizeof(PackageFormat));
		itos_dec(Recv,vBuffer,10);
		OSTimeDlyResume(15);
		OSMboxPost(Mbox_LCDMAN,(void*)vBuffer);
	}
}
void  AppDebugTask (void *p_arg)
{
	CPU_INT08S * rxMessage;
	CPU_INT08U *err;
	Debug_PutString("\n\rUART 2 Ready..");

	Handle_Reset();	
	while(1)
	{
    	Task_WDT[4] = 1;	    						//	DEBUG_TASK WATCHDOG STATUS BIT
		rxMessage = (CPU_INT08S*)OSMboxPend(UART2MboxPtr, 9000, err);
		//	if((*rxMessage) == COUNT_2000MS_TIMER)
		{
		}	
	}		
}	
Example #13
0
/*********************************************************************//**
 * @brief 		Client Parer uc/OS II task
 * @param[in] 	p_arg parameter
 * @return 		None
 ***********************************************************************/
void ClientParserTask(void *p_arg)
{
    uint8_t b;
    INT8U err = OS_ERR_NONE;
    (void) p_arg; // avoid compile warning
    
    // Start Client Parser
    for (;;) {
        OSMboxPend(client_parser.event, 500, &err);
        if (err == OS_ERR_NONE) {
            while (!RingBufferIsEmpty(&(client_parser.buffer))) {
                RingBufferPop(&(client_parser.buffer), &b);
                client_parser.parser[client_parser.mode](&b);
            }
        }
 	}
}
Example #14
0
/*
*******************************************************************************
**
** This function waits until a message is available in the given mailbox. 
** The suspend argument controls whether this function will be in blocking 
** mode or not while waiting for a message. A waiting message will be cleared
**
*******************************************************************************
*/
RTOS_Message RTOS_MailboxWait( RTOS_Mailbox mailbox, RTOS_Flag suspend )
{
    INT8U error   = OS_NO_ERR;
    void* message = 0;

    if( ! RTOS_MailboxIsValid( mailbox ) )
        return( (RTOS_Message)0 );

    if( suspend )
        message = OSMboxPend( (OS_EVENT*)mailbox, (INT16U)0, &error );
    else
        message = OSMboxAccept( (OS_EVENT*)mailbox );    
           
    if( ( error != OS_NO_ERR ) || ( message == 0 ) )
        return( (RTOS_Message)0 );

    return( message );
}
Example #15
0
unsigned char TestLiftTablePend(unsigned char *BackMsg)
{
	MessagePack *RecvBoxPack;
	uint8_t err,i;

	//等待邮箱返回
	RecvBoxPack = OSMboxPend(g_LiftTableBackMail,50/5,&err);
	if(err == OS_NO_ERR)
	{
		TraceChannel("BackMsg=\r\n");
		for(i=0;i<10;i++)
		{
			BackMsg[i] = RecvBoxPack->LiftTablePack[i];
			TraceChannel("%x ",BackMsg[i]);
		}
		return RecvBoxPack->HandleResult;
	}
	return 0xff;	
}
Example #16
0
void Task5(void *pdata)
{
	unsigned char err = 0; 
	MsgTask *p = (MsgTask *)0;
 
	pdata=pdata;
 
	while(1)
	{
		p = (MsgTask *)OSMboxPend(Tmbox,0,&err);		   
		t5 = p->cnt;
		com_putstring(p->msg, 5);
		com_putenter();
		
		p->msg = "Task5";
		OSMboxPost(Tmbox, (void *)p);
		PA_OUT_REV(LED5);	
	}
}
void board_control_task(void *pdata)
{
  INT8U error_code = OS_NO_ERR;
  board_control_mbox = OSMboxCreate((void *)NULL);

  struct http_form_data* board_control_mbox_contents;
  
  while(1)
  {
      board_control_mbox_contents = (void*)OSMboxPend(board_control_mbox, 0, &error_code);
      
      if (board_control_mbox_contents->LED_ON)
      {
        OSTaskResume(LED_PRIO);
      }
      else
      {
        /* Suspend the task and clear the LED. */
        OSTaskSuspend(LED_PRIO);
        IOWR_ALTERA_AVALON_PIO_DATA( LEDG_BASE, 0 );
      }
      
      if (board_control_mbox_contents->SSD_ON)
      {
        OSTaskResume(SSD_PRIO);
      }
      else
      {
        /* Suspend the task and set SSD to all zeros. */
        OSTaskSuspend(SSD_PRIO);
		#ifdef SEG7_NAME
        //sevenseg_set_hex(0); 
		#endif
      }  

      /* Always dump text to the LCD... */
	  #ifdef LCD_NAME
      lcd_output_text( board_control_mbox_contents->LCD_TEXT );
      usleep(500*1000);
	  #endif
  }
}
Example #18
0
/*
*******************************************************************************
**
** This function waits until a message is available in the given mailbox. 
** The suspend argument controls whether this function will be in blocking 
** mode or not while waiting for a message. A waiting message will be cleared
**
*******************************************************************************
*/
RTOS_Message RTOS_MailboxWaitTimeout( RTOS_Mailbox mailbox, RTOS_Time msecs )
{
    INT16U ticks = msecs / RTOS_KernelTimerGetPeriod();
    INT8U  error   = OS_NO_ERR;
    void*  message = 0;

    if( ! RTOS_MailboxIsValid( mailbox ) )
        return( (RTOS_Message)0 );

    if( msecs == 0 )
        return( RTOS_MailboxWait( mailbox, GFALSE ) );
            
    if( msecs == (RTOS_Time)-1)
        return( RTOS_MailboxWait( mailbox, GTRUE ) );

    message = OSMboxPend( (OS_EVENT*)mailbox, (INT16U)0, &error );
    if( ( error != OS_NO_ERR ) || ( message == 0 ) )
        return( (RTOS_Message)0 );

    return( message );
}
Example #19
0
void DIR_TASK(void *p_arg)
{
	uint8_t err;
	double servo_corner,Location_corner,B,D;
	float Servo_pwm_duty,A;
	uint8_t* Track_Midline_value;
	(void)p_arg;
		while(1)
		{
			Track_Midline_value = OSMboxPend(Str_Box_2,0,&err);
			B = *Track_Midline_value;
			printf("Track_value = %f\n",B);
			Location_corner = PID_Calc(1, 0, *Track_Midline_value);
			D = servo_corner;
			printf("servo_corner = %f\n",D);
			Servo_pwm_duty = Servo_pwm(Location_corner);
			A = Servo_pwm_duty;
			printf("Servo_pwm_duty = %f\n",A);
			FTM_PWM_ChangeDuty(HW_FTM1,HW_FTM_CH0,Servo_pwm_duty);	
			OSTimeDlyHMSM(0,0,0,50);
		}
}
Example #20
0
void SCU_TASK(void *p_arg)
{
	uint32_t* speed;
	uint8_t err;
	int PWM_Duty = 0;
	int B;
  (void)p_arg;  
	LCD_Print(1,2,"speed = 1.0m/s");
	while(1)
	{
		PID_Init();
		speed = OSMboxPend(Str_Box_1,0,&err);   //请求消息;获得当前速度
	  // printf("process_point = %d\n",*speed);
		 
		 PWM_Duty += PID_Calc(0, *speed, 0);
     B = PWM_Duty;
		 printf("PWM = %d\n",B);
		 if(PWM_Duty >= 1000)
		 {
		   FTM_PWM_ChangeDuty(HW_FTM0,HW_FTM_CH0,1000);  /* 0-10000 对应 0-100%占空比 */
		 //	LCD_Print(1,5,"FULL_SPEED");
		 	printf("PWM_Duty = 100 \n");
		 }
		  if(PWM_Duty > 0 && PWM_Duty < 1000)
		 {
		   FTM_PWM_ChangeDuty(HW_FTM0,HW_FTM_CH0,PWM_Duty);  /* 0-10000 对应 0-100%占空比 */
		 //	LCD_Print(1,7,"Part_SPEED");
		 	printf("PWM_Duty = %d\n",PWM_Duty/100);
		 }
		 if (PWM_Duty <= 0)
		 {
		   FTM_PWM_ChangeDuty(HW_FTM0,HW_FTM_CH0,0);  /* 0-10000 对应 0-100%占空比 */
		 	 printf("PWM_Duty = 0\n");
		 }
    OSTimeDlyHMSM(0,0,0,50);	
	}
}
Example #21
0
void Task_LEDMAN(void *pdata){
	INT8U err;
	INT32U Recv = 0;
	Recv = Recv;
	while(1){
		Recv = (INT32U)OSMboxPend(Mbox_LEDMAN,0,&err);
		switch (iOPcode){
			case TYPE_KEY:
				rGPBDAT = (7<<5);
				break;
			case TYPE_QUERY:
				rGPBDAT = (11<<5);
				break;
			case TYPE_DEFAULT:
				rGPBDAT = (15<<5);
				break;
			case TYPE_INSERT:
				rGPBDAT	= (13<<5);
				break;
			default:
				break;
		}
	}
}
Example #22
0
void Task3(void *pdata)
{
	pdata = pdata;
	//adc_init();
	unsigned char err = 0;
	MsgTask *p = (MsgTask *)0;
	while(1)
	{
		//adc_switch_channel(ADC_VOLTAGE);
		//START_ADC();
		PA_OUT_REV(LED3);

		//t5 = ADC;
		//com_printf("ADC = %d\n", t5);
		pMsgTask->cnt = 255-t5;
		pMsgTask->msg = "Task3";
		OSMboxPost(Tmbox, (void *)pMsgTask);
		p = (MsgTask *)OSMboxPend(Tmbox,0,&err);
		com_putstring(p->msg, 5);
		com_putenter();
		
		OSTimeDly(OS_TICKS_PER_SEC);
	}
}
Example #23
0
//++++++++++++COM1处理任务++++++++++++++++++++++++++
static  void Task_Com1(void *p_arg)
{     
   	INT8U err;   				  
	INT8U *s; 
	INT8U i;
	INT8U flag=0;
	static unsigned long d=0;
	static unsigned int freq_tmp=0;
	static unsigned int freq_tmp1=0;
	INT8U ADD_x=FREQ_LCD_ADD_X;  
	s=OSMboxPend(Com1_MBOX,0,&err);	
	//Init_AD9850();   	
	(void)p_arg;	
	while(1)
	{	
		//USART_OUT(USART1,"Task_Com1\r\n");
		if(*s=='L')
		{
			for(i=1;i<50;i++)
			{
				if(*(s+i)!='F')
				{
					d=d*10+(*(s+i)-0x30);
				}
				else
				{
					//AD9850_Write_Serial(d,0,0);
					//KEY_FLAG=0;
					//Freq_SET=d;
					//if(d/1000000>0)
					//{
					freq_tmp=d/1000000;
					if(freq_tmp>0)flag=1;
					if(flag==1)
					{
						USART_OUT(USART1,"USART is %d",freq_tmp);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);
					ADD_x+=12;						
					freq_tmp=d%1000000/1000;
					freq_tmp1=(freq_tmp)/100;
					if(freq_tmp1>0)flag=1;
					if(flag==1)
					{
						//USART_OUT(USART1,"%d",freq_tmp1);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp1+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);

					ADD_x+=12;
					freq_tmp1=(freq_tmp%100)/10;
					if(freq_tmp1>0)flag=1;
					if(flag==1)
					{
						USART_OUT(USART1,"%d",freq_tmp1);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp1+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);
				
					ADD_x+=12;
					freq_tmp1=(freq_tmp%100)%10;
					if(freq_tmp1>0)flag=1;
					if(flag==1)
					{
						USART_OUT(USART1,"%d",freq_tmp1);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp1+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);
					ADD_x+=12;
					freq_tmp=d%1000;
					freq_tmp1=(freq_tmp)/100;
					if(freq_tmp1>0)flag=1;
					if(flag==1)
					{
						USART_OUT(USART1,"%d",freq_tmp1);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp1+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);
					ADD_x+=12;
					freq_tmp1=(freq_tmp%100)/10;
					if(freq_tmp1>0)flag=1;
					if(flag==1)
					{
						USART_OUT(USART1,"%d",freq_tmp1);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp1+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);

					ADD_x+=12;
					freq_tmp1=(freq_tmp%100)%10;
					if(freq_tmp1>0)flag=1;
					if(flag==1)
					{
						USART_OUT(USART1,"%dHz\r\n",freq_tmp1);
						//TFT_PutChar12x24(ADD_x,FREQ_LCD_ADD_Y,freq_tmp1+0x30,0xffff,0x0000);							
					}
					//else GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y," ",1,0xffff,0x0000);
					
					ADD_x+=12;

					//GUI_Text12x24(ADD_x,FREQ_LCD_ADD_Y,"Hz",2,0xffff,0x0000);
					//}

					//TFT_PutChar12x24(00,200-24,tmp+0x30,0xffff,0x0000);
					//GUI_Text12x24(48,200-24,"KHz",3,0xffff,0x0000);
//					Select_DA();
//					SPI_SendData(d<<6);
//					NotSelect_DA();
					break;	
				}
			}
				
			*s=0;
			d=0;
			ADD_x=FREQ_LCD_ADD_X;
			flag=0;
			OSMboxPost(Com1_MBOX,(void *)&s);
		}
		OSTimeDlyHMSM(0, 0, 0, 200);
	}
}
void ControlTask(void* pdata)
{
  INT8U err, err_tmr_2, err_tmr_start, err_sem;
  INT8U throttle = 0; /* Value between 0 and 80, which is interpreted as between 0.0V and 8.0V */
  void* msg;
  INT16S* current_velocity, diff_velocity;
  Sem_ControlTask = OSSemCreate(0);
  printf("Control Task created!\n");
  
  SWTimer_ControlTask = OSTmrCreate(0, CONTROL_PERIOD, OS_TMR_OPT_PERIODIC , Tmr_Callback_Control_Task, (void *)0,"S/W Timer 1",&err_tmr_2);   
   
    if(err_tmr_2 == OS_ERR_NONE){
        if(DEBUG)
        printf("Timer for CONTROL TASK is created and Started\n"); 
        
        OSTmrStart(SWTimer_ControlTask, &err_tmr_start);     
          
      }
      else {
      printf("Error while creating control task timer \n");     
     
      if(err_tmr_2 == OS_ERR_TMR_NON_AVAIL)
      printf(" OS_ERR_TMR_NON_AVAIL : CONTROL TASK \n");
      
      }

  while(1)
    {
      if(DEBUG)
      printf("Control task waiting for MBoxPost_Velocity \n\n");
      
      msg = OSMboxPend(Mbox_Velocity, 0, &err);
      current_velocity = (INT16S*) msg;
      
      // Set throttle value if gas pedal is pressed
      if((gas_pedal == on) && (engine == on)){
        throttle = throttle + 10;
        
        if(throttle > 80)
        throttle = 80;  // Max value of throttle 0 - 80
        
        if(DEBUG_IO)
        printf("********** Acclerate Gas_Pedal : %d **********\n", throttle);
      }
      else {
        throttle = 0;
      }
      
      if(engine == off){
        throttle = 0;
      }
      
      
      // Check for cruise control
      if((cruise_control == on) && (engine == on)){
        
        if(REF_VELOCITY == 0)
        REF_VELOCITY = *current_velocity;
        
        if(DEBUG_IO)
        printf("********** Cruise control Active ********** REF : %d \n",REF_VELOCITY);
        
        show_target_velocity((INT8U) (REF_VELOCITY/10));
        
       
        if(*current_velocity > REF_VELOCITY){    // Decrease throttle value
             diff_velocity = *current_velocity - REF_VELOCITY;
             
            if(diff_velocity > 15){
                throttle = 0;
            }
            else if(diff_velocity > 10){
                throttle = throttle - 30;
            }
            else {
                throttle = throttle - 10;
            }
            
            if(throttle <= 0) // Throttle  0-80
            throttle = 0;
            
            if(DEBUG_IO)
            printf("DEC throttle : %d \n", throttle);
        }
        else {
            diff_velocity = REF_VELOCITY - *current_velocity;
            
            if(diff_velocity > 15){
                throttle = 80;
            }
            else if (diff_velocity > 10){
                throttle = throttle + 30;
            }
            else {
               throttle = throttle + 10; 
            }
            
            if(throttle >= 80)
            throttle = 80;
            
            if(DEBUG_IO)
            printf("INC throttle : %d \n", throttle);
        }
      }
      else {
        //cruise_control = off;
        REF_VELOCITY = 0;
        IOWR_ALTERA_AVALON_PIO_DATA(DE2_PIO_HEX_HIGH28_BASE,0x0000);
      }
      
      err = OSMboxPost(Mbox_Throttle, (void *) &throttle);
      
      
      if(DEBUG)
      printf("MBoxPost_Throttle done by CONTROL TASK \n");

        if(DEBUG)
        printf("SEM ACCESS CONTROL TASK\n\n");
        
        OSSemPend(Sem_ControlTask, 0, &err_sem);
         
        if(DEBUG)
        printf("Control Task in Loop\n");
         
    }
}
Example #25
0
void  App_TaskUserIF (void *p_arg)
{
  
    CPU_INT32U  *msg;
    CPU_INT08U   err;
    CPU_INT32U   key_state; 
    CPU_INT08U   ruler_id;

    (void)p_arg;    
    
    OSTimeDly(500); //wait for other tasks be ready , and time for power stable for ruler  
    Head_Info(); //Send header 
    Ruler_Power_Switch(1);
    Init_Global_Var();    
    AB_POST();
    
#ifndef BOARD_TYPE_AB01  
    APP_TRACE_INFO_T(("WARNING: NOT AB01, NO MCU CRT UART SWITCH\r\n"));
#endif
   
    while ( DEF_TRUE ) {                                          /* Task body, always written as an infinite loop.           */   
               
        msg = (CPU_INT32U *)(OSMboxPend(App_UserIF_Mbox, 0, &err)); //pending, no timeout       
        if (msg != NULL) {          
            key_state = *msg ;
            APP_TRACE_INFO(("\r\n"));             
            switch( key_state & MSG_TYPE_MASK ) {                
                case MSG_TYPE_RESET : //reset send msg                
                    //PDM_Pattern_Gen(0); //gen cp2240 pattern
                    Head_Info();                                   
                break;
                    
                case MSG_TYPE_SWITCH ://Switch                
                    APP_TRACE_INFO_T(("Switch status updated:  SW[1..0] = [%d, %d]\r\n",\
                                     (key_state>>0)&(0x01),(key_state>>1)&(0x01) )); 
                    /**********************************************************************/
                    //To do something to do with Switch selection...                    
                    // Switch 'SW0' used to control DEBUG port:
                    //         0: ON :  UART1 used as debug port
                    //         1: OFF:  DBG UART used as debug port
                    if( (key_state>>(8 + 1)) & 0x01) {  //check if SW0 switch status changed  
                        OSTaskDel( APP_CFG_TASK_SHELL_PRIO ); 
                        OSSemSet (Bsp_Ser_Tx_Sem_lock, 1,  &err) ;
                        OSSemSet (Bsp_Ser_Rx_Sem_lock, 1,  &err) ;
                        Task_ReCreate_Shell();  
                        if( ((key_state>>1)& 0x01 ) == 0 ) { //debug to UART1  
                            Debug_COM_Sel = 1 ;
                            BSP_Ser_Init(115200);  
                        } else {                             //debug to DBG_UART                      
                            Debug_COM_Sel = 0 ;               
                            UART_Init(PC_UART, ISR_PC_UART, 115200 );    //To PC  ? Sem recreat issue
                        }
                    } 
//                    // Switch 'SW1' used to control Buzzer mute:
//                    //         0: ON :  Buzzer muted
//                    //         1: OFF:  Buzzer unmuted
//                    if( (key_state>>(8 + 0)) & 0x01) {  //check if SW1 switch status changed                         
//                        if( ((key_state>>0)& 0x01 ) == 0 ) { 
//                            BUZZER_MUTE =  1;   //mute buzzer                         
//                        } else {                                                 
//                            BUZZER_MUTE =  0;   //unmute buzzer
//                        }
//                    } 
                      // Switch 'SW1' used to control CODEC LOUT PGA Gain:
                      //         0: ON :  24dB attenuated signal for Phone MIC input
                      //         1: OFF:  Normal signal for ACQUA
                      if( (key_state>>(8 + 0)) & 0x01) {  //check if SW1 switch status changed                         
                          if( ((key_state>>0)& 0x01 ) == 0 ) {                                
                              err = CODEC_LOUT_Small_Gain_En( true ) ;  //enable 24dB attenuated signal for Phone Mic                                               
                          } else {                                                 
                              err = CODEC_LOUT_Small_Gain_En( false ) ; //normal signal, no attenuation                              
                          }
                          if( OS_ERR_NONE != err ) {
                              APP_TRACE_INFO_T(("ERR: Set CODEC_LOUT_Small_Gain_En err! [%d]\r\n",err));
                          }
                      } 
                break;
                
                case MSG_TYPE_PORT_DET :   
                    if( port_enable == false ) { 
                        //APP_TRACE_INFO(("Ruler port disabled !\r\n"));
                        break; 
                    }
                    APP_TRACE_INFO_T(("Ruler port status changed:  Port[3..0] = [%1d%1d%1d%1d] ",\
                                    (key_state>>0)&(0x01),(key_state>>1)&(0x01),(key_state>>2)&(0x01),(key_state>>3)&(0x01) )); 
                    
                    for( ruler_id = 0 ; ruler_id < 4 ; ruler_id++ ) {   
                        if( (key_state>>( 8 + 3 - ruler_id)) & 0x01) {  //check if Ruler Port[0] switch status changed                            
                            if( ( (key_state>>(3 - ruler_id)) & 0x01 ) == 0 ) { // ruler attached, setup ruler                              
                                //LED_Set( LED_P0 + ruler_id );
                                APP_TRACE_INFO_T(("Ruler[%d] Attached.\r\n", ruler_id ));                            
                                Global_Ruler_State[ruler_id] = RULER_STATE_ATTACHED; 
                                err = Init_Ruler( ruler_id ); 
                                if( OS_ERR_NONE != err ) {
                                    //LED_Clear( LED_P0 + ruler_id );
                                    continue;
                                }                         
                                err = Setup_Ruler( ruler_id ); 
                                if( OS_ERR_NONE != err ) {
                                    //LED_Clear( LED_P0 + ruler_id );
                                    continue;
                                }
////                                err = Ruler_Setup_Sync(  ruler_id );
////                                if( OS_ERR_NONE != err ) {
////                                    //LED_Clear( LED_P0 + ruler_id );
////                                    continue;
////                                }                                
                                err = Get_Ruler_Type( ruler_id ); 
                                if( OS_ERR_NONE != err ) {
                                    //LED_Clear( LED_P0 + ruler_id );
                                    continue;
                                }
                                err = Get_Ruler_Version( ruler_id ); 
                                if( OS_ERR_NONE != err ) {
                                    //LED_Clear( LED_P0 + ruler_id );
                                    continue;
                                }                                  
                                err = Ruler_POST( ruler_id ); 
                                if( OS_ERR_NONE != err ) {
                                    //LED_Clear( LED_P0 + ruler_id );
                                    continue;
                                }                     
                                Global_Ruler_State[ruler_id] = RULER_STATE_CONFIGURED ;                              
//                                mic_mask = Global_Mic_Mask[ruler_id];
//                                err = Update_Mic_Mask( ruler_id, mic_mask );
//                                if( OS_ERR_NONE != err ) {                              
//                                    continue;
//                                }   
//                                if( mic_mask ) {
//                                    Global_Ruler_State[ruler_id]= RULER_STATE_SELECTED;                                   
//                                } 
                                //OSTimeDly(500);
                                //simple_test_use();//test for Dr.Yang and use USBApp0815.exe
                                                                           
                            } else { // ruler detached
                                //LED_Clear( LED_P0 + ruler_id );
                                APP_TRACE_INFO_T(("Ruler[%d] Detached.\r\n", ruler_id )); 
                                Global_Ruler_State[ruler_id] = RULER_STATE_DETACHED ;
                                Global_Ruler_Type[ruler_id]  = 0 ;
                                Global_Mic_Mask[ruler_id]    = 0 ; 
                            } 
                

                        }                              
                }                    
Example #26
0
/* 按键按下,写入EEPROM */
void Task_USART1(void *p_arg)
{
	(void)p_arg;	//'p_arg'没有用到,防止编译器警告
	while(1)
	{	
		unsigned char errkey, err;
//		u16 i;
		
//		printf("等待A8");
		/* car1经过 */
		OSSemPend(key_SEM,0,&errkey);

		//将car1数据保存至buffer并串口输出
		weight = (char*)OSMboxPend(adc_MBOX,0,&err);		
		save_in_buffer(car1,*weight);
		
		/* 读写EEPROM */	
	  	//将I2c_Buf_Write中顺序递增的数据写入EERPOM中 
		I2C_EE_BufferWrite((u8 *)sendData, EEP_Firstpage, 256);
			 
		OSTimeDlyHMSM(0,0,0,500);


		/* car2经过 */
		OSSemPend(key_SEM,0,&errkey);

		//将car1数据保存至buffer并串口输出
		weight = (char*)OSMboxPend(adc_MBOX,0,&err);		
		save_in_buffer(car2,*weight);
		
		/* 读写EEPROM */	
	  	//将I2c_Buf_Write中顺序递增的数据写入EERPOM中 
		I2C_EE_BufferWrite((u8 *)sendData, EEP_Firstpage, 256);
			 
		OSTimeDlyHMSM(0,0,0,500);

		
		/* car3经过 */
		OSSemPend(key_SEM,0,&errkey);

		//将car1数据保存至buffer并串口输出
		weight = (char*)OSMboxPend(adc_MBOX,0,&err);		
		save_in_buffer(car3,*weight);
		
		/* 读写EEPROM */	
	  	//将I2c_Buf_Write中顺序递增的数据写入EERPOM中 
		I2C_EE_BufferWrite((u8 *)sendData, EEP_Firstpage, 256);
			 
		OSTimeDlyHMSM(0,0,0,500);

//	  	printf("\n\r读出eeprom的数据\n\r");
	  	//将EEPROM读出数据顺序保持到I2c_Buf_Read中 
//		I2C_EE_BufferRead(I2c_Buf_Read, EEP_Firstpage, 256); 
	
	  	//将I2c_Buf_Read中的数据通过串口打印
//		for (i=0; i<=50; i++)
//		{	
//		    printf("%c", I2c_Buf_Read[i]);
//	    }
//		OSTimeDlyHMSM(0,0,0,500);
	}
}
Example #27
0
/**
  Function Name	: Wave_Start_Playing
  Engineer      : Gustavo Denardin
  Date          : 16/06/2011
  
  Parameters	: Nothing
  Returns       : Nothing
  Notes         : 
*/
void Wave_Start_Playing(void)
{
	WAVE_BUFFER *WaveInfo;
	INT8U		*Buff8;
	INT16S		*Buff16;
	INT16U		size = 0;
	INT8U		first = 0;
	
	//_DAC1_Enable();
	//Sound_AudioAmplifierTurnOn();	//Turn On the Audio Amplifier
	
	OSSemPost(OpenWave);	
	
	for(;;)
	{
    	(void)OSMboxPend(SendWaveBuffer,(void **)&WaveInfo,0);
  	
    	
	#if (_VOLUME_CONTROL == 1)
    	if(SetVolumeLevel == 0)	//Mute
    	{
    		//Sound_AudioAmplifierStandby();				//Standby the Audio Amplifier
    	}
    	else
    	{
    		//Sound_AudioAmplifierTurnOn();				//Turn On the Audio Amplifier
    		//Sound_VolumeControl((INT8U)SetVolumeLevel);	//Set Volume level
    	}
	#endif
    	
    	
    	if (first == 0)
    	{
    		first = 1;
    		
    		//Set sample rate: (8kHz, 11.025kHz, 44.1kHz or 48khz)
    		Wave_SetSampleRate(WaveInfo->SampleRate);

    		//Enable timer
    		Timer2Start();
    	}
    	
    	if ((WaveInfo->Size) == 0)
    	{
    		break;
    	}
    	size = WaveInfo->Size;

    	
    	if (WaveInfo->BitRate == 16)
    	{
    		Buff16 = (INT16S*)WaveInfo->Buff;
    	}
    	
    	else if (WaveInfo->BitRate == 8)
		{
			Buff8 = (INT8U*)WaveInfo->Buff;
		} 
    	   		
    	do
    	{
			OSSemPend(Audio,0);

			if (WaveInfo->BitRate == 16)
			{
				if (vol > 0)
				{
					DAConvert(((ByteSwap(*Buff16)) >> (4 + (10 - vol))) + 2048);
				}else
				{
					DAConvert(0);
				}
				Buff16++;
				if((WaveInfo->NumChannels) == 2)
				{
					Buff16++;	//Pula o  pacote do outro canal
					size--;
				}
			}
			
			else if (WaveInfo->BitRate == 8)
Example #28
0
void Task_BEEPMAN(void *pdata){
	INT8U err;
	INT32U Recv = 0;
	
	while(1){
		Recv = (INT32U)OSMboxPend(Mbox_BEEPMAN,0,&err);
		//S3C_StartPWMBuzzer();
		switch (Recv){
			case TYPE_BE_BEEP:
				S3C_SetPWMBuzzer(34464,0);	
				S3C_StartPWMBuzzer();
				break;
			case TYPE_BE_STOP:
				S3C_StopPWMBuzzer();
				break;
			case TYPE_BE_SUCCESS_IN:
				S3C_SetPWMBuzzer(190,60);
				S3C_StartPWMBuzzer();
				delay(3);
				S3C_StopPWMBuzzer();
				delay(1);
				S3C_StartPWMBuzzer();
				delay(3);
				S3C_StopPWMBuzzer();
				break;
			case TYPE_BE_SUCCESS_OUT:
				S3C_SetPWMBuzzer(270,200);	
				S3C_StartPWMBuzzer();
				delay(15);
				S3C_StopPWMBuzzer();
				break;
			case TYPE_BE_IN:
				S3C_SetPWMBuzzer(520,200);	
				S3C_StartPWMBuzzer();
				delay(15);
				S3C_SetPWMBuzzer(190,60);
				S3C_StartPWMBuzzer();
				delay(3);
				S3C_StopPWMBuzzer();
				delay(1);
				S3C_StartPWMBuzzer();
				delay(3);
				S3C_StopPWMBuzzer();
				break;
			case TYPE_BE_NOT_IN:
				S3C_SetPWMBuzzer(520,200);	
				S3C_StartPWMBuzzer();
				delay(15);
				S3C_StopPWMBuzzer();
				break;
			case TYPE_BE_SPECIAL:
				break;
			default:
				S3C_SetPWMBuzzer(390,80);
				S3C_StartPWMBuzzer();
				delay(15);
				S3C_StopPWMBuzzer();
				break;
		}
		//S3C_StopPWMBuzzer();
	}	
}
Example #29
0
/* ------------------------------------------------------------------------------------------------------
 *									   sockex_nonblocking_connect()
 *
 * Description : tests socket blocking and nonblocking connect.
 *
 * Argument(s) : none.
 *
 */
void sockex_nonblocking_connect(void *arg)
{
	int ret;
	struct sockaddr_in addr;
	fd_set readset;
	fd_set writeset;
	fd_set errset;
	struct timeval tv;
	
	LWIP_UNUSED_ARG(arg);

	memset(&addr, 0, sizeof(addr));									/* set up address to connect to */
	addr.sin_len = sizeof(addr);
	addr.sin_family = AF_INET;
	addr.sin_port = PP_HTONS(SOCK_TARGET_PORT);
	addr.sin_addr.s_addr = inet_addr(SOCK_TARGET_HOST);
	
	socket_state = SOCKET_NEW;
	
	for(;;)
	{
		if(g_bNetStatus == NETS_LOCIP)								/* IP is setted.*/
		{
			switch(socket_state)
			{
				case SOCKET_NEW:
				{
					s = lwip_socket(AF_INET, SOCK_STREAM, 0);
					
					socket_state = SOCKET_CON;
					break;
				}

				case SOCKET_CON:
				{
					unsigned int ip;
					ret = lwip_connect(s, (struct sockaddr*)&addr, sizeof(addr));
					
					LWIP_ASSERT("ret == 0", ret == 0);
					if(ret < 0)
					{
						lwip_close(s);
						socket_state = SOCKET_NEW;
						OSTimeDly(2);
						RS232printf("socket connect failed.\n");
						break;
					}
					ip = lwIPLocalIPAddrGet();
					NetDisplayIPAddress(ip);						/* Socket updata IP address.*/
					socket_state = SOCKET_IDIE;
				}
				
				case SOCKET_IDIE:
				{
					INT8U *msg;
					INT8U err;
					
					msg = (INT8U *)OSMboxPend(NET_RfMbox, 0, &err);	/* Waiting socket writing data.*/			
					
					if(err != OS_ERR_NONE)
						break;
					
					ret = lwip_write(s, msg, 6);				
					if(ret < 0)
					{
						lwip_close(s);
						socket_state = SOCKET_CON;	
					}
				}
				break;
				
				case SOCKET_CHECK:
					// TODO: Check socket connecting.
				
					FD_ZERO(&readset);
					FD_SET(s, &readset);
					FD_ZERO(&writeset);
					FD_SET(s, &writeset);
					FD_ZERO(&errset);
					FD_SET(s, &errset);
				
					tv.tv_sec = 3;
					tv.tv_usec = 0;									/* Set time out 3s, 函数立即返回*/
					ret = lwip_select(s+1, &readset, &writeset, &errset, &tv);
					
					if(ret == 0)
					{
						RS232printf("socket check timeout.\n");
						lwip_close(s);
						socket_state = SOCKET_CON;					/* Reconnect socket.*/
					}
					
					if(FD_ISSET(s, &writeset) == 0)					/* If socket couldn't write.*/
					{
						RS232printf("socket write test error.\n");
						lwip_close(s);
						socket_state = SOCKET_CON;					/* Reconnect socket.*/
					}
					
					ret = lwip_write(s, "test", 6);
					if(ret < 0)
					{
						lwip_close(s);
						socket_state = SOCKET_CON;	
					}
					OSTimeDly(2000);
					break;
				
				default:
					break;
			}
		}
		OSTimeDly(2);
	}
}
Example #30
0
void TaskAuto (void *pdata)
{
	//static struct Pointfp64 position;
	//static fp64 angle;
	
	uint8 err;
	uint8 *msg;
	pdata=pdata;
	 	 
	for(;;)
	{
		msg = OSMboxPend(AutoMbox,0,&err);
		switch (msg[0])
		{
			case 1:
					LCD_Clear();
					GPS_Clear(); 
					RouteForm=RouteStop;
					
					PID_Clear();
					GoRoute1();

    		case 2:  				
										
    				PID_Clear(); 							
	  				GoRoute2();
	  		        break;
	  		
    		case 3:
    								
    				PID_Clear(); 							
	  				GoRoute3();
	  				
    		case 4:  
    				 
    				PID_Clear();
    				GoRoute4();

    		case 5:  
 
    				PID_Clear();    				 
    				GoRoute5();

    		case 6:    			 
		 		rGPJDAT&=~0x1000;    //¹Ø·äÃùÆ÷
				LCD_Clear();
				PID_Clear();    				
				//GoRoute6();
				Route_Num=6;
				SetKeep(PointRoute[Route[6]].position,0.0);
				while(RouteFinish) 
				{
					if(((Fp64Abs(Aim_Angle-Gps_List[0].angle)<1)&&
						(Getlength(AimPoint,Gps_List[0].position)<10))||(Route_Num==7))
					{
						RouteFinish=0;
						RouteForm=RouteStop;
						LCD_SetXY(0,2);
						LCD_WriteString("route6 done");
					}
					OSTimeDly(1);
				}
    		break;
    		
    		case 7:    			 
    				 GPS_Init(PointRoute[Route[6]].position,0.0);
    				 LCD_Clear();
    				 PID_Clear();

    				 GoRoute7();
    		break;
    		
    		case 8:    			 
    				 GPS_Init(PointRoute[Route[7]+1].position,Gps_List[0].angle);
    				 LCD_Clear();
    				 PID_Clear();
    				 GoRoute8();
    				 Shootest();
    		break; 
    		
    		default:;
    		break;
    	}
    	OSTimeDly(1);
    	
    }
    
}