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

📄 d13_reg.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)   1999 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	D13_Reg.C
   // Created:		Feb. 1, 2000
   // Modified:
   // Revision:		0.1
   //
   //*************************************************************************
   //
   //*************************************************************************
   */
#include <dos.h>

#include "SysCnfg.h"

#include "BasicTyp.h"
#include "DcCommon.h"

#include "HAL4Sys.h"
#include "Hal4ISA.h"
#include "Hal4IKit.h"

#include "HAL4D13.h"
#include "D13_Reg.h"

/*
//*************************************************************************
//  Public static data
//*************************************************************************
*/
extern		UCHAR	bIRQL;

/*
//*************************************************************************
//  Private static data
//*************************************************************************
*/


/*
//*************************************************************************
//  Functions
//*************************************************************************
*/
void D13_SWResetDevice(void)
{
	if( 0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB(D13CMD_DEV_RESET);

	if( 0 == bIRQL)
		LowerIRQL();
}

USHORT D13_GetDevConfig(void)
{

	USHORT	wDevConfig;

	if(0 == bIRQL)
		RaiseIRQL();

	wDevConfig = Hal4D13_RegInW(D13CMD_DEV_RD_CNFG);

	if(0 == bIRQL )
		LowerIRQL();

	return wDevConfig;
}

void D13_SetDevConfig(USHORT wDevCnfg)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutW(D13CMD_DEV_WR_CNFG,wDevCnfg);

	if(0 == bIRQL)
		LowerIRQL();
}

void D13_SetMode(UCHAR byMode)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutW(D13CMD_DEV_WR_MODE,byMode);

	if(0 == bIRQL)
		LowerIRQL();
}

UCHAR D13_GetMode(void)
{
	UCHAR	byMode;

	if(0 == bIRQL)
		RaiseIRQL();

	byMode = (UCHAR) Hal4D13_RegInW(D13CMD_DEV_RD_MODE);

	if(0 == bIRQL)
		LowerIRQL();

	return byMode;
}

UCHAR D13_GetAddress(void)
{
	UCHAR	byAddress;

	if(0 == bIRQL)
		RaiseIRQL();

	byAddress = (UCHAR)Hal4D13_RegInW(D13CMD_DEV_RD_ADDR);

	if(0 == bIRQL)
		LowerIRQL();

	return byAddress;
}

void D13_SetAddressEnable(UCHAR byAddress, UCHAR byEnable)
{

	if(0 == bIRQL)
		RaiseIRQL();

	if(byEnable)
		byAddress |= D13REG_DEVADDR_EN;
	else
		byAddress &= D13REG_DEVADDR_MASK;

	Hal4D13_RegOutW(D13CMD_DEV_WR_ADDR, (USHORT)byAddress);

	if(0 == bIRQL)
		LowerIRQL();

}



void D13_SendResume(void)
{
	UCHAR	byResueReg;

	if(0 == bIRQL)
		RaiseIRQL();

	byResueReg = (UCHAR) Hal4D13_RegInW(D13CMD_DEV_WR_MODE);
	byResueReg |= D13REG_MODE_RESUME;
	Hal4D13_RegOutW(D13CMD_DEV_WR_MODE, (USHORT)byResueReg);

	if(0 == bIRQL)
		LowerIRQL();

}

void D13_SoftConnect(UCHAR bEnable)
{
	UCHAR	bySftConnect;

	if(0 == bIRQL)
		RaiseIRQL();


	bySftConnect = (UCHAR) Hal4D13_RegInW(D13CMD_DEV_RD_MODE);
	if(bEnable)
		bySftConnect |= D13REG_MODE_SOFTCONNECT;
	else
		bySftConnect &= ~D13REG_MODE_SOFTCONNECT;

	Hal4D13_RegOutW(D13CMD_DEV_WR_MODE, (USHORT)bySftConnect );

	if(0 == bIRQL)
		LowerIRQL();

}

