📄 obj_dfudesc.c
字号:
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 + -