📄 usbaudio.c
字号:
ep0_in_empty();
}
}
//*******************************
void set_feature(unsigned char *ppacket)
{puts("set_feature");
ep0_in_empty();
}
//*******************************
void clear_feature(unsigned char *ppacket)
{puts("clear_feature");
ep0_in_empty();
}
//*******************************
void set_address(unsigned char* ppacket)
{
out_cmd(0xd0);
out_data(*(ppacket+2)|0x80);
puts("set address");
out_cmd(0xd8);
out_data(0x01);
ep0_in_empty();
}
//*******************************
void get_descriptor(unsigned char* ppacket)
{unsigned char wvalue;
unsigned short wlength;
wvalue=*(ppacket+3);
wlength=*(ppacket+6);
switch (wvalue){
case 0x01:
{ puts("get_dev_des");
wlength=sizeof(DeviceDescr); //get_dev_des
write_ep(wlength,DeviceDescr);
break;
}
case 0x02:
{ puts("get_con_des");
if (wlength!=0x09) wlength=sizeof(ConfigDescr); //get config_des
write_ep(wlength,ConfigDescr);
break;
}
case 0x03:
{puts("get_string_des");
wlength=sizeof(StringDescr); //get string_des
write_ep(wlength,StringDescr);
break;
}
default: puts("unkonwn request");
}
}
//*******************************
void set_config(unsigned char* ppacket)
{puts("set_config");
if(*(ppacket+2)==0x01) puts("set_MIC_config_state");
else if(*(ppacket+2)==0x00) puts("set_unkown_config_state");
else puts("set_unkown_config_state");
ep0_in_empty();
}
//*******************************
void get_interface(unsigned char* ppacket)
{
unsigned char ep_buffer=0x01;
puts("get_interface");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x00);
out_cmd(0xfa);
}
//*******************************
void set_interface(unsigned char* ppacket)
{unsigned char wValue,wIndex;
wValue=*(ppacket+2);
wIndex=*(ppacket+4);
if(wIndex==0x00&&wValue==0x00) puts("Set interface 0,Alt 0");
else if(wIndex==0x01&&wValue==0x00) puts("Set interface 1,Alt 0");
else if(wIndex==0x01&&wValue==0x01) puts("Set interface 1,Alt 1");
else if(wIndex==0x02&&wValue==0x00)
{puts("Set interface 2,Alt 0");
DAC_enable=0;
}
else if(wIndex==0x02&&wValue==0x01){
puts("Set interface 2,Alt 1");
}
ep0_in_empty();
}
//*******************************
void vendor_req(unsigned char* ppacket)
{
}
//*******************************
void EP_set(unsigned char *ppacket)
{puts("set frequency");
transmit_status.SET_state=FRE_CTRL;
}
//*******************************
void FU_set(unsigned char *ppacket)
{unsigned short wValue;
wValue=*(ppacket+3);
puts("set FU_set");
if(wValue==0x01) transmit_status.SET_state=MUTE_CTRL;
else if(wValue==0x02) transmit_status.SET_state=VOL_CTRL;
else if(wValue==0x07) transmit_status.SET_state=AGC_CTRL;
//ep0_in_empty();
}
//*******************************
void FU_get(unsigned char *ppacket)
{unsigned char bmReqtype,bRequest,ep_buffer;
unsigned short wValue;
ep_buffer=0x01;
bmReqtype=*ppacket;
bRequest=*(ppacket+1);
wValue=*(ppacket+3);
wValue=(wValue<<8)|(*(ppacket+2));
if(bmReqtype==0xa1)
{
if (bRequest==0x81&&wValue==0x0100)
{puts("Mute control,GET MIN Channel 0");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x00); //01=Mute Ture,00=Mute False
out_cmd(0xfa);}
else if (bRequest==0x81&&wValue==0x0200)
{puts("GET CUR,Vol control");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x02);
out_data(0x00);
out_data(0x00); //Get current Volume;
out_cmd(0xfa);}
else if (bRequest==0x81&&wValue==0x0402)
{puts("GET CUR MID control,Channel 2 ");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x00);
out_cmd(0xfa);}
else if (bRequest==0x81&&wValue==0x0102)
{puts("GET CUR MUTE control ,Channel 2");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x00);
out_cmd(0xfa);}
else if (bRequest==0x82&&wValue==0x0200)
{puts("GET Min Vol control");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x02);
out_data(0x00);
out_data(0xC6); //Get Min Volume; 0xC600=-58db
out_cmd(0xfa);}
else if (bRequest==0x82&&wValue==0x0402)
{puts("GET MIN MID control Chanel 02");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x80); //0x80=-32db ; 0x7f=31.75db
out_cmd(0xfa);}
else if (bRequest==0x83&&wValue==0x0200)
{puts("GET Max,Vol control");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x02);
out_data(0x00);
out_data(0x54); //Get Max Volume; 0x1400=20db
out_cmd(0xfa);}
else if (bRequest==0x83&&wValue==0x0402)
{puts("GET MAX ,MID control,Channel 2");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x7F);
out_cmd(0xfa);}
else if (bRequest==0x84&&wValue==0x0200)
{puts("GET Res,Vol control");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x02);
out_data(0x00);
out_data(0x01); //Get Max Volume; 0x0100=1db
out_cmd(0xfa);}
else if (bRequest==0x84&&wValue==0x0402)
{puts("GET Res,MID control,Channel 2");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x00);
out_cmd(0xfa);}
else if (bRequest==0x81&&wValue==0x0700)
{puts("GET CUR,AGC control");
while (ep_buffer)
{ out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_data(0xf0);
out_data(0x00);
out_data(0x01);
out_data(0x00); //00=AGC False ,01=AGC true
out_cmd(0xfa);}
}
}
//*******************************
void ep0_in_empty()
{unsigned char ep_buffer=0x01;
while (ep_buffer)
{out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
out_cmd(0xf0);
out_data(0x00);
out_data(0x00);
out_cmd(0xfa);
}
//************************************************
void write_ep(unsigned char wlength, unsigned char flash *des)
{ unsigned char ep_buffer=0x01;
unsigned char i;
while (ep_buffer)
{out_cmd(0x01); //select ep0_in tep_buffer=
ep_buffer=in_data(); //
}
puts("write Ep0_in");
out_cmd(0xf0);
out_data(0x00);
if(wlength>0x10)
{ out_data(0x10);
for(i=0;i<0x10;i++)
{DATA=*des;
// printf("send[%d]=%x\n",i,*des);
des++;
wlength--;
}
}
else
{out_data(wlength);
for(i=0;i<wlength;i++)
{DATA=(*des);
// printf("send[%d]=%bx\n",i,*des);
des++;
}
wlength=0x00;
}
transmit_status.tran_length=wlength;
transmit_status.Pdata=des;
out_cmd(0xfa); //valid buffer;
}
void pcm_init(unsigned short par)
{unsigned short temp;
unsigned char i;
PORTB=0xFF;
Clr_Bit(PORTD,5); //MCU_CRTL=0; then FMT[0:2]=PORTB[0:2] in the cpld;
delay_time(10);
Clr_Bit(PORTB,2); //ML=0;
for(i=16;i>0;i--){
Set_Bit(PORTB,0); //MC=1;
delay_time(20);
Clr_Bit(PORTB,0); //MC=0;
temp=par&((unsigned short)(1<<(i-1))); //MD data
if(temp) Set_Bit(PORTB,1);
else Clr_Bit(PORTB,1);
delay_time(10);
}
Set_Bit(PORTB,0); //MC=1;
delay_time(20);
Set_Bit(PORTB,2); //ML=1;
delay_time(10);
Set_Bit(PORTD,5); //MCU_CRTL=1; then FMT[0:2]!=PORTB[0:2] in the cpld;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -