void GUI_X_WaitEvent (void) { INT8U err; (void)OSMboxPend(EventMbox, 0, &err); }
/***************************************************************************** ** 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; }
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); } } } }
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(); } } }
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是要查询的从机号
/************************************************************ * 函数名: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(); } } } } }
int getCurrentFingerprintId(bool enrollNow) { INT8U err; int *fid; err = OSSemPost(fingerprintSem); m_enrollNow = enrollNow; fid = (int*) OSMboxPend(fingerprintMailbox, 0, &err); return *fid; }
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); } }
//邮箱接收函数任务 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); } }
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."); } }
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) { } } }
/*********************************************************************//** * @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); } } } }
/* ******************************************************************************* ** ** 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 ); }
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; }
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 } }
/* ******************************************************************************* ** ** 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 ); }
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); } }
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); } }
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; } } }
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); } }
//++++++++++++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"); } }
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 ; } } }
/* 按键按下,写入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); } }
/** 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)
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(); } }
/* ------------------------------------------------------------------------------------------------------ * 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); } }
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); } }