亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb_specific_request.c

?? ATMEL at90usb128 usb audio driver for win-avr
?? C
字號:
//! @file usb_specific_request.c,v
//!
//! Copyright (c) 2004 Atmel.
//!
//! Use of this program is subject to Atmel's End User License Agreement.
//! Please read file license.txt for copyright notice.
//!
//! @brief user call-back functions
//!
//! This file contains the user call-back functions corresponding to the
//! application:
//! AUDIO MICROPHONE
//!
//! @version 1.1 at90usb128-demo-audio-1_0_2 $Id: usb_specific_request.c,v 1.1 2006/03/17 09:15:46 rletendu Exp $
//!
//! @todo
//! @bug


//_____ I N C L U D E S ____________________________________________________

#include "config.h"
#include "conf_usb.h"
#include "lib_mcu\usb\usb_drv.h"
#include "usb_descriptors.h"
#include "modules\usb\device_chap9\usb_standard_request.h"
#include "usb_specific_request.h"

//_____ M A C R O S ________________________________________________________

//_____ D E F I N I T I O N ________________________________________________

//_____ P R I V A T E   D E C L A R A T I O N ______________________________

#ifdef AVRGCC
extern PGM_VOID_P pbuffer;
#else
extern U8   code *pbuffer;
#endif
extern U8   data_to_transfer;
extern bit mute;
extern S16 volume;

//_____ D E C L A R A T I O N ______________________________________________

//! This function is called by the standard usb read request function when
//! the Usb request is not supported. This function returns TRUE when the
//! request is processed. This function returns FALSE if the request is not
//! supported. In this case, a STALL handshake will be automatically
//! sent by the standard usb read request function.
//!
//! @param none
//!
//! @return none
//!
Bool usb_user_read_request(U8 type, U8 request)
{
	switch(request)
	{
      case SET_CUR:
        audio_set_cur();
        return TRUE;

      case SET_MIN:     //! Set MIN,MAX and RES not supported
      case SET_MAX:
      case SET_RES:
        return FALSE;
        break;

      case GET_CUR:
        audio_get_cur();
        return TRUE;
        break;
      case GET_MIN:
        audio_get_min();
        return TRUE;
        break;
      case GET_MAX:
        audio_get_max();
        return TRUE;
        break;
      case GET_RES:
        audio_get_res();
        return TRUE;
        break;

      default:
			return FALSE;
			break;

	}
  	return FALSE;
}



//! @brief This function configures the endpoints.
//!
//! @warning Code:xx bytes (function code length)
//!
//! @param none
//!
//! @return none
//!
void usb_user_endpoint_init(U8 conf_nb)
{
  usb_configure_endpoint(EP_AUDIO_IN,      \
                         TYPE_ISOCHRONOUS,     \
                         DIRECTION_IN,  \
                         SIZE_16,       \
                         TWO_BANKS,     \
                         NYET_ENABLED);

}


//! @brief This function returns the size and the pointer on a user information
//! structure
//!
//! @param none
//!
//! @return none
//!
Bool usb_user_get_descriptor(U8 type, U8 string)
{
	switch(type)
	{
		case STRING_DESCRIPTOR:
      	switch (string)
      	{
        		case LANG_ID:
          		data_to_transfer = sizeof (usb_user_language_id);
          		pbuffer = &(usb_user_language_id.bLength);
					return TRUE;
          		break;
        		case MAN_INDEX:
         	 	data_to_transfer = sizeof (usb_user_manufacturer_string_descriptor);
         	 	pbuffer = &(usb_user_manufacturer_string_descriptor.bLength);
					return TRUE;
          		break;
        		case PROD_INDEX:
         		data_to_transfer = sizeof (usb_user_product_string_descriptor);
          		pbuffer = &(usb_user_product_string_descriptor.bLength);
					return TRUE;
          		break;
        		case SN_INDEX:
          		data_to_transfer = sizeof (usb_user_serial_number);
          		pbuffer = &(usb_user_serial_number.bLength);
					return TRUE;
          		break;
        		default:
          		return FALSE;
			}
		default:
			return FALSE;
	}

	return FALSE;
}



void audio_get_min(void)
{
   U16 ep_num;
   U16 length;
   U16 cs;

   LSB(cs)=Usb_read_byte();
   MSB(cs)=Usb_read_byte();
   LSB(ep_num)=Usb_read_byte();
   MSB(ep_num)=Usb_read_byte();
   LSB(length)=Usb_read_byte();
   MSB(length)=Usb_read_byte();

   Usb_ack_receive_setup();
   switch (cs)
   {
      case CS_MUTE:
         Usb_write_byte(mute);
         break;
      case CS_VOLUME:
         Usb_write_byte(LOW(VOL_MIN));
         Usb_write_byte(HIGH(VOL_MIN));
         break;
   }
   Usb_send_control_in();                       /* send a ZLP for STATUS phase */
   while(!Is_usb_receive_out());
   Usb_ack_receive_out();
}

void audio_get_max(void)
{
   U16 ep_num;
   U16 length;
   U16 cs;

   LSB(cs)=Usb_read_byte();
   MSB(cs)=Usb_read_byte();
   LSB(ep_num)=Usb_read_byte();
   MSB(ep_num)=Usb_read_byte();
   LSB(length)=Usb_read_byte();
   MSB(length)=Usb_read_byte();

   Usb_ack_receive_setup();
   switch (cs)
   {
      case CS_MUTE:
         Usb_write_byte(mute);
         break;
      case CS_VOLUME:
         Usb_write_byte(LOW(VOL_MAX));
         Usb_write_byte(HIGH(VOL_MAX));
         break;
   }
   Usb_send_control_in();                       /* send a ZLP for STATUS phase */
   while(!Is_usb_receive_out());
   Usb_ack_receive_out();
}

void audio_get_res(void)
{
   U16 ep_num;
   U16 length;
   U16 cs;

   LSB(cs)=Usb_read_byte();
   MSB(cs)=Usb_read_byte();
   LSB(ep_num)=Usb_read_byte();
   MSB(ep_num)=Usb_read_byte();
   LSB(length)=Usb_read_byte();
   MSB(length)=Usb_read_byte();

   Usb_ack_receive_setup();
   switch (cs)
   {
      case CS_MUTE:
         Usb_write_byte(mute);
         break;
      case CS_VOLUME:
         Usb_write_byte(LOW(VOL_RES));
         Usb_write_byte(HIGH(VOL_RES));
         break;
   }
   Usb_send_control_in();                       /* send a ZLP for STATUS phase */
   while(!Is_usb_receive_out());
   Usb_ack_receive_out();
}

void audio_get_cur(void)
{
   U16 ep_num;
   U16 length;
   U16 cs;

   LSB(cs)=Usb_read_byte();
   MSB(cs)=Usb_read_byte();
   LSB(ep_num)=Usb_read_byte();
   MSB(ep_num)=Usb_read_byte();
   LSB(length)=Usb_read_byte();
   MSB(length)=Usb_read_byte();

   Usb_ack_receive_setup();
   switch (cs)
   {
      case CS_MUTE:
         Usb_write_byte(mute);
         break;
      case CS_VOLUME:
         Usb_write_byte(LSB(volume));
         Usb_write_byte(MSB(volume));
         break;
   }
   Usb_send_control_in();                       /* send a ZLP for STATUS phase */
   while(!Is_usb_receive_out());
   Usb_ack_receive_out();
}

