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

📄 usbuart.bak

📁 RDC R2886 USB Ehci ohc测试源码,paradigm c++上运行测试
💻 BAK
字号:
// USB Host Controller OHCI test pattern file
// 08/25/2003    Jeff

#include <systypes.h>					/* Paradigm C++ standard types */
#include <stdio.h>
#include <dos.h>
#include <alloc.h>
#include <embedded.h>
#include <string.h>
#include <conio.h>
#include "..\Include\USBHost.h"

/* +++++++++++++++++++++ USBLib.c +++++++++++++++++++++++++ */
unsigned int UpperAddr (void far *p);
unsigned int LowerAddr (void far *p);

extern BOOL HighSpeed_Owner;

char* Num_ASCII_B(char *p, int Data, BOOL AddPoint)
{
	int temp;
	
	temp = (Data >> 4) & 0x0F;
	if(temp > 0x09)
		temp += 0x37;
	else
		temp += 0x30;
	*p++ = temp;
	temp = (Data & 0x0F);
	if(temp > 0x09)
		temp += 0x37;
	else
		temp += 0x30;
	*p++ = temp;
	
	if(AddPoint)
		*p++ = 0x2C;
	
	return p;
}

char* Num_ASCII_W(char *p, int Data, BOOL AddPoint)
{
	int temp;

	temp = (Data >> 12) & 0x0F;
	if(temp > 0x09)
		temp += 0x37;
	else
		temp += 0x30;
	*p++ = temp;

	temp = (Data >> 8) & 0x0F;
	if(temp > 0x09)
		temp += 0x37;
	else
		temp += 0x30;
	*p++ = temp;

	temp = (Data >> 4) & 0x0F;
	if(temp > 0x09)
		temp += 0x37;
	else
		temp += 0x30;
	*p++ = temp;
	temp = (Data & 0x0F);
	if(temp > 0x09)
		temp += 0x37;
	else
		temp += 0x30;
	*p++ = temp;
	
	if(AddPoint)
		*p++ = 0x2C;
		
	return p;
}

void UART_SendData(char* buf, int size)
{
	//Wait Send buffer empty
	do{} while((inport(PCBBase+LSR) & nTEMT) == 0);
		
	//DMA0
	//Count
	outport(PCBBase+0xC8, size);
	
	//Mem Src Address
	outport(PCBBase+0xC2, UpperAddr(buf));
	outport(PCBBase+0xC0, LowerAddr(buf));
	
	//IO Des Address
	outport(PCBBase+0xC6, 0);
	outport(PCBBase+0xC4, PCBBase+THR);
	
	outport(PCBBase+0xCA,SM+DIO+SINC+TC+DesSYN+DMAST+CHG);	
}

void Test_Mode_operate()
{
	char *q;
	int i;
	
	static char buf[542];
	char buf1[50] = {"USB Test mode enable sequence +++++++++++++++++++"};
	char buf2[24] = {"sx = enable x test mode"};
	char buf3[20] = {"x=1 => Test J_STATE"};
	char buf4[20] = {"x=2 => Test K_STATE"};
	char buf5[20] = {"x=3 => Test SE0_NAK"};
	char buf6[19] = {"x=4 => Test Packet"};
	char buf7[25] = {"x=5 => Test FORCE_ENABLE"};
	char buf8[22] = {"e = disable test mode"};
	char buf9[29] = {"cst = Control transfer Start"};
	char buf10[28] = {"csp = Control transfer Stop"};
	char buf11[40] = {"bsst = Bulk SCSI Command transfer Start"};
	char buf12[39] = {"bssp = Bulk SCSI Command transfer Stop"};
   char buf13[30] = {"ist = Interrupt transfer Start"};
   char buf14[29] = {"isp = Interrupt transfer Stop"};
   char buf15[32] = {"isos = Isochronus transfer Start"};
   char buf16[31] = {"isop = Isochronus transfer Stop"};

	q = buf;
	
	//New Line
	*q++ = 10;
	*q++ = 13;
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf1);i++)
		*q++ = buf1[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf2);i++)
		*q++ = buf2[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf3);i++)
		*q++ = buf3[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf4);i++)
		*q++ = buf4[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf5);i++)
		*q++ = buf5[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf6);i++)
		*q++ = buf6[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf7);i++)
		*q++ = buf7[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf8);i++)
		*q++ = buf8[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf9);i++)
		*q++ = buf9[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf10);i++)
		*q++ = buf10[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf11);i++)
		*q++ = buf11[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf12);i++)
		*q++ = buf12[i];
	*q++ = 10;
	*q++ = 13;
   for(i=0;i<sizeof(buf13);i++)
		*q++ = buf13[i];
	*q++ = 10;
	*q++ = 13;
   for(i=0;i<sizeof(buf14);i++)
		*q++ = buf14[i];
	*q++ = 10;
	*q++ = 13;
   for(i=0;i<sizeof(buf15);i++)
		*q++ = buf15[i];
	*q++ = 10;
	*q++ = 13;
   for(i=0;i<sizeof(buf16);i++)
		*q++ = buf16[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<50;i++)
		*q++ = '.';
	*q++ = 10;
	*q++ = 13;
	
	UART_SendData(buf, sizeof(buf));
}

