📄 transfer.h
字号:
#ifndef _TR_GENE_H
#define _TR_GENE_H
/****************************************************************************/
/* includes */
/****************************************************************************/
#include "config.h"
//#include "_hc_core/chap9.h"
//#include "_hc_core/dev_ep.h"
/****************************************************************************/
/* constants */
/****************************************************************************/
#define reqtype( x ) (x >> 8)
#define request( x ) (x & 0xF)
#define UNLOCK 0x00
#define LOCK 0x80//底7位表示索引号
#define DELETE 0xff
#define CONTROL_TRANSFER 1
#define BULK_TRANSFER 2
#define INTERRUPT_TRANSFER 0
#define ISO_TRANSFER 3
#define TRANSFER_STATE_IDLE 0
#define TRANSFER_STATE_ACTIVE 1
#define BULK_TRANSFER_NAK_WAIT_THRESHOLD 5
#define BULK_TRANSFER_NAK_WAIT_TIME_ms 20
#define DEFAULT_TRANSFER_TIMEOUT_ms 5000
#define TRANSFER_TIMEOUT_LIMIT 10000
#define CONTROL_TRANSFER_TIMEOUT_LIMIT 50 // 50ms : control transfer timeout, no response from device
#define INTERRUPT_TRANSFER_TIMEOUT_LIMIT 1000
#define BULK_TRANSFER_TIMEOUT_LIMIT 1000
#define TR_HANDLE_ERR (unsigned char)-1
#define TR_INSTANCE_ERR (unsigned char)-2
#define TR_ENDPORT_ERR (unsigned char)-3
#define TR_INSTANCE_BE_DEL (unsigned char)-4
#define TR_OS_EVENT_ERR (unsigned char)-5
#define TR_ENDPONT_ID_ERR (unsigned char)-6
#define TR_TIMEOUT (unsigned char)-7
#define TR_NO_ERR (unsigned char)0
#define OS_EVENT_DELETE 0xff
/****************************************************************************/
/* types */
/****************************************************************************/
typedef struct req {
unsigned char bmRequestType;
unsigned char bRequest;
unsigned short wValue;
unsigned short wIndex;
unsigned short wLength;
}
USB_Device_Request;
typedef struct _LIST_ENTRY{
struct transfr *Flink;
struct transfr *Blink;
}LIST_ENTRY,*PLIST_ENTRY;
typedef struct transfr{
/* for general ATL transfers */
unsigned char lock; // 非0则该传输实例被锁,其底7位为索引号
unsigned char *data_ptr_base; // 该传输数据缓冲区基地址指针
unsigned char *data_ptr_start; // 当该指针为非NULL则该传输实例在中断中被传输
unsigned char *data_ptr_end;
unsigned char *readout_position; //
endpoint_info_ptr epi_ptr; // 传输端点描述
void (*callback)( struct transfr *ptr ); // 传输完成回调函数
unsigned int need_transfer_total_size; // 需要传输的总字节数
unsigned short transferred_size; // 已传输的字节数
unsigned char direction; // 传输方向,IN,OUT,SETUP
unsigned char completion_code; // 完成代码
unsigned char fatal_error; // 严重错误标记
unsigned long endpoint_create_id; // 端点ID号
LIST_ENTRY tr_list_for_tr;
LIST_ENTRY tr_list_for_ep;
/* for interrupt transfer */
/* 中断传输 */
unsigned char schedule_rate; // 轮询数据传送端点的时间间隔
unsigned long poll_timing_timer; // 轮询时间记数器
/* for uC/OS-II */
OS_EVENT *os_event_ptr; //uC/OS-II 事件指针
}transfer_instance;
typedef transfer_instance *transfer_instance_ptr;
/****************************************************************************/
/* function prototypes */
/****************************************************************************/
unsigned short control_transfer( USB_Device_Request *dev_req, device_instance *dvi_ptr, unsigned char *data_ptr );
unsigned char control_transaction( unsigned char direction, unsigned char *data_ptr, unsigned short *size_ptr, endpoint_info_ptr epi_ptr );
unsigned char bulk_transaction( unsigned char direction, unsigned char *data_ptr, unsigned short *size_ptr, transfer_instance *hTrInstance );
unsigned char interrupt_transaction( unsigned char direction, unsigned char *data_ptr, unsigned short *size_ptr, transfer_instance *hTrInstance );
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -