📄 usbif.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 + -