⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obj_dfudesc.c

📁 针对华清远见的FS9200(其内核为at91rm9200)的一个基本引导程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	register char           bRequest = pSetup->bRequest;	register unsigned short wLength  = pSetup->wLength;	register char           bitMask = bmAttributes(pDfu->pDfuFDesc);	/* ==== Event: Receipt of the AT91C_DFU_DNLOAD request wLength > 0 and bitCanDnload = 1 ==== */	if ((bRequest == AT91C_DFU_DNLOAD) && (wLength > 0) && (bitMask & 0x1)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNLOAD_SYNC;		pDfu->blockComplete = 0;		pDfu->Download(pDfu, wLength, AT91F_DfuDescDownload);		//AT91F_DfuDescSuccess(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_DNLOAD request wLength = 0 or bitCanDnload = 0 ==== */	else if ((bRequest == AT91C_DFU_DNLOAD) && ((wLength == 0) || !(bitMask & 0x1))) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_UPLOAD request and bitCanUpload = 1 ==== */	else if ((bRequest == AT91C_DFU_UPLOAD) && (bitMask & 0x2)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuUPLOAD_IDLE;		pDfu->Upload(pDfu, wLength);	}	/* ==== Event: Receipt of the AT91C_DFU_UPLOAD request and bitCanUpload = 0 ==== */	else if ((bRequest == AT91C_DFU_UPLOAD) && (!(bitMask & 0x2))) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_ABORT request  ==== */	else if (bRequest == AT91C_DFU_ABORT) {		/* Does nothing */		pDfu->dfuStatus.bState = AT91C_DFU_dfuIDLE;	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request ==== */	else if (bRequest == AT91C_DFU_GETSTATUS) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuIDLE;		AT91F_DfuDescGetStatus(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATE request ==== */	else if (bRequest == AT91C_DFU_GETSTATE) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuIDLE;		AT91F_DfuDescGetState(pDfu);	}	/* ==== Event: Receipt of any other DFU class-specific request ==== */	else {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}}/* ************************************************************ *//* **** dfuState3: Handle requests in dfuDNLOAD_SYNC state **** *//* ************************************************************ */void AT91F_DfuDescState3(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	register char         bRequest = pSetup->bRequest;	unsigned int timeout;	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request. Bloc tx in progress ==== */	if ( (bRequest == AT91C_DFU_GETSTATUS) && !(pDfu->blockComplete)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNBUSY;		AT91F_DfuDescGetStatus(pDfu);		timeout = bwPollTimeout(&(pDfu->dfuStatus));		pDfu->tempo.Start(&(pDfu->tempo), timeout, 0, AT91F_DfuDescStatusPollTimeOut, pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request. Bloc tx complete ==== */	//if ((bRequest == AT91C_DFU_GETSTATUS) && (!pMem || pMem->dnloadComplete)) {	else if ( (bRequest == AT91C_DFU_GETSTATUS) && pDfu->blockComplete ) {		// !!!!! To be modified !!!!!!		pDfu->dfuStatus.bStatus = AT91C_DFU_OK;		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNLOAD_IDLE;		AT91F_DfuDescGetStatus(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATE request ==== */	else if (bRequest == AT91C_DFU_GETSTATE) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNLOAD_SYNC;		AT91F_DfuDescGetState(pDfu);	}	/* ==== Event: Receipt of any other DFU class-specific request ==== */	else {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}}/* ******************************************************* *//* **** dfuState4: Handle requests in dfuDNBUSY state **** *//* ******************************************************* */void AT91F_DfuDescState4(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	/* ==== Event: Receipt of any other DFU class-specific request ==== */	pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;	AT91F_DfuDescError(pDfu);}/* ************************************************************ *//* **** dfuState5: Handle requests in dfuDNLOAD_IDLE state **** *//* ************************************************************ */void AT91F_DfuDescState5(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	register char           bRequest = pSetup->bRequest;	register unsigned short wLength  = pSetup->wLength;	/* ==== Event: Receipt of the AT91C_DFU_DNLOAD request wLength > 0 ==== */	if ((bRequest == AT91C_DFU_DNLOAD) && (wLength > 0)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNLOAD_SYNC;		pDfu->blockComplete = 0;		pDfu->Download(pDfu, wLength, AT91F_DfuDescDownload);		//AT91F_DfuDescSuccess(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_DNLOAD request wLength = 0 ==== */	else if ((bRequest == AT91C_DFU_DNLOAD) && (wLength == 0)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuMANIFEST_SYNC;		AT91F_DfuDescSuccess(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_ABORT request  ==== */	else if (bRequest == AT91C_DFU_ABORT) {		/* Host is terminating teh current download transfer */		pDfu->dfuStatus.bState = AT91C_DFU_dfuIDLE;	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request ==== */	else if (bRequest == AT91C_DFU_GETSTATUS) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNLOAD_IDLE;		AT91F_DfuDescGetStatus(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATE request ==== */	else if (bRequest == AT91C_DFU_GETSTATE) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuDNLOAD_IDLE;		AT91F_DfuDescGetState(pDfu);	}	/* ==== Event: Receipt of any other DFU class-specific request ==== */	else {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}}/* ************************************************************** *//* **** dfuState6: Handle requests in dfuMANIFEST_SYNC state **** *//* ************************************************************** */void AT91F_DfuDescState6(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	register char           bRequest = pSetup->bRequest;	unsigned int timeout;	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request before manifest ==== */	if ((bRequest == AT91C_DFU_GETSTATUS) && (pDfu->manifestComplete == 0)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuMANIFEST;		AT91F_DfuDescGetStatus(pDfu);		timeout = bwPollTimeout(&(pDfu->dfuStatus));		pDfu->tempo.Start(&(pDfu->tempo), timeout, 0, AT91F_DfuDescStatusPollTimeOut, pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request after manifest ==== */	else if ((bRequest == AT91C_DFU_GETSTATUS) &&	    (pDfu->manifestComplete == 1) &&	    (pDfu->pDfuFDesc->bmAttributes & (1 << 2))) { // bitManifestationTolerant		pDfu->manifestComplete = 0;		pDfu->dfuStatus.bState = AT91C_DFU_dfuIDLE;		AT91F_DfuDescGetStatus(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATE request ==== */	else if (bRequest == AT91C_DFU_GETSTATE) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuMANIFEST_SYNC;		AT91F_DfuDescGetState(pDfu);	}	/* ==== Event: Receipt of any other DFU class-specific request ==== */	else {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}}/* ************************************************************** *//* **** dfuState7: Handle requests in dfuMANIFEST_SYNC state **** *//* ************************************************************** */void AT91F_DfuDescState7(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	/* ==== Event: Receipt of any other DFU class-specific request ==== */	pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;	AT91F_DfuDescError(pDfu);}/* ******************************************************************** *//* **** dfuState8: Handle requests in dfuMANIFEST_WAIT_RESET state **** *//* ******************************************************************** */void AT91F_DfuDescState8(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	/* ==== Event: Receipt of any other DFU class-specific request ==== */	pDfu->dfuStatus.bState = AT91C_DFU_dfuMANIFEST_WAIT_RESET;}/* ************************************************************ *//* **** dfuState9: Handle requests in dfuUPLOAD_IDLE state **** *//* ************************************************************ */void AT91F_DfuDescState9(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	register char           bRequest = pSetup->bRequest;	register unsigned short wLength  = pSetup->wLength;	//register USBDfuMem      *pMem    = pDfu->pMem;	/* ==== Event: Receipt of the AT91C_DFU_UPLOAD request wLength > 0 ==== */	if ((bRequest == AT91C_DFU_UPLOAD) && (wLength > 0)) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuUPLOAD_IDLE;		pDfu->Upload(pDfu, wLength);	}	/* ==== Event: Receipt of the AT91C_DFU_ABORT request  ==== */	else if (bRequest == AT91C_DFU_ABORT) {		/* Host is terminating teh current download transfer */		pDfu->dfuStatus.bState = AT91C_DFU_dfuIDLE;	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request ==== */	else if (bRequest == AT91C_DFU_GETSTATUS) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuUPLOAD_IDLE;		AT91F_DfuDescGetStatus(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATE request ==== */	else if (bRequest == AT91C_DFU_GETSTATE) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuUPLOAD_IDLE;		AT91F_DfuDescGetState(pDfu);	}	/* ==== Event: Receipt of any other DFU class-specific request ==== */	else {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}}/* ******************************************************* *//* **** dfuState10: Handle requests in dfuERROR state **** *//* ******************************************************* */void AT91F_DfuDescState10(	AT91PS_DfuDesc  pDfu,    /* DFU handler */	AT91PS_UsbSetup pSetup)  /* Descriptor type */{	register char           bRequest = pSetup->bRequest;	/* ==== Event: Receipt of the AT91C_DFU_GETSTATUS request ==== */	if (bRequest == AT91C_DFU_GETSTATUS) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescGetStatus(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_GETSTATE request ==== */	else if (bRequest == AT91C_DFU_GETSTATE) {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescGetState(pDfu);	}	/* ==== Event: Receipt of the AT91C_DFU_CLRSTATUS request  ==== */	else if (bRequest == AT91C_DFU_CLRSTATUS) {		pDfu->dfuStatus.bStatus = AT91C_DFU_OK;		pDfu->dfuStatus.bState  = AT91C_DFU_dfuIDLE;	}	/* ==== Event: Receipt of any other DFU class-specific request ==== */	else {		pDfu->dfuStatus.bState = AT91C_DFU_dfuERROR;		AT91F_DfuDescError(pDfu);	}}/* ============================================================================ *//* ============================================================================ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -