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

📄 usbif.c

📁 使用SL811芯片的USB_FAT文件系统源代码
💻 C
字号:
//#include "includes.h"
#include "common.H"
#include "SL811.H"
#include "TPBULK.H"
#include "HAL.H"
#include "HPI.H"
#include "FAT.H"
#include "FAT32.H"
#include "HPI32.H"

FLAGS bFlags;
extern unsigned char DBUF[BUFFER_LENGTH];
/////////////////////////////////////////////////
extern unsigned long DirStartCluster,DirStartCluster32;
extern unsigned char UARTBUF[UARTBUF_LENGTH];
extern Command_Def Command;
extern Response_Def Response;
extern SYS_INFO_BLOCK DeviceInfo;	
extern FILE_INFO ThisFile;
extern unsigned delayFac;
//////////////////////////////////////////

//把整形转换为十进制字符串
void IntToDecChar(const int data, char *pstr, short len);
void GetFileName(short num, char filename[]);

void USB_Init(void)
{
	unsigned char temp;

	SL811_Init();

	bFlags.bits.bUartInDone=0;	
	DirStartCluster=0;
	DirStartCluster32=0;

	for(temp=0;temp<64;temp++) DBUF[temp]=0;
	
	temp=SL811Read(cDATASet);
}

void SL811(void)
{
	unsigned char temp;
	
	check_key_LED();
	if(bFlags.bits.SLAVE_FOUND)
	{
		bFlags.bits.SLAVE_FOUND=FALSE;
		    DelayMs(250);
		if(EnumUsbDev(1))				// enumerate USB device, assign USB address = #1
		{
		   	bFlags.bits.SLAVE_ENUMERATED = TRUE;	// Set slave USB device enumerated flag	
	   		DirStartCluster=0;
			DirStartCluster32=0;
		}	
	}
	if(bFlags.bits.SLAVE_REMOVED)
	{
		bFlags.bits.SLAVE_REMOVED=FALSE;
		bFlags.bits.SLAVE_ENUMERATED = FALSE;
		bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
	}
	if(bFlags.bits.bMassDevice)
	{
		bFlags.bits.bMassDevice=FALSE;
		if(EnumMassDev())
		{
			bFlags.bits.SLAVE_IS_ATTACHED = TRUE;
		}
		else
		{				
			bFlags.bits.SLAVE_IS_ATTACHED = FALSE;
			temp=SL811Read(IntStatus);
			if(!(temp & 0x40))	bFlags.bits.SLAVE_FOUND=TRUE;
		}		
	}	
}

void sl811_list(void)
{
	SL811();
	Command.CLass=0x00;
	if(DeviceInfo.FAT) UartHandler32();
	else UartHandler();
}

void sl811_open_file(char *filename)
{
	SL811();
	Command.CLass=0x01;
	memcpy((void *)Command.Parameter,(void *)filename,11);
	if(DeviceInfo.FAT) UartHandler32();
	else UartHandler();
}

void sl811_read_file(unsigned length)
{
	SL811();
	Command.CLass=0x02;
	Command.len=length;
	if(DeviceInfo.FAT) UartHandler32();
	else UartHandler();
}

void sl811_set_file_pointer(unsigned pointer)
{
	SL811();
	Command.CLass=0x03;
	Command.len=pointer;
	if(DeviceInfo.FAT) UartHandler32();
	else UartHandler();
}

void sl811_create_file(char *filename)
{
	SL811();
	Command.CLass=0x04;
	Command.len=0;			//060525
	memcpy((void *)Command.Parameter,(void *)filename,11);
	if(DeviceInfo.FAT) UartHandler32();
	else UartHandler();
}

unsigned char sl811_write_file(unsigned length)
{
//	SL811();
	Command.CLass=0x05;
	Command.len=length;
	if(DeviceInfo.FAT) 
	{
		return UartHandler32();
	}
	else 
	{
		return UartHandler();
	}
}

void sl811_read_file_to(unsigned length,unsigned char *pBuffer)
{
	SL811();
	Response.Result=0;
	Response.len=0;
	if(DeviceInfo.FAT) Response.Result=ReadFile32(length,pBuffer);
	else Response.Result=ReadFile(length,pBuffer);
}

void sl811_write_file_to(unsigned length,unsigned char *pBuffer)
{
	SL811();
	Response.Result=0;
	Response.len=0;
	if(DeviceInfo.FAT) Response.Result=WriteFile32(length,pBuffer);
	else Response.Result=WriteFile(length,pBuffer);
}

void test(short num)
{
	char str[4];
	IntToDecChar(0,str,1);
	write_fropicstr(13,50,str);
	
	unsigned char filename[11];	
	GetFileName(num, filename);
	sl811_create_file((unsigned char *)&filename);
	int j;
	
	for(j=0; j<10; j++)
	{
		int i;
		for(i=0; i<1530; i+=5)
		{
			UARTBUF[i]=0x31;
			UARTBUF[i+1]=0x31;
			UARTBUF[i+2]=0x31;
			UARTBUF[i+3]=0x31;
			UARTBUF[i+4]=0x20;
		}
		UARTBUF[i]=0x31;
		UARTBUF[i+1]=0x31;
		UARTBUF[i+2]=0x31;
		UARTBUF[i+3]=0x31;
		UARTBUF[i+4]='\r';
		UARTBUF[i+5]='\n';
		sl811_write_file(1536);
		
		IntToDecChar(j,str,1);
		write_fropicstr(13,50,str);
	}
}

//把整形转换为十进制字符串
void IntToDecChar(const int data, char *pstr, short len)
{
	int i,sPos;	
	int tempdata;
	if(data<0)
	{
		pstr[0]=0x2D;
		for(i=1; i<len; i++)
		{
			pstr[i]=0x30;
		}
		tempdata=-data;
		sPos=1;
	}
	else
	{
		for(i=0; i<len; i++)
		{
			pstr[i]=0x30;
		}
		tempdata=data;
		sPos=0;
	}
	char tempbuf[10];
	int temp,tempint,tempremd;
	temp=tempdata;
	tempint=tempdata;
	i=0;
	while(1)
	{
		tempint/=10;
		tempremd=temp-tempint*10;
		if(tempint==0)
		{
			tempbuf[i++]=0x30+tempremd;
			break;
		}
		tempbuf[i++]=0x30+tempremd;
		temp=tempint;
	}
	int length=i;
	if(length<len)	//考虑最短长度
	{
		int detalen=len-length;
		if(data<0)
		{
			sPos=detalen+1;
		}
		else
		{
			sPos=detalen;
		}
	}	
	for(i=length-1; i>=0; i--)
	{
		pstr[sPos++]=tempbuf[i];
	}
	pstr[sPos]=0x0;
	return;
}

void GetFileName(short num, char filename[])
{
	char str[2];
	IntToDecChar(num,str,2);
	char name[11];
	filename[0]=0x52;
	filename[1]=0x45;
	filename[2]=0x43;
	filename[3]=0x4f;
	filename[4]=0x52;
	filename[5]=0x44;
	filename[6]=str[0];
	filename[7]=str[1];
	filename[8]=0x54;
	filename[9]=0x58;
	filename[10]=0x54;
}

⌨️ 快捷键说明

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