Библиотека LUFA (раннее название MyUSB) версия 101122
Драйвер режима хоста Mass Storage Class

Data Structures

struct  USB_ClassInfo_MS_Host_t
 Структура конфигурации и состояния режима хоста Mass Storage Class. More...
struct  SCSI_Capacity_t
 Структура емкости SCSI-устройства LUN (Logical UNit, или диск). More...

Defines

#define MS_ERROR_LOGICAL_CMD_FAILED   0x80

Enumerations

enum  MS_Host_EnumerationFailure_ErrorCodes_t {
  MS_ENUMERROR_NoError = 0,
  MS_ENUMERROR_InvalidConfigDescriptor = 1,
  MS_ENUMERROR_NoCompatibleInterfaceFound = 2
}

Functions

uint8_t MS_Host_ConfigurePipes (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, uint16_t ConfigDescriptorSize, void *ConfigDescriptorData) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3)
uint8_t MS_Host_ResetMSInterface (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1)
uint8_t MS_Host_GetMaxLUN (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, uint8_t *const MaxLUNIndex) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2)
uint8_t MS_Host_GetInquiryData (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex, SCSI_Inquiry_Response_t *const InquiryData) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3)
uint8_t MS_Host_TestUnitReady (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex) ATTR_NON_NULL_PTR_ARG(1)
uint8_t MS_Host_ReadDeviceCapacity (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex, SCSI_Capacity_t *const DeviceCapacity) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3)
uint8_t MS_Host_RequestSense (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex, SCSI_Request_Sense_Response_t *const SenseData) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(3)
uint8_t MS_Host_PreventAllowMediumRemoval (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex, const bool PreventRemoval) ATTR_NON_NULL_PTR_ARG(1)
uint8_t MS_Host_ReadDeviceBlocks (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex, const uint32_t BlockAddress, const uint8_t Blocks, const uint16_t BlockSize, void *BlockBuffer) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(6)
uint8_t MS_Host_WriteDeviceBlocks (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo, const uint8_t LUNIndex, const uint32_t BlockAddress, const uint8_t Blocks, const uint16_t BlockSize, const void *BlockBuffer) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(6)
static void MS_Host_USBTask (USB_ClassInfo_MS_Host_t *const MSInterfaceInfo)

Detailed Description

зависимости для исходного кода модуля

Следующие файлы должны быть скомпилированы с любым проектом, который использует этот модуль:

модуля

Фреймворк-интерфейс для драйвера режима хоста USB Mass Storage Class.


Define Documentation

#define MS_ERROR_LOGICAL_CMD_FAILED   0x80

Код ошибки для некоторых функций хоста Mass Storage, показывающий логическую (и не аппаратную) ошибку.


Enumeration Type Documentation

Enumerator:
MS_ENUMERROR_NoError 

дескриптор конфигурации обработан успешно.

MS_ENUMERROR_InvalidConfigDescriptor 

устройство возвратило неверный дескриптор конфигурации.

MS_ENUMERROR_NoCompatibleInterfaceFound 

в дескрипторе конфигурации устройства не найден совместимый интерфейс Mass Storage.


Function Documentation

uint8_t MS_Host_ConfigurePipes ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
uint16_t  ConfigDescriptorSize,
void *  ConfigDescriptorData 
)

Подпрограмма конфигурации интерфейса хоста, для конфигурирования указанного интерфейса хоста Mass Storage с использованием дескриптора конфигурации, прочитанного с подключенного устройства USB. Эта функция автоматически обновляет значения состояния указанного экземпляра хоста Mass Storage и конфигурирует потоки, требуемые для коммуникации с интерфейсом, если он найден на устройстве. Должна быть вызвана один раз после энумерации стеком подключенного устройства, когда машина хоста перейдет в состояние Addressed (адресовано).

Note:
Индексы канала, как дано в структуре конфигурации интерфейса, не должны наложиться ни с каким другим интерфейсом, или произойдет повреждение банка канала. Разрывы в выделенных числах канала или непоследовательных индексах в пределах единственного интерфейса позволены, но никакие два интерфейса любого типа не могут чередовать индексы канала.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста Mass Storage.
[in]ConfigDescriptorSizeдлина дескриптора конфигурации подключенного устройства.
[in]ConfigDescriptorDataуказатель на буфер, содержащий дескриптор конфигурации подключенного устройства.
Returns:
значение из перечисления MS_Host_EnumerationFailure_ErrorCodes_t.
uint8_t MS_Host_GetInquiryData ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex,
SCSI_Inquiry_Response_t *const  InquiryData 
)

Получает данные inquiry Mass Storage от указанного LUN, что показывает характеристики устройства и его свойства.

Precondition:
Эта функция должна быть вызвана только когда машина состояния хоста находится в состоянии HOST_STATE_Configured, либо вызов функции потерпит неудачу.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
[out]InquiryDataместо размещения, куда будут сохранены прочитанные данные inquiry.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED.
uint8_t MS_Host_GetMaxLUN ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
uint8_t *const  MaxLUNIndex 
)

Отправляет управляющий запрос GET MAX LUN на подключенное устройство, чем запрашивает индекс наивысшего LUN (Logical UNit, логический диск) в устройстве. Эта величина может использоваться в других функциях драйвера режима хоста класса Mass Storage для адресации конкретного LUN в пределах устройства.

Note:
Некоторые устройства не поддерживают этот запрос, и переводят такой запрос в состояние STALL. Чтобы избежать такой ситуации, на неподдерживаемых устройствах максимальный индекс LUN будет сообщаться как 0 и не будет возвращена ошибка, если устройство сделало STALL для запроса.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[out]MaxLUNIndexуказатель на место, где должен быть сохранен наивысший индекс LUN.
Returns:
значение из перечисления USB_Host_SendControlErrorCodes_t.
uint8_t MS_Host_PreventAllowMediumRemoval ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex,
const bool  PreventRemoval 
)

Выдает команду PREVENT MEDIUM REMOVAL на логическую (или, в зависимости от типа устройства, физическую) блокировку устройства от извлечения носителя, так чтобы блоки данных на носителе могли быть прочитаны или изменены.

Precondition:
Эта функция должна быть вызвана только когда машина состояния хоста находится в состоянии HOST_STATE_Configured, либо вызов функции потерпит неудачу.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
[in]PreventRemovalдвоичное true, если устройство должно быть заблокировано от извлечения, иначе false.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED, если устройство не готово.
uint8_t MS_Host_ReadDeviceBlocks ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex,
const uint32_t  BlockAddress,
const uint8_t  Blocks,
const uint16_t  BlockSize,
void *  BlockBuffer 
)

Читает блоки данных с носителя на подключенном устройстве Mass Storage.

Precondition:
Эта функция должна быть вызвана только когда машина состояния хоста находится в состоянии HOST_STATE_Configured, либо вызов функции потерпит неудачу.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
[in]BlockAddressначальный адрес блока в пределах устройства, откуда должно производиться чтение.
[in]Blocksобщее количество блоков для чтения.
[in]BlockSizeРазмер в байтах каждого блока в пределах устройства.
[out]BlockBufferуказатель на место, куда должны быть сохранены прочитанные данные от устройства.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED, если устройство не готово.
uint8_t MS_Host_ReadDeviceCapacity ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex,
SCSI_Capacity_t *const  DeviceCapacity 
)

Запрашивает общую емкость подключенного устройства USB Mass Storage в блоках и в размерах блока.

Precondition:
Эта функция должна быть вызвана только когда машина состояния хоста находится в состоянии HOST_STATE_Configured, либо вызов функции потерпит неудачу.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
[out]DeviceCapacityуказатель на место, где должна быть сохранена информация о емкости устройства.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED, если устройство не готово.
uint8_t MS_Host_RequestSense ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex,
SCSI_Request_Sense_Response_t *const  SenseData 
)

Запрашивает данные sense устройства, показывающие текущее состояние устройства и коды ошибки для ранее выданной команды.

Precondition:
Эта функция должна быть вызвана только когда машина состояния хоста находится в состоянии HOST_STATE_Configured, либо вызов функции потерпит неудачу.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
[out]SenseDataуказатель на место, где должна быть сохранена информация sense.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED, если устройство не готово.
uint8_t MS_Host_ResetMSInterface ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo)

Отправляет управляющий запрос MASS STORAGE RESET на подключенное устройство, сбрасывающий интерфейс Mass Storage, и он переводится в готовность у следующеей команде Mass Storage.

Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
Returns:
значение из перечисления USB_Host_SendControlErrorCodes_t.
uint8_t MS_Host_TestUnitReady ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex 
)

Отправляет команду TEST UNIT READY на устройство, чтобы определить, готово ли устройство принять другие команды SCSI.

Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED, если устройство не готово.
static void MS_Host_USBTask ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo) [inline, static]

Главная задача обслуживания указанного интерфейса хоста Mass Storage, необходимая для корректной работы интерфейса. Должна часто вызываться из основного цикла программы, перед главной задачей поддержки USB USB_USBTask().

Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
uint8_t MS_Host_WriteDeviceBlocks ( USB_ClassInfo_MS_Host_t *const  MSInterfaceInfo,
const uint8_t  LUNIndex,
const uint32_t  BlockAddress,
const uint8_t  Blocks,
const uint16_t  BlockSize,
const void *  BlockBuffer 
)

Записывает блоки данных на носитель подключенного устройства Mass Storage.

Precondition:
Эта функция должна быть вызвана только когда машина состояния хоста находится в состоянии HOST_STATE_Configured, либо вызов функции потерпит неудачу.
Parameters:
[in,out]MSInterfaceInfoуказатель на структуру, содержащую конфигурацию и состояние хоста класса Mass Storage.
[in]LUNIndexиндекс LUN в пределах устройства, которому отправлена команда.
[in]BlockAddressначальный адрес блока в пределах устройства, куда должна быть запись.
[in]Blocksобщее количество блоков для чтения.
[in]BlockSizeРазмер в байтах каждого блока в пределах устройства.
[in]BlockBufferуказатель на место, откуда должны быть взяты данные для записи.
Returns:
значение из перечисления Pipe_Stream_RW_ErrorCodes_t или MS_ERROR_LOGICAL_CMD_FAILED, если устройство не готово.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines