Files
TencentOS-tiny/board/BDW01-STM32L496VG/BSP/Src/user_usb_uart.c
2020-11-18 18:05:05 +08:00

78 lines
1.7 KiB
C

#include <string.h>
#include <stdlib.h>
#include "user_usb_uart.h"
#include "usb_host.h"
#include "usbh_cdc.h"
uint8_t da_flag =0;
uint8_t aUsbRxBuffer[MAX_USBRX_BUFFER_LENGTH];
uint8_t bUsbRxBuffer[CUSB_BUFFER_NUMBER][MAX_USBRX_BUFFER_LENGTH+1];
uint8_t bUsbBufLength[CUSB_BUFFER_NUMBER];
uint8_t CurrentUsbBufNumPoint = 0;
extern USBH_HandleTypeDef hUsbHostFS;
extern uint8_t Recv_buf[MAX_USBRX_BUFFER_LENGTH];
void Usb_Buff_Init(void)
{
for(int ti=0; ti< CUSB_BUFFER_NUMBER; ti++)
{
bUsbBufLength[ti] = 0;
memset(bUsbRxBuffer[ti],0,sizeof(bUsbRxBuffer[ti]));
}
}
uint8_t ReadUsbBuffData(uint8_t *dBuffer, uint8_t len)
{
uint8_t buflen =0;
if(bUsbBufLength[CurrentUsbBufNumPoint]>0)
{
memset(dBuffer,0,len);
buflen = bUsbBufLength[CurrentUsbBufNumPoint];
memcpy(dBuffer,(const char *)bUsbRxBuffer[CurrentUsbBufNumPoint],buflen);
memset(bUsbRxBuffer[CurrentUsbBufNumPoint],0,sizeof(bUsbRxBuffer[CurrentUsbBufNumPoint]));
bUsbBufLength[CurrentUsbBufNumPoint] = 0;
CurrentUsbBufNumPoint++;
if(CurrentUsbBufNumPoint >= CUSB_BUFFER_NUMBER)
CurrentUsbBufNumPoint = 0;
}
return buflen;
}
//
void Check_empty_buffer()
{
uint8_t i;
for(i=0;i<CUSB_BUFFER_NUMBER;i++)
{
if(bUsbBufLength[CurrentUsbBufNumPoint]>0)
{
CurrentUsbBufNumPoint++;
if(CurrentUsbBufNumPoint >= CUSB_BUFFER_NUMBER)
CurrentUsbBufNumPoint=0;
}
else
break;
}
}
//
void USBH_CDC_ReceiveCallback(USBH_HandleTypeDef *phost)
{
uint32_t i,rec_len=0;
USBH_CDC_GetLastReceivedDataSize(phost);
rec_len = strlen(aUsbRxBuffer);
if(rec_len>0)
{
Check_empty_buffer();
memcpy(bUsbRxBuffer[CurrentUsbBufNumPoint],aUsbRxBuffer,rec_len);
bUsbBufLength[CurrentUsbBufNumPoint] = rec_len;
memset(aUsbRxBuffer,0,sizeof(aUsbRxBuffer));
}
}