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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? usbhost.c

?? USB Host在嵌入式系統(tǒng)中的實(shí)現(xiàn).包括所有源代碼.
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
	Uint8	SetAddress[8] = {0, 5,  1, 0,  0, 0,  0, 0};
	
    HOSTPRINTF("USBH: Enumeration\n");
    
    status =NU_Reset_Queue(&USBH_CTRL_Queue);
	if(status!=NU_SUCCESS){
		HOSTPRINTF("Enumeration: Control Queue Status Error %d\n",status);
		return FALSE;
	}
    status =NU_Reset_Queue(&USBH_BIN_Queue);
	if(status!=NU_SUCCESS){
		HOSTPRINTF("Enumeration: Bulk In Queue Status Error %d\n",status);
		return FALSE;
	}
    status =NU_Reset_Queue(&USBH_BOUT_Queue);
	if(status!=NU_SUCCESS){
		HOSTPRINTF("Enumeration: Bulk OUT Queue Status Error %d\n",status);
		return FALSE;
	}
    status =NU_Reset_Queue(&USBH_INTIN_Queue);
	if(status!=NU_SUCCESS){
		HOSTPRINTF("Enumeration: INT IN Queue Status Error %d\n",status);
		return FALSE;
	}
	//if TD On Queue Head Removeit
	
	usb_host.DeviceReady = NOT_READY;
	
    *regEP0CTL = ENDPT_DISABLE;	/* Disable ep0 */
    reset_the_device();    		/* Reset the device */
    HOSTPRINTF("Enumeration: Reset the device 1\n");

    *regINT_ENB = INTR_ATTACH;	/* Enable attach interrupt */

    /* Enable host mode but don't start generating SOFs */
    *regCTL = CTRL_HOST_NO_SOF;
    
    HOSTPRINTF("Enumeration: Wait Attach Message\n");
	status = NU_Receive_From_Queue(&USBH_CTRL_Queue, &CtrlMsg, 4, &actual_size, NU_SUSPEND);
	if(status!=NU_SUCCESS){
		HOSTPRINTF("Enumeration: Queue Status Error %d\n",status);
		return FALSE;
	}
    if (CtrlMsg.process != USBH_ATTACH) {
        HOSTPRINTF("Enumeration: FAILED - NOT ATTACHED\n");
        return FALSE;
    }
    /* Reset the device a second time */
    reset_the_device();
    HOSTPRINTF("Enumeration: Reset the device 2\n");
    
    /* Device is now plugged in, enable all errors */
    *regERR_ENB = 0xff;

    /* Delay for the debounce interval */
    TaskSleep(&debounce_delay);
    
    /* Check if low-speed device */
    if ((*regCTL & (CTRL_SINGLE_END0 | CTRL_JSTATE)) == 0) {
        HOSTPRINTF("Enumeration: Unsupport Low Speed Device\n");
        return FALSE;
    }
    /* Check if the device has detached */
    if ((*regCTL & (CTRL_SINGLE_END0 | CTRL_JSTATE)) != CTRL_JSTATE) {
        HOSTPRINTF("process_attached NO DEVICE - ctrl_status %02x\n", *regCTL);
        return FALSE;
    }
    HOSTPRINTF("Enumeration: ATTACHED\n");
    /**************************************************************************/

    /*
     * Set SOF threshold so we are guaranteed to have enough time for
     * any transaction to complete (including ACK or NAK) without reaching
     * the time to send the next Start-of-frame packet.
     */
    *regSOF_THLD = SOF_THRESHOLD;

    /* Enable ep0 configured as CNTRL endpoint */
    *regEP0CTL = ENDPT_CNTL_0;

    /* Enable host mode and start generating SOFs */
    *regCTL = CTRL_HOST_SOF;

    /* Enable the token-done, error, STALL and RESET interrupts (Reset Command)*/
    *regINT_ENB = INTR_TOK_DNE | INTR_ERROR | INTR_STALL | INTR_USB_RST | INTR_SOF_TOK;

    /* Get up to first 18 bytes of the device descriptor */
    length = USB_GetDescriptor(DEVICE_TYPE, 0, &DeviceDesc, sizeof(DEVICE_DESC));
    if (length < 8){
        HOSTPRINTF("Enumeration: Get Device Length Error\n");
        return FALSE;
    }

   /**************************************************************************/

    /* Reset the device */
    reset_the_device();
	HOSTPRINTF("Enumeration: Reset the device 3\n");
    /**************************************************************************/
    /* Validate size and descriptor type of device descriptor */
    Ctrl_ep->pksize = dev_request_buffer[7];
    HOSTPRINTF("Enumeration: Set CNTRL pksize %d\n", Ctrl_ep->pksize);
    if (Ctrl_ep->pksize <  8                     ||
        Ctrl_ep->pksize > 64                     ||
        (Ctrl_ep->pksize & (Ctrl_ep->pksize - 1)) ||  /* must be power of 2 */
        dev_request_buffer[0] != 0x12           ||
        dev_request_buffer[1] != 1              )
    {
        HOSTPRINTF("Enumeration: GetDevDesc BAD\n");
        return FALSE;
    }
    
    /* Enable attach interrupt */
    *regINT_ENB = INTR_ATTACH;
	HOSTPRINTF("Enumeration: Wait Attach Message 2\n");
	status = NU_Receive_From_Queue(&USBH_CTRL_Queue, &CtrlMsg, 4, &actual_size, NU_SUSPEND);
	if(status!=NU_SUCCESS){
		HOSTPRINTF("Enumeration: Queue State Error %d\n",status);
		return FALSE;
	}
	if (CtrlMsg.process != USBH_ATTACH) {
	    HOSTPRINTF("Enumeration: FAILED - NOT ATTACHED\n");
	    return FALSE;
	}
    /* As above (restore after device reset) */
    *regSOF_THLD= SOF_THRESHOLD;
    *regEP0CTL	= ENDPT_CNTL_0;
    *regCTL		= CTRL_HOST_SOF;

    /* Enable the token done, error, stall , RESET and SOF interrupts */
    *regINT_ENB = INTR_TOK_DNE | INTR_ERROR | INTR_STALL | INTR_USB_RST | INTR_SOF_TOK;

    /**************************************************************************/
    /* Set address to USB address 1 */
    HOSTPRINTF("Enumeration: SET ADDRESS, threshold %d\n", *regSOF_THLD);
    if (USB_device_request(SetAddress)){
    	HOSTPRINTF("Enumeration: Set Address Fail\n");
        return FALSE;	
	}
    *regADDR = 1;
    usb_host.USB_addr=1;
    HOSTPRINTF("Enumeration: SET ADDRESS COMPLETE\n");
    return TRUE;
}

