Example #1
0
uint8 uart_rb_pop(void)
{
    BUFFER_INFO *puart_rb_info = &uart_rb_info;
    uint8 ch;

    Buf_Pop(puart_rb_info, ch);
    return ch;
}
Example #2
0
/* This function is only used for retrive exception log*/
static kal_uint8 USB2UART_GetUARTByte(UART_PORT port)
{
    kal_uint32 real_count = 0;
    kal_uint32 RoomLeft = 0;
    kal_uint8 data;


    /* This function can only be called after exception*/
    if(INT_Exception_Enter == 0)
        ASSERT(0);

    if ((gUsbDevice.device_type != USB_CDC_ACM)||(USB2UARTPort.initialized == KAL_FALSE))
    {
        /* This function should only be called when assertion, if not CDC_ACM type, trap in while loop*/
        while(1);
    }

    Buf_GetBytesAvail(&(USB2UARTPort.Rx_Buffer),real_count);

    while(real_count==0)
    {
        /* polling received data*/
        USB2UART_Polling_Recv_Data();
        Buf_GetBytesAvail(&(USB2UARTPort.Rx_Buffer),real_count);
    }

    Buf_Pop(&(USB2UARTPort.Rx_Buffer),data);   /* one byte at a time */

    /* set unmask flag if room left is larger than USB_EP_BULK_MAXP */
    Buf_GetRoomLeft(&(USB2UARTPort.Rx_Buffer),RoomLeft);

    /* only unmask IRQ if ring buffer romm left >= MAX BULK PKt SIZE */
#ifdef USB_20_ENABLE
    if(USB_Is_High_Speed() == KAL_TRUE)
    {
        if(RoomLeft >= USB_EP_BULK_MAXP_HS)
        {
            USB_Set_UnMask_Irq(KAL_TRUE);
        }
    }
    else
    {
        if(RoomLeft >= USB_EP_BULK_MAXP_FS)
        {
            USB_Set_UnMask_Irq(KAL_TRUE);
        }
    }
#else
    if(RoomLeft >= USB_EP_BULK_MAXP)
    {
        USB_Set_UnMask_Irq(KAL_TRUE);
    }
#endif

    return data;
}
Example #3
0
/*********************************************************************************************************
** Function name:           UART1_ISR
**  Descriptions:           处理wifi消息
** input parameters:        无
** Output parameters::      无
** Returned value:          无
** Created by:              
** Created Date:            2014.10.03
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           2014.10.03
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void ProcessWifiMsg()
{
    PKT_FIFO     *infor;
    PKT_DESC     *rx_desc = &(UART1Port.Rx_desc);
    BUFFER_INFO  *rx_ring = &(UART1Port.Rx_Buffer); 
    
    PKT_TYPE rxpkt_type;
    u16   rxpkt_len;
    u16 i;
    
    while (rx_desc->pkt_num)
    {   
        //simulate FIFO,1st in,1st out
        infor = &(rx_desc->infor[0]);
        rxpkt_type = infor->pkt_type;
        rxpkt_len  = infor->pkt_len;
        
        memset(pCmdWifiBuf, 0, UART1RX_RING_LEN);
        
        //copy from uart rx ring
        for(i = 0;i < rxpkt_len;i++)       //O(n)
        {
            Buf_Pop(rx_ring,pCmdWifiBuf[i]);
            //AC_Printf("Buf_Pop=%x \n",pCmdBuf[i]);
        }
        
        //reset value
        infor->pkt_type = PKT_UNKNOWN;
        infor->pkt_len = 0;
        
        //shift FIFO
        for (i=0; i<(rx_desc->pkt_num)-1; i++)  //O(n)
        {
            rx_desc->infor[i]= rx_desc->infor[i+1];
        }  
        rx_desc->pkt_num--;
        
        //handle previous packet
        switch (rxpkt_type)
        {
            case PKT_PUREDATA:
            AC_RecvMessage((AC_MessageHead*)(pCmdWifiBuf + 4));
            break;
            default:
            break;
        }    
        
    }   
}
Example #4
0
/*
 * task context
 * fucntion: dispatch and handle packet from rx ring buffer
 */
void uart_rx_dispatch(void)
{
    PKT_FIFO       *infor;
    PKT_DESC     *rx_desc = &(UARTPort.Rx_desc);
    BUFFER_INFO *rx_ring  = &(UARTPort.Rx_Buffer);

    PKT_TYPE rxpkt_type;
    uint16     rxpkt_len;
    uint16     i;
    uint8     pCmdBuf[UARTRX_RING_LEN];

    while (rx_desc->pkt_num) {
        //simulate FIFO,1st in,1st out
        infor = &(rx_desc->infor[0]);
        rxpkt_type = infor->pkt_type;
        rxpkt_len  = infor->pkt_len;
        memset(pCmdBuf, 0, UARTRX_RING_LEN);

        //copy from uart rx ring
        for (i = 0; i < rxpkt_len; i++) {
            Buf_Pop(rx_ring, pCmdBuf[i]);
        }

        //reset value
        infor->pkt_type = PKT_UNKNOWN;
        infor->pkt_len = 0;

        //shift FIFO
        for (i=0; i<(rx_desc->pkt_num)-1; i++)  {
            rx_desc->infor[i]= rx_desc->infor[i+1];
        }
        rx_desc->pkt_num--;

        //handle previous packet
        switch (rxpkt_type)  {
            case PKT_ATCMD:
                iot_atcmd_parser(pCmdBuf, rxpkt_len);
                break;
            case PKT_IWCMD:
                iot_iwcmd_parser(pCmdBuf, rxpkt_len);
                break;
                // <----custom defined packet dispatch
            default:
                break;
        }
    }
}