⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_endp.c

📁 usb+源代码
💻 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 + -