5.23.2007

Mass Storage, Notify

USB Mass Storage.

中介 MDD 到 SCSI 間的就是 BOT了 (果然)。
可以看到,跟USB Mass Storage Protocol 內容一樣,解開CBW 的就是BOT這一層

Pdd Initialize
USB PostInit - Mass Storage Class
BOT_InternalInit
BOT_ReadConfigurationValue
GetEndpointDescriptor
BOT_ReadConfigurationValue
BOT_TransferThread
BOT_DeviceNotify
..
BOT_ResetPipeState
BOT_DeviceNotify
BOT_HandleRequest
BOT_DeviceNotify
..

BOT_InternalInit 呼叫 UfnMdd_Start ( &BOT_DeviceNotify ... )
這樣就設定了 MDD 的pContext->lpDeviceNotify

enum.cpp:
  • ProcessConfiguration( )會呼叫這個function : pContext->lpDeviceNotify( ).
  • UfnMdd_Notify( )也會用SendDeiviceNotification( )呼叫 pContext->lpDeviceNotify( )
很奇怪,UfnMdd_Notify( )不在 ufnmdd.cpp 中,卻在enum.cpp。

所以整個"Notify"的流向就是..

Pdd --> Mdd --> BOT

Pdd 送給 Mdd 的Notification Event:
  • UFN_MSG_BUS_EVENT
    • UFN_DETACH
    • UFN_ATTACH
    • UFN_RESET
    • UFN_SUSPEND
    • UFN_RESUME
  • UFN_MSG_BUS_SPEED
  • UFN_MSG_SETUP_PACKET
  • UFN_MSG_PREPROCESSED_SETUP_PACKET
  • UFN_MSG_SET_ADDRESS
  • UFN_MSG_CONFIGURED

1 則留言:

匿名 提到...

Hello~~~
很高興拜讀你的心得,我有一點疑問想跟你請教,我現在在做wince 6.0 的 usb mass storage class. 但是我找不到誰去call CUfnBus::PostInit() 這個 function. 可以請你給些方向嗎?