void UART_Device_Descriptor(std_dev_des __far *p)
{
	char *q;
	int i, temp;
	static char buf[200];
	char buf1[50] = {"EHCI Control Transfer +++++++++++++++++++++++++++"};
	char buf2[50] = {"OHCI Control Transfer +++++++++++++++++++++++++++"};
	char buf3[17] = {"Device Descriptor"};
	
	q = buf;

	//New Line
	*q++ = 10;
	*q++ = 13;
	*q++ = 10;
	*q++ = 13;
	if(HighSpeed_Owner == TRUE)
		for(i=0;i<sizeof(buf1);i++)
			*q++ = buf1[i];
	else
		for(i=0;i<sizeof(buf2);i++)
			*q++ = buf2[i];
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf3);i++)
		*q++ = buf3[i];
	*q++ = 10;
	*q++ = 13;
	
	temp = p->bLength;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bDescriptorType;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bcdUSB;		q=Num_ASCII_W(q, temp, TRUE);
	temp = p->bDeviceClass;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bDeviceSubClass;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bDeviceProtocal;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bMaxPacketSize;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->idVendor;		q=Num_ASCII_W(q, temp, TRUE);
	temp = p->idProduct;		q=Num_ASCII_W(q, temp, TRUE);
	temp = p->bcdDevice;		q=Num_ASCII_W(q, temp, TRUE);
	temp = p->iManufacturer;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->iProduct;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->iSerialNumber;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bNumConfigurations;	q=Num_ASCII_B(q, temp, FALSE);
	
	UART_SendData(buf, sizeof(buf));
}

void UART_Configuration_Descriptor(std_cfg_des __far *p)
{
	char *q;
	int i, temp;
	static char buf[200];
	char buf1[24] = {"Configuration Descriptor"};
	
	q = buf;
	
	//New Line
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf1);i++)
		*q++ = buf1[i];
	*q++ = 10;
	*q++ = 13;

	temp = p->bLength;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bDescriptorType;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->wTotalLength;		q=Num_ASCII_W(q, temp, TRUE);
	temp = p->bNumInterfaces;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bConfigurationValue;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->iConfiguration;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bmAttributes;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->MaxPower;		q=Num_ASCII_B(q, temp, FALSE);
	
	UART_SendData(buf, sizeof(buf));
}

void UART_Interface_Descriptor(std_if_des __far *p)
{
	char *q;
	int i, temp;
	static char buf[200];
	char buf1[20] = {"Interface Descriptor"};
	
	q = buf;
	
	//New Line
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf1);i++)
		*q++ = buf1[i];
	*q++ = 10;
	*q++ = 13;

	temp = p->bLength;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bDescriptorType;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bInterfaceNumber;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bAlternateSetting;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bNumEndpoints;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bInterfaceClass;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bInterfaceSubClass;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bInterfaceProtocol;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->iInterface;		q=Num_ASCII_B(q, temp, FALSE);
	
	UART_SendData(buf, sizeof(buf));
}

void UART_Endpoint_Descriptor(std_edp_des __far *p, int num)
{
	char *q;
	int i, temp;
	static char buf[200];
	char buf1[21] = {"Endpoint x Descriptor"};

	//Wait Send buffer empty
	do{} while((inport(PCBBase+LSR) & nTEMT) == 0);
	
	if(num == 1)
		buf1[9] = '1';
	else if(num == 2)
		buf1[9] = '2';
	else
		buf1[9] = '3';
	
	q = buf;
	
	//New Line
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf1);i++)
		*q++ = buf1[i];
	*q++ = 10;
	*q++ = 13;

	temp = p->bLength;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bDescriptorType;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bEndpointAddress;	q=Num_ASCII_B(q, temp, TRUE);
	temp = p->bmAttributes;		q=Num_ASCII_B(q, temp, TRUE);
	temp = p->wMaxPacketSize;	q=Num_ASCII_W(q, temp, TRUE);
	temp = p->bInterval;		q=Num_ASCII_B(q, temp, FALSE);
	
	UART_SendData(buf, sizeof(buf));
}

void UART_String_Descriptor(char *p, int string_num, int size)
{
	char *q;
	int i, temp;
	static char buf[200];
	static char buf1[28] = {"String Descriptor -- "};

	//Wait Send buffer empty
	do{} while((inport(PCBBase+LSR) & nTEMT) == 0);
	
	if(string_num == 0){
		buf1[21] = 'L';
		buf1[22] = 'A';
		buf1[23] = 'N';
		buf1[24] = 'G';
		buf1[25] = 'I';
		buf1[26] = 'D';
		buf1[27] = ' ';
	}
	else{
		buf1[21] = 'i';
		buf1[22] = 'n';
		buf1[23] = 'd';
		buf1[24] = 'e';
		buf1[25] = 'x';
		buf1[26] = ' ';
		
		if(string_num == 1)
			buf1[27] = '1';
		else if(string_num == 2)
			buf1[27] = '2';
		else if(string_num == 3)
			buf1[27] = '3';
	}
	
	q = buf;
	
	//New Line
	*q++ = 10;
	*q++ = 13;
	for(i=0;i<sizeof(buf1);i++)
		*q++ = buf1[i];
	*q++ = 10;
	*q++ = 13;
	
	if(string_num == 0){
		for(i=0;i<size;i++){
			temp = *p++;
			if(i<(size-1))
				q=Num_ASCII_B(q, temp, TRUE);
			else
				q=Num_ASCII_B(q, temp, FALSE);
		}
		for(i=0;i<(172-size);i++)
			*q++ = 0;
	}
	else{
		temp = *p++;
		q=Num_ASCII_B(q, temp, TRUE);
		temp = *p++;
		q=Num_ASCII_B(q, temp, TRUE);
		for(i=0;i<((size-2)/2);i++){
			*q++ = *p++;
			p++;			
		}
		for(i=0;i<(172-(size/2));i++)
			*q++ = 0;
	}
	
	UART_SendData(buf, sizeof(buf));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -