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

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

?? usbhost.c

?? printer usb
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*
 *  Start of Zoran Standard Header
 *  Copyright (c) 2003 - 2004 Zoran Corporation.
 *  
 *  
 *  All rights reserved.  Proprietary and confidential.
 *  
 *  DESCRIPTION for usbhost.c
 *  	USB Host
 *  
 *  NEW HISTORY COMMENT (description must be followed by a blank line)
 *  <Enter change description here>

 *  ===== HISTORY of changes in //depot/misc/projects/tps/usb/usbhost.c
 *  
 *  1/Jul/04 #49 lee I forgot to run stdhdr; sorry.
 *  1/Jul/04 #48 lee Fixed window in power-on sequence where PictBridge could
 *  grab the job lock before a maintenance task had a change to run.
 *  30/Jun/04 #47 ebradsha Reinstated changes from #45.  But make sure we set *retCount in early
 *  return in PTP_USB_Read_Timed and _Write_Timed.
 *  30/Jun/04 #46 ebradsha Back out change #45.  May be related to recent hangs.
 *  30/Jun/04 #45 lee Make interrupt polling timing more accurate; fix bug.
 *  28/Jun/04 #44 lee Added 8-second delay before camera enumeration
 *  after printer is first powered on.
 *  23/Jun/04 #43 lee Fix for tracking transfer counts properly.
 *  18/Jun/04 #42 lee Fix issues with PB camera connected during printer power-on.
 *  10/Jun/04 #41 lee If printer is powered off, stop USB host communication.
 *  10/Jun/04 #40 lee Toggle DATAx after sending OUT null packet.
 *  9/Jun/04 #39 lee Return correct byte count for PTP_USB_Write_Timed()
 *  on incomplete transfer due to PTP_USB_NAK return; also, add zero-length
 *  packet if write size is integral multiple of packet size.
 *  28/May/04 #38 ebradsha Fix unsigned math error in PTP_USB_Write_Timed().
 *  28/May/04 #37 ebradsha Fix return math in PTP_USB_Write_Timed() for full packet.
 *  27/May/04 #36 bhebeise Return bytes actually sent by PTP_USB_Write_Timed(), commented-out PTP_USB_Write()
 *  19/May/04 #35 lee Fix return count for doGetEvent & doGetDeviceStatus
 *  19/May/04 #34 lee Fix doSICD_Class() so it will return command data.
 *  13/May/04 #33 lee PictBridge has to read device status before STALL is cleared.
 *  13/May/04 #32 lee Fix USB STALL code.
 *  13/May/04 #31 ebradsha PTP_SND_RCV_DBG for interrupt packet data.
 *  26/Apr/04 #30 lee Added versions of PTP read and write routines
 *  that return after a requested time, even if I/O doesn't take place.
 *  21/Apr/04 #29 lee Fix enumeration retry bug; reduce read failure timeout.
 *  21/Apr/04 #28 lee Fix NAKlimit setting for interrupt endpoint.
 *  21/Apr/04 #27 lee Fix MSCLASS_HOST_PASSTHROUGH array argument errors.
 *  13/Apr/04 #26 mrhines Fixed compiler errors when building with -DMSCLASS_HOST_PASSTHROUGH
 *  10/Apr/04 #25 ebradsha Retry after failing to enumerate (helps Canon Rebel).
 *  10/Apr/04 #24 ebradsha Slow down interrupt polling.  (Based on testing with Sanyo, Fuji cameras.)
 *  10/Apr/04 #23 ebradsha Now aborts PTP I/O if interrupt endpoint packet received.
 *  6/Apr/04 #22 lee Add interrupt poll to PTP reads/writes for Fuji
 *  30/Mar/04 #21 lee Added WriteProtected arg to CAMERA_GetMemoryCardStatus(),
 *                    fixed SetInterface[] value.
 *  26/Mar/04 #20 ebradsha Change PTP_USB_ReadInterrupt() to indicate NAK, separate from 0 length data.
 *  10/Mar/04 #19 lee Fix permissions (remove execute permission)
 *  10/Mar/04 #18 lee Fix compiler warnings: ptr argument agreement.
 *  23/Feb/04 #17 lee Add support for non-PictBridge device reporting.
 *  12/Feb/04 #16 lee Update Passthrough code for
 *  new ...GetMemoryCardStatus() routines.
 *  11/Feb/04 #15 lee Force DMA buffers into non-cachable memory address space.
 *  27/Jan/04 #14 lee Move immediately from LISR to HISR; add volatile
 *  to variables shared between ISR and task levels.
 *  26/Jan/04 #13 lee Detected unrecoverable NAK errors; fix reentrancy
 *  problem in MSCLASS_HOST_PASSTHROUGH mode.
 *  23/Jan/04 #12 lee Remove unused MEMORY_CARD_READER reference
 *  23/Jan/04 #11 lee Fix EOF errors by increasing SOF_THRESHOLD and
 *  ignoring EOF errors if they do occur.
 *  22/Jan/04 #10 dmerritt New build path.  Assume we're doing PictBridge.
 *  20/Jan/04 #9 lee Fix MSCLASS_HOST_PASSTHROUGH regression.
 *  22/Dec/03 #8 lee PictBridge fix.
 *  19/Dec/03 #7 dmerritt Local copy of mydoPictbridge should be static.
 *  19/Dec/03 #6 dmerritt Make builds work from the zipped archive.
 *  12/Dec/03 #5 lee Fixes for PictBridge
 *  11/Dec/03 #4 lee Handle USB errors properly.
 *  5/Dec/03 #3 emiller Allow external tuning of task stack sizes and priorities
 *  1/Dec/03 #2 lee Moved misplaced endif.
 *  26/Nov/03 #1 lee Created.
 *  
 *  End of Zoran Standard Header
 */
#ifndef BOOTCODE
#include "univ.gh"
#include "arch.h"
#include "util.h"
#include "pile.h"
#include "dbg.h"
#include "ts.h"
#include "bios.h"
#include "nucleus.h"
#include "oti4100.h"
#include "lstring.h"
#include "propman.h"
#include "usbhost.h"

#include "usb.h"
#include "usbh.h"
#include "usbmass.h"

#ifndef USBH_VERBOSE
#define USBH_VERBOSE 1
#endif

#if USBH_VERBOSE
#define VPRINT PSPRINTF
#else
#define VPRINT if(0)PSPRINTF
#endif

#define _CODE(_rs)    ((_rs >> 24) & 255)
#define _ISTATUS(_rs) ((_rs >> 16) & 255)
#define _ERROR(_rs)   ((_rs >>  8) & 255)
#define _STATUS(_rs)  (_rs & 255)

#ifndef USB_HOST_DEBUG_LOG
#define DEBUG_LOG(_a, _s)
#define DEBUG_DUMP(_a)
#define DUMP_CODE(_a)
#define DBPRINT if(0)PSPRINTF
#else

/******************************************************************************/
/* DEBUG CODE TO LOG INTERRUPTS - not required for normal operation           */

#define DBPRINT if(1)PSPRINTF

#define DCODE_CNT 250
Uint32 usb_debug_status[DCODE_CNT];
int usb_debuginx = 0, usb_debugoutx = 0;

static struct {
    char *name;
} cn[13] = {
    "NCODE ",   /* USBH_NOCODE 0 */
    "ERROR ",   /* USBH_ERROR  1 */
    "RESET ",   /* USBH_RESET  2 */
    "ATTCH ",   /* USBH_ATTACH 3 */
    "STALL ",   /* USBH_STALL  4 */
    "INTNAK",   /* USBH_INTNAK 5 */
    "DONE  ",   /* USBH_DONE   6 */
    "HCAN  ",   /* USBH_HCAN   7 */
    "NAK   ",   /* USBH_NAK    8 */
    "OUT   ",   /* USBH_OUT    9 */
    "IN    ",   /* USBH_IN    10 */
    "OUT0  ",   /* USBH_OUT0  11 */
    "IN0   "    /* USBH_IN0   12 */
};

static void DUMP_CODE(Uint32 rstatus)
{
    if (_CODE(rstatus) > 12) {
        PSPRINTF("***  %02x %02x %02x %02x\n", _CODE(rstatus),
                 _ISTATUS(rstatus), _ERROR(rstatus), _STATUS(rstatus));
    }
    else {
        PSPRINTF("%s", cn[_CODE(rstatus)].name);

        if (_ISTATUS(rstatus)) {
            PSPRINTF(", ISTAT %02x:", _ISTATUS(rstatus));
            if (_ISTATUS(rstatus) & 0x01) PSPRINTF(" RST");
            if (_ISTATUS(rstatus) & 0x02) PSPRINTF(" ERR");
            if (_ISTATUS(rstatus) & 0x04) PSPRINTF(" SOF");
            if (_ISTATUS(rstatus) & 0x08) PSPRINTF(" TDN");
            if (_ISTATUS(rstatus) & 0x10) PSPRINTF(" SLP");
            if (_ISTATUS(rstatus) & 0x40) PSPRINTF(" ATT");
            if (_ISTATUS(rstatus) & 0x80) PSPRINTF(" STL");
        }

        if (_ERROR(rstatus)) {
            PSPRINTF(",  ERROR %02x:", _ERROR(rstatus));
            if (_ERROR(rstatus) & 0x01) PSPRINTF(" PID ERR");
            if (_ERROR(rstatus) & 0x02) PSPRINTF(" EOF ERR");
            if (_ERROR(rstatus) & 0x04) PSPRINTF(" CRC ERR");
            if (_ERROR(rstatus) & 0x08) PSPRINTF(" ALG ERR");
            if (_ERROR(rstatus) & 0x10) PSPRINTF(" BUSTURN");
            if (_ERROR(rstatus) & 0x20) PSPRINTF(" DMA");
            if (_ERROR(rstatus) & 0x40) PSPRINTF(" OWN");
            if (_ERROR(rstatus) & 0x80) PSPRINTF(" STUFF");
        }

        PSPRINTF(" - EP%d %s %s\n", (_STATUS(rstatus) >> 4),
                 ((_STATUS(rstatus) & 8) ? "IN ":"OUT"),
                 ((_STATUS(rstatus) & 4) ? "ODD":"EVN"));
    }
}

#define DEBUG_LOG(_a, _s) \
    usb_debug_status[usb_debuginx] = (_a << 24) | _s; \
    if (++usb_debuginx == DCODE_CNT)                  \
        usb_debuginx = 0;                             \
    if (usb_debuginx == usb_debugoutx) {              \
        if (--usb_debuginx < 0)                       \
            usb_debuginx = DCODE_CNT - 1;             \
    }

static void DUMP_CODE_I(Uint32 rstatus)
{
    if (_CODE(rstatus) > 12) {
        PSPRINTF("***  %02x %02x %02x %02x\n", _CODE(rstatus),
                 _ISTATUS(rstatus), _ERROR(rstatus), _STATUS(rstatus));
    }
    else {
        PSPRINTF("%s", cn[_CODE(rstatus)].name);

        if (_ISTATUS(rstatus)) {
            PSPRINTF(", ISTAT %02x:", _ISTATUS(rstatus));
            if (_ISTATUS(rstatus) & 0x01) PSPRINTF(" RST");
            if (_ISTATUS(rstatus) & 0x02) PSPRINTF(" ERR");
            if (_ISTATUS(rstatus) & 0x04) PSPRINTF(" SOF");
            if (_ISTATUS(rstatus) & 0x08) PSPRINTF(" TDN");
            if (_ISTATUS(rstatus) & 0x10) PSPRINTF(" SLP");
            if (_ISTATUS(rstatus) & 0x40) PSPRINTF(" ATT");
            if (_ISTATUS(rstatus) & 0x80) PSPRINTF(" STL");
        }

        if (_ERROR(rstatus)) {
            PSPRINTF(",  ERROR %02x:", _ERROR(rstatus));
            if (_ERROR(rstatus) & 0x01) PSPRINTF(" PID ERR");
            if (_ERROR(rstatus) & 0x02) PSPRINTF(" EOF ERR");
            if (_ERROR(rstatus) & 0x04) PSPRINTF(" CRC ERR");
            if (_ERROR(rstatus) & 0x08) PSPRINTF(" ALG ERR");
            if (_ERROR(rstatus) & 0x10) PSPRINTF(" BUSTURN");
            if (_ERROR(rstatus) & 0x20) PSPRINTF(" DMA");
            if (_ERROR(rstatus) & 0x40) PSPRINTF(" OWN");
            if (_ERROR(rstatus) & 0x80) PSPRINTF(" STUFF");
        }

        PSPRINTF(" - EP%d %s %s\n", (_STATUS(rstatus) >> 4),
                 ((_STATUS(rstatus) & 8) ? "IN ":"OUT"),
                 ((_STATUS(rstatus) & 4) ? "ODD":"EVN"));
    }
}

static void DEBUG_DUMP(void)
{
    Uint32 rstatus;

    while (usb_debugoutx != usb_debuginx) {
        rstatus = usb_debug_status[usb_debugoutx];
        if (++usb_debugoutx == DCODE_CNT)
            usb_debugoutx = 0;
        DUMP_CODE_I(rstatus);
    }
}
#endif
/*                            end of debug code                               */
/******************************************************************************/

/* front-panel flag to tell if power is on or off */
extern int g_powerOn;
extern int g_powerWasOff;

/* Prototype for interrupts off/on functions */
void armIntsOff(void);
void armIntsOn(void);

/* Just turn off ARM chip interrupts for brief protection. */
#define ARM_INTS_OFF armIntsOff();
#define ARM_INTS_ON  armIntsOn();

/* For protection over longer periods, only disable the USB interrupt. */
#define USBH_INTS_OFF {armIntsOff();*(unsigned long *)EXMSK1A &=~1;armIntsOn();}
#define USBH_INTS_ON  {armIntsOff();*(unsigned long *)EXMSK1A |= 1;armIntsOn();}

#define FS_CTRL_PKCT_SIZE    64
#define FS_BULK_PKCT_SIZE    64

/*
 * Start-of-Frame byte-count-times threshold for starting a worst-case
 * transfer followed by ACK or NAK without colliding with next SOF.
 */
#define SOF_THRESHOLD  100

#define PIPECNT 4
#define BUFCOUNT (PIPECNT+1)    /* 1 buffer for each pipe + 1 control setup */
#define USB_BDT_PAGE    ( (Uint32) USB10BDT0REG0 )

#define MEM32_ALIGN(n)      (((Uint32)(n)) + (-((Uint32)(n)) & 31))

/* Insertion delay - 100ms. min USB spec.: 9.1.2, #3, pg. 243 */
#define USB_DEBOUNCE_DELAY          (105*1000)
static TimeVal debounce_delay = {0, USB_DEBOUNCE_DELAY};

/* Reset delay (TDRSTR) - 50ms. min, USB spec.: 7.1.7.5, pg. 153 */
#define USB_RESET_DELAY             (55*1000)
static TimeVal reset_delay   = {0, USB_RESET_DELAY};

/* Reset recovery time (TRSTRCY) - 10ms. min, USB spec.: 7.1.7.5, pg. 153 */
#define USB_RESET_RECOVERY_DELAY    (15*1000)
static TimeVal recover_delay = {0, USB_RESET_RECOVERY_DELAY};

/* usb_host.state values: */
#define CNTRL_SETUP 1
#define PROCESS_IN  2
#define PROCESS_OUT 3
#define PROCESS_NUL 4
#define CNTRL_LAST  5
#define NO_REQUEST  6

/* usb_host.code values: */
#define USBH_NOCODE 0
#define USBH_ERROR  1
#define USBH_RESET  2
#define USBH_ATTACH 3
#define USBH_STALL  4
#define USBH_INTNAK 5
#define USBH_DONE   6
#define USBH_HCAN   7
#define USBH_NAK    8
#define USBH_OUT    9
#define USBH_IN    10
#define USBH_OUT0  11
#define USBH_IN0   12
#define USBH_INTR  13

/* VUSB Buffer Descriptor Format */
typedef struct {
    Uint8 PID;      /* 7:own 6:data0/1 5-2:pid 1-0:bch bits */
    Uint8 BC;       /* Byte Count Low bits */
    Uint8 ADDRL;
    Uint8 ADDRH;
} BDT_STRUCT;

