📄 usbstd.c
字号:
/*
//*************************************************************************
//
// P H I L I P S P R O P R I E T A R Y
//
// COPYRIGHT (c) 2000 BY PHILIPS SINGAPORE.
// -- ALL RIGHTS RESERVED --
//
// File Name: UsbStd.C
// Author: ZhenYu Zhang
// Created: Jun. 8, 2000
// Contact: hilbert.zhang@philips.com
// Modified:
// Revision: 0.0
//
//*************************************************************************
// Abstract:
//
//*************************************************************************
*/
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include "BasicTyp.h"
#include "common.h"
#include "SysCnfg.h"
#include "usb100.h"
#include "Hal4sys.h"
#include "Hal4ISA.h"
#include "Hal4IKit.h"
#include "Hal4Hc.h"
#include "PHC_Reg.h"
#include "PHC_HcS.h"
#include "UsbStd.h"
/*
//*************************************************************************
// Public static data
//*************************************************************************
*/
extern UCHAR bVerbose ;
extern UCHAR bIRQL ;
extern DATA_XFER HcS_UsbDataInStage;
/***********************************************/
/* Private Vars for USB_Std */
/***********************************************/
/********************************************************/
/********************************************************/
/********************************************************/
BOOLEAN UsbStd_ClearFeature(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR byRecipient,
USHORT wFeatureSelector,
USHORT wIndex
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_OUT|USBXFER_STD|byRecipient,//bmRequestType,
USB_REQUEST_CLEAR_FEATURE,//bRequest
wFeatureSelector, //wValue,
wIndex, //wIndex,
0 //wLength
);
// build up StatusStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
PktSize//XferLength
);
if(HcS_USBCtrlOnly())
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOLEAN UsbStd_SetFeature(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR byRecipient,
USHORT wFeatureSelector,
USHORT wIndex
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_OUT|USBXFER_STD|byRecipient,//bmRequestType,
USB_REQUEST_SET_FEATURE,//bRequest
wFeatureSelector, //wValue,
wIndex, //wIndex,
0 //wLength
);
// build up StatusStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
PktSize//XferLength
);
if(HcS_USBCtrlOnly())
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOLEAN UsbStd_GetCnfg(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_IN|USBXFER_STD|USBXFER_DEV,//bmRequestType,
USB_REQUEST_GET_CONFIGURATION,//bRequest
0, //wValue,
0, //wIndex,
1 //wLength
);
// build up DataInStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
1//XferLength
);
// build up StatusStage
HcS_BuildUSBDataOutDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
0,//XferLength,
NULL//pPayload
);
if(HcS_USBCtrlRead())
{
// printf("Configuration is at Config%d\n",HcS_UsbDataInStage.Payload[0]);
return TRUE;
}
else
{
// printf("!!! Failure!!! : GetConfiguration \n");
return FALSE;
}
}
BOOLEAN UsbStd_SetCnfg(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR Cnfg
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_OUT|USBXFER_STD|USBXFER_DEV,//bmRequestType,
USB_REQUEST_SET_CONFIGURATION,//bRequest
Cnfg, //wValue,
0, //wIndex,
0 //wLength
);
// build up StatusStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
PktSize//XferLength
);
if(HcS_USBCtrlOnly())
{
// printf("SetConfiguration to Config%d\n",Cnfg);
return TRUE;
}
else
{
// printf("!!! Failure!!! : SetConfiguration \n");
return FALSE;
}
}
BOOLEAN UsbStd_GetDescrip(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR byDescriptorType,
UCHAR byDescriptorIndex,
USHORT wLanguageID,
USHORT wLength
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_IN|USBXFER_STD|USBXFER_DEV,//bmRequestType,
USB_REQUEST_GET_DESCRIPTOR,//bRequest
(((USHORT)byDescriptorType)<<8)|byDescriptorIndex, //wValue,
wLanguageID, //wIndex,
wLength //wLength
);
// build up DataInStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
wLength//XferLength
);
// build up StatusStage
HcS_BuildUSBDataOutDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
0,//XferLength,
NULL//pPayload
);
if(HcS_USBCtrlRead())
{
return TRUE;
}
else
{
// printf("!!! Failure !!! :Get Descriptor.\n");
return FALSE;
}
}
BOOLEAN UsbStd_SetDescrip(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR byDescriptorTye,
UCHAR byDescriptorIndex,
USHORT wLanguageID,
USHORT wLength,
PUCHAR pPayload
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_OUT|USBXFER_STD|USBXFER_DEV,//bmRequestType,
USB_REQUEST_GET_DESCRIPTOR,//bRequest
(((USHORT)byDescriptorTye)<<8)|byDescriptorIndex, //wValue,
wLanguageID, //wIndex,
wLength //wLength
);
// build up DataOutStage
HcS_BuildUSBDataOutDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
wLength,//XferLength
pPayload
);
// build up StatusInStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
PktSize//XferLength,
);
if(HcS_USBCtrlWrite())
{
// printf("OK: Set Descriptor.\n");
return TRUE;
}
else
{
// printf("!!! Failure !!! :Set Descriptor.\n");
return FALSE;
}
}
BOOLEAN UsbStd_GetInterface(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR Interface
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_IN|USBXFER_STD|USBXFER_IF,//bmRequestType,
USB_REQUEST_GET_INTERFACE,//bRequest
0, //wValue,
Interface, //wIndex,
1 //wLength
);
// build up DataInStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
1//XferLength
);
// build up StatusStage
HcS_BuildUSBDataOutDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
0,//XferLength,
NULL//pPayload
);
if(HcS_USBCtrlRead())
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOLEAN UsbStd_SetInterface(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR Interface
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_OUT|USBXFER_CLASS|USBXFER_IF,//bmRequestType,
USB_REQUEST_SET_INTERFACE,//bRequest
0, //wValue,
Interface, //wIndex,
0 //wLength
);
// build up StatusStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
PktSize//XferLength,
);
if(HcS_USBCtrlOnly())
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOLEAN UsbStd_GetStatus(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR byRecipient,
USHORT wIndex
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_IN|USBXFER_STD|byRecipient,//bmRequestType,
USB_REQUEST_GET_STATUS,//bRequest
0, //wValue,
wIndex, //wIndex,
2 //wLength
);
// build up DataInStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
2//XferLength
);
// build up StatusStage
HcS_BuildUSBDataOutDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
0,//XferLength,
NULL//pPayload
);
if(HcS_USBCtrlRead())
{
return TRUE;
}
else
{
return FALSE;
}
}
BOOLEAN UsbStd_SetAddress(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
UCHAR NewDevAddr
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_OUT|USBXFER_STD|USBXFER_DEV,//bmRequestType,
USB_REQUEST_SET_ADDRESS,//bRequest
NewDevAddr, //wValue,
0, //wIndex,
0 //wLength
);
// build up StatusStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
PktSize//XferLength
);
if(HcS_USBCtrlOnly())
{
// printf("Set Device to NewAddress @0x%x\n",NewDevAddr);
return TRUE;
}
else
{
// printf("!!! Failure !!! :Set Device to NewAddress.\n");
return FALSE;
}
}
BOOLEAN UsbStd_SyncFrame(
UCHAR DevAddr,
UCHAR Speed,
UCHAR PktSize,
USHORT Endpoint
)
{
// build up SetupStage
HcS_BuildUSBRequestDefault(
DevAddr,
Speed,
PktSize,
USBXFER_DIR_IN|USBXFER_STD|USBXFER_ENDP,//bmRequestType,
USB_REQUEST_SYNC_FRAME,//bRequest
0, //wValue,
Endpoint, //wIndex,
2 //wLength
);
// build up DataInStage
HcS_BuildUSBDataInDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
2//XferLength
);
// build up StatusStage
HcS_BuildUSBDataOutDefault(
DevAddr,//DevAddr,
0,//Endp,
Speed,//Speed,
FALSE,//IsISO,
TRUE,//Last,
PTD_TOGGLE_DATA1,//DataToggle,
PktSize,//PktSize,
0,//XferLength,
NULL//pPayload
);
if(HcS_USBCtrlRead())
{
return TRUE;
}
else
{
return FALSE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -