stm32f1/usb_cables.c

4410 lines
228 KiB
C

/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/** USB cable definitions and utilities
* @file
* @author King Kévin <kingkevin@cuvoodoo.info>
* @date 2019
*/
/* standard libraries */
#include <stdint.h> // standard integer types
#include <string.h> // string utilities
/* STM32 (including CM3) libraries */
#include <libopencmsis/core_cm3.h> // Cortex M3 utilities
#include <libopencm3/cm3/assert.h> // assert definitions
#include <libopencm3/stm32/gpio.h> // general purpose input output library
/* own libraries */
#include "global.h" // board definitions
#include "print.h" // printing utilities
#include "usb_cables.h" // own definitions
const struct usb_pin_t usb_pins[] = {
// A host
{
.name = "shield",
.port = GPIOD,
.pin = GPIO0,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "VBUS",
.port = GPIOC,
.pin = GPIO12,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "D-",
.port = GPIOA,
.pin = GPIO15,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D+",
.port = GPIOG,
.pin = GPIO6,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND",
.port = GPIOG,
.pin = GPIO2,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "RX-",
.port = GPIOD,
.pin = GPIO14,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+",
.port = GPIOG,
.pin = GPIO4,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND_DRAIN",
.port = GPIOG,
.pin = GPIO8,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TX-",
.port = GPIOC,
.pin = GPIO10,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX+",
.port = GPIOC,
.pin = GPIO11,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
// C host
{
.name = "shield",
.port = GPIOG,
.pin = GPIO13,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "GND-A1",
.port = GPIOD,
.pin = GPIO15,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TXp1",
.port = GPIOG,
.pin = GPIO3,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TXn1",
.port = GPIOG,
.pin = GPIO5,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "VBUS-A4",
.port = GPIOG,
.pin = GPIO7,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "CC1",
.port = GPIOC,
.pin = GPIO6,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "Dp1",
.port = GPIOC,
.pin = GPIO8,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "Dn1",
.port = GPIOA,
.pin = GPIO8,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "SBU1",
.port = GPIOA,
.pin = GPIO10,
.type = USB_PIN_TYPE_OTHER,
},
{
.name = "VBUS-A9",
.port = GPIOG,
.pin = GPIO11,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "RXn2",
.port = GPIOA,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RXp2",
.port = GPIOC,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND-A12",
.port = GPIOC,
.pin = GPIO7,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "GND-B1",
.port = GPIOD,
.pin = GPIO3,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TXp2",
.port = GPIOD,
.pin = GPIO2,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TXn2",
.port = GPIOD,
.pin = GPIO4,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "VBUS-B4",
.port = GPIOD,
.pin = GPIO5,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "CC2",
.port = GPIOD,
.pin = GPIO1,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "Dp2",
.port = GPIOD,
.pin = GPIO6,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "Dn2",
.port = GPIOD,
.pin = GPIO7,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "SBU2",
.port = GPIOG,
.pin = GPIO15,
.type = USB_PIN_TYPE_OTHER,
},
{
.name = "VBUS-B9",
.port = GPIOG,
.pin = GPIO9,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "RXn1",
.port = GPIOG,
.pin = GPIO10,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RXp1",
.port = GPIOG,
.pin = GPIO14,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND-B12",
.port = GPIOG,
.pin = GPIO12,
.type = USB_PIN_TYPE_GROUND,
},
// A device
{
.name = "shield",
.port = GPIOB,
.pin = GPIO3,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "VBUS",
.port = GPIOE,
.pin = GPIO3,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "D-",
.port = GPIOE,
.pin = GPIO1,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D+",
.port = GPIOB,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND",
.port = GPIOB,
.pin = GPIO5,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "RX-",
.port = GPIOB,
.pin = GPIO4,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+",
.port = GPIOB,
.pin = GPIO8,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND_DRAIN",
.port = GPIOE,
.pin = GPIO0,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TX-",
.port = GPIOC,
.pin = GPIO13,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX+",
.port = GPIOE,
.pin = GPIO2,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
// B
{
.name = "shield",
.port = GPIOF,
.pin = GPIO1,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "VBUS",
.port = GPIOC,
.pin = GPIO3,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "D-",
.port = GPIOA,
.pin = GPIO0,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D+",
.port = GPIOA,
.pin = GPIO4,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND",
.port = GPIOC,
.pin = GPIO0,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TX-",
.port = GPIOA,
.pin = GPIO2,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX+",
.port = GPIOA,
.pin = GPIO1,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND_DRAIN",
.port = GPIOF,
.pin = GPIO6,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "RX-",
.port = GPIOC,
.pin = GPIO2,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+",
.port = GPIOC,
.pin = GPIO1,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
// mini-B
{
.name = "shield",
.port = GPIOC,
.pin = GPIO14,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "VBUS",
.port = GPIOE,
.pin = GPIO4,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "D-",
.port = GPIOE,
.pin = GPIO5,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D+",
.port = GPIOE,
.pin = GPIO6,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "ID",
.port = GPIOF,
.pin = GPIO0,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "GND",
.port = GPIOC,
.pin = GPIO15,
.type = USB_PIN_TYPE_GROUND,
},
// micro-B
{
.name = "shield",
.port = GPIOD,
.pin = GPIO12,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "VBUS",
.port = GPIOD,
.pin = GPIO11,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "D-",
.port = GPIOD,
.pin = GPIO10,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "D+",
.port = GPIOD,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "ID",
.port = GPIOD,
.pin = GPIO8,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "GND",
.port = GPIOB,
.pin = GPIO15,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TX-",
.port = GPIOB,
.pin = GPIO14,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TX+",
.port = GPIOB,
.pin = GPIO13,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND_DRAIN",
.port = GPIOB,
.pin = GPIO11,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "RX-",
.port = GPIOB,
.pin = GPIO10,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RX+",
.port = GPIOB,
.pin = GPIO12,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
// C device
{
.name = "shield",
.port = GPIOE,
.pin = GPIO11,
.type = USB_PIN_TYPE_SHIELD,
},
{
.name = "GND-A1",
.port = GPIOF,
.pin = GPIO13,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TXp1",
.port = GPIOF,
.pin = GPIO12,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TXn1",
.port = GPIOF,
.pin = GPIO11,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "VBUS-A4",
.port = GPIOB,
.pin = GPIO2,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "CC1",
.port = GPIOB,
.pin = GPIO1,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "Dp1",
.port = GPIOB,
.pin = GPIO0,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "Dn1",
.port = GPIOC,
.pin = GPIO5,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "SBU1",
.port = GPIOC,
.pin = GPIO4,
.type = USB_PIN_TYPE_OTHER,
},
{
.name = "VBUS-A9",
.port = GPIOA,
.pin = GPIO7,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "RXn2",
.port = GPIOA,
.pin = GPIO6,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RXp2",
.port = GPIOA,
.pin = GPIO5,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND-A12",
.port = GPIOA,
.pin = GPIO3,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "GND-B1",
.port = GPIOF,
.pin = GPIO14,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "TXp2",
.port = GPIOE,
.pin = GPIO15,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "TXn2",
.port = GPIOF,
.pin = GPIO15,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "VBUS-B4",
.port = GPIOG,
.pin = GPIO0,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "CC2",
.port = GPIOE,
.pin = GPIO14,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "Dp2",
.port = GPIOG,
.pin = GPIO1,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "Dn2",
.port = GPIOE,
.pin = GPIO7,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "SBU2",
.port = GPIOE,
.pin = GPIO13,
.type = USB_PIN_TYPE_OTHER,
},
{
.name = "VBUS-B9",
.port = GPIOE,
.pin = GPIO8,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "RXn1",
.port = GPIOE,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "RXp1",
.port = GPIOE,
.pin = GPIO12,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "GND-B12",
.port = GPIOE,
.pin = GPIO10,
.type = USB_PIN_TYPE_GROUND,
},
// lightning
{
.name = "GND",
.port = GPIOF,
.pin = GPIO10,
.type = USB_PIN_TYPE_GROUND,
},
{
.name = "L0p",
.port = GPIOF,
.pin = GPIO9,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "L0n",
.port = GPIOF,
.pin = GPIO8,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "ID0",
.port = GPIOF,
.pin = GPIO7,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
{
.name = "PWR",
.port = GPIOF,
.pin = GPIO5,
.type = USB_PIN_TYPE_POWER,
},
{
.name = "L1n",
.port = GPIOF,
.pin = GPIO2,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "L1p",
.port = GPIOF,
.pin = GPIO3,
.type = USB_PIN_TYPE_DIFFERENTIAL,
},
{
.name = "ID1",
.port = GPIOF,
.pin = GPIO4,
.type = USB_PIN_TYPE_IDENTIFICATION,
},
};
/* USB connectors */
/** USB type A connector pins (host side) */
static const uint8_t usb_a_host_pins[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
/** USB type A connector (host side) */
static const struct usb_connector_t usb_a_host_connector = {
.name = "A",
.host = true,
.pins_nb = LENGTH(usb_a_host_pins),
.pins = usb_a_host_pins,
};
/** USB-C connector ("host" side, "A" side first) pins */
static const uint8_t usb_c_host_sidea_pins[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34};
/** USB-C connector ("host" side, "B" side first) pins */
static const uint8_t usb_c_host_sideb_pins[] = {10, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22};
/** USB-C connector ("host" side) */
static const struct usb_connector_t usb_c_host_connector = {
.name = "C",
.host = true,
.pins_nb = LENGTH(usb_c_host_sidea_pins),
.pins = usb_c_host_sidea_pins,
};
/** USB type A connector (device) pins */
static const uint8_t usb_a_device_pins[] = {35, 36, 37, 38, 39, 40, 41, 42, 43, 44};
/** USB type A connector (device)
* @note type A should be a host side connector, but it is sometimes used on the device side, or to provide additional power on Y cables
*/
static const struct usb_connector_t usb_a_device_connector = {
.name = "A",
.host = false,
.pins_nb = LENGTH(usb_a_device_pins),
.pins = usb_a_device_pins,
};
/** USB type B connector (device side) pins */
static const uint8_t usb_b_device_pins[] = {45, 46, 47, 48, 49, 50, 51, 52, 53, 54};
/** USB type B connector (device side) */
static const struct usb_connector_t usb_b_device_connector = {
.name = "B",
.host = false,
.pins_nb = LENGTH(usb_b_device_pins),
.pins = usb_b_device_pins,
};
/** USB mini-B connector (device side) */
static const uint8_t usb_minib_device_pins[] = {55, 56, 57, 58, 59, 60};
/** USB mini-B connector (device side)
* @note this connector does not support USB 3.x
*/
static const struct usb_connector_t usb_minib_device_connector = {
.name = "mini-B",
.host = false,
.pins_nb = LENGTH(usb_minib_device_pins),
.pins = usb_minib_device_pins,
};
/** USB micro-B connector (device side) pins */
static const uint8_t usb_microb_device_pins[] = {61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71};
/** USB micro-B connector (device side) */
static const struct usb_connector_t usb_microb_device_connector = {
.name = "micro-B",
.host = false,
.pins_nb = LENGTH(usb_microb_device_pins),
.pins = usb_microb_device_pins,
};
/** USB-C connector ("device" side, "A" side first) pins */
static const uint8_t usb_c_device_sidea_pins[] = {72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96};
/** USB-C connector ("device" side, "B" side first) pins */
static const uint8_t usb_c_device_sideb_pins[] = {72, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84};
/** USB-C connector ("device" side) */
static const struct usb_connector_t usb_c_device_connector = {
.name = "C",
.host = false,
.pins_nb = LENGTH(usb_c_device_sidea_pins),
.pins = usb_c_device_sidea_pins,
};
/** Apple lightning connector (device side) pins */
static const uint8_t lighnting_device_pins[] = {97, 98, 99, 100, 101, 102, 103, 104};
/** Apple lightning connector (device side)
* @note this is not strictly a USB connector
*/
static const struct usb_connector_t lightning_device_connector = {
.name = "lightning",
.host = false,
.pins_nb = LENGTH(lighnting_device_pins),
.pins = lighnting_device_pins,
};
const struct usb_connector_t* usb_connectors[] = {
&usb_a_host_connector,
&usb_c_host_connector,
&usb_a_device_connector,
&usb_b_device_connector,
&usb_minib_device_connector,
&usb_microb_device_connector,
&usb_c_device_connector,
&lightning_device_connector,
};
/* USB cables definitions */
/** list of connectors for A-A cables */
static const struct usb_connector_t* usb_a_a_connectors[] = {
&usb_a_host_connector,
&usb_a_device_connector,
};
/** USB type A to type A power cable pin pairs
* @implements this cable is not specified since it does not carry USB data signals
* @note A-A cable are not specified since they use a host connector on both sides
*/
static const uint8_t usb_aa0_pins[][2] = {
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
};
/** USB type A to type A USB 2.0 cable pin pairs
* @implements this cable is not specified since it does not carry USB data signals
* @note A-A cable are not specified since they use a host connector on both sides, but some cheap devices use it because the connector is cheap
*/
static const uint8_t usb_aa2_pins[][2] = {
{usb_a_host_pins[0], usb_a_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_a_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_a_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
};
/** USB type A to type A USB 3.x cable pin pairs
* @implements this cable is not specified since it does not carry USB data signals
* @note A-A cable are not specified since they use a host connector on both sides, but it is often used on PCIe raiser boards
*/
static const uint8_t usb_aa3_pins[][2] = {
{usb_a_host_pins[0], usb_a_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_a_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_a_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
{usb_a_host_pins[5], usb_a_device_pins[5]}, // RX-, TX-
{usb_a_host_pins[6], usb_a_device_pins[6]}, // RX+, TX+
{usb_a_host_pins[7], usb_a_device_pins[7]}, // GND_DRAIN
{usb_a_host_pins[8], usb_a_device_pins[8]}, // TX-, RX-
{usb_a_host_pins[9], usb_a_device_pins[9]}, // TX+, RX+
};
/** list of connectors for A-B cables (using A host connector) */
static const struct usb_connector_t* usb_a_host_b_connectors[] = {
&usb_a_host_connector,
&usb_b_device_connector,
};
/** USB type A to type B power only cable pin pairs
* @implements this cable is not specified since it does not carry USB data signals
*/
static const uint8_t usb__a_host__b__ab0_pins[][2] = {
{usb_a_host_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_b_device_pins[4]}, // GND
};
/** USB type A to type B USB 2.0 cable pin pairs
* @implements USB Cables and Connectors Class 2.0 (https://www.usb.org/document-library/cables-and-connectors-class-20)
* @note the shield is mandatory
*/
static const uint8_t usb__a_host__b__ab2_pins[][2] = {
{usb_a_host_pins[0], usb_b_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_b_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_b_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_b_device_pins[4]}, // GND
};
/** USB type A to type B USB 3.x cable pin pairs
* @implements USB 3.1 Legacy Cable and Connector (https://www.usb.org/document-library/usb-31-legacy-cable-and-connector-revision-10)
* @note the shield is mandatory
*/
static const uint8_t usb__a_host__b__ab3_pins[][2] = {
{usb_a_host_pins[0], usb_b_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_b_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_b_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_b_device_pins[4]}, // GND
{usb_a_host_pins[5], usb_b_device_pins[5]}, // RX-, TX-
{usb_a_host_pins[6], usb_b_device_pins[6]}, // RX+, TX+
{usb_a_host_pins[7], usb_b_device_pins[7]}, // GND_DRAIN
{usb_a_host_pins[8], usb_b_device_pins[8]}, // TX-, RX-
{usb_a_host_pins[9], usb_b_device_pins[9]}, // TX+, RX+
};
/** list of connectors for A-B cables (using A device connector) */
static const struct usb_connector_t* usb_a_device_b_connectors[] = {
&usb_a_device_connector,
&usb_b_device_connector,
};
static const uint8_t usb__a_device__b__ab0_pins[][2] = {
{usb_a_device_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_b_device_pins[4]}, // GND
};
static const uint8_t usb__a_device__b__ab2_pins[][2] = {
{usb_a_device_pins[0], usb_b_device_pins[0]}, // shield
{usb_a_device_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_b_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_b_device_pins[3]}, // D+
{usb_a_device_pins[4], usb_b_device_pins[4]}, // GND
};
static const uint8_t usb__a_device__b__ab3_pins[][2] = {
{usb_a_device_pins[0], usb_b_device_pins[0]}, // shield
{usb_a_device_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_b_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_b_device_pins[3]}, // D+
{usb_a_device_pins[4], usb_b_device_pins[4]}, // GND
{usb_a_device_pins[5], usb_b_device_pins[5]}, // RX-, TX-
{usb_a_device_pins[6], usb_b_device_pins[6]}, // RX+, TX+
{usb_a_device_pins[7], usb_b_device_pins[7]}, // GND_DRAIN
{usb_a_device_pins[8], usb_b_device_pins[8]}, // TX-, RX-
{usb_a_device_pins[9], usb_b_device_pins[9]}, // TX+, RX+
};
/** list of connectors for A+A-B cables */
static const struct usb_connector_t* usb_a_a_b_connectors[] = {
&usb_a_host_connector,
&usb_a_device_connector,
&usb_b_device_connector,
};
/** USB type A to type B USB 2.0, with additional A for power cable pin pairs,
* @implements this cable is not specified
*/
static const uint8_t usb_a_host_a_device_b_aab2_pins[][2] = {
{usb_a_host_pins[0], usb_b_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_b_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_b_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_b_device_pins[4]}, // GND
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
{usb_a_device_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_b_device_pins[4]}, // GND
};
static const uint8_t usb_a_device_a_host_b_aab2_pins[][2] = {
{usb_a_device_pins[0], usb_b_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_b_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_b_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_b_device_pins[4]}, // GND
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
{usb_a_device_pins[1], usb_b_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_b_device_pins[4]}, // GND
};
/** list of connectors for A-miniB cables (using A host connector) */
static const struct usb_connector_t* usb_a_host_minib_connectors[] = {
&usb_a_host_connector,
&usb_minib_device_connector,
};
/** USB type A to type mini-B power only cable pin pairs
* @implements this cable is not specified since it does not carry USB data signals
*/
static const uint8_t usb__a_host__minib__amb0_pins[][2] = {
{usb_a_host_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_minib_device_pins[5]}, // GND
};
/** USB type A to type mini-B USB 2.0 cable pin pairs
* @implements USB Cables and Connectors Class 2.0 (https://www.usb.org/document-library/cables-and-connectors-class-20)
* @note the shield is mandatory
*/
static const uint8_t usb__a_host__minib__amb2_pins[][2] = {
{usb_a_host_pins[0], usb_minib_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_minib_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_minib_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_minib_device_pins[5]}, // GND
};
/** list of connectors for A-miniB cables (using A device connector) */
static const struct usb_connector_t* usb_a_device_minib_connectors[] = {
&usb_a_device_connector,
&usb_minib_device_connector,
};
static const uint8_t usb__a_device__minib__amb0_pins[][2] = {
{usb_a_device_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_minib_device_pins[5]}, // GND
};
static const uint8_t usb__a_device__minib__amb2_pins[][2] = {
{usb_a_device_pins[0], usb_minib_device_pins[0]}, // shield
{usb_a_device_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_minib_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_minib_device_pins[3]}, // D+
{usb_a_device_pins[4], usb_minib_device_pins[5]}, // GND
};
/** list of connectors for A+A-B cables */
static const struct usb_connector_t* usb_a_a_minib_connectors[] = {
&usb_a_host_connector,
&usb_a_device_connector,
&usb_minib_device_connector,
};
/** USB type A to type B USB 2.0, with additional A for power cable pin pairs,
* @implements this cable is not specified
*/
static const uint8_t usb_a_host_a_device_minib_aamb2_pins[][2] = {
{usb_a_host_pins[0], usb_minib_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_minib_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_minib_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_minib_device_pins[4]}, // GND
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
{usb_a_device_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_minib_device_pins[4]}, // GND
};
static const uint8_t usb_a_device_a_host_minib_aamb2_pins[][2] = {
{usb_a_device_pins[0], usb_minib_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_minib_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_minib_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_minib_device_pins[4]}, // GND
{usb_a_host_pins[1], usb_a_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_a_device_pins[4]}, // GND
{usb_a_device_pins[1], usb_minib_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_minib_device_pins[4]}, // GND
};
/** list of connectors for A-microB cables (using A host connector) */
static const struct usb_connector_t* usb_a_host_microb_connectors[] = {
&usb_a_host_connector,
&usb_microb_device_connector,
};
/** USB type A to type micro-B power only cable pin pairs
* @implements this cable is not specified since it does not carry USB data signals
*/
static const uint8_t usb__a_host__microb__aub0_pins[][2] = {
{usb_a_host_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_host_pins[4], usb_microb_device_pins[5]}, // GND
};
/** USB type A to type micro-B USB 2.0 cable pin pairs
* @implements USB Cables and Connectors Class 2.0 (https://www.usb.org/document-library/cables-and-connectors-class-20)
* @note the shield is mandatory
*/
static const uint8_t usb__a_host__microb__aub2_pins[][2] = {
{usb_a_host_pins[0], usb_microb_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_microb_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_microb_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_microb_device_pins[5]}, // GND
};
/** USB type A to type micro-B USB 3.x cable pin pairs
* @implements USB 3.1 Legacy Cable and Connector (https://www.usb.org/document-library/usb-31-legacy-cable-and-connector-revision-10)
* @note the shield is mandatory
*/
static const uint8_t usb__a_host__microb__aub3_pins[][2] = {
{usb_a_host_pins[0], usb_microb_device_pins[0]}, // shield
{usb_a_host_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_host_pins[2], usb_microb_device_pins[2]}, // D-
{usb_a_host_pins[3], usb_microb_device_pins[3]}, // D+
{usb_a_host_pins[4], usb_microb_device_pins[5]}, // GND
{usb_a_host_pins[5], usb_microb_device_pins[6]}, // RX-, TX-
{usb_a_host_pins[6], usb_microb_device_pins[7]}, // RX+, TX+
{usb_a_host_pins[7], usb_microb_device_pins[8]}, // GND_DRAIN
{usb_a_host_pins[8], usb_microb_device_pins[9]}, // TX-, RX-
{usb_a_host_pins[9], usb_microb_device_pins[10]}, // TX+, RX+
};
/** list of connectors for A-microB cables (using A device connector) */
static const struct usb_connector_t* usb_a_device_microb_connectors[] = {
&usb_a_device_connector,
&usb_microb_device_connector,
};
static const uint8_t usb__a_device__microb__aub0_pins[][2] = {
{usb_a_device_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_device_pins[4], usb_microb_device_pins[5]}, // GND
};
static const uint8_t usb__a_device__microb__aub2_pins[][2] = {
{usb_a_device_pins[0], usb_microb_device_pins[0]}, // shield
{usb_a_device_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_microb_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_microb_device_pins[3]}, // D+
{usb_a_device_pins[4], usb_microb_device_pins[5]}, // GND
};
static const uint8_t usb__a_device__microb__aub3_pins[][2] = {
{usb_a_device_pins[0], usb_microb_device_pins[0]}, // shield
{usb_a_device_pins[1], usb_microb_device_pins[1]}, // VBUS
{usb_a_device_pins[2], usb_microb_device_pins[2]}, // D-
{usb_a_device_pins[3], usb_microb_device_pins[3]}, // D+
{usb_a_device_pins[4], usb_microb_device_pins[5]}, // GND
{usb_a_device_pins[5], usb_microb_device_pins[6]}, // RX-, TX-
{usb_a_device_pins[6], usb_microb_device_pins[7]}, // RX+, TX+
{usb_a_device_pins[7], usb_microb_device_pins[8]}, // GND_DRAIN
{usb_a_device_pins[8], usb_microb_device_pins[9]}, // TX-, RX-
{usb_a_device_pins[9], usb_microb_device_pins[10]}, // TX+, RX+
};
/** list of connectors for C shunts (using C host connector) */
static const struct usb_connector_t* usb_c_host_connectors[] = {
&usb_c_host_connector,
};
/** this is not a cable, but a shunt shorting opposite signal the type C connector so to test it */
static const uint8_t usb__c_host__c_host__cshunt_pins[][2] = {
{usb_c_host_sidea_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[2], usb_c_host_sideb_pins[11]}, // A2 TXp1, B11 RXp1
{usb_c_host_sidea_pins[3], usb_c_host_sideb_pins[10]}, // A3 TXn1, B10 RXn1
{usb_c_host_sidea_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sideb_pins[8]}, // A5 CC1, B8 SBU2
{usb_c_host_sidea_pins[6], usb_c_host_sideb_pins[7]}, // A6 Dp1, B7 Dn2
{usb_c_host_sidea_pins[7], usb_c_host_sideb_pins[6]}, // A7 Dn1, B6 Dp2
{usb_c_host_sidea_pins[8], usb_c_host_sideb_pins[5]}, // A8 SBU1, B5 CC2
{usb_c_host_sidea_pins[9], usb_c_host_sideb_pins[4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[10], usb_c_host_sideb_pins[3]}, // A10 RXn2, B3 TXn2
{usb_c_host_sidea_pins[11], usb_c_host_sideb_pins[2]}, // A11 RXp2, B2 TXp2
{usb_c_host_sidea_pins[12], usb_c_host_sideb_pins[1]}, // A12 GND, B1 GND
};
/** list of connectors for C shunts (using C device connector) */
static const struct usb_connector_t* usb_c_device_connectors[] = {
&usb_c_device_connector,
};
static const uint8_t usb__c_device__c_device__cshunt_pins[][2] = {
{usb_c_device_sidea_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[2], usb_c_device_sideb_pins[11]}, // A2 TXp1, B11 RXp1
{usb_c_device_sidea_pins[3], usb_c_device_sideb_pins[10]}, // A3 TXn1, B10 RXn1
{usb_c_device_sidea_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sideb_pins[8]}, // A5 CC1, B8 SBU2
{usb_c_device_sidea_pins[6], usb_c_device_sideb_pins[7]}, // A6 Dp1, B7 Dn2
{usb_c_device_sidea_pins[7], usb_c_device_sideb_pins[6]}, // A7 Dn1, B6 Dp2
{usb_c_device_sidea_pins[8], usb_c_device_sideb_pins[5]}, // A8 SBU1, B5 CC2
{usb_c_device_sidea_pins[9], usb_c_device_sideb_pins[4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[10], usb_c_device_sideb_pins[3]}, // A10 RXn2, B3 TXn2
{usb_c_device_sidea_pins[11], usb_c_device_sideb_pins[2]}, // A11 RXp2, B2 TXp2
{usb_c_device_sidea_pins[12], usb_c_device_sideb_pins[1]}, // A12 GND, B1 GND
};
/** list of connectors for A-C cables (using A host connector and C host connector) */
static const struct usb_connector_t* usb_a_host_c_host_connectors[] = {
&usb_a_host_connector,
&usb_c_host_connector,
};
/** list of connectors for A-C cables (using A host connector and C device connector) */
static const struct usb_connector_t* usb_a_host_c_device_connectors[] = {
&usb_a_host_connector,
&usb_c_device_connector,
};
/** list of connectors for A-C cables (using A device connector and C host connector) */
static const struct usb_connector_t* usb_a_device_c_host_connectors[] = {
&usb_a_device_connector,
&usb_c_host_connector,
};
/** list of connectors for A-C cables (using A device connector and C device connector) */
static const struct usb_connector_t* usb_a_device_c_device_connectors[] = {
&usb_a_device_connector,
&usb_c_device_connector,
};
/** USB type A to type C power only cable pin pairs
* @implements this cable is not specified since it does not carry USB signals
*/
static const uint8_t usb__a_host__c_host_sidea__ac0_pins[][2] = {
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_host__c_host_sideb__ac0_pins[][2] = {
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_host__c_device_sidea__ac0_pins[][2] = {
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_host__c_device_sideb__ac0_pins[][2] = {
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_host_sidea__ac0_pins[][2] = {
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_host_sideb__ac0_pins[][2] = {
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_device_sidea__ac0_pins[][2] = {
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_device_sideb__ac0_pins[][2] = {
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
/** USB type A to type C USB 2.0 cable pin pairs
* @implements AC2-3 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__a_host__c_host_sidea__ac2_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_host__c_host_sideb__ac2_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_host__c_device_sidea__ac2_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_host__c_device_sideb__ac2_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_host_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_host_sidea__ac2_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_host_sideb__ac2_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_device_sidea__ac2_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (56kO)
};
static const uint8_t usb__a_device__c_device_sideb__ac2_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (56kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (56kO)
// A-C connections
{usb_a_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (56kO)
};
/** USB type A to type C USB 3.1 cable pin pairs
* @implements AC3G2-3 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__a_host__c_host_sidea__ac3_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
{usb_a_host_pins[0], usb_a_host_pins[7]}, // shield, GND_DRAIN
{usb_a_host_pins[4], usb_a_host_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[7], usb_c_host_sidea_pins[0]}, // GND_DRAIN, shield
{usb_a_host_pins[7], usb_c_host_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_host_pins[7], usb_c_host_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_a_host_pins[7], usb_c_host_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_host_pins[7], usb_c_host_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_host_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[9], usb_c_host_sidea_pins[2]}, // RX+, A2 TXp1
{usb_a_host_pins[8], usb_c_host_sidea_pins[3]}, // RX-, A3 TXn1
{usb_a_host_pins[6], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_host_pins[5], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_host__c_host_sideb__ac3_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
{usb_a_host_pins[0], usb_a_host_pins[7]}, // shield, GND_DRAIN
{usb_a_host_pins[4], usb_a_host_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[7], usb_c_host_sideb_pins[0]}, // GND_DRAIN, shield
{usb_a_host_pins[7], usb_c_host_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_host_pins[7], usb_c_host_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_a_host_pins[7], usb_c_host_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_host_pins[7], usb_c_host_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_host_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[9], usb_c_host_sideb_pins[2]}, // RX+, A2 TXp1
{usb_a_host_pins[8], usb_c_host_sideb_pins[3]}, // RX-, A3 TXn1
{usb_a_host_pins[6], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_host_pins[5], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_host__c_device_sidea__ac3_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
{usb_a_host_pins[0], usb_a_host_pins[7]}, // shield, GND_DRAIN
{usb_a_host_pins[4], usb_a_host_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[7], usb_c_device_sidea_pins[0]}, // GND_DRAIN, shield
{usb_a_host_pins[7], usb_c_device_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_host_pins[7], usb_c_device_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_a_host_pins[7], usb_c_device_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_host_pins[7], usb_c_device_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_host_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[9], usb_c_device_sidea_pins[2]}, // RX+, A2 TXp1
{usb_a_host_pins[8], usb_c_device_sidea_pins[3]}, // RX-, A3 TXn1
{usb_a_host_pins[6], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_host_pins[5], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_host__c_device_sideb__ac3_pins[][2] = {
// A internal connections
{usb_a_host_pins[0], usb_a_host_pins[4]}, // shield, GND
{usb_a_host_pins[0], usb_a_host_pins[7]}, // shield, GND_DRAIN
{usb_a_host_pins[4], usb_a_host_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_host_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_host_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_a_host_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_a_host_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_a_host_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_host_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_a_host_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_host_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_host_pins[7], usb_c_device_sideb_pins[0]}, // GND_DRAIN, shield
{usb_a_host_pins[7], usb_c_device_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_host_pins[7], usb_c_device_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_a_host_pins[7], usb_c_device_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_host_pins[7], usb_c_device_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_host_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_host_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_host_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_host_pins[9], usb_c_device_sideb_pins[2]}, // RX+, A2 TXp1
{usb_a_host_pins[8], usb_c_device_sideb_pins[3]}, // RX-, A3 TXn1
{usb_a_host_pins[6], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_host_pins[5], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_device__c_host_sidea__ac3_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
{usb_a_device_pins[0], usb_a_device_pins[7]}, // shield, GND_DRAIN
{usb_a_device_pins[4], usb_a_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[7], usb_c_host_sidea_pins[0]}, // GND_DRAIN, shield
{usb_a_device_pins[7], usb_c_host_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_device_pins[7], usb_c_host_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_a_device_pins[7], usb_c_host_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_device_pins[7], usb_c_host_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[9], usb_c_host_sidea_pins[2]}, // RX+, A2 TXp1
{usb_a_device_pins[8], usb_c_host_sidea_pins[3]}, // RX-, A3 TXn1
{usb_a_device_pins[6], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_device_pins[5], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_device__c_host_sideb__ac3_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
{usb_a_device_pins[0], usb_a_device_pins[7]}, // shield, GND_DRAIN
{usb_a_device_pins[4], usb_a_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[7], usb_c_host_sideb_pins[0]}, // GND_DRAIN, shield
{usb_a_device_pins[7], usb_c_host_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_device_pins[7], usb_c_host_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_a_device_pins[7], usb_c_host_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_device_pins[7], usb_c_host_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[9], usb_c_host_sideb_pins[2]}, // RX+, A2 TXp1
{usb_a_device_pins[8], usb_c_host_sideb_pins[3]}, // RX-, A3 TXn1
{usb_a_device_pins[6], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_device_pins[5], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_device__c_device_sidea__ac3_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
{usb_a_device_pins[0], usb_a_device_pins[7]}, // shield, GND_DRAIN
{usb_a_device_pins[4], usb_a_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[7], usb_c_device_sidea_pins[0]}, // GND_DRAIN, shield
{usb_a_device_pins[7], usb_c_device_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_device_pins[7], usb_c_device_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_a_device_pins[7], usb_c_device_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_device_pins[7], usb_c_device_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[9], usb_c_device_sidea_pins[2]}, // RX+, A2 TXp1
{usb_a_device_pins[8], usb_c_device_sidea_pins[3]}, // RX-, A3 TXn1
{usb_a_device_pins[6], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_device_pins[5], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__a_device__c_device_sideb__ac3_pins[][2] = {
// A internal connections
{usb_a_device_pins[0], usb_a_device_pins[4]}, // shield, GND
{usb_a_device_pins[0], usb_a_device_pins[7]}, // shield, GND_DRAIN
{usb_a_device_pins[4], usb_a_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// A-C connections, GND and VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_a_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_a_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_a_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_a_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_a_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_a_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_a_device_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_a_device_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_a_device_pins[7], usb_c_device_sideb_pins[0]}, // GND_DRAIN, shield
{usb_a_device_pins[7], usb_c_device_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_a_device_pins[7], usb_c_device_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_a_device_pins[7], usb_c_device_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_a_device_pins[7], usb_c_device_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_a_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// A-C connections, data
{usb_a_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_a_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_a_device_pins[9], usb_c_device_sideb_pins[2]}, // RX+, A2 TXp1
{usb_a_device_pins[8], usb_c_device_sideb_pins[3]}, // RX-, A3 TXn1
{usb_a_device_pins[6], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_a_device_pins[5], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
/** list of connectors for C-B cables (using C host connector) */
static const struct usb_connector_t* usb_c_host_b_device_connectors[] = {
&usb_c_host_connector,
&usb_b_device_connector,
};
/** list of connectors for C-B cables (using C device connector) */
static const struct usb_connector_t* usb_c_device_b_device_connectors[] = {
&usb_c_device_connector,
&usb_b_device_connector,
};
/** USB type C to type B USB 2.0 cable pin pairs
* @implements CB2-3 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__b_device__cb2_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections
{usb_b_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_host_sideb__b_device__cb2_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections
{usb_b_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_device_sidea__b_device__cb2_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections
{usb_b_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_device_sideb__b_device__cb2_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections
{usb_b_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
/** USB type C to type B USB 3.1 cable pin pairs
* @implements CB3G2-3 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__b_device__cb3_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
{usb_b_device_pins[0], usb_b_device_pins[7]}, // shield, GND_DRAIN
{usb_b_device_pins[4], usb_b_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[7], usb_c_host_sidea_pins[0]}, // GND_DRAIN, shield
{usb_b_device_pins[7], usb_c_host_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_b_device_pins[7], usb_c_host_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_b_device_pins[7], usb_c_host_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_b_device_pins[7], usb_c_host_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_b_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_b_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[9], usb_c_host_sidea_pins[2]}, // RX+, A2 TXp1
{usb_b_device_pins[8], usb_c_host_sidea_pins[3]}, // RX-, A3 TXn1
{usb_b_device_pins[6], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_b_device_pins[5], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__c_host_sideb__b_device__cb3_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
{usb_b_device_pins[0], usb_b_device_pins[7]}, // shield, GND_DRAIN
{usb_b_device_pins[4], usb_b_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[7], usb_c_host_sideb_pins[0]}, // GND_DRAIN, shield
{usb_b_device_pins[7], usb_c_host_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_b_device_pins[7], usb_c_host_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_b_device_pins[7], usb_c_host_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_b_device_pins[7], usb_c_host_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_b_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_b_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[9], usb_c_host_sideb_pins[2]}, // RX+, A2 TXp1
{usb_b_device_pins[8], usb_c_host_sideb_pins[3]}, // RX-, A3 TXn1
{usb_b_device_pins[6], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_b_device_pins[5], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__c_device_sidea__b_device__cb3_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
{usb_b_device_pins[0], usb_b_device_pins[7]}, // shield, GND_DRAIN
{usb_b_device_pins[4], usb_b_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[7], usb_c_device_sidea_pins[0]}, // GND_DRAIN, shield
{usb_b_device_pins[7], usb_c_device_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_b_device_pins[7], usb_c_device_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_b_device_pins[7], usb_c_device_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_b_device_pins[7], usb_c_device_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_b_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_b_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[9], usb_c_device_sidea_pins[2]}, // RX+, A2 TXp1
{usb_b_device_pins[8], usb_c_device_sidea_pins[3]}, // RX-, A3 TXn1
{usb_b_device_pins[6], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_b_device_pins[5], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__c_device_sideb__b_device__cb3_pins[][2] = {
// B internal connections
{usb_b_device_pins[0], usb_b_device_pins[4]}, // shield, GND
{usb_b_device_pins[0], usb_b_device_pins[7]}, // shield, GND_DRAIN
{usb_b_device_pins[4], usb_b_device_pins[7]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_b_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_b_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_b_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_b_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_b_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_b_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_b_device_pins[4], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_b_device_pins[4], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_b_device_pins[7], usb_c_device_sideb_pins[0]}, // GND_DRAIN, shield
{usb_b_device_pins[7], usb_c_device_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_b_device_pins[7], usb_c_device_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_b_device_pins[7], usb_c_device_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_b_device_pins[7], usb_c_device_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_b_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_b_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_b_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_b_device_pins[9], usb_c_device_sideb_pins[2]}, // RX+, A2 TXp1
{usb_b_device_pins[8], usb_c_device_sideb_pins[3]}, // RX-, A3 TXn1
{usb_b_device_pins[6], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_b_device_pins[5], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
/** list of connectors for C-miniB cables (using C host connector) */
static const struct usb_connector_t* usb_c_host_minib_device_connectors[] = {
&usb_c_host_connector,
&usb_minib_device_connector,
};
/** list of connectors for C-miniB cables (using C device connector) */
static const struct usb_connector_t* usb_c_device_minib_device_connectors[] = {
&usb_c_device_connector,
&usb_minib_device_connector,
};
/** USB type C to type mini-B USB 2.0 cable pin pairs
* @implements CmB2 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__minib_device__cminib2_pins[][2] = {
// mini-B internal connections
{usb_minib_device_pins[0], usb_minib_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_minib_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_minib_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_minib_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_minib_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_minib_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_minib_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_minib_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_minib_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_minib_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_minib_device_pins[5], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_minib_device_pins[5], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_minib_device_pins[5], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_minib_device_pins[5], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_minib_device_pins[5], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_minib_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_minib_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_minib_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_host_sideb__minib_device__cminib2_pins[][2] = {
// mini-B internal connections
{usb_minib_device_pins[0], usb_minib_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_minib_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_minib_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_minib_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_minib_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_minib_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_minib_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_minib_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_minib_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_minib_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_minib_device_pins[5], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_minib_device_pins[5], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_minib_device_pins[5], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_minib_device_pins[5], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_minib_device_pins[5], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_minib_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_minib_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_minib_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_device_sidea__minib_device__cminib2_pins[][2] = {
// mini-B internal connections
{usb_minib_device_pins[0], usb_minib_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_minib_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_minib_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_minib_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_minib_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_minib_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_minib_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_minib_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_minib_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_minib_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_minib_device_pins[5], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_minib_device_pins[5], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_minib_device_pins[5], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_minib_device_pins[5], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_minib_device_pins[5], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_minib_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_minib_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_minib_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_device_sideb__minib_device__cminib2_pins[][2] = {
// mini-B internal connections
{usb_minib_device_pins[0], usb_minib_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_minib_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_minib_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_minib_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_minib_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_minib_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_minib_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_minib_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_minib_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_minib_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_minib_device_pins[5], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_minib_device_pins[5], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_minib_device_pins[5], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_minib_device_pins[5], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_minib_device_pins[5], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_minib_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_minib_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_minib_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
/** list of connectors for C-miniB cables (using C host connector) */
static const struct usb_connector_t* usb_c_host_microb_device_connectors[] = {
&usb_c_host_connector,
&usb_microb_device_connector,
};
/** list of connectors for C-miniB cables (using C device connector) */
static const struct usb_connector_t* usb_c_device_microb_device_connectors[] = {
&usb_c_device_connector,
&usb_microb_device_connector,
};
/** USB type C to type micro-B USB 2.0 cable pin pairs
* @implements CµB2-3 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__microb_device__cmicrob2_pins[][2] = {
// mini-B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_microb_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_host_sideb__microb_device__cmicrob2_pins[][2] = {
// mini-B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_microb_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_device_sidea__microb_device__cmicrob2_pins[][2] = {
// mini-B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_microb_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
static const uint8_t usb__c_device_sideb__microb_device__cmicrob2_pins[][2] = {
// mini-B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// mini-B-C connections
{usb_microb_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1kO)
};
/** USB type C to type micro-B USB 3.1 Gen 2 cable pin pairs
* @implements CµB3G2-3 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__microb_device__cmicrob3_pins[][2] = {
// B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
{usb_microb_device_pins[0], usb_microb_device_pins[8]}, // shield, GND_DRAIN
{usb_microb_device_pins[5], usb_microb_device_pins[8]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sidea_pins[5], usb_c_host_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_host_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_host_sidea_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_host_sidea_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_host_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[8], usb_c_host_sidea_pins[0]}, // GND_DRAIN, shield
{usb_microb_device_pins[8], usb_c_host_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_microb_device_pins[8], usb_c_host_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_microb_device_pins[8], usb_c_host_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_microb_device_pins[8], usb_c_host_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_microb_device_pins[1], usb_c_host_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_host_sidea_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_host_sidea_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[10], usb_c_host_sidea_pins[2]}, // RX+, A2 TXp1
{usb_microb_device_pins[9], usb_c_host_sidea_pins[3]}, // RX-, A3 TXn1
{usb_microb_device_pins[7], usb_c_host_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_microb_device_pins[6], usb_c_host_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__c_host_sideb__microb_device__cmicrob3_pins[][2] = {
// B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
{usb_microb_device_pins[0], usb_microb_device_pins[8]}, // shield, GND_DRAIN
{usb_microb_device_pins[5], usb_microb_device_pins[8]}, // GND, GND_DRAIN
// C internal connections
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sideb_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sideb_pins[1], usb_c_host_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sideb_pins[12], usb_c_host_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sideb_pins[12 + 1], usb_c_host_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sideb_pins[4], usb_c_host_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sideb_pins[9], usb_c_host_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[12 + 9], usb_c_host_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_host_sideb_pins[5], usb_c_host_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_host_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_host_sideb_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_host_sideb_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_host_sideb_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_host_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_host_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_host_sideb_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_host_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[8], usb_c_host_sideb_pins[0]}, // GND_DRAIN, shield
{usb_microb_device_pins[8], usb_c_host_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_microb_device_pins[8], usb_c_host_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_microb_device_pins[8], usb_c_host_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_microb_device_pins[8], usb_c_host_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_microb_device_pins[1], usb_c_host_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_host_sideb_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_host_sideb_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[10], usb_c_host_sideb_pins[2]}, // RX+, A2 TXp1
{usb_microb_device_pins[9], usb_c_host_sideb_pins[3]}, // RX-, A3 TXn1
{usb_microb_device_pins[7], usb_c_host_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_microb_device_pins[6], usb_c_host_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__c_device_sidea__microb_device__cmicrob3_pins[][2] = {
// B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
{usb_microb_device_pins[0], usb_microb_device_pins[8]}, // shield, GND_DRAIN
{usb_microb_device_pins[5], usb_microb_device_pins[8]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sidea_pins[5], usb_c_device_sidea_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_device_sidea_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_device_sidea_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_device_sidea_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_device_sidea_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[8], usb_c_device_sidea_pins[0]}, // GND_DRAIN, shield
{usb_microb_device_pins[8], usb_c_device_sidea_pins[1]}, // GND_DRAIN, A1 GND
{usb_microb_device_pins[8], usb_c_device_sidea_pins[12]}, // GND_DARIN, A12 GND
{usb_microb_device_pins[8], usb_c_device_sidea_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_microb_device_pins[8], usb_c_device_sidea_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_microb_device_pins[1], usb_c_device_sidea_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_device_sidea_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_device_sidea_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[10], usb_c_device_sidea_pins[2]}, // RX+, A2 TXp1
{usb_microb_device_pins[9], usb_c_device_sidea_pins[3]}, // RX-, A3 TXn1
{usb_microb_device_pins[7], usb_c_device_sidea_pins[12 + 11]}, // TX+, B11 RXp1
{usb_microb_device_pins[6], usb_c_device_sidea_pins[12 + 10]}, // TX-, B10 RXn1
};
static const uint8_t usb__c_device_sideb__microb_device__cmicrob3_pins[][2] = {
// B internal connections
{usb_microb_device_pins[0], usb_microb_device_pins[5]}, // shield, GND
{usb_microb_device_pins[0], usb_microb_device_pins[8]}, // shield, GND_DRAIN
{usb_microb_device_pins[5], usb_microb_device_pins[8]}, // GND, GND_DRAIN
// C internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[4]}, // CC1, A4 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[9]}, // CC1, A9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[16]}, // CC1, B9 VBUS (5.1kO)
{usb_c_device_sideb_pins[5], usb_c_device_sideb_pins[21]}, // CC1, B4 VBUS (5.1kO)
// B-C connections, GND and VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[4]}, // VBUS, A4 VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[9]}, // VBUS, A9 VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[12 + 9]}, // VBUS, B9 VBUS
{usb_microb_device_pins[1], usb_c_device_sideb_pins[12 + 4]}, // VBUS, B4 VBUS
{usb_microb_device_pins[0], usb_c_device_sideb_pins[0]}, // shield, shield
{usb_microb_device_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_microb_device_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_microb_device_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_microb_device_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[0]}, // GND, shield
{usb_microb_device_pins[5], usb_c_device_sideb_pins[1]}, // GND, A1 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[12]}, // GND, A12 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[12 + 12]}, // GND, B12 GND
{usb_microb_device_pins[5], usb_c_device_sideb_pins[12 + 1]}, // GND, B1 GND
{usb_microb_device_pins[8], usb_c_device_sideb_pins[0]}, // GND_DRAIN, shield
{usb_microb_device_pins[8], usb_c_device_sideb_pins[1]}, // GND_DRAIN, A1 GND
{usb_microb_device_pins[8], usb_c_device_sideb_pins[12]}, // GND_DARIN, A12 GND
{usb_microb_device_pins[8], usb_c_device_sideb_pins[12 + 12]}, // GND_DRAIN, B12 GND
{usb_microb_device_pins[8], usb_c_device_sideb_pins[12 + 1]}, // GND_DRAIN, B1 GND
{usb_microb_device_pins[1], usb_c_device_sideb_pins[5]}, // VBUS - A5 CC1 (5.1 kO)
// B-C connections, data
{usb_microb_device_pins[2], usb_c_device_sideb_pins[7]}, // D-, A7 Dn1
{usb_microb_device_pins[3], usb_c_device_sideb_pins[6]}, // D+, A6 Dp1
{usb_microb_device_pins[10], usb_c_device_sideb_pins[2]}, // RX+, A2 TXp1
{usb_microb_device_pins[9], usb_c_device_sideb_pins[3]}, // RX-, A3 TXn1
{usb_microb_device_pins[7], usb_c_device_sideb_pins[12 + 11]}, // TX+, B11 RXp1
{usb_microb_device_pins[6], usb_c_device_sideb_pins[12 + 10]}, // TX-, B10 RXn1
};
/** list of connectors for C-C cables */
static const struct usb_connector_t* usb_c_c_connectors[] = {
&usb_c_host_connector,
&usb_c_device_connector,
};
/** USB type C to type C USB 2.0 cable pin pairs
* @implements CC2-3 and CC2-5 from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__c_device_sidea__cc2_pins[][2] = {
// C host side internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C device side internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C connections, GND and VBUS
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C data connections
{usb_c_host_sidea_pins[5], usb_c_device_sidea_pins[5]}, // A5 CC1, A5 CC1 (CC)
{usb_c_host_sidea_pins[12 + 5], usb_c_device_sidea_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN)
{usb_c_host_sidea_pins[6], usb_c_device_sidea_pins[6]}, // A6 Dp1, A6 Dp1
{usb_c_host_sidea_pins[7], usb_c_device_sidea_pins[7]}, // A7 Dn1, A7 Dn1
};
static const uint8_t usb__c_host_sidea__c_device_sideb__cc2_pins[][2] = {
// C host side internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C device side internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C connections, GND and VBUS
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C data connections
{usb_c_host_sidea_pins[5], usb_c_device_sideb_pins[5]}, // A5 CC1, A5 CC1 (CC)
{usb_c_host_sidea_pins[12 + 5], usb_c_device_sideb_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN)
{usb_c_host_sidea_pins[6], usb_c_device_sideb_pins[6]}, // A6 Dp1, A6 Dp1
{usb_c_host_sidea_pins[7], usb_c_device_sideb_pins[7]}, // A7 Dn1, A7 Dn1
};
/** USB type C to type C full featured cable pin pairs
* @implements Full-Featured assembly from USB Type-C Cable and Connector Specification (https://www.usb.org/document-library/usb-type-cr-cable-and-connector-specification-revision-20-august-2019)
*/
static const uint8_t usb__c_host_sidea__c_device_sidea__ff_pins[][2] = {
// C host side internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C device side internal connections
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C connections, GND and VBUS
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_device_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C data connections
{usb_c_host_sidea_pins[5], usb_c_device_sidea_pins[5]}, // A5 CC1, A5 CC1 (CC)
{usb_c_host_sidea_pins[12 + 5], usb_c_device_sidea_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN)
{usb_c_host_sidea_pins[6], usb_c_device_sidea_pins[6]}, // A6 Dp1, A6 Dp1
{usb_c_host_sidea_pins[7], usb_c_device_sidea_pins[7]}, // A7 Dn1, A7 Dn1
{usb_c_host_sidea_pins[2], usb_c_device_sidea_pins[12 + 11]}, // A2 TXp1, B11 RXp1
{usb_c_host_sidea_pins[3], usb_c_device_sidea_pins[12 + 10]}, // A3 TXn1, B10 RXn1
{usb_c_host_sidea_pins[12 + 11], usb_c_device_sidea_pins[2]}, // B11 RXp1, A2 TXp1
{usb_c_host_sidea_pins[12 + 10], usb_c_device_sidea_pins[3]}, // B10 RXn1, A3 TXn1
{usb_c_host_sidea_pins[12 + 2], usb_c_device_sidea_pins[11]}, // B2 TXp2, Q11 RXp2
{usb_c_host_sidea_pins[12 + 3], usb_c_device_sidea_pins[10]}, // B3 TXn2, A10 RXn2
{usb_c_host_sidea_pins[11], usb_c_device_sidea_pins[12 + 2]}, // A11 RXp2, B2 TXp2
{usb_c_host_sidea_pins[10], usb_c_device_sidea_pins[12 + 3]}, // A10 RXn2, B3 TXn2
{usb_c_host_sidea_pins[8], usb_c_device_sidea_pins[12 + 8]}, // A8 SBU1, B8 SBU2
{usb_c_host_sidea_pins[12 + 8], usb_c_device_sidea_pins[8]}, // B8 SBU2, A8 SBU1
};
static const uint8_t usb__c_host_sidea__c_device_sideb__ff_pins[][2] = {
// C host side internal connections
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_host_sidea_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_host_sidea_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_host_sidea_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_host_sidea_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_host_sidea_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_host_sidea_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_host_sidea_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C device side internal connections
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_device_sideb_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_device_sideb_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_device_sideb_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_device_sideb_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_device_sideb_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_device_sideb_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_device_sideb_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C connections, GND and VBUS
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[1]}, // shield, A1 GND
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[12]}, // shield, A12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[12 + 12]}, // shield, B12 GND
{usb_c_host_sidea_pins[0], usb_c_device_sideb_pins[12 + 1]}, // shield, B1 GND
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[12]}, // A1 GND, A12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[12 + 12]}, // A1 GND, B12 GND
{usb_c_host_sidea_pins[1], usb_c_device_sideb_pins[12 + 1]}, // A1 GND, B1 GND
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[12 + 12]}, // A12 GND, B12 GND
{usb_c_host_sidea_pins[12], usb_c_device_sideb_pins[12 + 1]}, // A12 GND, B1 GND
{usb_c_host_sidea_pins[12 + 1], usb_c_device_sideb_pins[12 + 12]}, // B1 GND, B12 GND
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[9]}, // A4 VBUS, A9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[12 + 9]}, // A4 VBUS, B9 VBUS
{usb_c_host_sidea_pins[4], usb_c_device_sideb_pins[12 + 4]}, // A4 VBUS, B4 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sideb_pins[12 + 9]}, // A9 VBUS, B9 VBUS
{usb_c_host_sidea_pins[9], usb_c_device_sideb_pins[12 + 4]}, // A9 VBUS, B4 VBUS
{usb_c_host_sidea_pins[12 + 9], usb_c_device_sideb_pins[12 + 4]}, // B9 VBUS, B4 VBUS
// C-C data connections
{usb_c_host_sidea_pins[5], usb_c_device_sideb_pins[5]}, // A5 CC1, A5 CC1 (CC)
{usb_c_host_sidea_pins[12 + 5], usb_c_device_sideb_pins[12 + 5]}, // B5 CC2, B5 CC2 (VCONN)
{usb_c_host_sidea_pins[6], usb_c_device_sideb_pins[6]}, // A6 Dp1, A6 Dp1
{usb_c_host_sidea_pins[7], usb_c_device_sideb_pins[7]}, // A7 Dn1, A7 Dn1
{usb_c_host_sidea_pins[2], usb_c_device_sideb_pins[12 + 11]}, // A2 TXp1, B11 RXp1
{usb_c_host_sidea_pins[3], usb_c_device_sideb_pins[12 + 10]}, // A3 TXn1, B10 RXn1
{usb_c_host_sidea_pins[12 + 11], usb_c_device_sideb_pins[2]}, // B11 RXp1, A2 TXp1
{usb_c_host_sidea_pins[12 + 10], usb_c_device_sideb_pins[3]}, // B10 RXn1, A3 TXn1
{usb_c_host_sidea_pins[12 + 2], usb_c_device_sideb_pins[11]}, // B2 TXp2, Q11 RXp2
{usb_c_host_sidea_pins[12 + 3], usb_c_device_sideb_pins[10]}, // B3 TXn2, A10 RXn2
{usb_c_host_sidea_pins[11], usb_c_device_sideb_pins[12 + 2]}, // A11 RXp2, B2 TXp2
{usb_c_host_sidea_pins[10], usb_c_device_sideb_pins[12 + 3]}, // A10 RXn2, B3 TXn2
{usb_c_host_sidea_pins[8], usb_c_device_sideb_pins[12 + 8]}, // A8 SBU1, B8 SBU2
{usb_c_host_sidea_pins[12 + 8], usb_c_device_sideb_pins[8]}, // B8 SBU2, A8 SBU1
};
const struct usb_cable_t usb_cables[] = {
// A-A
{
.name = "A-A power only",
.connectors_nb = LENGTH(usb_a_a_connectors),
.connectors = usb_a_a_connectors,
.pin_pairs_nb = LENGTH(usb_aa0_pins),
.pin_pairs = usb_aa0_pins,
},
{
.name = "A-A USB 2.0",
.connectors_nb = LENGTH(usb_a_a_connectors),
.connectors = usb_a_a_connectors,
.pin_pairs_nb = LENGTH(usb_aa2_pins),
.pin_pairs = usb_aa2_pins,
},
{
.name = "A-A USB 3.x",
.connectors_nb = LENGTH(usb_a_a_connectors),
.connectors = usb_a_a_connectors,
.pin_pairs_nb = LENGTH(usb_aa3_pins),
.pin_pairs = usb_aa3_pins,
},
// A (host) - B
{
.name = "A-B power only",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__b__ab0_pins),
.pin_pairs = usb__a_host__b__ab0_pins,
},
{
.name = "A-B USB 2.0",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__b__ab2_pins),
.pin_pairs = usb__a_host__b__ab2_pins,
},
{
.name = "A-B USB 3.x",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_host_b_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__b__ab3_pins),
.pin_pairs = usb__a_host__b__ab3_pins,
},
// A (device) - B
{
.name = "A-B power only",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_device_b_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__b__ab0_pins),
.pin_pairs = usb__a_device__b__ab0_pins,
},
{
.name = "A-B USB 2.0",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_device_b_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__b__ab2_pins),
.pin_pairs = usb__a_device__b__ab2_pins,
},
{
.name = "A-B USB 3.x",
.connectors_nb = LENGTH(usb_a_host_b_connectors),
.connectors = usb_a_device_b_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__b__ab3_pins),
.pin_pairs = usb__a_device__b__ab3_pins,
},
// A + A - B
{
.name = "A+A-B USB 2.0",
.connectors_nb = LENGTH(usb_a_a_b_connectors),
.connectors = usb_a_a_b_connectors,
.pin_pairs_nb = LENGTH(usb_a_host_a_device_b_aab2_pins),
.pin_pairs = usb_a_host_a_device_b_aab2_pins,
},
{
.name = "A+A-B USB 2.0",
.connectors_nb = LENGTH(usb_a_a_b_connectors),
.connectors = usb_a_a_b_connectors,
.pin_pairs_nb = LENGTH(usb_a_device_a_host_b_aab2_pins),
.pin_pairs = usb_a_device_a_host_b_aab2_pins,
},
// A (host) - mini-B
{
.name = "A-miniB power",
.connectors_nb = LENGTH(usb_a_host_minib_connectors),
.connectors = usb_a_host_minib_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__minib__amb0_pins),
.pin_pairs = usb__a_host__minib__amb0_pins,
},
{
.name = "A-miniB USB 2.0",
.connectors_nb = LENGTH(usb_a_host_minib_connectors),
.connectors = usb_a_host_minib_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__minib__amb2_pins),
.pin_pairs = usb__a_host__minib__amb2_pins,
},
// A (device) - mini-B
{
.name = "A-miniB power",
.connectors_nb = LENGTH(usb_a_device_minib_connectors),
.connectors = usb_a_device_minib_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__minib__amb0_pins),
.pin_pairs = usb__a_device__minib__amb0_pins,
},
{
.name = "A-miniB USB 2.0",
.connectors_nb = LENGTH(usb_a_device_minib_connectors),
.connectors = usb_a_device_minib_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__minib__amb2_pins),
.pin_pairs = usb__a_device__minib__amb2_pins,
},
// A + A - mini-B
{
.name = "A+A-miniB 2.0",
.connectors_nb = LENGTH(usb_a_a_minib_connectors),
.connectors = usb_a_a_minib_connectors,
.pin_pairs_nb = LENGTH(usb_a_host_a_device_minib_aamb2_pins),
.pin_pairs = usb_a_host_a_device_minib_aamb2_pins,
},
{
.name = "A+A-miniB 2.0",
.connectors_nb = LENGTH(usb_a_a_minib_connectors),
.connectors = usb_a_a_minib_connectors,
.pin_pairs_nb = LENGTH(usb_a_device_a_host_minib_aamb2_pins),
.pin_pairs = usb_a_device_a_host_minib_aamb2_pins,
},
// A (host) - micro-B
{
.name = "A-microB power",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__microb__aub0_pins),
.pin_pairs = usb__a_host__microb__aub0_pins,
},
{
.name = "A-microB USB 2.0",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__microb__aub2_pins),
.pin_pairs = usb__a_host__microb__aub2_pins,
},
{
.name = "A-microB USB 3.x",
.connectors_nb = LENGTH(usb_a_host_microb_connectors),
.connectors = usb_a_host_microb_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__microb__aub3_pins),
.pin_pairs = usb__a_host__microb__aub3_pins,
},
// A (device) - micro-B
{
.name = "A-microB power",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__microb__aub0_pins),
.pin_pairs = usb__a_device__microb__aub0_pins,
},
{
.name = "A-microB USB 2.0",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__microb__aub2_pins),
.pin_pairs = usb__a_device__microb__aub2_pins,
},
{
.name = "A-microB USB 3.x",
.connectors_nb = LENGTH(usb_a_device_microb_connectors),
.connectors = usb_a_device_microb_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__microb__aub3_pins),
.pin_pairs = usb__a_device__microb__aub3_pins,
},
// C
{
.name = "C shunt",
.connectors_nb = LENGTH(usb_c_host_connectors),
.connectors = usb_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__c_host__c_host__cshunt_pins),
.pin_pairs = usb__c_host__c_host__cshunt_pins,
},
{
.name = "C shunt",
.connectors_nb = LENGTH(usb_c_device_connectors),
.connectors = usb_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device__c_device__cshunt_pins),
.pin_pairs = usb__c_device__c_device__cshunt_pins,
},
// A - C power only
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_host_sidea__ac0_pins),
.pin_pairs = usb__a_host__c_host_sidea__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_host_sideb__ac0_pins),
.pin_pairs = usb__a_host__c_host_sideb__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_device_sidea__ac0_pins),
.pin_pairs = usb__a_host__c_device_sidea__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_device_sideb__ac0_pins),
.pin_pairs = usb__a_host__c_device_sideb__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_host_sidea__ac0_pins),
.pin_pairs = usb__a_device__c_host_sidea__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_host_sideb__ac0_pins),
.pin_pairs = usb__a_device__c_host_sideb__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac0_pins),
.pin_pairs = usb__a_device__c_device_sidea__ac0_pins,
},
{
.name = "A-C power only",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_device_sideb__ac0_pins),
.pin_pairs = usb__a_device__c_device_sideb__ac0_pins,
},
// A - C USB 2.0
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_host_sidea__ac2_pins),
.pin_pairs = usb__a_host__c_host_sidea__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_host_sideb__ac2_pins),
.pin_pairs = usb__a_host__c_host_sideb__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_device_sidea__ac2_pins),
.pin_pairs = usb__a_host__c_device_sidea__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_device_sideb__ac2_pins),
.pin_pairs = usb__a_host__c_device_sideb__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_host_sidea__ac2_pins),
.pin_pairs = usb__a_device__c_host_sidea__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_host_sideb__ac2_pins),
.pin_pairs = usb__a_device__c_host_sideb__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac2_pins),
.pin_pairs = usb__a_device__c_device_sidea__ac2_pins,
},
{
.name = "A-C USB 2.0",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_device_sideb__ac2_pins),
.pin_pairs = usb__a_device__c_device_sideb__ac2_pins,
},
// A-C USB 3.1 Gen 2
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_host_sidea__ac3_pins),
.pin_pairs = usb__a_host__c_host_sidea__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_host_c_host_connectors),
.connectors = usb_a_host_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_host_sideb__ac3_pins),
.pin_pairs = usb__a_host__c_host_sideb__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_device_sidea__ac3_pins),
.pin_pairs = usb__a_host__c_device_sidea__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_host_c_device_connectors),
.connectors = usb_a_host_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_host__c_device_sideb__ac3_pins),
.pin_pairs = usb__a_host__c_device_sideb__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_host_sidea__ac3_pins),
.pin_pairs = usb__a_device__c_host_sidea__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_device_c_host_connectors),
.connectors = usb_a_device_c_host_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_host_sideb__ac3_pins),
.pin_pairs = usb__a_device__c_host_sideb__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac3_pins),
.pin_pairs = usb__a_device__c_device_sidea__ac3_pins,
},
{
.name = "A-C 3.1 Gen 2",
.connectors_nb = LENGTH(usb_a_device_c_device_connectors),
.connectors = usb_a_device_c_device_connectors,
.pin_pairs_nb = LENGTH(usb__a_device__c_device_sidea__ac3_pins),
.pin_pairs = usb__a_device__c_device_sideb__ac3_pins,
},
// C - B USB 2.0
{
.name = "C-B USB 2.0",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__b_device__cb2_pins),
.pin_pairs = usb__c_host_sidea__b_device__cb2_pins,
},
{
.name = "C-B USB 2.0",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sideb__b_device__cb2_pins),
.pin_pairs = usb__c_host_sideb__b_device__cb2_pins,
},
{
.name = "C-B USB 2.0",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sidea__b_device__cb2_pins),
.pin_pairs = usb__c_device_sidea__b_device__cb2_pins,
},
{
.name = "C-B USB 2.0",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sideb__b_device__cb2_pins),
.pin_pairs = usb__c_device_sideb__b_device__cb2_pins,
},
// C - B USB 3.1 Gen 2
{
.name = "C-B USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__b_device__cb3_pins),
.pin_pairs = usb__c_host_sidea__b_device__cb3_pins,
},
{
.name = "C-B USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_host_b_device_connectors),
.connectors = usb_c_host_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sideb__b_device__cb3_pins),
.pin_pairs = usb__c_host_sideb__b_device__cb3_pins,
},
{
.name = "C-B USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sidea__b_device__cb3_pins),
.pin_pairs = usb__c_device_sidea__b_device__cb3_pins,
},
{
.name = "C-B USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_device_b_device_connectors),
.connectors = usb_c_device_b_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sideb__b_device__cb3_pins),
.pin_pairs = usb__c_device_sideb__b_device__cb3_pins,
},
// C - mini-B USB 2.0
{
.name = "C-miniB USB 2.0",
.connectors_nb = LENGTH(usb_c_host_minib_device_connectors),
.connectors = usb_c_host_minib_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__minib_device__cminib2_pins),
.pin_pairs = usb__c_host_sidea__minib_device__cminib2_pins,
},
{
.name = "C-miniB USB 2.0",
.connectors_nb = LENGTH(usb_c_host_minib_device_connectors),
.connectors = usb_c_host_minib_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sideb__minib_device__cminib2_pins),
.pin_pairs = usb__c_host_sideb__minib_device__cminib2_pins,
},
{
.name = "C-miniB USB 2.0",
.connectors_nb = LENGTH(usb_c_device_minib_device_connectors),
.connectors = usb_c_device_minib_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sidea__minib_device__cminib2_pins),
.pin_pairs = usb__c_device_sidea__minib_device__cminib2_pins,
},
{
.name = "C-miniB USB 2.0",
.connectors_nb = LENGTH(usb_c_device_minib_device_connectors),
.connectors = usb_c_device_minib_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sideb__minib_device__cminib2_pins),
.pin_pairs = usb__c_device_sideb__minib_device__cminib2_pins,
},
// C - micro-B USB 2.0
{
.name = "C-microB USB 2.0",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__microb_device__cmicrob2_pins),
.pin_pairs = usb__c_host_sidea__microb_device__cmicrob2_pins,
},
{
.name = "C-microB USB 2.0",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sideb__microb_device__cmicrob2_pins),
.pin_pairs = usb__c_host_sideb__microb_device__cmicrob2_pins,
},
{
.name = "C-microB USB 2.0",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sidea__microb_device__cmicrob2_pins),
.pin_pairs = usb__c_device_sidea__microb_device__cmicrob2_pins,
},
{
.name = "C-microB USB 2.0",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sideb__microb_device__cmicrob2_pins),
.pin_pairs = usb__c_device_sideb__microb_device__cmicrob2_pins,
},
// C - micro-B USB 3.1 Gen 2
{
.name = "C-microB USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__microb_device__cmicrob3_pins),
.pin_pairs = usb__c_host_sidea__microb_device__cmicrob3_pins,
},
{
.name = "C-microB USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_host_microb_device_connectors),
.connectors = usb_c_host_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sideb__microb_device__cmicrob3_pins),
.pin_pairs = usb__c_host_sideb__microb_device__cmicrob3_pins,
},
{
.name = "C-microB USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sidea__microb_device__cmicrob3_pins),
.pin_pairs = usb__c_device_sidea__microb_device__cmicrob3_pins,
},
{
.name = "C-microB USB 3.1 Gen 2",
.connectors_nb = LENGTH(usb_c_device_microb_device_connectors),
.connectors = usb_c_device_microb_device_connectors,
.pin_pairs_nb = LENGTH(usb__c_device_sideb__microb_device__cmicrob3_pins),
.pin_pairs = usb__c_device_sideb__microb_device__cmicrob3_pins,
},
// C-C
{
.name = "C-C USB 2.0",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sidea__cc2_pins),
.pin_pairs = usb__c_host_sidea__c_device_sidea__cc2_pins,
},
{
.name = "C-C USB 2.0",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sideb__cc2_pins),
.pin_pairs = usb__c_host_sidea__c_device_sideb__cc2_pins,
},
// C-C
{
.name = "C-C Full-Featured",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sidea__ff_pins),
.pin_pairs = usb__c_host_sidea__c_device_sidea__ff_pins,
},
{
.name = "C-C Full-Featured",
.connectors_nb = LENGTH(usb_c_c_connectors),
.connectors = usb_c_c_connectors,
.pin_pairs_nb = LENGTH(usb__c_host_sidea__c_device_sideb__ff_pins),
.pin_pairs = usb__c_host_sidea__c_device_sideb__ff_pins,
},
};
void usb_cables_pins_float(const struct usb_connector_t* connector)
{
// input argument check
if (NULL == connector) {
return;
}
for (uint8_t pin = 0; pin < connector->pins_nb; pin++) { // go through every pin
const struct usb_pin_t* usb_pin = &usb_pins[connector->pins[pin]]; // get pin
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, usb_pin->pin); // put pin to floating
}
}
void usb_cables_connectors_float(const struct usb_connector_t** connectors, uint8_t connectors_nb)
{
if (NULL == connectors || 0 == connectors_nb) {
return;
}
for (uint8_t connector = 0; connector < connectors_nb; connector++) { // go through every connector
usb_cables_pins_float(connectors[connector]);
}
}
uint8_t usb_cables_check_pins(const struct usb_pin_t* pin1, const struct usb_pin_t* pin2)
{
cm3_assert(pin1 && pin2);
if (pin1->port == pin2->port && pin1->pin == pin2->pin) { // it's the same pin
return 0xff; // all connections will work
}
uint8_t connection = 0; // the connection result to return
for (int8_t mode = 3; mode >= 0; mode--) { // test all connection types (from most to least accurate)
for (uint8_t direction = 0; direction < 2; direction++) { // test both directions
uint32_t from_port = (0 == direction ? pin2->port : pin1->port);
uint16_t from_pin = (0 == direction ? pin2->pin : pin1->pin);
uint32_t to_port = (0 == direction ? pin1->port : pin2->port);
uint16_t to_pin = (0 == direction ? pin1->pin : pin2->pin);
// don't drive a ground or shield pin high (shield might be connected to ground)
if (((0 == direction && (USB_PIN_TYPE_GROUND == pin2->type || USB_PIN_TYPE_SHIELD == pin2->type)) || \
(1 == direction && (USB_PIN_TYPE_GROUND == pin1->type || USB_PIN_TYPE_SHIELD == pin1->type))) && \
(USB_PIN_CONNECTION_DRIVE_FLOAT == (1 << mode) || USB_PIN_CONNECTION_DRIVE_PULL == (1 << mode))) {
continue;
}
// set pin mode
switch ((1 << mode)) {
case USB_PIN_CONNECTION_DRIVE_FLOAT:
gpio_set_mode(from_port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, from_pin);
gpio_set_mode(to_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, to_pin);
break;
case USB_PIN_CONNECTION_PULL_FLOAT:
gpio_set_mode(from_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, from_pin);
gpio_set_mode(to_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, to_pin);
break;
case USB_PIN_CONNECTION_DRIVE_PULL:
gpio_set_mode(from_port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, from_pin);
gpio_set_mode(to_port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, to_pin);
break;
default:
break;
}
// test pattern
bool connected = true;
for (uint8_t pattern = 0; pattern < 8 && connected; pattern++) {
if (0 == pattern % 2) {
gpio_clear(from_port, from_pin);
gpio_set(to_port, to_pin);
sleep_us(25); // wait for GPIO/line to settle
if (gpio_get(to_port, to_pin)) {
connected = false;
}
} else {
gpio_set(from_port, from_pin);
gpio_clear(to_port, to_pin);
sleep_us(25); // wait for GPIO/line to settle
if (0 == gpio_get(to_port, to_pin)) {
connected = false;
}
}
}
if (connected) {
connection |= (1 << (mode + direction * 4));
}
}
if ((connection & (1 << (mode + 0))) && (connection & (1 << (mode + 4)))) { // more accurate connection showed, no need to continue with least accurate test
break;
}
}
// put back to floating
gpio_set_mode(pin1->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, pin1->pin);
gpio_set_mode(pin2->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, pin2->pin);
return connection;
}
void usb_cables_check_intra(const struct usb_connector_t* connector, bool* connected)
{
// verify input arguments
if (NULL == connector) {
return;
}
// initialize output results
if (connected) {
for (uint8_t pin = 0; connector->pins_nb; pin++) {
connected[pin] = false;
}
}
usb_cables_pins_float(connector); // ensure we start in a safe state
for (uint8_t pin_from = 0; pin_from < connector->pins_nb; pin_from++) { // test from every pin
for (uint8_t pin_to = 0; pin_to < connector->pins_nb; pin_to++) { // test to every pin (except itself)
// don't check the same pins
if (pin_to == pin_from) {
continue;
}
const struct usb_pin_t* usb_pin_from = &usb_pins[connector->pins[pin_from]]; // get from pin
const struct usb_pin_t* usb_pin_to = &usb_pins[connector->pins[pin_to]]; // get to pin
// don't check if power and ground pins are connected because loads lead to false positives
if ((USB_PIN_TYPE_GROUND == usb_pin_from->type || USB_PIN_TYPE_SHIELD == usb_pin_from->type) && USB_PIN_TYPE_POWER == usb_pin_to->type) {
continue;
}
if (USB_PIN_TYPE_POWER == usb_pin_from->type && (USB_PIN_TYPE_GROUND == usb_pin_to->type || USB_PIN_TYPE_SHIELD == usb_pin_to->type)) {
continue;
}
uint8_t connection = usb_cables_check_pins(usb_pin_from, usb_pin_to);
if (connection >= 0x22) {
if (connected) {
connected[pin_from] = true;
connected[pin_to] = true;
} else {
printf("%s (%s) %s connected to %s (%02x)\n", connector->name, connector->host ? "host" : "device", usb_pin_from->name, usb_pin_to->name, connection);
}
}
}
}
usb_cables_pins_float(connector); // go back to safe state
}
void usb_cables_check_inter(const struct usb_connector_t** connectors, uint8_t connectors_nb, bool* connected)
{
// verify input arguments
if (NULL == connectors || 0 == connectors_nb) {
return;
}
// initialize output result
if (connected) {
for (uint8_t connector = 0; connector < connectors_nb; connector++) {
connected[connector] = false;
}
}
usb_cables_connectors_float(connectors, connectors_nb); // ensure we start in a safe state
for (uint8_t connector_from = 0; connector_from < connectors_nb; connector_from++) { // test from every connector
for (uint8_t pin_from = 0; pin_from < connectors[connector_from]->pins_nb; pin_from++) { // test from every pin
for (uint8_t connector_to = connector_from + 1; connector_to < connectors_nb; connector_to++) { // test to every connector (except itself)
if (connector_to == connector_from) { // don't test the connector itself since we already did this test
continue;
}
if (connected && connected[connector_to]) { // we already found a connection to this connector
continue;
}
for (uint8_t pin_to = 0; pin_to < connectors[connector_to]->pins_nb; pin_to++) { // test to every pin
const struct usb_pin_t* usb_pin_from = &usb_pins[connectors[connector_from]->pins[pin_from]]; // get from pin
const struct usb_pin_t* usb_pin_to = &usb_pins[connectors[connector_to]->pins[pin_to]]; // get to pin
// don't check if power and ground pins are connected because loads lead to false positives
if ((USB_PIN_TYPE_GROUND == usb_pin_from->type || USB_PIN_TYPE_SHIELD == usb_pin_from->type) && USB_PIN_TYPE_POWER == usb_pin_to->type) {
continue;
}
if (USB_PIN_TYPE_POWER == usb_pin_from->type && (USB_PIN_TYPE_GROUND == usb_pin_to->type || USB_PIN_TYPE_SHIELD == usb_pin_to->type)) {
continue;
}
// check if cable is connected
uint8_t connection = usb_cables_check_pins(usb_pin_from, usb_pin_to);
if (connection >= 0x22) {
if (connected) { // remember they are connected
connected[connector_from] = true;
connected[connector_to] = true;
} else {
printf("%s (%s) %s connected to %s (%s) %s\n", connectors[connector_from]->name, connectors[connector_from]->host ? "host" : "device", usb_pin_from->name, connectors[connector_to]->name, connectors[connector_to]->host ? "host" : "device", usb_pin_to->name);
}
}
}
}
}
}
usb_cables_connectors_float(connectors, connectors_nb); // go back to safe state
}
void usb_cables_check_ground(const struct usb_connector_t** connectors, uint8_t connectors_nb, bool* connected)
{
// verify input arguments
if (NULL == connectors || 0 == connectors_nb) {
return;
}
// initialize output result
if (connected) {
for (uint8_t connector = 0; connector < connectors_nb; connector++) {
connected[connector] = false;
}
}
// pull up all ground pins
for (uint8_t connector = 0; connector < connectors_nb; connector++) {
for (uint8_t pin = 0; pin < connectors[connector]->pins_nb; pin++) {
const struct usb_pin_t* usb_pin = &usb_pins[connectors[connector]->pins[pin]]; // get pin
if (USB_PIN_TYPE_GROUND == usb_pin->type) {
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_pin->pin);
gpio_set(usb_pin->port, usb_pin->pin);
}
}
}
bool ground_found = false; // if we found the ground connection
for (uint8_t connector_from = 0; connector_from < connectors_nb && !ground_found; connector_from++) { // test from every connector
for (uint8_t pin_from = 0; pin_from < connectors[connector_from]->pins_nb && !ground_found; pin_from++) { // test from every pin
const struct usb_pin_t* usb_pin_from = &usb_pins[connectors[connector_from]->pins[pin_from]]; // get from pin
if (USB_PIN_TYPE_GROUND != usb_pin_from->type) { // only consider ground connections
continue;
}
// set pin low
gpio_set_mode(usb_pin_from->port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, usb_pin_from->pin);
gpio_clear(usb_pin_from->port, usb_pin_from->pin);
for (uint8_t connector_to = connector_from + 1; connector_to < connectors_nb; connector_to++) { // test every next connector
if (connected && connected[connector_to]) { // we already found a connection to this connector
continue;
}
for (uint8_t pin_to = 0; pin_to < connectors[connector_to]->pins_nb; pin_to++) { // test to every pin
const struct usb_pin_t* usb_pin_to = &usb_pins[connectors[connector_to]->pins[pin_to]]; // get to pin
if (USB_PIN_TYPE_GROUND != usb_pin_to->type) { // only consider ground connections
continue;
}
if (0 == gpio_get(usb_pin_to->port, usb_pin_to->pin)) { // we found a ground interconnection
if (connected) { // remember they are connected
connected[connector_from] = true;
connected[connector_to] = true;
} else {
printf("%s (%s) %s connected to %s (%s) %s\n", connectors[connector_from]->name, connectors[connector_from]->host ? "host" : "device", usb_pin_from->name, connectors[connector_to]->name, connectors[connector_to]->host ? "host" : "device", usb_pin_to->name);
}
ground_found = true; // remember we found a ground connection
}
}
}
// pull pin back up
gpio_set_mode(usb_pin_from->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_pin_from->pin);
gpio_set(usb_pin_from->port, usb_pin_from->pin);
}
}
// put all ground pins back to float
for (uint8_t connector = 0; connector < connectors_nb; connector++) {
for (uint8_t pin = 0; pin < connectors[connector]->pins_nb; pin++) {
const struct usb_pin_t* usb_pin = &usb_pins[connectors[connector]->pins[pin]]; // get pin
if (USB_PIN_TYPE_GROUND == usb_pin->type) {
gpio_set_mode(usb_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, usb_pin->pin);
}
}
}
}
bool usb_cables_check_load(const struct usb_connector_t* connector)
{
// verify input arguments
if (NULL == connector) {
return false;
}
usb_cables_pins_float(connector); // ensure we start with all pins floating to not influence the check
bool loaded = false; // remember if we found a load
// pull power pin low (works better than pushing high and being strong enough to have a pull down pulled high)
for (uint8_t pin_power = 0; pin_power < connector->pins_nb && !loaded; pin_power++) {
const struct usb_pin_t* usb_power_pin = &usb_pins[connector->pins[pin_power]]; // get power pin
if (USB_PIN_TYPE_POWER != usb_power_pin->type) {
continue;
}
gpio_set_mode(usb_power_pin->port, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, usb_power_pin->pin);
gpio_clear(usb_power_pin->port, usb_power_pin->pin);
for (uint8_t pin_ground = 0; pin_ground < connector->pins_nb && !loaded; pin_ground++) {
const struct usb_pin_t* usb_ground_pin = &usb_pins[connector->pins[pin_ground]]; // get ground pin
if (USB_PIN_TYPE_GROUND != usb_ground_pin->type) {
continue;
}
// pull up to avoid false positive
gpio_set_mode(usb_ground_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, usb_ground_pin->pin);
gpio_set(usb_ground_pin->port, usb_ground_pin->pin);
// check if it is pulled high by VBUS
sleep_us(100);
if (0 == gpio_get(usb_ground_pin->port, usb_ground_pin->pin)) {
loaded = true;
}
}
gpio_set_mode(usb_power_pin->port, GPIO_MODE_INPUT, GPIO_CNF_INPUT_FLOAT, usb_power_pin->pin); // put back to floating
}
return loaded;
}
bool usb_cables_check_cable(const struct usb_cable_t* cable, uint8_t* defined, uint8_t* undefined, bool print)
{
if (NULL == cable) {
return false;
}
uint8_t _defined = 0, _undefined = 0; // internal pair counting variables
usb_cables_connectors_float(cable->connectors, cable->connectors_nb); // ensure we start in a safe state
for (uint8_t connector_from = 0; connector_from < cable->connectors_nb; connector_from++) { // test from every connector
for (uint8_t pin_from = 0; pin_from < cable->connectors[connector_from]->pins_nb; pin_from++) { // test from every pin
for (uint8_t connector_to = connector_from; connector_to < cable->connectors_nb; connector_to++) { // test to every connector
for (uint8_t pin_to = 0; pin_to < cable->connectors[connector_to]->pins_nb; pin_to++) { // test to every pin (except itself)
if (connector_to == connector_from && pin_to <= pin_from) {
continue; // skip already tested internal connection
}
const struct usb_pin_t* usb_pin_from = &usb_pins[cable->connectors[connector_from]->pins[pin_from]]; // get from pin
const struct usb_pin_t* usb_pin_to = &usb_pins[cable->connectors[connector_to]->pins[pin_to]]; // get to pin
// don't check if power and ground pins are connected because loads lead to false positives
if ((USB_PIN_TYPE_GROUND == usb_pin_from->type || USB_PIN_TYPE_SHIELD == usb_pin_from->type) && USB_PIN_TYPE_POWER == usb_pin_to->type) {
continue;
}
if (USB_PIN_TYPE_POWER == usb_pin_from->type && (USB_PIN_TYPE_GROUND == usb_pin_to->type || USB_PIN_TYPE_SHIELD == usb_pin_to->type)) {
continue;
}
// figure out if this connection pair is defined
bool pair_defined = false;
for (uint8_t pair = 0; pair < cable->pin_pairs_nb; pair++) {
if (cable->pin_pairs[pair][0] == cable->connectors[connector_from]->pins[pin_from] && cable->pin_pairs[pair][1] == cable->connectors[connector_to]->pins[pin_to]) {
pair_defined = true;
}
if (cable->pin_pairs[pair][1] == cable->connectors[connector_from]->pins[pin_from] && cable->pin_pairs[pair][0] == cable->connectors[connector_to]->pins[pin_to]) {
pair_defined = true;
}
}
uint8_t connection = usb_cables_check_pins(usb_pin_from, usb_pin_to);
if (connection >= 0x22) {
if (pair_defined) {
_defined++;
} else {
_undefined++;
if (print) {
printf("unspecified connection: %s %s to %s %s\n", cable->connectors[connector_from]->name, usb_pin_from->name, cable->connectors[connector_to]->name, usb_pin_to->name);
}
}
} else { // there is no connection
if (pair_defined) {
// don't actually count the number of unconnected pair since it can be calculated from pin_pairs_nb - defined
if (print) {
printf("no connection: %s %s to %s %s\n", cable->connectors[connector_from]->name, usb_pin_from->name, cable->connectors[connector_to]->name, usb_pin_to->name);
}
}
}
}
}
}
}
usb_cables_connectors_float(cable->connectors, cable->connectors_nb); // ensure we return to a safe state
// copy variables
if (defined) {
*defined = _defined;
}
if (undefined) {
*undefined = _undefined;
}
return (0 == _undefined && cable->pin_pairs_nb == _defined);
}