Newer
Older
mbed-os / targets / TARGET_Maxim / USBEndpoints_Maxim.h
/* mbed Microcontroller Library
 * Copyright (c) 2018-2020 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef USBENDPOINTS_H
#define USBENDPOINTS_H

/* SETUP packet size */
#define SETUP_PACKET_SIZE (8)

/* Options flags for configuring endpoints */
#define DEFAULT_OPTIONS     (0)
#define SINGLE_BUFFERED     (1U << 0)
#define ISOCHRONOUS         (1U << 1)
#define RATE_FEEDBACK_MODE  (1U << 2) /* Interrupt endpoints only */

#define NUMBER_OF_LOGICAL_ENDPOINTS   (8)
#define NUMBER_OF_PHYSICAL_ENDPOINTS  (NUMBER_OF_LOGICAL_ENDPOINTS * 2)

#define EP_TO_INDEX(endpoint)   (((endpoint & 0xf) << 1) | (endpoint & 0x80 ? 1 : 0))

#define DIR_OUT       0x00
#define DIR_IN        0x80
#define EP_NUM(ep)    (ep & 0x0F)
#define IN_EP(ep)     (ep & DIR_IN)
#define OUT_EP(ep)    (!(ep & DIR_IN))

/* Define physical endpoint numbers */

/*      Endpoint    No.   */
/*      ----------------  */
#define EP0OUT      ((0 << 1) | DIR_OUT)
#define EP0IN       ((0 << 1) | DIR_IN)
#define EP1OUT      ((1 << 1) | DIR_OUT)
#define EP1IN       ((1 << 1) | DIR_IN)
#define EP2OUT      ((2 << 1) | DIR_OUT)
#define EP2IN       ((2 << 1) | DIR_IN)
#define EP3OUT      ((3 << 1) | DIR_OUT)
#define EP3IN       ((3 << 1) | DIR_IN)
#define EP4OUT      ((4 << 1) | DIR_OUT)
#define EP4IN       ((4 << 1) | DIR_IN)
#define EP5OUT      ((5 << 1) | DIR_OUT)
#define EP5IN       ((5 << 1) | DIR_IN)
#define EP6OUT      ((6 << 1) | DIR_OUT)
#define EP6IN       ((6 << 1) | DIR_IN)
#define EP7OUT      ((7 << 1) | DIR_OUT)
#define EP7IN       ((7 << 1) | DIR_IN)

/* Maximum Packet sizes */

#define MAX_PACKET_SIZE_EP0  (64)
#define MAX_PACKET_SIZE_EP1  (64)
#define MAX_PACKET_SIZE_EP2  (64)
#define MAX_PACKET_SIZE_EP3  (64)
#define MAX_PACKET_SIZE_EP4  (64)
#define MAX_PACKET_SIZE_EP5  (64)
#define MAX_PACKET_SIZE_EP6  (64)
#define MAX_PACKET_SIZE_EP7  (64)

/* Generic endpoints - intended to be portable accross devices */
/* and be suitable for simple USB devices. */

/* Bulk endpoints */
#define EPBULK_OUT  (EP1OUT)
#define EPBULK_IN   (EP2IN)

/* Interrupt endpoints */
#define EPINT_OUT   (EP3OUT)
#define EPINT_IN    (EP4IN)

/* Isochronous endpoints */
/* NOT SUPPORTED - use invalid endpoint number to prevent built errors */
#define EPISO_OUT   (EP0OUT)
#define EPISO_IN    (EP0IN)

#define MAX_PACKET_SIZE_EPBULK  (64)
#define MAX_PACKET_SIZE_EPINT   (64)

#endif