?? usbuart.c
字號:
// 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[550];
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 + -