Detailed Description
Функции, макросы и перечисления, связанные с управлением конечными точками в режиме устройства USB. Этот модуль содержит макросы управления конечными точками, а также функции прерывания и отправки/приема данных различных типов. 
Define Documentation
      
        
          | #define ENDPOINT_BANK_DOUBLE   (1 << EPBK0) | 
        
      
 
Маска выбора режима банка для макроса Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна иметь два банка, которые требуют больше памяти USB FIFO, но передает быстрее, так как в одно и то же время одна из сторон (устройство USB AVR или хост) может получить доступ к одному банку, когда другая сторона получила доступ к другому банку. 
 
 
      
        
          | #define ENDPOINT_BANK_SINGLE   (0 << EPBK0) | 
        
      
 
Маска выбора режима банка для макроса Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна иметь один банк, который требует меньше памяти USB FIFO, но передает медленнее, так как только одна из сторон (устройство USB AVR или хост) может получить доступ к банку в одно и то же время. 
 
 
      
        
          | #define ENDPOINT_BANKS_SUPPORTED | 
          ( | 
            | 
          EPIndex | ) | 
             _ENDPOINT_GET_BANKS(EPIndex) | 
        
      
 
Показывает общее количество банков, поддерживаемых указанной конечной точкой.
- Parameters:
 - 
  
    | [in] | EPIndex | номер конечной точки, величина между 0 и (ENDPOINT_TOTAL_ENDPOINTS - 1)  | 
  
   
 
 
      
        
          | #define ENDPOINT_CONTROLEP   0 | 
        
      
 
Адрес для управляющей конечной точки по умолчанию, которая всегда размещена по адресу 0. Этот макрос задан для удобства, чтобы получить более читаемый код при использовании макросов конечной точки. 
 
 
      
        
          | #define ENDPOINT_CONTROLEP_DEFAULT_SIZE   8 | 
        
      
 
Размер по умолчанию для банка конечной точки управления, пока он не изменен значением размера банка конечной точки, прочитанным из дескриптора устройства. Недоступен, если задан токен FIXED_CONTROL_ENDPOINT_SIZE. 
 
 
      
        
          | #define ENDPOINT_DIR_IN   (1 << EPDIR) | 
        
      
 
Маска направления конечной точки для Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна быть инициализирована в направлении IN - т. е. данные идут от устройства к хосту. 
 
 
      
        
          | #define ENDPOINT_DIR_OUT   (0 << EPDIR) | 
        
      
 
Маска направления конечной точки для Endpoint_ConfigureEndpoint(). Показывает, что конечная точка должна быть инициализирована в направлении OUT - т. е. данные идут от хоста к устройству. 
 
 
      
        
          | #define ENDPOINT_EPDIR_MASK   0x80 | 
        
      
 
Маска направления конечной точки, для маскирования адресов конечной точки при получении направления конечной точки сравнением с масками ENDPOINT_DESCRIPTOR_DIR_*. 
 
 
      
        
          | #define ENDPOINT_EPNUM_MASK   0x07 | 
        
      
 
Маска номера конечной точки, для наложения на адрес конечной точки и получения числового адреса конечной точки в устройстве. 
 
 
      
        
          | #define ENDPOINT_EPSIZE_MASK   0x7F | 
        
      
 
Маска размена банка конечной точки, для наложения на адрес конечной точки и получения размера банка конечной точки в устройстве. 
 
 
      
        
          | #define ENDPOINT_MAX_SIZE | 
          ( | 
            | 
          EPIndex | ) | 
             _ENDPOINT_GET_MAXSIZE(EPIndex) | 
        
      
 
Максимальный размер в байтах указанной конечной точки.
- Parameters:
 - 
  
    | [in] | EPIndex | номер конечной точки, величина между 0 и (ENDPOINT_TOTAL_ENDPOINTS - 1)  | 
  
   
 
 
      
        
          | #define ENDPOINT_TOTAL_ENDPOINTS   ENDPOINT_DETAILS_MAXEP | 
        
      
 
Общее количество конечных точек (включая контрольную точку управления по умолчанию с адресом 0), которое можно использовать в устройстве. Разные модели USB AVR поддерживают разное количество конечных точек, и эта величина отражает максимальное количество конечных точек для выбранной модели AVR. 
 
 
Function Documentation
      
        
          | void Endpoint_ClearStatusStage  | 
          ( | 
          void  | 
           | ) | 
           | 
        
      
 
Автоматически завершает стадию статуса на управляющей передаче конечной точки типа CONTROL, относительно направления данных. Эта функция используется для удобства, чтобы упростить пользователю обработку управляющего запроса. 
 
 
      
        
          | static bool Endpoint_ConfigureEndpoint  | 
          ( | 
          const uint8_t  | 
          Number,  | 
        
        
           | 
           | 
          const uint8_t  | 
          Type,  | 
        
        
           | 
           | 
          const uint8_t  | 
          Direction,  | 
        
        
           | 
           | 
          const uint16_t  | 
          Size,  | 
        
        
           | 
           | 
          const uint8_t  | 
          Banks  | 
        
        
           | 
          ) | 
           |  [inline, static] | 
        
      
 
Конфигурирует конечную точку с указанным номером, типом, направлением, размером и режимом банка. Как только сконфигурирована, конечная точка может быть прочитана или записана, в зависимости от её направления.
- Parameters:
 - 
  
    | [in] | Number | Номер конечной точки для конфигурирования. Должен быть больше 0 и меньше ENDPOINT_TOTAL_ENDPOINTS. | 
    | [in] | Type | Тип конечной точки для конфигурирования, маска EP_TYPE_*. Не все типы конечной точки доступны на устройствах Low Speed USB - см. спецификацию USB 2.0. | 
    | [in] | Direction | Направление данных конечной точки, либо ENDPOINT_DIR_OUT, либо ENDPOINT_DIR_IN. Все коненые точки (за исключением типа Control - управление) однонаправленные - данные могут быть либо только прочитаны, либо только записаны через банк конечной точки, в зависимости от направления. | 
    | [in] | Size | Размер банка конечной точки, где сохраняются пакеты перед отправкой к хосту USB, либо после того, как пакет принят от хоста (в зависимости от направления данных конечной точки). Размер банка должен указывать на максимальный размер пакета, который может поддержать конечная точка. | 
    | [in] | Banks | Количество банков для использования с конечной точкой, маска ENDPOINT_BANK_*. Большее количество банков тратит больше USB DPRAM, но обеспечивает более высокую производительность. Конечные точки изохронного типа должны иметь как минимум два банка. | 
  
   
- Note:
 - Конечные точки должны конфигурироваться в порядке возрастания, иначе произойдет повреждение банка. 
 
- 
У некоторых моделей USB AVR конечные точки могут иметь разный максимальный размер пакета в зависимости от индекса конечной точки - см. даташит на выбранный USB AVR, чтобы определить максимальный размер банка каждой конечной точки. 
 
- 
Конечная точка управления по умолчанию не должна конфигурироваться приложением пользователя, так как она автоматически конфигурируется внутренним кодом библиотеки. 
 
- 
Эта подпрограмма при успешном завершении автоматически выбирает указанную конечную точку. При ошибке выбирается конечная точка, которая не сконфигурировалась.
 
- Returns:
 - двоичное true, если конфигурация завершилась успешно, иначе false. 
 
 
 
      
        
          | static void Endpoint_DisableEndpoint  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Запрещает выбранную конечную точку, после чего её нельзя использовать для обмена данными с хостом. 
 
 
      
        
          | static void Endpoint_EnableEndpoint  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Разрешает текущую выбранную конечную точку, после чего она может использоваться для обмена через неё данными (прием и передача) с хостом.
- Note:
 - Предварительно конечные точки должны быть правильно сконфигурированы вызовом Endpoint_ConfigureEndpoint(). 
 
 
 
      
        
          | static uint8_t Endpoint_GetCurrentEndpoint  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Получение адреса выбранной текущей конечной точки. Обычно используется для сохранения номера выбранной в настоящий момент конечной точки, чтобы его потом можно было восстановить после манипуляций с другой конечной точкой.
- Returns:
 - индекс выбранной в настоящий момент конечной точки. 
 
 
 
      
        
          | static uint8_t Endpoint_GetEndpointDirection  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Определяет направление текущей выбранной конечной точки.
