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

📄 usbstd.c

📁 此為philip 1362 USB DOS下的驅動程式包, 已經共測試並內含有說明文件
💻 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 + -