void D13_AcknowledgeSETUP(void)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB( D13CMD_ACK_SETUP);

	if(0 == bIRQL)
		LowerIRQL();
}

void D13_ClearBuffer(UCHAR byEPIndex)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB(D13CMD_EP_CLEAR_BUF + byEPIndex);

	if(0 == bIRQL)
		LowerIRQL();


}

void D13_ValidBuffer(UCHAR byEPIndex)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB(D13CMD_EP_VALID_BUF + byEPIndex);

	if(0 == bIRQL)
		LowerIRQL();

}


USHORT D13_ReadEndpoint(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{
	USHORT	wXferedCount;

	if(0 == bIRQL)
		RaiseIRQL();


	/* Select Endpoint Index */
	Hal4D13_CommandOutB(D13CMD_EP_RD_FIFO + byEPIndex);


	wXferedCount = Hal4D13_DataInW(); // Get BufferwLength

	if( wLength > wXferedCount)
		wLength = wXferedCount;

	for(wXferedCount = 0; wXferedCount < wLength ; wXferedCount += 2 , ptrBuf ++ )
		*ptrBuf = Hal4D13_DataInW();

	/* Clear Buffer */
	 Hal4D13_CommandOutB(D13CMD_EP_CLEAR_BUF + byEPIndex);

	if( 0 == bIRQL )
		LowerIRQL();

	return wXferedCount;
}


USHORT D13_ReadEndpointWOClearBuffer(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{
	USHORT wXferedCount;

	if( 0 == bIRQL )
		RaiseIRQL();

	// Select Endpoint Index
	Hal4D13_CommandOutB( D13CMD_EP_RD_FIFO + byEPIndex);

	/* read Buffer */
	wXferedCount = Hal4D13_DataInW();/* LSB ofwLength word */

	if(wLength > wXferedCount)
		wLength = wXferedCount;

	for(wXferedCount = 0; wXferedCount < wLength; wXferedCount += 2, ptrBuf ++ )
		*ptrBuf = Hal4D13_DataInW();


	if(0 == bIRQL)
		LowerIRQL();

	return wXferedCount;
}


USHORT D13_ReadEndpoint2IO(UCHAR byEPIndex, USHORT wIoPort, USHORT wLength)
{

	USHORT wXferedCount;
	USHORT wTemp;

	if( 0 == bIRQL )
		RaiseIRQL();

	/* Select Endpoint */
	Hal4D13_CommandOutB( D13CMD_EP_RD_FIFO + byEPIndex);

	/* read Buffer Length */
	wTemp = Hal4D13_DataInW();/* LSB ofwLength */

	if( wLength > wTemp)
		wLength = wTemp;

	for(wXferedCount = 0; wXferedCount < wLength; wXferedCount += 2 )
	{
		wTemp = Hal4D13_DataInW();
		Hal4Sys_OutportW(wIoPort, wTemp);
	}

	/* Clear Buffer */
	Hal4D13_CommandOutB( D13CMD_EP_CLEAR_BUF + byEPIndex);

	if( 0 == bIRQL )
		LowerIRQL();

	return wXferedCount;
}

USHORT D13_WriteEndpoint(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{

	UCHAR  wXferedCount;

	if(0 == bIRQL)
		RaiseIRQL();


	// Select Endpoint
	Hal4D13_CommandOutB( D13CMD_EP_WR_FIFO + byEPIndex);

	// Set Xfer Count
	Hal4D13_DataOutW( wLength);

	/* Write Buffer */
	for(wXferedCount = 0;  wXferedCount < wLength; wXferedCount += 2, ptrBuf ++ )
		Hal4D13_DataOutW( * ptrBuf);

	/* Validate Buffer */
	Hal4D13_CommandOutB( D13CMD_EP_VALID_BUF + byEPIndex);

	if(0 == bIRQL)
		LowerIRQL();

	return wXferedCount;
}


USHORT D13_ReadEndpointWOValidBuffer(UCHAR byEPIndex, USHORT * ptrBuf, USHORT wLength)
{

	UCHAR  wXferedCount;

	if(0 == bIRQL)
		RaiseIRQL();


	// Select Endpoint
	Hal4D13_CommandOutB( D13CMD_EP_WR_FIFO + byEPIndex);

	// Set Xfer Count
	Hal4D13_DataOutW( wLength);

	/* Write Buffer */
	for(wXferedCount = 0;  wXferedCount < wLength; wXferedCount += 2, ptrBuf ++ )
		Hal4D13_DataOutW( *ptrBuf);

	if(0 == bIRQL)
		LowerIRQL();

	return wXferedCount;
}


USHORT D13_WriteEndpoint2IO(UCHAR byEPIndex, USHORT wIoPort, USHORT wLength)
{
	USHORT wTemp;
	UCHAR  wXferedCount;


	if(0 == bIRQL)
		RaiseIRQL();

	// Select Endpoint
	Hal4D13_CommandOutB( D13CMD_EP_WR_FIFO + byEPIndex);

	// Set Xfer Length
	Hal4D13_DataOutW( wLength );

	/* Write Buffer */
	for(wXferedCount =0; wXferedCount < wLength; wXferedCount = wXferedCount+2 )
	{
		wTemp = Hal4Sys_InportW(wIoPort);
		Hal4D13_DataOutW(wTemp);
	}

	/* Validate Buffer */
	Hal4D13_CommandOutB( D13CMD_EP_VALID_BUF+byEPIndex);

	if(0 == bIRQL)
		LowerIRQL();

	return wXferedCount;
}

ULONG D13_GetIntEnable(void)
{
	ULONG dwIrqEnable;

	if(0 == bIRQL)
		RaiseIRQL();

	dwIrqEnable = Hal4D13_RegInDW(D13CMD_DEV_RD_INTEN);

	if(0 == bIRQL)
		LowerIRQL();

	return dwIrqEnable;
}

void D13_SetIntEnable(ULONG dwIntEn)
{

	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutDW(D13CMD_DEV_WR_INTEN,dwIntEn );

	if(0 == bIRQL)
		LowerIRQL();

}

ULONG D13_ReadInterruptRegister(void)
{
	ULONG dwIRQStatus = 0;

	if(0 == bIRQL)
		RaiseIRQL();

	dwIRQStatus = Hal4D13_RegInDW( D13CMD_DEV_INT_SRC);

	if(0 == bIRQL)
		LowerIRQL();

	return dwIRQStatus;
}

UCHAR D13_GetEndpointStatusWInteruptClear(UCHAR byEPIndex)
{
	UCHAR byEndpStatus;

	if(0 == bIRQL)
		RaiseIRQL();


	byEndpStatus = (UCHAR)Hal4D13_RegInW( D13CMD_EP_RDSTS_CLRINT + byEPIndex);

	if(0 == bIRQL)
		LowerIRQL();

	return byEndpStatus;
}

UCHAR D13_GetEndpointStatusWOInteruptClear(UCHAR byEPIndex)
{
	UCHAR byEndpStatus;

	if(0 == bIRQL)
		RaiseIRQL();


	byEndpStatus = (UCHAR)Hal4D13_RegInW( D13CMD_EP_RDSTS + byEPIndex);

	if(0 == bIRQL)
		LowerIRQL();

	return byEndpStatus;
}

void D13_SetEndpointStatus(UCHAR byEPIndex, UCHAR byStalled)
{
	if(0 == bIRQL)
		RaiseIRQL();

	if(byStalled & 0x80)
	{
		Hal4D13_CommandOutB( D13CMD_EP_WR_STS + byEPIndex);
	}
	else
	{
		Hal4D13_CommandOutB( D13CMD_EP_CLR_STALL + byEPIndex);
	}

	if(0 == bIRQL)
		LowerIRQL();
}

void D13_SetDMAConfig(USHORT wDMACnfg)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutW(D13CMD_DMA_WR_CNFG, wDMACnfg);

	if(0 == bIRQL)
		LowerIRQL();
}

USHORT D13_GetDMAConfig(void)
{
	USHORT wDMAConfig;

	if(0 == bIRQL)
		RaiseIRQL();

	wDMAConfig = Hal4D13_RegInW(D13CMD_DMA_RD_CNFG);

	if(0 == bIRQL)
		LowerIRQL();

	return wDMAConfig;
}

void D13_SetDMACounter(USHORT wDMACounter)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutW(D13CMD_DMA_WR_COUNT, wDMACounter);

	if(0 == bIRQL)
		LowerIRQL();
}

USHORT D13_GetDMACounter(void)
{
	USHORT wDMACounter;

	if(0 == bIRQL)
		RaiseIRQL();

	wDMACounter = Hal4D13_RegInW(D13CMD_DMA_RD_COUNT);

	if(0 == bIRQL)
		LowerIRQL();

	return wDMACounter;
}

USHORT D13_GetDataFromChipRam(void)
{
	USHORT wData;

	if(0 == bIRQL)
		RaiseIRQL();

	wData = Hal4D13_RegInW(D13CMD_DEV_RD_RAM);

	if(0 == bIRQL)
		LowerIRQL();

	return wData;
}

void D13_SetDataToChipRam(USHORT wData)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutW(D13CMD_DEV_WR_RAM, wData);

	if(0 == bIRQL)
		LowerIRQL();
}

