/*************命令处理函数***********************/ void deal_action(char *cmd) { rt_kprintf("处理动作指令:%s\n",cmd); if(strcmp(cmd,"remot")==0) { rt_kprintf("发送接收红外邮件\n"); rt_mb_send(&dfs_mb,(rt_uint32_t)act1);//发送邮件 } else if(strcmp(cmd,"serem")==0) { rt_kprintf("发送发射红外邮件\n"); rt_mb_send(&dfs_mb,(rt_uint32_t)act2); } else if(strcmp(cmd,"wakup")==0) { rt_kprintf("接收到命令,系统进入唤醒\n"); sys_wake=1; sys_wake_count=0; } else if(strcmp(cmd,"sleep")==0) { sys_wake=0; sys_wake_count=0; rt_kprintf("接收到命令,系统进入睡眠\n"); } else return ; }
/* 线程2入口 */ static void thread2_entry(void* parameter) { rt_uint8_t count; count = 0; while (count < 10) { count ++; if (count & 0x1) { /* 发送mb_str1地址到邮箱中 */ rt_mb_send(&mb, (rt_uint32_t)&mb_str1[0]); } else { /* 发送mb_str2地址到邮箱中 */ rt_mb_send(&mb, (rt_uint32_t)&mb_str2[0]); } /* 延时20个OS Tick */ rt_thread_delay(20); } /* 发送邮件告诉线程1,线程2已经运行结束 */ rt_mb_send(&mb, (rt_uint32_t)&mb_str3[0]); }
err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) { if (rt_mb_send(*mbox, (rt_uint32_t)msg) == RT_EOK) return ERR_OK; return ERR_MEM; }
static err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p) { #ifndef LWIP_NO_TX_THREAD struct eth_tx_msg msg; struct eth_device* enetif; RT_ASSERT(netif != RT_NULL); enetif = (struct eth_device*)netif->state; /* send a message to eth tx thread */ msg.netif = netif; msg.buf = p; if (rt_mb_send(ð_tx_thread_mb, (rt_uint32_t) &msg) == RT_EOK) { /* waiting for ack */ rt_sem_take(&(enetif->tx_ack), RT_WAITING_FOREVER); } #else struct eth_device* enetif; RT_ASSERT(netif != RT_NULL); enetif = (struct eth_device*)netif->state; if (enetif->eth_tx(&(enetif->parent), p) != RT_EOK) { return ERR_IF; } #endif return ERR_OK; }
static void resp_handler(struct spi_wifi_eth *wifi_device, struct spi_wifi_resp *resp) { struct spi_wifi_resp *resp_return; switch (resp->cmd) { case SPI_WIFI_CMD_INIT: WIFI_DEBUG("resp_handler SPI_WIFI_CMD_INIT\n"); resp_return = (struct spi_wifi_resp *)rt_malloc(sizeof(struct spi_wifi_resp)); //TODO: memcpy(resp_return, resp, 10); rt_mb_send(&wifi_device->spi_wifi_cmd_mb, (rt_uint32_t)resp_return); break; case SPI_WIFI_CMD_SCAN: WIFI_DEBUG("resp_handler SPI_WIFI_CMD_SCAN\n"); break; case SPI_WIFI_CMD_JOIN: WIFI_DEBUG("resp_handler SPI_WIFI_CMD_JOIN\n"); wifi_device->active = 1; eth_device_linkchange(&wifi_device->parent, RT_TRUE); break; default: WIFI_DEBUG("resp_handler %d\n", resp->cmd); break; } }
static void led1_thread_entry(void* parameter) { /*在LED1线程中初始化LED的GPIO配置*/ LED_GPIO_Config(); while(1) { //rt_kprintf ( "\r\n LED1 is going!!!\r\n"); LED1(ON);//点亮LED1 rt_thread_delay(100);//调用RTT的API将当前线程挂起200ticks,也就是1sec LED1(OFF);//关闭LED1 rt_thread_delay(100); if(bMp3Play == 0) sys_wake_count++; if(sys_wake_count==sys_default_count) { sys_wake_count=0; if(sys_wake) { sys_wake=0; rt_kprintf("系统进入休眠状态,如需使用请唤醒!\r\n"); rt_mb_send(&mb,(rt_uint32_t)sys_down_mp3);//发送邮件 } } } }
Int32 eth_device_ready(struct eth_device* dev) { if (dev->netif) /* post message to Ethernet thread */ return rt_mb_send(ð_rx_thread_mb, (UInt32)dev); else return ERR_OK; /* netif is not initialized yet, just return. */ }
rt_err_t rtgui_ack(rtgui_event_t *event, rt_int32_t status) { RT_ASSERT(event != RT_NULL); RT_ASSERT(event->ack != RT_NULL); rt_mb_send(event->ack, status); return RT_EOK; }
void LED2_control(char *cmd,char state) { if(state) LED2(ON);//非0表示LED2开启 else LED2(OFF); rt_kprintf("LD2控制线程发送邮件:%s",cmd); rt_mb_send(&dfs_mb,(rt_uint32_t)cmd);//发送邮件 }
rt_err_t rtgui_thread_ack(rtgui_event_t* event, rt_int32_t status) { if (event != RT_NULL && event->ack != RT_NULL) { rt_mb_send(event->ack, status); } return RT_EOK; }
err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg) { #if SYS_DEBUG { struct rt_thread *thread; thread = rt_thread_self(); LWIP_DEBUGF(SYS_DEBUG, ("%s, Post mail: %s ,0x%x\n",thread->name, mbox->parent.parent.name, (rt_uint32_t)msg)); } #endif if (rt_mb_send(mbox, (rt_uint32_t)msg) == RT_EOK) return ERR_OK; return ERR_MEM; }
void sys_mbox_post(sys_mbox_t mbox, void *msg) { #if SYS_DEBUG { struct rt_thread *thread; thread = rt_thread_self(); LWIP_DEBUGF(SYS_DEBUG, ("%s, Post mail: %s ,0x%x\n",thread->name, mbox->parent.parent.name, (rt_uint32_t)msg)); } #endif rt_mb_send(mbox, (rt_uint32_t)msg); return; }
rt_err_t eth_device_linkchange(struct eth_device* dev, rt_bool_t up) { rt_uint32_t level; RT_ASSERT(dev != RT_NULL); level = rt_hw_interrupt_disable(); dev->link_changed = 0x01; if (up == RT_TRUE) dev->link_status = 0x01; else dev->link_status = 0x00; rt_hw_interrupt_enable(level); /* post message to ethernet thread */ return rt_mb_send(ð_rx_thread_mb, (rt_uint32_t)dev); }
Int32 eth_device_linkchange(struct eth_device* dev, rt_bool_t up) { UInt32 level; assert(dev != NULL); level = rt_hw_interrupt_disable(); dev->link_changed = 0x01; if (up == RT_TRUE) dev->link_status = 0x01; else dev->link_status = 0x00; rt_hw_interrupt_enable(level); /* post message to ethernet thread */ return rt_mb_send(ð_rx_thread_mb, (UInt32)dev); }
err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p) { struct eth_tx_msg msg; struct eth_device* enetif; enetif = (struct eth_device*)netif->state; /* send a message to eth tx thread */ msg.netif = netif; msg.buf = p; if (rt_mb_send(ð_tx_thread_mb, (rt_uint32_t) &msg) == RT_EOK) { /* waiting for ack */ rt_sem_take(&(enetif->tx_ack), RT_WAITING_FOREVER); } return ERR_OK; }
void mmcsd_change(struct rt_mmcsd_host *host) { rt_mb_send(&mmcsd_detect_mb, (rt_uint32_t)host); }
static void msg( void *plcdmsg ) { LCD_MSG * plcd_msg = (LCD_MSG* )plcdmsg; char ch,buf[100]; uint32_t i; void *pmsg; if( plcd_msg->id == LCD_MSG_ID_GPS ) { if( ( gps_fixed_sec == 0 ) && ( plcd_msg->info.gps_rmc.gps_av == 'A' ) ) { gps_fixed_sec = rt_tick_get( ) * 10 / 1000; test_flag|=TEST_BIT_GPS; sprintf( buf, "%02d:%02d", gps_fixed_sec / 60, gps_fixed_sec % 60 ); lcd_asc0608( 0, 8, buf, LCD_MODE_SET ); i=sprintf(buf,"AT%%TTS=2,3,5,\"475053D2D1B6A8CEBB\"\r\n",ch+0x30); buf[i]=0; pmsg=rt_malloc(i+1); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i+1); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } year=plcd_msg->info.gps_rmc.year; month=plcd_msg->info.gps_rmc.month; day= plcd_msg->info.gps_rmc.day; hour= plcd_msg->info.gps_rmc.hour; minute= plcd_msg->info.gps_rmc.minitue; sec= plcd_msg->info.gps_rmc.sec; time_set(hour,minute,sec); date_set(year,month,day); sprintf( buf, "%c%02d-%02d %02d:%02d:%02d", plcd_msg->info.gps_rmc.gps_av,month,day,hour,minute,sec ); lcd_asc0608( 122 - 6 * 15, 8, buf, LCD_MODE_SET ); } if( plcd_msg->id == LCD_MSG_ID_GSM ) { if( plcd_msg->info.payload[0] == 1 ) /*通话*/ { rt_kprintf( "\r\nIncoming Call" ); pscr = &scr_2_call; pscr->show( &scr_1_idle ); } } if(plcd_msg->id == LCD_MSG_ID_GPRS) { gprs_ok_past_sec=rt_tick_get()/100; test_flag|=TEST_BIT_GPRS; } if(plcd_msg->id == LCD_MSG_ID_MEMS) { mems_status=plcd_msg->info.payload[0]; } if(plcd_msg->id == LCD_MSG_ID_CAM) { ch=plcd_msg->info.payload[0]; switch(ch) { case 1: test_flag|=TEST_BIT_CAM1; break; case 2: test_flag|=TEST_BIT_CAM2; break; case 3: test_flag|=TEST_BIT_CAM3; break; case 4: test_flag|=TEST_BIT_CAM4; break; } if(plcd_msg->info.payload[1]==SUCCESS) { i=sprintf(buf,"AT%%TTS=2,3,5,\"C5C4D5D5%02xD5FDB3A3\"\r\n",ch+0x30); cam_ch[ch-1]=0x30+ch; lcd_asc0608( 122 - 6*8-4, 24, cam_ch, LCD_MODE_SET ); } else { i=sprintf(buf,"AT%%TTS=2,3,5,\"C5C4D5D5%02xD2ECB3A3\"\r\n",ch+0x30); } buf[i]=0; pmsg=rt_malloc(i+1); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i+1); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } if(plcd_msg->id == LCD_MSG_ID_ICCARD) { iccard_beep_timeout=10; card_status=plcd_msg->info.payload[0]; if(card_status==IC_PLUG_OUT) { i=sprintf(buf,"AT%%TTS=2,3,5,\"4943BFA8B0CEB3F6\"\r\n\0");/*IC卡拔出*/ pmsg=rt_malloc(i); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } if(card_status==IC_READ_OK) { i=sprintf(buf,"AT%%TTS=2,3,5,\"4943BFA8D5FDB3A3\"\r\n\0"); /*IC卡正常*/ pmsg=rt_malloc(i); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } if(card_status==IC_READ_ERR) { i=sprintf(buf,"AT%%TTS=2,3,5,\"4943BFA8B4EDCEF3\"\r\n\0"); /*IC卡错误*/ pmsg=rt_malloc(i); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } test_flag|=TEST_BIT_ICCARD; } if(plcd_msg->id == LCD_MSG_ID_RTC) { memset(buf,0,32); if(plcd_msg->info.payload[0]==SUCCESS) { i=sprintf(buf,"AT%%TTS=2,3,5,\"525443D5FDB3A3\"\r\n",ch+0x30); test_flag|=TEST_BIT_RTC; rtc_ok=1; } else { i=sprintf(buf,"AT%%TTS=2,3,5,\"525443D2ECB3A3\"\r\n",ch+0x30); } rt_kprintf("\r\nRTC len=%d\r\n",i); buf[i]=0; pmsg=rt_malloc(i+1); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i+1); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } if(plcd_msg->id == LCD_MSG_ID_CSQ) { gsm_csq=plcd_msg->info.payload[0]; rt_kprintf("\r\ncsq=%d",gsm_csq); } if(test_flag==TEST_BIT_ALL) { i=sprintf(buf,"AT%%TTS=2,3,5,\"B2E2CAD4CDEAB3C9\"\r\n"); buf[i]=0; pmsg=rt_malloc(i+1); if(pmsg!=RT_NULL) { memcpy(pmsg,buf,i+1); rt_mb_send(&mb_tts,(rt_uint32_t)pmsg); } } showinfo(); }
static void led3_thread_entry(void* parameter) { rt_kprintf ( "\r\n led3_thread_entry!!\r\n"); irmp_init(); // initialize irmp irsnd_init(); timer2_init(); // initialize timer2 rt_kprintf ( "\r\n 红外收发系统初始化完成!\r\n"); for (;;) { char *str; // rt_kprintf ( "IRMP is going!!!\r\n"); rt_thread_delay(1); if(RT_EOK== (rt_mb_recv(&dfs_mb,(rt_uint32_t*)&str,RT_WAITING_NO))) {rt_kprintf("接收到控制邮件,数据为 %s",str); // TIM_Cmd(TIM2, ENABLE); if(strcmp(str,"getremote")==0) hot_remote_state=1; if(strcmp(str,"sendremote")==0) hot_remote_send=1; } if (irmp_get_data (&irmp_data)) { rt_kprintf("接收红外信号编码方式: %s",irmp_protocol_names[irmp_data.protocol]); rt_kprintf(" 编码地址: 0x%2X",irmp_data.address); rt_kprintf(" 命令: 0x%2X",irmp_data.command); rt_kprintf(" 标志位: 0x%2X\r\n",irmp_data.flags ); if(1==hot_remote_state) { hot_remote_state=2; irmp_data1=irmp_data; rt_mb_send(&mb,(rt_uint32_t)get_remot1_mp3);//发送邮件 rt_kprintf("红外接收完成第一次\n" ); } else if(2==hot_remote_state) { if(irmp_data1.command==irmp_data.command) { rt_kprintf("红外接收完成第二次,验证通过\n" ); rt_mb_send(&mb,(rt_uint32_t)get_remot2_mp3);//发送邮件 hot_remote_state=0; // TIM_Cmd(TIM2, DISABLE); } else { rt_kprintf("红外接收完成第二次,验证不通过,再次接收红外数据\n" ); rt_mb_send(&mb,(rt_uint32_t)check_fail_mp3);//发送邮件 hot_remote_state=1; } } } if(hot_remote_send) { hot_remote_send=0; // TIM_Cmd(TIM2, ENABLE); /* irmp_data.protocol = IRMP_SAMSUNG32_PROTOCOL; // use NEC protocol irmp_data.address = 0x0e0e; // set address to 0x00FF irmp_data.command = 0xf30c; // set command to 0x0001 irmp_data.flags = 0; // don't repeat frame*/ irsnd_send_data (&irmp_data, TRUE); // send frame, wait for completion // don't repeat frame rt_mb_send(&mb,(rt_uint32_t)sen_remot_mp3); rt_kprintf("发送红外数据完成\n"); rt_kprintf("发射红外信号编码方式: %s",irmp_protocol_names[irmp_data.protocol]); rt_kprintf(" 编码地址: 0x%2X",irmp_data.address); rt_kprintf(" 命令: 0x%2X",irmp_data.command); rt_kprintf(" 标志位: 0x%2X\r\n",irmp_data.flags ); // TIM_Cmd(TIM2, DISABLE); } } }
/* * 函数名: rt_thread_entry_handle * 描 述: 手柄线程的入口函数 * 输 入: 无 * 输 出: 无 * 调 用: 内部调用 * 说 明: */ static void rt_thread_entry_handle(void* parameter) { double Handle_Speed_X; double Handle_Speed_Y; double Handle_Speed_Rotation; struct Point temp_point; struct Point now_point; u32 temp,temp2; u8 delay_flag = 1; u8 hall_flag = 0; u8 time_flag = 1,time_flag2 = 1; u8 handleoff_flag = 1,handleoff_flag2 = 1; u8 flag[6] = {0}; //对应电机的运行状态 int16_t Speed_M = 500; float pos_openfan = 4; extern float Motor2_Aim_Pos[]; extern u8 Motor2_Time_Flag; u8 x_con_flag = 0; //X方向闭环 u8 XY_Only = 0; Handle_Speed_X = 0; Handle_Speed_Y = 0; HandleData_X.lr= 12288; HandleData_Y.lr= 12288; TIM2->CNT = 0; while(1) { temp = *handle_count; temp2 = *handle_count2; while(*handle_count == temp) { time_flag++; Delay_ms(5); if(time_flag > 60)//超时 { time_flag = 0; handle_timeout_flag = 1; if(handleoff_flag) { Handle_Off_Count++; handleoff_flag = 0; } break; } } while(*handle_count2 == temp2) { time_flag2++; Delay_ms(5); if(time_flag2 > 60)//超时 { time_flag2 = 0; handle_timeout_flag2 = 1; if(handleoff_flag2) { Handle_Off_Count2++; handleoff_flag2 = 0; } break; } } if(time_flag||time_flag2)//手柄工作正常 { time_flag = 1; time_flag2 = 1; handle_timeout_flag = 0; handle_timeout_flag2 = 0; handleoff_flag = 1; handleoff_flag2 = 1; Handle_Speed_X = HandleData_X.lr-12288; Handle_Speed_Y = HandleData_Y.lr-12288; Handle_Speed_Rotation = 0; //Handle_Speed_Y = HandleData_Y.ud-12288; //Handle_Speed_Rotation = (HandleData_X.turn-12288)/10.0; if(Button10_On && Button7_Off) { Handle_Speed_X /= 10.0; Handle_Speed_Y /= 10.0; Handle_Speed_Rotation /= 10.0; Speed_M = 150; } else Speed_M = 500; if(Button9_On) { // HandoverFlag[0]=1; // HandoverFlag[1]=1; // HandoverFlag[2]=0; // PoleFlag = 1; // SwingFlag = 1; } if(Button9_Off) { // HandoverFlag[0]=0; // HandoverFlag[1]=0; // HandoverFlag[2]=0; // PoleFlag = 0; // SwingFlag = 0; } if(XY_Only) { // Handle_Speed_X=0; Handle_Speed_Rotation=0; } if(GROUND==RED_GROUND) { Handle_Speed_X = -Handle_Speed_X; Handle_Speed_Y = -Handle_Speed_Y; } if(x_con_flag) { temp_point.x = GPS.position.x + Handle_Speed_X*cos(GPS.radian); temp_point.y = GPS.position.y + Handle_Speed_X*sin(GPS.radian); SetSpeed(Speed_X,Speed_Y+Handle_Speed_Y,Speed_Rotation+Handle_Speed_Rotation); EasyLine(temp_point,GPS.radian,Abs(Handle_Speed_X)); } else SetSpeed(Speed_X+Handle_Speed_X,Speed_Y+Handle_Speed_Y,Speed_Rotation+Handle_Speed_Rotation); //SetSpeed(Speed_X,Speed_Y,Speed_Rotation+Handle_Speed_Rotation); //手柄前后出现问题,先无视之。。。 /*********************************上层动作控制***********************************/ //------------单键控制电机------------// if(Button1_Up && Button7_Off && flag[1]==0) { flag[1]=1; Moto_Set_GSpeed(W_MOTOR1_OLD_ID, 4*Speed_M); } if(Button1_Down && Button7_Off && flag[1]==0) { flag[1]=1; Moto_Set_GSpeed(W_MOTOR1_OLD_ID, -4*Speed_M); } if(Button1_Off && (flag[1]==1)) { flag[1]=0; Moto_Stop(W_MOTOR1_OLD_ID); } if(Button2_Up && Button7_Off && flag[2]==0) { flag[2]=1; Moto_Set_GSpeed(W_MOTOR2_OLD_ID, -3*Speed_M); } if(Button2_Down && Button7_Off && flag[2]==0) { flag[2]=1; Moto_Set_GSpeed(W_MOTOR2_OLD_ID, 3*Speed_M); } if(Button2_Off && (flag[2]==1)) { Moto_Stop(W_MOTOR2_OLD_ID); flag[2]=0; } if(Button3_Up && Button7_Off && flag[3]==0) { flag[3]=1; Moto_Set_GSpeed(W_MOTOR3_OLD_ID, -30*Speed_M); } if(Button3_Down && Button7_Off && flag[3]==0) { flag[3]=1; Moto_Set_GSpeed(W_MOTOR3_OLD_ID, 30*Speed_M); } if(Button3_Off && (flag[3]==1)) { flag[3]=0; Moto_Stop(W_MOTOR3_OLD_ID); } //------------涵道------------// if(Button4_Up && Button7_Off && Button10_Off) { Fan_Duty(L_CH,60.0); Fan_Duty(R_CH,60.0); } if(Button4_Down && Button7_Off && Button10_Off) { Fan_Stop(); } //------------霍尔------------// if(Button5_Up && Button7_Off && Button10_Off && hall_flag == 0) { hall_flag = 1; if(Hall_Count > 6) Hall_Count=1; Hall_Send(Hall_Count); } if(Button5_Down && Button7_Off && Button10_Off && hall_flag == 0) { hall_flag = 1; if(Hall_Count > 1) Hall_Count -= 2; Hall_Send(Hall_Count); } if(Button5_Off && hall_flag == 1) { hall_flag = 0; } //------------双键组合用来控制电磁阀,7键为第二功能键------------// if(Button6_Up && Button7_Off && Button10_Off){ HandPush(); } if(Button6_Down && Button7_Off && Button10_Off){ HandPushOff(); } //缓冲装置 if(Button1_Up && Button7_On && Button10_Off){ BufferOn(); } if(Button1_Down && Button7_On && Button10_Off){ BufferOff(); } //旋转调姿 if(Button2_Up && Button7_On && Button10_Off){ HandTurnRight(); } if(Button2_Down && Button7_On && Button10_Off){ HandTurnLeft(); } //俯仰调姿 if(Button3_Up && Button7_On && Button10_Off){ HandRaise(); } if(Button3_Down && Button7_On && Button10_Off){ HandFall(); } //放置大炮 if(Button4_Up && Button7_On && Button10_Off){ GunOn(); } if(Button4_Down && Button7_On && Button10_Off){ GunOff(); } //开炮 if(Button5_Up && Button7_On && Button10_Off){ FireOn(); } if(Button5_Down && Button7_On && Button10_Off){ FireOff(); } //交接爪 if(Button6_Up && Button7_On && Button10_Off){ HandOpen(); } if(Button6_Down && Button7_On && Button10_Off){ HandClose(); } //------------双键组合用来控制上下电机的位置,10键为第二功能键------------// if(Button4_Up && Button7_Off && Button10_On){ Moto_Set_GPos(W_MOTOR2_OLD_ID,Motor2_Aim_Pos[0]); } if(Button4_Down && Button7_Off && Button10_On){ Moto_Set_GPos(W_MOTOR2_OLD_ID,Motor2_Aim_Pos[2]); } if(Button5_Up && Button7_Off && Button10_On){ Moto_Set_GPos(W_MOTOR2_OLD_ID,Motor2_Aim_Pos[4]); } if(Button5_Down && Button7_Off && Button10_On){ Moto_Set_GPos(W_MOTOR2_OLD_ID,Motor2_Aim_Pos[6]); } if(Button6_Up && Button7_Off && Button10_On){ HandUD(0,NO); Delay_ms(500); HandClose();//关爪子 HandFB(0,NO,3500); FireOn();//开炮 Delay_ms(100); now_point.x = GPS.position.x-700*cos(GPS.radian); now_point.y = GPS.position.y-700*sin(GPS.radian); SetLine(now_point,GPS.radian,100,1200,0); while(1) { GoLine(); SetSpeed(Speed_X+Handle_Speed_X,Speed_Y+Handle_Speed_Y,Speed_Rotation+Handle_Speed_Rotation); if(delay_flag) delay_flag++; if(delay_flag>100) { delay_flag = 0; FireOff(); } if(GetLength(GPS.position,now_point) < 10) { SPEED_STOP; break; } Delay_ms(5); } delay_flag = 1; FireClear(); Delay_ms(50); BufferOn();//打开缓冲装置 Delay_ms(500); BufferOff();//重新复位缓冲装置 } if(Button6_Down && Button7_Off && Button10_On){ now_point.x = GPS.position.x+680*cos(GPS.radian); now_point.y = GPS.position.y+680*sin(GPS.radian); SetLine(now_point,GPS.radian,300,1200,0); HandFB(Motor1_Aim_Pos[4],NO,3500);//抓取自动机器人 while(1) { GoLine(); SetSpeed(Speed_X+Handle_Speed_X,Speed_Y+Handle_Speed_Y,Speed_Rotation+Handle_Speed_Rotation); if(GetLength(GPS.position,now_point) < 10) { SPEED_STOP; break; } Delay_ms(5); } SetSpeed(Speed_X,Speed_Y,Speed_Rotation); HandUD(0.5,NO); HandOpen();//松开爪子 Delay_ms(300); FireOff(); BufferOn();//打开缓冲装置 } //三键组合用来重复任务 if(Button1_Up && Button7_On && Button10_On){ Retry = 1; RouteFinish=0; Hall_Send(1);//翘翘板初始化 rt_mb_send(&Mb_Emergency, 7); rt_mb_send (&Mb_Arm, 1); } if(Button2_Up && Button7_On && Button10_On){ Retry = 1; RouteFinish=0; Hall_Send(2);//梅花桩初始化 rt_mb_send(&Mb_Emergency, 7); rt_mb_send (&Mb_Arm, 4); } if(Button3_Up && Button7_On && Button10_On){ Retry = 1; RouteFinish=0; Hall_Send(4);//秋千初始化 rt_mb_send(&Mb_Emergency, 7); rt_mb_send (&Mb_Arm, 6); } if(Button4_Up && Button7_On && Button10_On){ Retry = 1; RouteFinish=0; Hall_Send(6);//楼梯初始化 rt_mb_send(&Mb_Emergency, 7); rt_mb_send (&Mb_Arm, 7); } if(Button5_Up && Button7_On && Button10_On){ rt_mb_send(&Mb_Emergency, 6); } if(Button6_Up && Button7_On && Button10_On){ Retry = 1; RouteFinish=0; rt_mb_send(&Mb_Emergency, 7); //Motor_Init(); FireOff(); BufferOn(); ChooseGround_Pole(GROUND); W_MOTOR_OLD_FUNC(W_MOTOR1_OLD_ID, 0.5 , 1000 , CMD_SET_PSG); Moto_Set_GPos(W_MOTOR2_OLD_ID,2.55); LCD_Clear(); LCD_SetXY(0,1); LCD_Printf("Ready to go!"); Wait_Button8_Change(); rt_mb_send (&Mb_Auto, 1); } } else { SPEED_STOP; //Acc_Limit_Enable = 0; SetSpeed(0,0,0); //Acc_Limit_Enable = 1; Moto_Stop(W_MOTOR1_OLD_ID); Moto_Stop(W_MOTOR2_OLD_ID); //Moto_Stop(W_MOTOR3_OLD_ID); //Com_Printf(5,"v0\r"); } if(Abs(Motor_Pos[0])>pos_openfan && CHILD_ON && !fan_flag) { fan_flag = 1; Fan_Duty(L_CH,60.0); Fan_Duty(R_CH,60.0); } if((Abs(Motor_Pos[0])<pos_openfan || CHILD_OFF) && fan_flag) { fan_flag = 0; Fan_Stop(); } if(Motor2_Time_Flag>10) { //W_MOTOR_OLD_FUNC(W_MOTOR2_OLD_ID, 0 , 0 , CMD_INIT_CAN); Motor2_Time_Flag = 0; } Delay_ms(10); } }
rt_err_t eth_device_ready(struct eth_device* dev) { /* post message to ethernet thread */ return rt_mb_send(ð_rx_thread_mb, (rt_uint32_t)dev); }
/*********************************************************** * Function: gsmrx_cb * Description: gsm收到信息的处理 * Input: char *s 信息 uint16_t len 长度 * Output: * Return: * Others: ***********************************************************/ static void gsmrx_cb( uint8_t *pInfo, uint16_t len ) { static LCD_MSG lcd_msg; int i, count, newlen; uint8_t tbl[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; char c, *pmsg; uint8_t *psrc, *pdst; int32_t infolen, link; /*网络侧的信息,直接通知上层软件*/ if( fgsm_rawdata_out ) { rt_kprintf( "\r\n%08d gsm_rx>%s\r\n", rt_tick_get( ), pInfo ); fgsm_rawdata_out--; } /* 会返回诸如<0d><0a>OK<0d><0a>之类的数据 去掉前面不必要的0d0a 和空格等不可见字符 */ count = 0; while( ( *( pInfo + count ) < 0x21 ) && ( count < len ) ) { count++; } psrc = pInfo + count; newlen = len - count; if( strncmp( psrc, "%IPDATA:", 7 ) == 0 ) { /*解析出净信息,编译器会优化掉pdst*/ i = sscanf( psrc, "%%IPDATA:%d,%d,%s", &link, &infolen, pdst ); if( i != 3 ) { return; } if( infolen < 11 ) { return; } if( *pdst != '"' ) { return; } psrc = pdst; pmsg = pdst + 1; /*指向下一个位置*/ for( i = 0; i < infolen; i++ ) { c = tbl[*pmsg++ - '0'] << 4; c |= tbl[*pmsg++ - '0']; *pdst++ = c; } //gprs_rx( link, psrc, infolen ); return; } /*有呼叫进来*/ if( strncmp( psrc, "RING", 4 ) == 0 ) { lcd_msg.id = LCD_MSG_ID_GSM; lcd_msg.info.payload[0] = 1; /*接通*/ pscr->msg( (void*)&lcd_msg ); } if( strncmp( psrc, "NOCARRIER", 9 ) == 0 ) { lcd_msg.id = LCD_MSG_ID_GSM; lcd_msg.info.payload[0] = 2; /*挂断*/ pscr->msg( (void*)&lcd_msg ); } if( strncmp( psrc, "%TTS: 0", 7 ) == 0 ) { tts_playing = 0; } /*直接发送到Mailbox中*/ pmsg = rt_malloc( len ); if( pmsg != RT_NULL ) { *pmsg = len >> 8; *( pmsg + 1 ) = len & 0xff; memcpy( pmsg + 2, pInfo, len ); rt_mb_send( &mb_gsmrx, (rt_uint32_t)pmsg ); }
Int32 eth_device_ready(struct eth_device* dev) { /* post message to ethernet thread */ return rt_mb_send(ð_rx_thread_mb, (UInt32)dev); }
/*********************************************************** * Function: gsmrx_cb * Description: gsm收到信息的处理 * Input: char *s 信息 uint16_t len 长度 * Output: * Return: * Others: ***********************************************************/ static void gsmrx_cb( char *pInfo, uint16_t size ) { int i, count, len = size; uint8_t tbl[24] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; char c, *pmsg; char *psrc = RT_NULL, *pdst = RT_NULL; int32_t infolen, linkno; /*网络侧的信息,直接通知上层软件*/ if( fgsm_rawdata_out ) { rt_kprintf( "\r\n%08d gsm<%s\r\n", rt_tick_get( ), pInfo ); fgsm_rawdata_out--; } /*判读并处理*/ psrc = pInfo; pdst = pInfo; if( strncmp( psrc, "%IPDATA:", 7 ) == 0 ) { /*解析出净信息,编译器会优化掉pdst*/ i = sscanf( psrc, "%%IPDATA:%d,%d,%s", &linkno, &infolen, pdst ); if( i != 3 ) { return; } if( infolen < 11 ) { return; } if( *pdst != '"' ) { return; } psrc = pdst; /*指向""内容*/ pmsg = pdst + 1; /*指向下一个位置*/ for( i = 0; i < infolen; i++ ) { c = tbl[*pmsg++ - '0'] << 4; c |= tbl[*pmsg++ - '0']; *pdst++ = c; } gprs_rx( linkno, psrc, infolen ); return; } if( strncmp( psrc, "%IPCLOSE:", 9 ) == 0 ) { c=*(psrc+9)-0x30; cb_socket_state(c,SOCKET_CLOSE); return; } if( SMS_rx_pro( pInfo, size ) ) { return; } /*直接发送到Mailbox中,内部处理*/ pmsg = rt_malloc( len + 2 ); if( pmsg != RT_NULL ) { *pmsg = len >> 8; *( pmsg + 1 ) = len; memcpy( pmsg + 2, pInfo, len ); rt_mb_send( &mb_gsmrx, (rt_uint32_t)pmsg ); }