typedef struct {
    Uint8 pipe_type;
    Uint8 EP;
    Uint8 pksize;
    Uint8 type;
    Uint8 pid_ep;
    Uint8 DATAx;

    Uint8 *setup_bf;
    Uint8 *pipe_bf;

    Uint8 *io_bf;
    Uint32 length;
    Uint32 count;
    Uint32 NAKtime;
    Uint32 NAKstart;
    BDT_STRUCT *bdt;
} PIPE_STRUCT;

static PIPE_STRUCT pipe[PIPECNT];

#define PIPE_CTL 0
#define PIPE_IN  1
#define PIPE_OUT 2
#define PIPE_INT 3

static Uint32 ipoll_lasttime = 0;
static Uint32 usbhost_poll_msec = 50;

static Uint8 dev_request_buffer[256];

#define BFSIZE_ALLOC (2*(BUFCOUNT+1)*FS_BULK_PKCT_SIZE)
#define BFSIZE (BUFCOUNT*FS_BULK_PKCT_SIZE)

static Uint32 abuffers[(BFSIZE_ALLOC+3)/4];

#define CODE_CNT 4
typedef struct {
    volatile PIPE_STRUCT *cur_pipe;
    volatile Boolean even_odd_OUT;
    volatile Boolean even_odd_IN;
    volatile Uint32 state;
    volatile Boolean reset_required;
    volatile Uint32 USB_addr;
    volatile BDT_STRUCT nxt_bdt;
    volatile Uint32 code_status_error[CODE_CNT];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区日本一区韩国一区| 欧美日韩激情一区| 成人视屏免费看| 一本大道av一区二区在线播放| 成人高清av在线| 欧美伦理电影网| 日韩av电影天堂| 从欧美一区二区三区| 欧美日韩国产免费一区二区 | 日本aⅴ免费视频一区二区三区| 精品制服美女久久| 一本高清dvd不卡在线观看| 欧美国产1区2区| 欧美日韩久久久久久| 97久久人人超碰| 国产精品素人一区二区| 成人福利视频在线看| 欧美一区二区三区四区视频| 欧美国产激情一区二区三区蜜月| 免费成人在线网站| 色婷婷综合久久久中文字幕| 精品国产91亚洲一区二区三区婷婷| 中文字幕制服丝袜一区二区三区 | 成人午夜碰碰视频| 欧美日韩五月天| 国产精品久久看| 不卡一区在线观看| 久久精品日韩一区二区三区| 亚洲成人www| 91老司机福利 在线| 亚洲国产精品成人综合| 久久99精品久久久久| 日韩一卡二卡三卡| 麻豆精品视频在线观看| 欧美久久一二三四区| 亚洲在线观看免费视频| 欧洲精品视频在线观看| 亚洲成av人片在线观看| 日韩一二三区视频| 国产精品一区二区久激情瑜伽| 欧美成人猛片aaaaaaa| 国产福利不卡视频| 一区二区三区小说| 精品国产成人系列| 成人精品免费看| 亚洲成人精品影院| 亚洲精品一线二线三线| 成人理论电影网| 美腿丝袜亚洲三区| 日韩一区在线播放| 欧美一区二区精品| 成人激情午夜影院| 丝袜国产日韩另类美女| 久久精品欧美一区二区三区麻豆| 色婷婷亚洲综合| 国产精品一区二区不卡| 亚洲国产精品一区二区久久 | 国产剧情一区在线| 亚洲精品自拍动漫在线| 欧美精品精品一区| 色婷婷亚洲精品| 成人国产精品视频| 国产乱码精品一区二区三区av| 亚洲一区二区精品久久av| 国产人久久人人人人爽| 日韩一区二区三区视频在线| 色国产精品一区在线观看| 国产成人精品免费视频网站| 久久精品国产99| 蜜桃视频免费观看一区| 日韩精品视频网| 视频一区二区三区入口| 一区二区三区久久| 亚洲黄网站在线观看| 亚洲另类在线制服丝袜| 亚洲九九爱视频| 中文字幕在线观看不卡视频| 国产精品蜜臀在线观看| 中文字幕乱码一区二区免费| 久久精品视频免费| 最新成人av在线| 亚洲精品久久嫩草网站秘色| 亚洲图片激情小说| 一区二区三区国产豹纹内裤在线| 亚洲无人区一区| 麻豆精品视频在线观看免费| 国内精品伊人久久久久影院对白| 国产专区欧美精品| a亚洲天堂av| 制服.丝袜.亚洲.另类.中文| 欧美日韩综合在线| 久久女同性恋中文字幕| 亚洲欧洲日韩综合一区二区| 亚洲精品国产视频| 理论片日本一区| av毛片久久久久**hd| 欧美日韩在线免费视频| 欧美成人a在线| 亚洲蜜臀av乱码久久精品| 视频一区二区不卡| 精品亚洲免费视频| 99国产精品久久久久久久久久久| 91理论电影在线观看| 欧美丰满嫩嫩电影| 欧美精品一区二区高清在线观看| 国产日韩欧美不卡在线| 天天综合网天天综合色| 99re亚洲国产精品| 精品区一区二区| 亚洲制服丝袜在线| heyzo一本久久综合| 26uuu久久天堂性欧美| 日韩 欧美一区二区三区| 97久久精品人人做人人爽| 国产女人aaa级久久久级| 天堂在线一区二区| 欧美日韩一区二区三区在线| 亚洲免费在线播放| 色视频欧美一区二区三区| 欧美激情一区二区三区蜜桃视频| 久久精品二区亚洲w码| 日韩一区二区三区视频在线| 日本中文字幕不卡| 日韩一区二区三区三四区视频在线观看| 亚洲欧美一区二区在线观看| 99精品久久久久久| 亚洲视频免费看| 欧美日韩午夜在线| 欧美96一区二区免费视频| 欧美肥妇毛茸茸| 国产高清精品网站| 国产精品理伦片| 色综合久久久久综合99| 亚洲电影第三页| 久久综合五月天婷婷伊人| 国产成人免费视频一区| 亚洲人成影院在线观看| 欧美日韩一级二级| 久久精品国产第一区二区三区| 精品国产一区久久| 成人免费视频网站在线观看| 亚洲三级久久久| 日韩一区二区中文字幕| 国产成人aaa| 国产无人区一区二区三区| 国产精品一区二区在线看| 一区二区三区精品在线| 久久久噜噜噜久久人人看| 91网上在线视频| 国模大尺度一区二区三区| 一区二区三区欧美激情| 久久久久久免费| 国产日产欧产精品推荐色 | 中文字幕亚洲综合久久菠萝蜜| 日韩视频国产视频| 欧美色倩网站大全免费| 成人黄动漫网站免费app| 精品一二三四在线| 久久精品国产精品亚洲综合| 高清国产一区二区| 国产麻豆精品95视频| 天天综合色天天综合色h| 亚洲男同1069视频| 中文字幕精品综合| 国产视频一区二区在线| 精品精品欲导航| 国产欧美视频一区二区三区| 欧美丝袜丝交足nylons| 972aa.com艺术欧美| 成人一区二区三区中文字幕| 国产成人亚洲综合色影视| 日本不卡一区二区三区高清视频| 亚洲精品视频在线| 中文字幕日本乱码精品影院| 国产精品成人一区二区艾草 | 国内精品伊人久久久久av一坑| 日本少妇一区二区| 久久精品国产在热久久| 久久不见久久见免费视频7| 麻豆一区二区99久久久久| 久久精品久久99精品久久| 国产精品综合久久| 国产成人免费高清| 99国产麻豆精品| 欧美一区二区三区在线视频| 精品美女一区二区三区| 欧美国产成人在线| 亚洲超碰精品一区二区| 日本女人一区二区三区| 丁香婷婷综合色啪| 欧美日韩精品欧美日韩精品 | 日韩av在线免费观看不卡| 日本在线观看不卡视频| 成人福利视频网站| 91精品一区二区三区在线观看| 国产婷婷色一区二区三区| 亚洲制服丝袜在线| 丁香亚洲综合激情啪啪综合| 777亚洲妇女| 亚洲影视在线观看|