美文网首页
OSAL-AT指令

OSAL-AT指令

作者: 昨天剩下的一杯冷茶 | 来源:发表于2020-08-05 16:29 被阅读0次
    static uint8 str_cmp(uint8 *p1,uint8 *p2,uint8 len)
    {
        uint8 i = 0;
        while(i<len)
        {
            if (p1[i]!= p2[i])
            {
                return 0;
            }
            i++;
        }
        return 1;
    }
    //HalLedSet( m_led, HAL_LED_MODE_ON );
    bool simple_ble_at_cmd_handle(uint8 *p_buffer,uint16 len)
    {
        bool ret = TRUE;
        char str_temp[64];
    
        if (4==len && strstr((char const *)p_buffer,"AT\r\n"))//if (4==len && str_cmp(p_buffer,"AT\r\n",4))
        {
            sprintf(str_temp,"OK\r\n");
            NPI_WriteTransport((uint8*)str_temp,strlen(str_temp));
        }
        else if (9==len && strstr((char const *)p_buffer,"AT+LED"))//else if (9==len && str_cmp(p_buffer,"AT+LED",6))
        {
            /*
            Para: 0 ~ 1
            AT+LED0\r\n: 关灯
            AT+LED1\r\n: 开灯
            Default: 0
            */
            switch(p_buffer[6])
            {
            case '?':
                sprintf(str_temp,"OK+Get:%d\r\n",P1_0);
                NPI_WriteTransport((uint8*)str_temp,strlen(str_temp));
                break;
            case '0':
                P1_0=0;
                HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);
                sprintf(str_temp,"OK+Set:%d\r\n",P1_0);
                NPI_WriteTransport((uint8*)str_temp,strlen(str_temp));
                break;
            case '1':
                P1_0=1;
                HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);
                sprintf(str_temp,"OK+Set:%d\r\n",P1_0);
                NPI_WriteTransport((uint8*)str_temp,strlen(str_temp));
                break;
            default:
                ret = FALSE;
                break;
            }
        } else
        {
            sprintf(str_temp,"ERROR\r\n");
            NPI_WriteTransport((uint8*)str_temp,strlen(str_temp));
            ret = FALSE;
        }
        return ret;
    }
    
    
    static void  npi_serial_call_back(uint8_t port,uint8_t events)
    {
        (void)port;
    
        static uint32 old_time=0;//老时间
        static uint32 old_time_data_len=0;
        uint32 new_time;
        uint8 read_max_bytes = 20;
    
        if (events & (HAL_UART_RX_TIMEOUT | HAL_UART_RX_FULL))
        {
            uint8_t num_bytes=0;
            num_bytes = NPI_RxBufLen();
            if ( 0 == num_bytes )
            {
                old_time_data_len=0;
                return;
            }
            if (old_time_data_len == 0)
            {
                old_time = osal_GetSystemClock();
                old_time_data_len = num_bytes;
            } else
            {
                new_time = osal_GetSystemClock();
                if ( num_bytes>=read_max_bytes || (new_time-old_time)>20)
                {
                    uint8 send_bytes=0;
                    uint8 *buffer = osal_mem_alloc(num_bytes);
                    if (num_bytes > read_max_bytes)
                    {
                        send_bytes = read_max_bytes;
                    } else
                    {
                        send_bytes = num_bytes;
                    }
                    if (buffer)
                    {
                       //读取读取串口缓冲区数据,释放串口数据   
                        NPI_ReadTransport(buffer,num_bytes);   
                        simple_ble_at_cmd_handle(buffer,send_bytes);
                        osal_mem_free(buffer);
                    }
                    old_time = new_time;
                    old_time_data_len = num_bytes - send_bytes;
                }
            }
        }
    }
    

    测试效果;


    image.png

    相关文章

      网友评论

          本文标题:OSAL-AT指令

          本文链接:https://www.haomeiwen.com/subject/zxpsrktx.html