void audio_set_cur(void)
{
   U16 ep_num;
   U16 length;
   U16 cs;

   LSB(cs)=Usb_read_byte();
   MSB(cs)=Usb_read_byte();
   LSB(ep_num)=Usb_read_byte();
   MSB(ep_num)=Usb_read_byte();
   LSB(length)=Usb_read_byte();
   MSB(length)=Usb_read_byte();
   Usb_ack_receive_setup();
	Usb_send_control_in();
   while(!Is_usb_receive_out());
   switch (cs)
   {
      case CS_MUTE:
         mute=Usb_read_byte();
         break;
      case CS_VOLUME:
         LSB(volume)=Usb_read_byte();
         MSB(volume)=Usb_read_byte();
         break;


   }
   Usb_ack_receive_out();
   Usb_send_control_in();

}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情中文字幕| 亚洲777理论| 日韩国产欧美在线视频| 国产成人aaa| 3751色影院一区二区三区| 国产亚洲成av人在线观看导航| 亚洲自拍偷拍麻豆| 成人网页在线观看| 精品va天堂亚洲国产| 日韩激情av在线| 色先锋aa成人| 日韩毛片在线免费观看| 久久99国产乱子伦精品免费| 欧美图区在线视频| 亚洲激情av在线| 97精品国产露脸对白| 久久欧美一区二区| 蜜桃免费网站一区二区三区| 91精品办公室少妇高潮对白| 国产精品青草综合久久久久99| 麻豆国产精品官网| 91精品免费观看| 亚洲电影视频在线| 欧美三级日本三级少妇99| 亚洲老司机在线| 91论坛在线播放| 国产精品久久久久久一区二区三区| 国产真实乱偷精品视频免| 日韩一区国产二区欧美三区| 丝袜诱惑制服诱惑色一区在线观看 | 不卡一区二区三区四区| 久久一区二区三区四区| 美女在线视频一区| 精品免费99久久| 国内精品第一页| 亚洲精品一区二区三区蜜桃下载| 蜜臀久久久99精品久久久久久| 欧美一区二区不卡视频| 免费美女久久99| 欧美r级电影在线观看| 久久福利视频一区二区| www成人在线观看| 成人免费视频国产在线观看| 国产精品美女久久久久久久久久久| 成人免费黄色在线| 一区二区三区欧美日韩| 欧美日韩视频一区二区| 另类人妖一区二区av| 久久久精品蜜桃| 91小视频在线观看| 天天av天天翘天天综合网色鬼国产| 91精品欧美久久久久久动漫| 激情综合网av| 国产精品天美传媒| 色94色欧美sute亚洲13| 日本中文一区二区三区| 国产午夜一区二区三区| 色婷婷综合久久久久中文| 五月天亚洲精品| 国产欧美日本一区视频| 欧美性xxxxx极品少妇| 免费在线观看不卡| 国产精品国产成人国产三级 | 亚洲精选视频在线| 欧美人狂配大交3d怪物一区| 麻豆国产一区二区| 国产精品久久久久久久久免费相片| 色天使色偷偷av一区二区| 美女尤物国产一区| 亚洲免费av在线| 欧美成人精品3d动漫h| 成人h精品动漫一区二区三区| 亚洲国产sm捆绑调教视频| 久久九九久久九九| 欧美日韩一区二区三区在线| 国产成人无遮挡在线视频| 亚洲高清在线精品| 国产人伦精品一区二区| 8x8x8国产精品| 成人免费视频免费观看| 麻豆传媒一区二区三区| 亚洲欧美电影一区二区| 欧美精品一区二区三区很污很色的| 99re视频精品| 国产精品一区二区久激情瑜伽| 亚洲一区视频在线| 国产婷婷一区二区| 91精品国产一区二区| 91官网在线免费观看| 成人久久久精品乱码一区二区三区 | 日本电影欧美片| 夫妻av一区二区| 日韩不卡手机在线v区| 中文字幕亚洲欧美在线不卡| 精品乱人伦一区二区三区| 欧美久久久一区| 91国偷自产一区二区使用方法| 高清视频一区二区| 国产麻豆一精品一av一免费| 天天av天天翘天天综合网色鬼国产 | 亚洲第一搞黄网站| 亚洲综合在线视频| 亚洲免费大片在线观看| 国产精品久久网站| 国产精品沙发午睡系列990531| 精品国产乱码91久久久久久网站| 欧美日韩和欧美的一区二区| 一本一本久久a久久精品综合麻豆| 国产精品中文有码| 国产精品一区二区你懂的| 精品一区二区在线看| 久久不见久久见免费视频1| 午夜精品影院在线观看| 亚洲成人一区在线| 午夜在线电影亚洲一区| 午夜久久久久久久久| 午夜欧美在线一二页| 日韩精品亚洲专区| 美女一区二区视频| 久久97超碰色| 国产精品18久久久久久久久久久久| 精品伊人久久久久7777人| 国产真实乱子伦精品视频| 国产精品一区二区三区四区 | 色狠狠综合天天综合综合| 一本色道久久综合精品竹菊| 日本丶国产丶欧美色综合| 在线看国产一区| 欧美日韩亚洲高清一区二区| 91精品国产福利| 精品国产人成亚洲区| 日本一区二区视频在线观看| 国产农村妇女精品| 亚洲精品成人a在线观看| 午夜精品一区在线观看| 极品美女销魂一区二区三区免费| 国产一区二区0| 一本一本久久a久久精品综合麻豆| 色视频一区二区| 日韩欧美中文字幕一区| 久久精品综合网| 亚洲精品国产高清久久伦理二区| 午夜伦欧美伦电影理论片| 理论片日本一区| av激情亚洲男人天堂| 欧美日韩成人一区| 久久免费看少妇高潮| 亚洲黄色片在线观看| 免费在线观看成人| www.色精品| 日韩欧美卡一卡二| 中文字幕亚洲欧美在线不卡| 日韩中文字幕麻豆| 不卡一区在线观看| 日韩你懂的在线观看| 亚洲丝袜美腿综合| 久久精品国产久精国产爱| 成人免费三级在线| 6080亚洲精品一区二区| 中文字幕在线观看一区| 日韩国产精品久久久久久亚洲| 成人激情黄色小说| 欧美一区二区三区播放老司机 | 日韩精品一区二区三区中文不卡| 国产人成亚洲第一网站在线播放| 亚洲第一搞黄网站| jlzzjlzz亚洲日本少妇| 欧美一区二区三区人| 亚洲色图一区二区| 国产高清亚洲一区| 欧美一区二区久久| 亚洲一区在线播放| 99国产精品视频免费观看| 精品福利视频一区二区三区| 亚洲第一会所有码转帖| av爱爱亚洲一区| 国产欧美一区二区精品秋霞影院| 亚洲电影在线播放| 91久久线看在观草草青青| 国产精品人妖ts系列视频| 国产精品影视在线| 精品国产91乱码一区二区三区| 亚洲在线中文字幕| 色哟哟日韩精品| 亚洲欧美日韩久久精品| 国产999精品久久久久久绿帽| 日韩精品在线网站| 蜜臀久久99精品久久久画质超高清| 欧美色图片你懂的| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 加勒比av一区二区| 日韩欧美在线不卡| 热久久免费视频| 日韩一区二区免费在线观看| 日韩影院精彩在线| 日韩欧美一区二区久久婷婷| 日本欧美肥老太交大片| 6080日韩午夜伦伦午夜伦| 日韩国产一二三区| 日韩精品自拍偷拍|