USHORT D13_ReadCurrentFrameNumber(void)
{
	USHORT wFrameNum;

	if(0 == bIRQL)
		RaiseIRQL();

	wFrameNum = Hal4D13_RegInW( D13CMD_RD_FRMNUM);

	if(0 == bIRQL)
		LowerIRQL();

	return wFrameNum;
}


void D13_UnlockDevice(void)
{
	ULONG	dwTemp;

	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_RegOutDW(D13CMD_DEV_LOCK,D13REG_UNLOCK_CODE);

	if(0 == bIRQL)
		LowerIRQL();
}

USHORT D13_ReadChipID(void)
{
	USHORT wChipID;

	if(0 == bIRQL)
		RaiseIRQL();

	wChipID = Hal4D13_RegInW(D13CMD_DEV_RD_CHIPID);

	if(0 == bIRQL)
		LowerIRQL();

	return wChipID;
}

UCHAR D13_GetErrorCode(UCHAR byEPIndex)
{
	UCHAR   byTemp;
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB( D13CMD_EP_RD_ERR+byEPIndex);
	byTemp = (UCHAR) Hal4D13_DataInW();

	if(0 == bIRQL)
		LowerIRQL();

	return byTemp;
}

UCHAR D13_GetEndpointConfig(UCHAR byEPIndex)
{
	UCHAR   byTemp;
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB( D13CMD_EP_RD_CNFG+byEPIndex);
	byTemp = (UCHAR) Hal4D13_DataInW();

	if(0 == bIRQL)
		LowerIRQL();

	return byTemp;
}

void D13_SetEndpointConfig(UCHAR byEPConfig, UCHAR byEPIndex)
{
	if(0 == bIRQL)
		RaiseIRQL();

	Hal4D13_CommandOutB( D13CMD_EP_WR_CNFG+byEPIndex);
	Hal4D13_DataOutW((USHORT)byEPConfig);

	if(0 == bIRQL)
		LowerIRQL();

}

UCHAR  D13_Endp2EndpIndex(UCHAR byEndpoint)
{
	return byEndpoint+1;
}

UCHAR  D13_EndpIndex2Endp(UCHAR byEndpointIndex)
{
	return byEndpointIndex-1 ;
}

⌨️ 快捷键说明

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