📄 usb_endp.c
字号:
/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
* File Name : usb_endp.c
* Author : MCD Application Team
* Version : V3.0.1
* Date : 04/27/2009
* Description : Endpoint routines
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "platform_config.h"
#include "usb_lib.h"
#include "usb_desc.h"
#include "usb_mem.h"
#include "hw_config.h"
#include "usb_istr.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
#define USB_DATA_BUFF_SIZE (2 * 1024)
uint8_t buffer_out[USB_DATA_BUFF_SIZE];
__IO uint32_t count_out = 0;
uint32_t count_in = 0;
uint8_t mycount = 0;
bool packet_received_flags = FALSE;
vu32 buffer_ptr = 0;
vu32 usb_ovf = 0;
vu32 cmd_len = 0;
vu32 rep_len = 0;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name : EP3_IN_Callback
* Description :
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
/*
void EP3_OUT_Callback(void)
{
//printf("\n\rEP3_OUT_Callback\n\r");
count_out = GetEPRxCount(ENDP3);
printf("\n\rEP3_OUT_Callback: Rx:%d Bytes\n\r",count_out);
PMAToUserBufferCopy(buffer_out, ENDP3_RXADDR, count_out);
SetEPRxValid(ENDP3);
mycount = 3;
}
*/
extern void mprint(unsigned char printEn,char *ptr,unsigned char *sMessage, unsigned short len);
/*
unsigned short checksum(unsigned short *buffer, unsigned short size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(unsigned short);
}
if(size )
{
cksum += *(unsigned char*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (unsigned short)(~cksum);
}
*/
/*
void CleanBuffer(unsigned char *Pack)
{
//USB_HID_PACKAGE Hidpack;
unsigned char i;
for(i=0; i<32; i++)
{
Pack[i] = 0;
}
}
*/
/*
void EP3_OUT_Callback(void)
{
if (GetENDPOINT(ENDP3) & EP_DTOG_TX)//先判断本次接收到的数据是放在哪块缓冲区的
{
FreeUserBuffer(ENDP3, EP_DBUF_OUT); //先释放用户对缓冲区的占有,这样的话USB的下一个接收过程可以立刻进行,同时用户并行进行下面处理
count_out = GetEPDblBuf0Count(ENDP3);//读取接收到的字节数
PMAToUserBufferCopy(buffer_out, ENDP3_BUF0Addr, count_out);
}
else
{
FreeUserBuffer(ENDP3, EP_DBUF_OUT);
count_out = GetEPDblBuf1Count(ENDP3);
PMAToUserBufferCopy(buffer_out, ENDP3_BUF1Addr, count_out);
}
}
*/
void EP3_OUT_Callback(void)
{
u32 pkg_len; //当前接收到的字节数
pkg_len = GetEPRxCount(ENDP3); //获取本次接收数据的长度
PMAToUserBufferCopy(buffer_out + count_out, ENDP3_RXADDR, pkg_len);//按顺序将接收缓冲区数据拷贝到buffer_out
SetEPRxValid(ENDP3);
if(!pkg_len)
{
return;
}
if(!count_out)
{
cmd_len = buffer_out[2] + ((u16)buffer_out[3] << 8);
}
count_out += pkg_len; //将本次接收数据和加到数据包总和
// all data received?
pkg_len = cmd_len;
if(count_out == pkg_len) //计数总和与包中恢复出的长度是否一致
{
//cmd_len |= 0x80000000; //说明一个包接收完毕
packet_received_flags = TRUE;
printf("\n\rEP3 Data Receive:%d Bytes",count_out);
//count_out = 0;
}
}
/*******************************************************************************
* Function Name : EP1_IN_Callback
* Description :
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void EP2_IN_Callback(void)
{
printf("\n\rEP2_IN_Callback");
count_in = 0;
}
void EP1_OUT_Callback(void)
{
count_out = GetEPRxCount(ENDP1);
PMAToUserBufferCopy(buffer_out, ENDP1_RXADDR, count_out);
printf("\n\rEP1_OUT_Callback");
printf("\n\rEP1数据接收到%d字节",count_out);
/*
if(count_out > 2)
{
int i;
printf("\r\nEP1数据接收到%d字节:",count_out);
printf("\r\n");
for(i = 0; i<count_out; i++)
{
printf(" %2.2x", buffer_out[i]);
}
packet_received_flags = TRUE;
}
*/
SetEPRxStatus(ENDP1, EP_RX_VALID);
}
void EP1_IN_Callback(void)
{
printf("\n\rEP1_IN_Callback");
count_in = 0;
}
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -