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

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

?? iusbhandledevreq.c

?? MX1(Arm9 based)Linux USB driver
?? C
字號:
#include "prototype.h"#include "define.h"#include "mx1.h"void _iUsbHandleGetDevDscptr(void);void _iUsbHandleGetConfDscptr(void);void _iUsbHandleGetStrDscptr(void);void _iUsbReturnStrDscptr0(void);void _iUsbReturnStrDscptr2(void);void _iUsbReturnStrDscptr3(void);U8  _gUsbDevReq[8];     /* device request from host *//*const U16 _gUsbDevDscptr[9] = {    0x1201, 0x0001, 0xFF00, 0x0008, 0xC407, 0x05A0, 0x0D01, 0x0102, 0x0301 };const U16 _gUsbConfDscptr[16] = {    0x0902, 0x2000, 0x0101, 0x0080, 0x3209, 0x0400, 0x0002, 0x0500,    0x0000, 0x0705, 0x8102, 0x2000, 0x0007, 0x0502, 0x0220, 0x0000};const U16 _gUsbStrDscptr0[2] = {0x0403, 0x0904};const U16 _gUsbStrDscptr2[12] = {    0x1803, 0x5300, 0x5A00, 0x2000, 0x5500, 0x5300, 0x4200, 0x2000,    0x6400, 0x6500, 0x6D00, 0x6F00};const U16 _gUsbStrDscptr3[11] = {    0x1603, 0x4300, 0x3900, 0x4600, 0x3900, 0x3100, 0x4300, 0x3100,    0x4100, 0x4600, 0x3900};*/const U32 _gUsbDevDscptr[5] = {//    0x12011001, 0x00000008, 0xC40700A2, 0x00130000, 0x00000001 };		// assume big endian    0x12011001, 0x00000008, 0xC4070000, 0x00130000, 0x00000001 };		// assume big endianconst U32 _gUsbConfDscptr[8] = {//    0x09022000, 0x01010080, 0xFA090400, 0x00020806,    0x09022000, 0x010100C0, 0x01090400, 0x00020806,//    0x50000705, 0x81022000, 0x00070502, 0x02200000};    0x50040705, 0x81022000, 0x00070502, 0x02200000};const U32 _gUsbStrDscptr0 = 0x04030904;const U32 _gUsbStrDscptr2[7] =  {//	 0x18035300, 0x5A002000, 0x55005300, 0x42002000,//  0x64006500, 0x6D006F00};	 0x18034D00, 0x58003100, 0x20005500, 0x53004200,	 0x20006400, 0x65006D00, 0x00006F00};const U32 _gUsbStrDscptr3[6] = {    0x16034300, 0x39004600, 0x39003100, 0x43003100,    0x41004600, 0x00003900};void _iUsbHandleDevReq(){    U32 fifoWord;    U8  i, j;    /* read device request data from FIFO */    j = 0;    for (i=0; i<2; i++)    {        fifoWord = _reg_USBD_EP0_FDAT;        _gUsbDevReq[j++] = (U8)(fifoWord >> 24);        _gUsbDevReq[j++] = (U8)(fifoWord >> 16);        _gUsbDevReq[j++] = (U8)(fifoWord >> 8);        _gUsbDevReq[j++] = (U8)fifoWord;    }/*DPRINTK("Device Request: ");for (i=0; i<8; i++)	DPRINTK("0x%02x ", _gUsbDevReq[i]);DPRINTK("\n");*/    /* decode device request */    if ((_gUsbDevReq[0] = 0x80) && (_gUsbDevReq[1] = 0x06))    {        switch (_gUsbDevReq[3])        {            case 0x01:  // device descriptor                _iUsbHandleGetDevDscptr();                break;            case 0x02:  // configuration descriptor                _iUsbHandleGetConfDscptr();                break;            case 0x03:  // string descriptor                _iUsbHandleGetStrDscptr();                break;        }    }	 // turn on SOF interrupt to signal CMD_OVER bit	 _reg_USBD_INTR_MASK &= ~(SOF_MASK);}void _iUsbHandleGetDevDscptr(){//DPRINTK("Device Descr\n");	 /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbDevDscptr[0];    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    _reg_USBD_EP0_FDAT = _gUsbDevDscptr[1];//    _reg_USB_CTRL |= USB_CTRL_CMOV_MASK;    /* if length is not exactly 0x12, just return one packet */    /* otherwise, return all 0x12 bytes */    if (_gUsbDevReq[6] == 0x12)    {        _reg_USBD_EP0_FDAT = _gUsbDevDscptr[2];        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        _reg_USBD_EP0_FDAT = _gUsbDevDscptr[3];		// due a bug in gcc, half-word access is compiled into word access		// so we'll use byte access instead      *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbDevDscptr[4]>>8);      _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet      *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)_gUsbDevDscptr[4];	}}void _iUsbHandleGetConfDscptr(){    /* if length is exactly 9, return 9 bytes only */    if (_gUsbDevReq[6] == 0x09)    {        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[0];        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[1];        /* here comes the last byte */        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbConfDscptr[2]>>24);    }    else    /* otherwise, return all 32 bytes */    {        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[0];        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[1];        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[2];        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[3];        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[4];        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[5];        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[6];        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        _reg_USBD_EP0_FDAT = _gUsbConfDscptr[7];        /* need to end with a zero length packet */        _reg_USBD_EP0_STAT |= ZLPS_MASK;    // next one is a zero length packet    }}void _iUsbHandleGetStrDscptr(){    switch (_gUsbDevReq[2])    {        case 0:            _iUsbReturnStrDscptr0();            break;        case 2:            _iUsbReturnStrDscptr2();            break;        case 3:            _iUsbReturnStrDscptr3();            break;    }}void _iUsbReturnStrDscptr0(){    /* if length is 2, return 2 bytes only */    if (_gUsbDevReq[6] == 0x02)    {        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr0>>24);        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr0>>16);    }    else    /* otherwise, return all 4 bytes */    {        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr0>>24);        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr0>>16);        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr0>>8);        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)_gUsbStrDscptr0;    }//    _reg_USBD_EP0_ISR |= USBD_EPINTR_EOT_MASK; // clear EOT intr//    _reg_USBD_EP0_MASK = ENABLE_DEVREQ & ENABLE_EOT;}void _iUsbReturnStrDscptr2(){    /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbStrDscptr2[0];    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    _reg_USBD_EP0_FDAT = _gUsbStrDscptr2[1];    /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbStrDscptr2[2];    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    _reg_USBD_EP0_FDAT = _gUsbStrDscptr2[3];    /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbStrDscptr2[4];    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    _reg_USBD_EP0_FDAT = _gUsbStrDscptr2[5];    *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr2[6]>>8);    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)_gUsbStrDscptr2[6];	 /* the next packet is an zero-length one *///    _reg_USBD_EP0_STAT |= ZLPS_MASK;//    _reg_USBD_EP0_ISR |= USBD_EPINTR_EOT_MASK; // clear EOT intr//    _reg_USBD_EP0_MASK = ENABLE_DEVREQ & ENABLE_EOT;}void _iUsbReturnStrDscptr3(){    /* if length is 2, return 2 bytes only */    if (_gUsbDevReq[6] == 0x02)    {        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr3[0]>>24);        _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet        *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr3[0]>>16);    }    else    /* otherwise return all 22 bytes */    {    /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbStrDscptr3[0];    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    _reg_USBD_EP0_FDAT = _gUsbStrDscptr3[1];    /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbStrDscptr3[2];    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    _reg_USBD_EP0_FDAT = _gUsbStrDscptr3[3];    /* 8 bytes per packet */    _reg_USBD_EP0_FDAT = _gUsbStrDscptr3[4];    *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)(_gUsbStrDscptr3[5]>>8);    _reg_USBD_EP0_FCTRL |= 0x20000000;  // next write is last one of packet    *((volatile U8 *)((U32)&_reg_USBD_EP0_FDAT+3)) = (U8)_gUsbStrDscptr3[5];    }//    _reg_USBD_EP0_ISR |= USBD_EPINTR_EOT_MASK; // clear EOT intr//    _reg_USBD_EP0_MASK = ENABLE_DEVREQ & ENABLE_EOT;    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男帅同性gay1069| 亚洲人精品一区| 欧美激情在线看| 亚洲欧美日韩小说| 国产一区二区免费视频| 97久久人人超碰| 欧美一级欧美一级在线播放| 久久奇米777| 亚洲大片精品永久免费| 国产高清精品网站| 欧美久久一二区| 国产精品久久精品日日| 国内精品久久久久影院薰衣草| 99久久免费精品| 精品国产乱码久久久久久牛牛| 中文字幕日韩av资源站| 国产一区二区三区久久久| 91免费视频大全| 久久久久成人黄色影片| 日韩av网站免费在线| 91小视频免费观看| 久久久久久久久久久久久久久99 | 久久av老司机精品网站导航| 欧美日韩精品一区二区三区四区| 欧美激情一区三区| 国产精品一品视频| 欧美精品一区二区久久久| 五月婷婷综合在线| 欧美性淫爽ww久久久久无| 国产精品国产三级国产| 国产精品综合网| 欧美成人一级视频| 日韩成人一区二区三区在线观看| 欧美少妇一区二区| 亚洲一区二区三区美女| 91亚洲午夜精品久久久久久| 日本一区二区视频在线| 国产伦精品一区二区三区在线观看| 欧美一级片在线看| 美腿丝袜亚洲一区| 日韩精品一区二区在线| 蜜臀久久99精品久久久久宅男| 欧美欧美欧美欧美| 日韩电影一区二区三区| 69堂成人精品免费视频| 蜜桃精品视频在线| 日韩免费电影一区| 韩日av一区二区| 国产欧美综合在线观看第十页 | 91精品国产一区二区三区| 亚洲超碰精品一区二区| 91精品国产欧美日韩| 日本网站在线观看一区二区三区| 欧美一区二区三区在线视频| 人人爽香蕉精品| 久久综合成人精品亚洲另类欧美| 国产一区二区三区免费播放| 国产午夜精品理论片a级大结局| 国产精品一区一区三区| 国产精品欧美综合在线| 91高清视频免费看| 日韩和欧美的一区| 久久久久久综合| 91尤物视频在线观看| 亚洲最大成人综合| 欧美大片日本大片免费观看| 国产在线视频一区二区| 自拍偷拍亚洲激情| 91麻豆精品国产91久久久更新时间 | 国产精品中文有码| 亚洲视频一区在线观看| 欧美一区二区三区白人| 成人性生交大片免费看视频在线 | 精品国产人成亚洲区| 成人av网站免费观看| 亚洲成人在线观看视频| 日韩一级成人av| 国产91在线观看丝袜| 亚洲风情在线资源站| 久久综合九色综合97婷婷女人| 99久久久无码国产精品| 免费人成在线不卡| 亚洲图片激情小说| 亚洲精品一区二区在线观看| 色哟哟一区二区三区| 免费高清视频精品| 亚洲欧美国产高清| 国产亚洲一区二区三区四区| 欧美性做爰猛烈叫床潮| 成人精品电影在线观看| 蜜臀av在线播放一区二区三区| 国产精品国产三级国产aⅴ无密码| 欧美一区二区三区播放老司机| 不卡的av在线| 久久69国产一区二区蜜臀| 亚洲免费在线观看视频| 久久久99久久| 91精品国产综合久久久久| 91麻豆精品视频| 国产馆精品极品| 美女脱光内衣内裤视频久久网站 | 欧美色图一区二区三区| 高清久久久久久| 日本女人一区二区三区| 一级做a爱片久久| 国产精品久久久久久久久免费丝袜 | 日韩欧美在线影院| 日本乱人伦aⅴ精品| 福利一区二区在线| 国产主播一区二区| 久久99国产精品尤物| 日本特黄久久久高潮| 天堂蜜桃一区二区三区| 亚洲高清免费观看高清完整版在线观看| 中文字幕不卡的av| 国产日韩av一区| 久久久久久久网| 精品久久免费看| 精品欧美乱码久久久久久1区2区| 337p亚洲精品色噜噜噜| 欧美猛男超大videosgay| 欧美成人福利视频| 欧美一级在线观看| 日韩三区在线观看| 精品三级av在线| 久久久久久久久蜜桃| 国产亚洲成aⅴ人片在线观看| 欧美精品一区二区三| 久久久久99精品国产片| 中文天堂在线一区| 亚洲欧洲国产专区| 一区二区三区四区不卡视频 | jizzjizzjizz欧美| 福利一区二区在线观看| 成人福利视频在线看| 色综合激情久久| 欧美日韩黄视频| 日韩一区二区三区三四区视频在线观看| 欧美一级午夜免费电影| 精品久久久久99| 国产精品美女视频| 亚洲综合在线观看视频| 秋霞影院一区二区| 国产一区二区三区四| 成人av电影在线| 欧美日韩一级二级| 337p日本欧洲亚洲大胆色噜噜| 国产清纯美女被跳蛋高潮一区二区久久w | 在线看日本不卡| 777奇米成人网| 国产校园另类小说区| 亚洲欧美色图小说| 爽好多水快深点欧美视频| 国产一区二区视频在线| 91在线国产福利| 91精品国产综合久久久久久久久久 | 日本亚洲视频在线| 国产成人精品一区二区三区四区| 91麻豆免费看| 欧美一级xxx| 一区精品在线播放| 美女www一区二区| 99久久精品国产一区二区三区 | 午夜一区二区三区在线观看| 蜜臀av一区二区| 99久久99久久综合| 日韩一级黄色片| 亚洲精品成人精品456| 精品一区二区三区免费毛片爱| 91在线国产福利| 久久婷婷色综合| 天天综合色天天综合| 不卡的看片网站| 久久这里只有精品6| 亚洲精品日产精品乱码不卡| 精品一区二区三区免费| 欧美亚洲图片小说| 国产精品国产a级| 久久99深爱久久99精品| 欧美性大战久久| 1000部国产精品成人观看| 一本大道综合伊人精品热热| 久久欧美一区二区| 青青青伊人色综合久久| 91福利视频网站| 中文字幕一区三区| 国产传媒久久文化传媒| 日韩欧美中文字幕制服| 亚洲v精品v日韩v欧美v专区| av动漫一区二区| 欧美国产精品v| 国产综合色视频| 日韩欧美中文一区| 免费成人在线影院| 欧美另类变人与禽xxxxx| 亚洲午夜三级在线| 色综合色狠狠综合色| 亚洲日本丝袜连裤袜办公室| 成人免费高清在线观看| 亚洲国产精品av|