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

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

?? storage_task.c

?? 基于at90usb1287的數據存儲器例子
?? C
字號:
//!
//! @file storage_task.c,v
//!
//! Copyright (c) 2004 Atmel.
//!
//! Please read file license.txt for copyright notice.
//!
//! @brief This file manages the mass storage task.
//!
//!
//! @version 1.2 at90usb128-usbkey-demo-storage-df-1_0_4 $Id: storage_task.c,v 1.2 2006/03/13 12:53:54 rletendu Exp $
//!
//! @todo
//! @bug
//!/

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

#include "config.h"
#include "conf_usb.h"
#include "storage_task.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"
#include "modules\scsi_decoder\scsi_decoder.h"
#include "modules\control_access\ctrl_access.h"




//_____ M A C R O S ________________________________________________________





//_____ D E F I N I T I O N S ______________________________________________



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


volatile U8 cpt_sof;
extern  U8   usb_configuration_nb;

static bit ms_data_direction;
static _MEM_TYPE_SLOW_ U8  dCBWTag[4];

extern _MEM_TYPE_SLOW_ U8  g_scsi_status;
extern _MEM_TYPE_FAST_ U32 g_scsi_data_remaining;
extern bit ms_multiple_drive;
extern _MEM_TYPE_SLOW_ U8  g_scsi_command[16];


_MEM_TYPE_SLOW_ U8 usb_LUN;


void usb_mass_storage_cbw (void);
void usb_mass_storage_csw (void);

#define Usb_set_ms_data_direction_in()  (ms_data_direction = 1)
#define Usb_set_ms_data_direction_out() (ms_data_direction = 0)
#define Is_usb_ms_data_direction_in()   (ms_data_direction == 1)


//!
//! @brief This function initializes the hardware/software ressources required for storage task.
//!
//!
//! @param none
//!
//! @return none
//!
//!/
void storage_task_init(void)
{
   Leds_init();
   Usb_enable_sof_interrupt();
   df_init_spi();    // Init the board (definition of the links between the DF and AVR USB)
   df_mem_init();    // Init the hw/sw ressources required to drive the DF.
}





//! @brief Entry point of the mass storage task management
//!
//! This function links the mass storage SCSI commands and the USB bus.
//!
//!
//! @param none
//!
//! @return none
void storage_task(void)
{
   if (Is_device_enumerated())
   {
      Usb_select_endpoint(EP_MS_OUT);
      if (Is_usb_receive_out())
      {
         usb_mass_storage_cbw();
         usb_mass_storage_csw();
      }
   }
}



//! @brief sof_action
//!
//! This function increments the cpt_sof counter each times
//! the USB Start Of Frame interrupt subroutine is executed (1ms)
//! Usefull to manage time delays
//!
//! @warning Code:?? bytes (function code length)
//!
//! @param none
//!
//! @return none
void sof_action()
{
   cpt_sof++;
}


//! @brief USB Command Block Wrapper (CBW) management
//!
//! This function decodes the CBW command and stores the SCSI command
//!
//! @warning Code:?? bytes (function code length)
//!
//! @param none
//!
//! @return none
void usb_mass_storage_cbw (void)
{
bit cbw_error;
U8  c;
U8  dummy;

   cbw_error = FALSE;
   Usb_select_endpoint(EP_MS_OUT);           //! check if dCBWSignature is correct
   if (0x55 != Usb_read_byte())
      { cbw_error = TRUE; } //! 'U'
   if (0x53 != Usb_read_byte())
      { cbw_error = TRUE; } //! 'S'
   if (0x42 != Usb_read_byte())
      { cbw_error = TRUE; } //! 'B'
   if (0x43 != Usb_read_byte())
      { cbw_error = TRUE; } //! 'C'

   dCBWTag[0] = Usb_read_byte();             //! Store CBW Tag to be repeated in CSW
   dCBWTag[1] = Usb_read_byte();
   dCBWTag[2] = Usb_read_byte();
   dCBWTag[3] = Usb_read_byte();
	
   LSB0(g_scsi_data_remaining) = Usb_read_byte();
   LSB1(g_scsi_data_remaining) = Usb_read_byte();
   LSB2(g_scsi_data_remaining) = Usb_read_byte();
   LSB3(g_scsi_data_remaining) = Usb_read_byte();


   if (Usb_read_byte() != 0x00)              //! if (bmCBWFlags.bit7 == 1) {direction = IN}
   {
      Usb_set_ms_data_direction_in();
      if (cbw_error)
      {
         Usb_ack_receive_out();
         Usb_select_endpoint(EP_MS_IN);
         Usb_enable_stall_handshake();
         return;
      }
   }
   else
   {
      Usb_set_ms_data_direction_out();
      if (cbw_error)
      {
         Usb_enable_stall_handshake();
         Usb_ack_receive_out();
         return;
      }
   }

   usb_LUN = Usb_read_byte();

   if (!ms_multiple_drive)
   {
      usb_LUN = get_cur_lun();
   }

   dummy      = Usb_read_byte();                //! dummy CBWCBLength read


   for (c=0; c<16; c++)                         // store scsi_command
   {
      g_scsi_command[c] = Usb_read_byte();
   }

   Usb_ack_receive_out();

   if (Is_usb_ms_data_direction_in())
   {
      Usb_select_endpoint(EP_MS_IN);
   }

   if (TRUE != scsi_decode_command())
   {
      if (g_scsi_data_remaining != 0)
      {
         Usb_enable_stall_handshake();
      }
   }
}

//! @brief USB Command Status Wrapper (CSW) management
//!
//! This function sends the status in relation with the last CBW
//!
//!
//! @param none
//!
//! @return none
void usb_mass_storage_csw (void)
{
   Usb_select_endpoint(EP_MS_IN);
   while (Is_usb_endpoint_stall_requested())
   {
      Usb_select_endpoint(EP_CONTROL);
      if (Is_usb_receive_setup())       { usb_process_request(); }
      Usb_select_endpoint(EP_MS_IN);
   }

   Usb_select_endpoint(EP_MS_OUT);
   while (Is_usb_endpoint_stall_requested())
   {
      Usb_select_endpoint(EP_CONTROL);
      if (Is_usb_receive_setup())       { usb_process_request(); }
      Usb_select_endpoint(EP_MS_OUT);
   }


   Usb_select_endpoint(EP_MS_IN);
   while(!Is_usb_write_enabled());
                                                         //! write CSW Signature
   Usb_write_byte(0x55);                                 //! 'U'
   Usb_write_byte(0x53);                                 //! 'S'
   Usb_write_byte(0x42);                                 //! 'B'
   Usb_write_byte(0x53);                                 //! 'S'
                                                         //! write stored CBW Tag
   Usb_write_byte(dCBWTag[0]);
   Usb_write_byte(dCBWTag[1]);
   Usb_write_byte(dCBWTag[2]);
   Usb_write_byte(dCBWTag[3]);
                                                         //! write data residue value
   Usb_write_byte( ((Byte*)&g_scsi_data_remaining)[3] );
   Usb_write_byte( ((Byte*)&g_scsi_data_remaining)[2] );
   Usb_write_byte( ((Byte*)&g_scsi_data_remaining)[1] );
   Usb_write_byte( ((Byte*)&g_scsi_data_remaining)[0] );

   //! write command status
   Usb_write_byte(g_scsi_status);                        //! 0 -> PASS, 1 -> FAIL

   Usb_send_in();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡中文字幕| 粉嫩av亚洲一区二区图片| 国产亚洲欧美日韩在线一区| 91在线视频18| 日韩av中文字幕一区二区三区| 国产精品三级av| 欧美日韩在线精品一区二区三区激情 | 久久国产精品72免费观看| 中文成人av在线| 欧美大片拔萝卜| 色综合久久综合网欧美综合网| 国产一区激情在线| 日韩电影免费一区| 亚洲自拍偷拍网站| 国产精品欧美经典| 欧美激情中文字幕一区二区| 欧美夫妻性生活| 欧美一级二级三级乱码| 免费高清在线视频一区·| 亚洲欧洲另类国产综合| xvideos.蜜桃一区二区| 欧美性色aⅴ视频一区日韩精品| 成人国产一区二区三区精品| 久久激情五月激情| 日日夜夜免费精品视频| 一个色综合av| 亚洲色图色小说| 国产精品久久二区二区| 久久久久久久久伊人| 日韩一级欧美一级| 9191国产精品| 91麻豆精品国产91久久久久| 欧美精品一区二区三区蜜臀| 欧美一区二区三区爱爱| 欧美精三区欧美精三区| 欧美视频完全免费看| 麻豆一区二区三区| 亚欧色一区w666天堂| 亚洲自拍另类综合| 一区二区三区四区av| 亚洲欧美激情视频在线观看一区二区三区 | 久久精品视频免费| 欧美精彩视频一区二区三区| 国产区在线观看成人精品| 久久九九久久九九| 日本一区二区成人在线| 国产精品免费看片| 一区二区三区四区五区视频在线观看| 亚洲天天做日日做天天谢日日欢| 国产精品福利电影一区二区三区四区| 欧美国产日本韩| 亚洲欧洲精品成人久久奇米网| 亚洲欧洲韩国日本视频| 亚洲男人的天堂av| 亚洲3atv精品一区二区三区| 日产国产高清一区二区三区| 国产一区二三区| av在线一区二区三区| 在线一区二区观看| 一区二区视频在线| 亚洲欧美色图小说| 亚洲另类春色校园小说| 亚洲一区二区视频| 亚洲mv在线观看| 亚洲成a人片在线不卡一二三区| 亚洲视频一区二区在线观看| 久久久久久麻豆| 久久伊99综合婷婷久久伊| 日韩欧美中文字幕制服| 欧美成人性福生活免费看| 欧美精品一区二区三区很污很色的| 亚洲蜜臀av乱码久久精品| 亚洲人妖av一区二区| 亚洲在线一区二区三区| 亚洲黄网站在线观看| 一区二区视频在线| 五月婷婷久久丁香| 日本成人在线不卡视频| 狠狠色丁香久久婷婷综合_中| 国产一区亚洲一区| a4yy欧美一区二区三区| 色国产精品一区在线观看| 91麻豆视频网站| 欧美人动与zoxxxx乱| 99久久国产综合色|国产精品| 99精品国产视频| 欧美视频完全免费看| 91精品国产综合久久小美女 | 欧美日韩久久久| 欧美巨大另类极品videosbest | 成人欧美一区二区三区在线播放| 国产精品久久网站| 亚洲va韩国va欧美va精品| 国内外成人在线视频| 色综合久久综合网97色综合| 欧美日韩高清一区二区三区| 欧美精品丝袜中出| 26uuu精品一区二区| 亚洲婷婷综合久久一本伊一区| 波多野结衣中文字幕一区二区三区| 99精品久久只有精品| 欧美日韩美少妇| 国产无人区一区二区三区| 亚洲激情在线激情| 久久疯狂做爰流白浆xx| 91在线小视频| 91精品麻豆日日躁夜夜躁| 91浏览器入口在线观看| 色哟哟欧美精品| 日韩情涩欧美日韩视频| 亚洲人成影院在线观看| 国内久久婷婷综合| 欧美精品在线一区二区| 国产欧美视频在线观看| 亚欧色一区w666天堂| 成人av在线资源网站| 日韩精品一区二区三区在线| 亚洲免费伊人电影| 国产精品亚洲一区二区三区妖精| 99精品视频在线免费观看| 日韩亚洲欧美高清| 一区二区三区四区在线| 懂色av一区二区三区免费观看| 欧美人xxxx| 亚洲精品高清在线| 懂色一区二区三区免费观看| 日韩视频免费直播| 中文字幕一区二区三区不卡在线| 国产一区二区三区av电影| 欧美三电影在线| 亚洲色图欧洲色图| 成人综合日日夜夜| 精品欧美黑人一区二区三区| 亚洲1区2区3区4区| 在线一区二区观看| 国产欧美日产一区| 国产乱子伦视频一区二区三区 | 久久日韩精品一区二区五区| 午夜免费久久看| 色天天综合色天天久久| 中文在线资源观看网站视频免费不卡 | 亚洲图片自拍偷拍| 91视频国产资源| 中文在线一区二区| 国产精品一二三四| 久久久久久久久久久黄色| 久久国产精品99久久人人澡| 91精品国产乱| 中文一区在线播放| 日本韩国一区二区三区视频| 中文字幕一区二区三区精华液| 成人深夜福利app| 国产精品情趣视频| 国产成人av电影在线播放| 国产欧美日韩精品在线| 激情五月婷婷综合| 国产精品久久99| 91麻豆精东视频| 亚洲靠逼com| 欧美在线999| 欧美色倩网站大全免费| 精品国产髙清在线看国产毛片| 亚洲国产乱码最新视频| 色婷婷av一区二区三区之一色屋| 中文字幕一区日韩精品欧美| 91丨九色丨蝌蚪富婆spa| 亚洲色图20p| 欧美性大战久久| 亚洲高清免费视频| 91精品在线一区二区| 午夜欧美一区二区三区在线播放| 欧美视频在线一区二区三区 | 91影院在线观看| 亚洲激情网站免费观看| 欧美特级限制片免费在线观看| 亚洲综合免费观看高清在线观看| 欧美三级日韩三级国产三级| 日本欧美一区二区在线观看| 久久亚洲精精品中文字幕早川悠里| 精品在线一区二区三区| 久久久亚洲国产美女国产盗摄| 高清不卡一区二区在线| 亚洲人成网站精品片在线观看| 欧美日韩久久久一区| 无吗不卡中文字幕| 欧美日韩中文精品| 麻豆freexxxx性91精品| 国产人成一区二区三区影院| 色999日韩国产欧美一区二区| 天天爽夜夜爽夜夜爽精品视频 | 精品国免费一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲精品在线一区二区| 91小视频在线| 日韩经典中文字幕一区| 欧美国产在线观看| 欧美日韩一区二区不卡| 国产成人亚洲综合色影视| 亚洲综合在线电影| 日韩你懂的在线播放|