static void USB_Host_Task(UNSIGNED argc, VOID *argv)
{
	CHAR task_name[8];
	DATA_ELEMENT task_status;
	UNSIGNED scheduled_count;
	OPTION priority;
	OPTION preempt;
	UNSIGNED time_slice;
	VOID *stack_base;
	UNSIGNED stack_size;
	UNSIGNED minimum_stack;
	
    int i, enumOK;
	static TimeVal delay_enum = {1, 0};
	TRANSACTION_STRUCT *CurrTD;
	UNSIGNED actual_size;
	STATUS status;
	MSG_Q RSTMsg;
	Uint32 message[4];
	
    
    while (1) {
	    enumOK = FALSE;
	    for (i = 0;i < 10; i++) {
	        enumOK = USB_enumerate();
	        if (enumOK)
	            break;
	        HOSTPRINTF("USB_Host_Task: Failed to enumerate; retry %d...\n", i+1);
	        TaskSleep(&delay_enum);
	    }
        if (enumOK) {
            if (USB_GetConfiguration()) {
                if (StillImage.Config) {
                    if (USB_DoConfiguration(&StillImage)) {
                    	usb_host.DeviceReady = PB_READY;
                    	
						HOSTPRINTF("USB_Host_Task: StillImage Configuration Success\n");
						message[0]=StillImage.ep_in_pksize;
                        message[1]=StillImage.ep_out_pksize;
                        message[2]=StillImage.ep_intr_pksize;
                        message[3]=StillImage.ep_intr_pollms;
						//Detect PTP Task
						//Create PTP Task
//						status = NU_Create_Task (&TaskPTPLayerID, 
//                             "PTP Task",
//                             PTP_Layer_Task, 
//                             0, 
//                             &message[0], 
//                             TaskPTPLayer_stack,
//                             USBHTASK_STACKSIZE*4, 
//                             9,/*Proirity*/
//                             10,
//                             NU_PREEMPT, 
//                             NU_START);
//
//						ASSERT(status >= 0); 
                    }
                }
                else if (MassStorage.Config) {
                	if (USB_DoConfiguration(&MassStorage)){
                		usb_host.DeviceReady = MS_READY;
                		HOSTPRINTF("USB_Host_Task: MassStroage Configuration Success\n");
                	}
                }
                else{
                	HOSTPRINTF("USB_Host_Task: Unsupport Device\n");
                	HOSTPRINTF("USB_Host_Task: Please Plug OUT USB Device\n");
                }

            }
            else{
            	HOSTPRINTF("USB_Host_Task: USB GetConfiguration Fail\n");
            	HOSTPRINTF("USB_Host_Task: Please Plug OUT USB Device\n");
            }
WaitResetMessage:
			HOSTPRINTF("USB_Host_Task: Wait Reset\n");
			status = NU_Receive_From_Queue(&USBH_CTRL_Queue, &RSTMsg, 4, &actual_size, NU_SUSPEND);
			if(status!=NU_SUCCESS){
				HOSTPRINTF("USB_Host_Task: Receive Queue Error %d\n",status);
				NU_Sleep(0xFFFFffff);
			}
			if(RSTMsg.process!=USBH_RESET)
				goto WaitResetMessage;
			//Notify Read/Write/Int Read FCT
			RSTMsg.TID	= BULK_TRANSACTION|PROCESS_IN;
			NU_Send_To_Queue(&USBH_BIN_Queue, &RSTMsg, 4, NU_NO_SUSPEND);
			RSTMsg.TID	= BULK_TRANSACTION|PROCESS_OUT;
			NU_Send_To_Queue(&USBH_BOUT_Queue, &RSTMsg, 4, NU_NO_SUSPEND);
			RSTMsg.TID	= INT_TRANSACTION|PROCESS_IN;
			NU_Send_To_Queue(&USBH_INTIN_Queue, &RSTMsg, 4, NU_NO_SUSPEND);
			//Monitor PTP Task
//monitor_task:			
//			status = NU_Task_Information(&TaskPTPLayerID, task_name, 
//											&task_status,
//											&scheduled_count, 
//											&priority, 
//											&preempt,
//											&time_slice, 
//											&stack_base,
//											&stack_size, 
//											&minimum_stack);
//			/*If Task Not Create*/
//			if(status==NU_INVALID_TASK){
//				HOSTPRINTF("USB_Host_Task: PTP Task Not Create\n");
//				continue;
//			}
//			/* If status is NU_SUCCESS, the other information is accurate. */
//			if(status!=NU_SUCCESS){
//				HOSTPRINTF("USB_Host_Task: NU_Task_Information Fail\n");
//				while(1);
//			}
//			
//			if(task_status!=NU_FINISHED)
//				goto monitor_task;
//
////			//Terminate Task
////			status=NU_Terminate_Task(&Task_EVENT_RequestObjectTransfer);
////			if(status!=NU_SUCCESS){
////				HOSTPRINTF("NU_Terminate_Task Fail\n");
////				while(1);
////			}
//			//delete Task
//			status=NU_Delete_Task(&TaskPTPLayerID);
//			if(status!=NU_SUCCESS){
//				HOSTPRINTF("USB_Host_Task: Delete PTP Task Fail\n");
//				while(1);
//			}
//			HOSTPRINTF("USB_Host_Task: Delete PTP Task Success\n");
//													
		}
		else
			HOSTPRINTF("USB_Host_Task: No USB Device Attach Continue Retry\n");
	}
}

void USBHostPrologue(void)
{
    Uint8 i;
	STATUS status;
	
	HOSTPRINTF("USB 1.1 HOST Initiation\n");
    /* Create USB Host synchronization semaphore. */
    status = NU_Create_Semaphore(&USBH_READ_Semaphore, "HOST_RD",1,NU_FIFO);
    ASSERT(status >= 0);
    status = NU_Create_Semaphore(&USBH_WRITE_Semaphore, "HOST_WR",1,NU_FIFO);
    ASSERT(status >= 0);
    status = NU_Create_Semaphore(&USBH_INT_Semaphore, "HOST_INT",1,NU_FIFO);
    ASSERT(status >= 0);
    
	/*Create Queue For USBH HISR to AP FCT*/
	Ctrl_Queue_buff=(Uint32*)malloc((128*4));
	status = NU_Create_Queue(&USBH_CTRL_Queue, "CtrlPipe", Ctrl_Queue_buff, 128,
								NU_FIXED_SIZE, 4, NU_FIFO);
    ASSERT(status >= 0);
	BulkIN_Queue_buff=(Uint32*)malloc((128*4));
	status = NU_Create_Queue(&USBH_BIN_Queue, "IN Pipe", BulkIN_Queue_buff, 128,
								NU_FIXED_SIZE, 4, NU_FIFO);
    ASSERT(status >= 0);
	BulkOUT_Queue_buff=(Uint32*)malloc((128*4));
	status = NU_Create_Queue(&USBH_BOUT_Queue, "OUT Pipe", BulkOUT_Queue_buff, 128,
								NU_FIXED_SIZE, 4, NU_FIFO);
    ASSERT(status >= 0);
	IntIN_Queue_buff=(Uint32*)malloc((128*4));
	status = NU_Create_Queue(&USBH_INTIN_Queue, "INT Pipe", IntIN_Queue_buff, 128,
								NU_FIXED_SIZE, 4, NU_FIFO);
    ASSERT(status >= 0);
    
    usb_host.curr_TD  = NULL;
    usb_host.DeviceReady = FALSE;
    USBHOST_READY_FLAG=&usb_host.DeviceReady;

	Setup=(Uint8 *)calloc(8,1);					/*Control Setup Buffer Create*/
	dev_request_buffer=(Uint8 *)calloc(256,1);	/*Standard Device Request Buffer*/
	
	*regINT_STAT=0;//Init Interrupt Enable
    usbh_hw_init();

    /* Create the USBH task for task-level (vs. ISR) code. */
    status = NU_Create_Task (&TaskUSBH_ID, 
                             "USB Host",
                             USB_Host_Task, 
                             0, 
                             NU_NULL, 
                             TaskUSBH_stack,
                             USBHTASK_STACKSIZE*2, 
                             15,
                             10,
                             NU_PREEMPT, 
                             NU_START);

    ASSERT(status >= 0);
    
	/*Power On Init*/
    /* Zero out BDT ODD ping/pong bits, USB address and frame number */
    *regINT_ENB = 0;
    *regINT_STAT = 0xFF;
    
    *regCTL 	 = CTRL_ODD_RST;
    *regADDR 	 = 0;
    *regFRM_NUML = 0;
    *regFRM_NUMH = 0;

    usb_host.USB_addr	  = 0;
    usb_host.even_odd_OUT = BDT_OUT_BIT;	//Init For Even BTD
    usb_host.even_odd_IN  = BDT_IN_BIT;		//Init for Even BTD
    usb_host.DeviceReady  = NOT_READY;
    /* Enable interrupt */
    *(volatile Uint32 *)EXMSK1A |= (1 << USB1_INTERRUPT_BIT);
}

void usbh_interrupt_enable(void)
{
	*regINT_ENB = INTR_ERROR | INTR_USB_RST| INTR_SOF_TOK;
}

void USBHOST_DEVICEREADY_SET(int status)
{
	usb_host.DeviceReady=status;
}

void USBHOST_EVEN_ODD_IN_SET(void)
{
	usb_host.even_odd_IN ^= BDT_ODD_EVEN_BIT;
}

Boolean USBHOST_EVEN_ODD_IN_GET(void)
{
	return usb_host.even_odd_IN;
}

void USBHOST_EVEN_ODD_OUT_SET(void)
{
	usb_host.even_odd_OUT ^= BDT_ODD_EVEN_BIT;
}

Boolean USBHOST_EVEN_ODD_OUT_GET(void)
{
	return usb_host.even_odd_OUT;
}
void USBHOST_CURR_QH_SET(HOST_QUEUE_HEAD *QH)
{
	usb_host.curr_QH=QH;
}

HOST_QUEUE_HEAD *USBHOST_CURR_QH_GET(void)
{
	return usb_host.curr_QH;
}

void USBHOST_CURR_QH_RESET(void)
{
	usb_host.curr_QH=NULL;
}

void USBHOST_CURR_TD_SET(TRANSACTION_STRUCT *TD)
{
	usb_host.curr_TD=TD;
}

TRANSACTION_STRUCT *USBHOST_CURR_TD_GET(void)
{
	return usb_host.curr_TD;
}

void USBHOST_CURR_TD_RESET(void)
{
	usb_host.curr_TD=NULL;
}

void USBHOST_PRVE_TD_SET(TRANSACTION_STRUCT *TD)
{
	usb_host.prve_TD=TD;
}

TRANSACTION_STRUCT *USBHOST_PRVE_TD_GET(void)
{
	return usb_host.prve_TD;
}

void USBHOST_PRVE_TD_RESET(void)
{
	usb_host.prve_TD=NULL;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清一级片在线观看| 欧美精品日韩精品| 成人av免费观看| 色播五月激情综合网| 97se狠狠狠综合亚洲狠狠| av在线播放一区二区三区| 成人黄页在线观看| 一本到三区不卡视频| 欧美日韩另类国产亚洲欧美一级| 欧美亚洲国产一区二区三区va | 久久久久成人黄色影片| 国产精品毛片高清在线完整版| 亚洲特黄一级片| 婷婷六月综合网| 国产一区二区三区高清播放| 北条麻妃国产九九精品视频| 欧美影片第一页| 久久综合精品国产一区二区三区 | 免费精品视频最新在线| 国产乱码精品一区二区三区忘忧草| 国产精品自拍在线| 欧美日韩国产综合一区二区三区| 久久色中文字幕| 亚洲va国产天堂va久久en| 奇米影视在线99精品| 91蜜桃免费观看视频| 日韩欧美一区二区免费| 亚洲精品一卡二卡| 国产**成人网毛片九色| 日韩一区二区在线免费观看| 亚洲欧美国产77777| 不卡一二三区首页| 日韩精品一区二区在线观看| 亚洲成av人片在线| 欧美亚洲综合一区| 亚洲国产精品一区二区久久 | 亚洲免费观看高清完整版在线观看熊 | 蜜臀精品久久久久久蜜臀| 欧美在线观看一区二区| 中文字幕视频一区二区三区久| 久久国内精品自在自线400部| 欧美日韩日日摸| 亚洲成精国产精品女| 中文字幕+乱码+中文字幕一区| 99精品国产热久久91蜜凸| 91一区二区在线观看| 成a人片国产精品| 在线视频一区二区三区| 色菇凉天天综合网| 国产在线一区二区| 欧美精品一二三| 蜜桃一区二区三区四区| 日韩欧美在线一区二区三区| 久久成人av少妇免费| 国产三级精品在线| 色偷偷久久一区二区三区| 亚洲成在线观看| 欧美成人精品1314www| 丰满放荡岳乱妇91ww| 亚洲精品国产成人久久av盗摄| 日韩一区二区免费在线观看| 一区二区三区免费看视频| 91香蕉视频污| 激情深爱一区二区| 亚洲成年人影院| 国产精品情趣视频| 欧美一二三区精品| 欧美日韩一区二区三区四区| 亚洲成人免费视| 国产精品不卡一区| 日韩一级精品视频在线观看| 波多野结衣精品在线| 玖玖九九国产精品| 亚洲亚洲精品在线观看| 国产精品久久久久一区二区三区| 日韩精品自拍偷拍| 欧美久久高跟鞋激| 91成人网在线| 欧亚一区二区三区| 99久久99久久精品免费看蜜桃| 久久福利视频一区二区| 偷窥少妇高潮呻吟av久久免费| 亚洲欧洲美洲综合色网| 国产精品免费免费| 中文字幕一区二区三区四区 | 精品国产三级电影在线观看| 欧美三级视频在线播放| 欧美视频一区在线| 欧美日韩一区二区三区四区五区 | 亚洲老司机在线| 亚洲欧美一区二区久久| 亚洲一区二区三区视频在线| 亚洲另类在线制服丝袜| 亚洲成人一区二区在线观看| 亚洲一区二区三区精品在线| 日韩精品久久久久久| 麻豆免费看一区二区三区| 黑人巨大精品欧美黑白配亚洲| 久久av老司机精品网站导航| 国产成人亚洲综合色影视| 成人免费av在线| 欧美日韩在线播放三区| 久久久天堂av| 亚洲免费伊人电影| 秋霞午夜av一区二区三区| 国产不卡视频在线播放| 91在线观看视频| 欧美一区二区高清| 亚洲天堂成人网| 韩国女主播一区| 在线亚洲+欧美+日本专区| 日韩欧美美女一区二区三区| 欧美激情一区二区三区| 五月天久久比比资源色| 成人黄色免费短视频| 欧美一区二区三区免费视频| 国产精品看片你懂得| 另类小说综合欧美亚洲| 欧美精品日韩精品| 亚洲天堂a在线| 国产欧美一二三区| 日本欧美一区二区在线观看| 97久久超碰国产精品电影| 国产精品青草综合久久久久99| 久久精品国产一区二区| 欧美浪妇xxxx高跟鞋交| 日韩精品乱码免费| 欧美高清dvd| 免费日韩伦理电影| 欧美va在线播放| 国产精品1024| 国产欧美日韩在线看| 国产suv精品一区二区三区| 国产日本一区二区| 99久久精品免费看国产免费软件| 亚洲视频一区二区免费在线观看 | 日韩精品中文字幕在线一区| 日本少妇一区二区| 久久综合视频网| 91免费版在线看| 日本欧美一区二区| 日韩欧美一卡二卡| 99re这里只有精品6| 亚洲精品视频自拍| 国产一区二区0| 在线电影国产精品| 亚洲欧美日韩在线不卡| 免费在线观看不卡| 99久久婷婷国产| 久久久久久久久久久99999| 蜜臀av国产精品久久久久 | 国产精品综合二区| 国产人久久人人人人爽| 色综合一区二区| 紧缚捆绑精品一区二区| 国产亚洲精久久久久久| 日本韩国精品在线| 精品午夜一区二区三区在线观看| 亚洲国产精品精华液ab| 69久久夜色精品国产69蝌蚪网| 成人a级免费电影| 日本sm残虐另类| av午夜精品一区二区三区| 紧缚奴在线一区二区三区| fc2成人免费人成在线观看播放| 国产精品久久久久四虎| 综合久久国产九一剧情麻豆| 国产精品天美传媒沈樵| 色综合天天在线| 国产在线精品免费| 韩国v欧美v日本v亚洲v| 日本欧美一区二区在线观看| 亚洲成人一区二区| 美女mm1313爽爽久久久蜜臀| 视频在线观看国产精品| 亚洲免费观看高清完整| 亚洲欧洲成人自拍| 一区二区在线观看不卡| 亚洲成人你懂的| 黑人巨大精品欧美一区| 成人午夜免费视频| 日本精品一区二区三区高清 | 国产成人在线视频播放| 国产成人午夜片在线观看高清观看| 蜜桃视频在线观看一区| 国产精品77777| 色悠悠亚洲一区二区| 在线观看日韩一区| 精品三级在线看| 一区在线观看免费| 亚洲精品成人精品456| 午夜视频在线观看一区二区| 国产不卡高清在线观看视频| 99天天综合性| 欧美日韩一级二级三级| 亚洲精品一区二区三区福利| 亚洲男人的天堂网| 五月综合激情网| 成人激情免费网站| 欧美一区二区三区喷汁尤物|