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

📄 iso.c

📁 参加今年的比赛肯定要用的。谢谢支持。祝大家好运!
💻 C
字号:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "BasicTyp.h"
#include "common.h"
#include "usb.h"
#include "Hal4D13.h"
#include "chap_9.h"
#include "D13BUS.h"
#include "iso.h"
#include "system.h"
#include "usb_irq.h"

extern D13FLAGS bD13flags;
extern CONTROL_XFER ControlData;
extern IO_REQUEST idata ioRequest;

unsigned char IsoDisable =1;
unsigned char IsoMode = 0; //ISO_IN:01|ISO_OUT:02;
unsigned short IsoOutPattern=0xF0;
unsigned short IsoOutPktLen=0;
unsigned short IsoOutDataBuff[ISO_FIFOSIZE_512];
unsigned short IsoInPattern=0xF8;
unsigned short IsoInPktLen=0;
unsigned short IsoInDataBuff[ISO_FIFOSIZE_512];

void EnableIsoMode()
{
	IsoMode = 0;
	if( ControlData.DeviceRequest.wLength == 0)
	{
		IsoMode &= ~ControlData.DeviceRequest.wIndex;
		IsoMode |= ControlData.DeviceRequest.wValue;

		printf("IsoMode %x\n",IsoMode );

		if(IsoMode&ISO_LOOP)
		{

		   RaiseIRQL();
		   bD13flags.bits.ISO_state = ISO_LOOP;
		   LowerIRQL();

		   IsoDisable =0;
		   IsoInPattern = 0;
		   IsoInPktLen = ISO_FIFOSIZE_512;
		   IsoOutPattern = 0;
		   IsoOutPktLen = ISO_FIFOSIZE_512;

		}
		else
		{

			 if(IsoMode&ISO_OUT)
			 {

			   RaiseIRQL();
			   bD13flags.bits.ISO_state = ISO_OUT;
			   LowerIRQL();

			   IsoDisable =0;
			   IsoOutPattern = 0;
			   IsoOutPktLen = ISO_FIFOSIZE_512;
			   printf("Iso-Out Pattern %x, PktLen %u bytes\n",IsoInPattern,IsoOutPktLen);

			 }
			 if(IsoMode&ISO_IN)
			 {
				bD13flags.bits.ISO_state = ISO_IN;

			   IsoDisable =0;
			   IsoInPattern = 0;
			   IsoInPktLen = ISO_FIFOSIZE_512;

				IOWR(ISP1362_BASE,D13_COMMAND_PORT, D13CMD_EP_VALID_BUF+EPINDEX4EP06);
				printf("Iso-IN  Pattern %x, PktLen %u bytes\n",IsoInPattern,IsoInPktLen);
			 }

		}

		Chap9_SingleTransmitEP0(0, 0);
	}
	else
	{
		Chap9_StallEP0();
	}
}


void Wait4Ns( unsigned long timeNs)
{
	usleep(timeNs);
}

USHORT ISOLOOP(UCHAR bOUTEPIndex, UCHAR bINEPIndex, USHORT len)
{
	USHORT	ISOBuffer[512];
	UCHAR	ep_last;
	USHORT	j=0;

	ep_last = (UCHAR)Hal4D13_GetEndpointStatusWInteruptClear(bOUTEPIndex);
	if(ep_last & 0x60)
	{
		j = Hal4D13_ReadISOEndpoint(bOUTEPIndex, ISOBuffer, len);
		Hal4D13_WriteISOEndpoint(bINEPIndex, ISOBuffer, j);
	}

	return j;
}

USHORT Hal4D13_ReadISOEndpoint(UCHAR bEPIndex, USHORT ISOBuffer[512], USHORT len)
{
	USHORT i, j;

	IOWR(ISP1362_BASE,D13_COMMAND_PORT, D13CMD_EP_RD_FIFO + bEPIndex);

	j = IORD(ISP1362_BASE,D13_DATA_PORT);

	if(j != len)
		j = len;

	for(i=0; i<j; i++)
	{
		ISOBuffer[i] = IORD(ISP1362_BASE,D13_DATA_PORT);

	}

	/* Clear Buffer */
	IOWR(ISP1362_BASE,D13_COMMAND_PORT, D13CMD_EP_CLEAR_BUF+bEPIndex);

	return j;
}

USHORT Hal4D13_WriteISOEndpoint(UCHAR bEPIndex, USHORT ISOBuffer[512], USHORT len)
{
	USHORT i;

	if(bD13flags.bits.At_IRQL1 == 0)
		RaiseIRQL();

	IOWR(ISP1362_BASE,D13_COMMAND_PORT, D13CMD_EP_WR_FIFO + bEPIndex);

	IOWR(ISP1362_BASE,D13_DATA_PORT, 512);

	/* Write Buffer */

	for(i=0; i<len; i++)
	{
		IOWR(ISP1362_BASE,D13_DATA_PORT, ISOBuffer[i]);
	}



	if(bD13flags.bits.At_IRQL1 == 0)
		LowerIRQL();

	return i;
}


⌨️ 快捷键说明

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