- Returns:
 - Направление текущей выбранной конечной точки в виде маски ENDPOINT_DIR_*. 
 
 
 
      
        
          | static uint8_t Endpoint_GetEndpointInterrupts  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Возвращает маску, показывающую, какая из конечных точек типа INTERRUPT получила прерывание - другими словами, у какой задержка прерывания заввершилась. Какая из конечных точек получила прерывание, можно определить маскированием возвращаемого значения (величиной 1 << {Endpoint Number}).
- Returns:
 - маска, биты которой показывают, какая конечная точка получила прерывание. 
 
 
 
      
        
          | static bool Endpoint_HasEndpointInterrupted  | 
          ( | 
          const uint8_t  | 
          EndpointNumber | ) | 
           [inline, static] | 
        
      
 
Определяет, получила ли прерывание указанная конечная точка (допустимо только для конечных точек с типом INTERRUPT).
- Parameters:
 - 
  
    | [in] | EndpointNumber | индекс конечной точки, у которой должен быть проверен флаг прерывания. | 
  
   
- Returns:
 - двоичное true, если указанная конечная точка получила прерывание, иначе false. 
 
 
 
      
        
          | static bool Endpoint_IsConfigured  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Определяет, сконфигурирована ли текущая выбранная конечная точка.
- Returns:
 - двоичное true, если текущая выбранная конечная точка сконфигурирована, иначе false. 
 
 
 
      
        
          | static bool Endpoint_IsEnabled  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Определяет, что текущая конечная точка разрешена (но она необязательно должна быть при этом сконфигурирована).
- Returns:
 - двоичное true, если текущая конечная точка разрешена, иначе false. 
 
 
 
      
        
          | static void Endpoint_ResetDataToggle  | 
          ( | 
          void  | 
           | ) | 
           [inline, static] | 
        
      
 
Сбрасывает переключение данных на текущей выбранной конечной точке. 
 
 
      
        
          | static void Endpoint_ResetFIFO  | 
          ( | 
          const uint8_t  | 
          EndpointNumber | ) | 
           [inline, static] | 
        
      
 
Сброс FIFO банка конечной точки. Очищает все банки конечной точки и сбрасывает указатели In и Out на содержимое банков контроллера USB.
- Parameters:
 - 
  
    | [in] | EndpointNumber | номер конечной точки, у которой сбрасываются буферы FIFO.  | 
  
   
 
 
      
        
          | static void Endpoint_SelectEndpoint  | 
          ( | 
          const uint8_t  | 
          EndpointNumber | ) | 
           [inline, static] | 
        
      
 
Выбирает конечную точку указанного номера. Если используется адрес из дескрипторов устройства, то его значение должно быть замаскировано константой ENDPOINT_EPNUM_MASK, чтобы взять только номер конечной точки (отбросив бит направления).
Любые операции с конечной точкой, которые не требуют номера конечной точки, всегда работают с текущей выбранной конечной точкой.
- Parameters:
 - 
  
    | [in] | EndpointNumber | номер конечной точки для её выбора.  | 
  
   
 
 
      
        
          | static void Endpoint_SetEndpointDirection  | 
          ( | 
          const uint8_t  | 
          DirectionMask | ) | 
           [inline, static] | 
        
      
 
Устанавливает направление текущей выбранной конечной точки.
- Parameters:
 - 
  
    | [in] | DirectionMask | новое направление конечной точки в виде маски ENDPOINT_DIR_*.  | 
  
   
 
 
Variable Documentation
Глобальная переменная, показывающая максимальный размер пакета конечной точки управления по умолчанию, размещенной в устройстве по адресу 0. Это значение установлено в величину, показанную в дескрипторе устройства проекта пользователя, как только интерфейс USB был инициализирован в режиме устройства.
Если свободное место критично, можно пофиксить это к статической величине путем задания размера конечной точки в токен FIXED_CONTROL_ENDPOINT_SIZE, передаваемый компилятору через переключатель -D. Когда используется фиксированный размер управляющей конечной точки, то размер больше не будет динамически читаться из дескрипторов во время выполнения, и вместо этого будет использоваться фиксированная величина. Когда это используется, важно, чтобы размер в дескрипторе конечной точки управления совпадал с токеном FIXED_CONTROL_ENDPOINT_SIZE - рекомендуется использовать токен FIXED_CONTROL_ENDPOINT_SIZE в дескрипторах, чтобы убедиться в этом.
- Note:
 - Эта переменная должна быть обработана как только для чтения в пользовательском приложении, и никогда вручную не изменяться.