int uart1_send(u8_t *buff,u32_t size) { int ret; if((size == 0) || (buff == 0)) return -1; p_dbg("uart1 send start\n"); clear_wait_event(u1_send.wait); OSSemSet((OS_EVENT*)u1_send.wait, 0, (INT8U*)&ret); u1_send.cnt = size; DMA_TxConfiguration((uint32_t*)buff, size); again: ret = wait_event_timeout(u1_send.wait, 2000); if(ret != 0) goto again; p_dbg("uart1 send end\n"); if(u1_send.cnt) p_err("uart1_send err:%d,%d,%d\n",ret,u1_send.cnt,size); else p_dbg("uart1 send a pkg:%d\n", size); return 0; }
void switch_audio_mode() { if(!audio_cfg.audio_dev_open) { p_dbg("请先打开音频"); return; } audio_cfg.play_mp3 = !audio_cfg.play_mp3; if(audio_cfg.play_mp3){ p_dbg("mp3播放模式"); #if ENABLE_MP3 if(!mp3_format.init) { if(init_mp3_format()) p_err("init_mp3_format err\n"); } reset_mp3_stat(); #endif }else{ p_dbg("pcm播放模式(语音对讲)"); #if ENABLE_MP3 deinit_mp3_format(); #endif } }
/* static void __skb_trim(struct sk_buff *skb, unsigned int len) { if (unlikely(skb_is_nonlinear(skb))) { WARN_ON(1); return ; } skb->len = len; skb_set_tail_pointer(skb, len); } extern void skb_trim(struct sk_buff *skb, unsigned int len); static int __pskb_trim(struct sk_buff *skb, unsigned int len) { if (skb->data_len) return ___pskb_trim(skb, len); __skb_trim(skb, len); return 0; } static int pskb_trim(struct sk_buff *skb, unsigned int len) { return (len < skb->len) ? __pskb_trim(skb, len): 0; } */ struct sk_buff *__dev_alloc_skb(unsigned int length, gfp_t gfp_mask) { struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask); if (likely(skb)) skb_reserve(skb, NET_SKB_PAD); #ifdef DEBUG if(length + NET_SKB_PAD == 112) p_dbg("alloc:%x, %x", skb, skb->head); //else p_dbg("alloc1:%d,%x, %x", length + NET_SKB_PAD, skb, skb->head); #endif return skb; }
void DMA2_Stream7_IRQHandler() //发送中断 { uint32_t irq_flag; enter_interrupt(); DMA_Cmd(DMA2_Stream7, DISABLE); NVIC_DisableIRQ(DMA2_Stream7_IRQn); irq_flag = local_irq_save(); if(DMA_GetFlagStatus(DMA2_Stream7, DMA_FLAG_TEIF7)) { p_err("uart dma err"); } DMA_ITConfig(DMA2_Stream7, DMA_IT_TC | DMA_IT_TE | DMA_IT_HT,DISABLE); DMA_ClearFlag(DMA2_Stream7, DMA_FLAG_TCIF7 | DMA_FLAG_TEIF7 | DMA_FLAG_HTIF7 | DMA_FLAG_DMEIF7 | DMA_FLAG_HTIF7); u1_send.cnt = DMA2_Stream7->NDTR; //取剩余字数,应该为0 local_irq_restore(irq_flag); USART_DMACmd(USART1, USART_DMAReq_Tx, DISABLE); p_dbg("u_send irq\n"); wake_up(u1_send.wait); //唤醒等待线程 exit_interrupt(1); }
timer_t *timer_setup(int time_val, int type, timer_callback_func callback, void *callback_arg) { INT8U perr; OS_TMR *tmr; if (time_val < 100) time_val = 100; time_val = time_val * OS_TMR_CFG_TICKS_PER_SEC / 1000; if ((callback == 0)) { p_err("setup_timer err arg\n"); return 0; } if (type) //== 1 repeat { p_dbg("repeat:%d\n", time_val); tmr = OSTmrCreate(time_val, time_val, OS_TMR_OPT_PERIODIC, (OS_TMR_CALLBACK)callback, callback_arg, "", &perr); } else { p_dbg("one short:%d\n", time_val); tmr = OSTmrCreate(time_val, time_val, OS_TMR_OPT_ONE_SHOT, (OS_TMR_CALLBACK)callback, callback_arg, "", &perr); } if (perr != OS_ERR_NONE) { tmr = 0; p_err("setup_timer err\n"); } tmr->priv = mem_malloc(sizeof(struct work_struct)); if(!tmr->priv){ OSTmrDel(tmr, &perr); return 0; } init_work(tmr->priv, callback, callback_arg); return (timer_t*)tmr; }